Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 只有在本地管理的用户表空间中插入数据后,才能分配表的初始扩展数据块_Oracle_Database Administration_Tablespace_Extent - Fatal编程技术网

Oracle 只有在本地管理的用户表空间中插入数据后,才能分配表的初始扩展数据块

Oracle 只有在本地管理的用户表空间中插入数据后,才能分配表的初始扩展数据块,oracle,database-administration,tablespace,extent,Oracle,Database Administration,Tablespace,Extent,对于本地管理的系统表空间,当在用户表空间(也是本地管理的)中创建对象时,只有在插入数据后才分配初始扩展数据块 而在系统表空间由字典管理的同一场景中,每当创建表时都会分配初始数据块 create tablespace lmt datafile 'df.f' size 5M extent management local; conn scott/tiger create table sample (id nuber) tablespace lmt; select * from user_tab

对于本地管理的系统表空间,当在用户表空间(也是本地管理的)中创建对象时,只有在插入数据后才分配初始扩展数据块

而在系统表空间由字典管理的同一场景中,每当创建表时都会分配初始数据块

create tablespace lmt datafile 'df.f' size 5M extent management local;

conn scott/tiger

create table sample (id nuber) tablespace lmt;

select * from user_tables where table_name = 'SAMPLE'; 
  • 在本地管理系统表空间时,初始扩展数据块为null
  • 当系统表空间由字典管理时,初始范围具有值
  • 数据插入后,在案例(1)中分配初始范围

    这是预期的行为吗?因为根据Oracle文档,“Oracle在创建模式对象时为初始范围分配空间”

    我认为您在引用(或者更确切地说,稍微转述):

    首字母

    指定对象第一个范围的大小。创建架构对象时,Oracle会为此扩展数据块分配空间

    但这并不是故事的全部。可以创建以下表格:

    延迟的\u段\u创建

    使用此子句确定数据库何时应为此表创建段:

    • 延迟段创建
      :此子句延迟表段的创建,以及表的任何LOB列的段、作为表创建的一部分隐式创建的任何索引以及随后在表上显式创建的任何索引的创建,直到第一行数据插入表中

    • section CREATION IMMEDIATE
      :表段是作为
      CREATE table
      语句的一部分创建的

    正如您所怀疑的,您看到的似乎与本地管理的
    系统
    表空间无关,这只是巧合。该差异是段创建的默认值,由初始化参数控制,
    deferred\u segment\u creation
    。根据您显示的内容,在具有本地管理的
    系统
    表空间的数据库中设置为
    TRUE
    ,在具有该字典的数据库中设置为
    FALSE

    您可以通过覆盖默认值来获得一致的行为,或者推迟创建:

    create table sample (id number) segment creation deferred tablespace lmt;
    
    Table SAMPLE created.
    
    set null "(null)"
    select initial_extent from user_tables where table_name = 'SAMPLE';
    
    INITIAL_EXTENT
    --------------
    (null)              
    
    或立即创建:

    create table sample (id number) segment creation immediate tablespace lmt;
    
    Table SAMPLE created.
    
    select initial_extent from user_tables where table_name = 'SAMPLE';
    
    INITIAL_EXTENT
    --------------
             65536
    

    当然,您也可以将初始化参数更改为相同的参数,但这需要更多的工作,并且可能会影响假定当前行为的其他代码。

    我没有在系统表空间中创建对象。