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';
:此子句延迟表段的创建,以及表的任何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
当然,您也可以将初始化参数更改为相同的参数,但这需要更多的工作,并且可能会影响假定当前行为的其他代码。我没有在系统表空间中创建对象。