Oracle 11gR2新建空表不分配Segment
2016-11-05 15:03
162 查看
一、引言:
ORACLE10G,新建空表以后立刻就分配Segment,
Oracle11gR2,新建空表后没有立即分配Segment。这就是11GR2的新特性,延迟段创建,就是说从11GR2开始默认创建的表不会立即分配segment,不会占用磁盘空间,当第一条数据insert时才会分配空间。
二、实验模拟:
SQL>
select
*
from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle
Database 11g Enterprise Edition Release
11.2.0.1.0
- Production
PL/SQL Release
11.2.0.1.0
- Production
CORE
11.2.0.1.0
Production
TNS
for Linux: Version
11.2.0.1.0
- Production
NLSRTL Version
11.2.0.1.0
- Production
SQL>
create
table
testnew(id int
primary
key,name
varchar2(10));
Table created
SQL>
create
table
testnew_IME(idint
primary
key,name
varchar2(10))
segment creationimmediate;
Table created
SQL>
create
table
testnew_def(idint
primary
key,name
varchar2(10))
segment creationdeferred;
Table created
SQL>
select segment_name
from user_segments
where segment_name
like
'TESTNEW%';
SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW_IME
SQL>
select INDEX_NAME,TABLE_OWNER
from USER_indexes
where table_name='TESTNEW';
INDEX_NAME
TABLE_OWNER
------------------------------------------------------------
SYS_C0011192
JACK
SQL>
select INDEX_NAME,TABLE_OWNER
from USER_indexes
where table_name='TESTNEW_IME';
INDEX_NAME
TABLE_OWNER
------------------------------------------------------------
SYS_C0011193
JACK
SQL>
select INDEX_NAME,TABLE_OWNER
from USER_indexes
where table_name='TESTNEW_DEF';
INDEX_NAME
TABLE_OWNER
------------------------------------------------------------
SYS_C0011194
JACK
SQL>
select segment_name
from user_segments
where segment_name='SYS_C0011192';
SEGMENT_NAME
--------------------------------------------------------------------------------
SQL>
select segment_name
from user_segments
where segment_name='SYS_C0011193';
SEGMENT_NAME
--------------------------------------------------------------------------------
SYS_C0011193
SQL>
select segment_name
from user_segments
where segment_name='SYS_C0011194';
SEGMENT_NAME
--------------------------------------------------------------------------------
SQL>
insert
into testnew
values(1,'anbob.com');
1 row inserted
SQL>
commit;
Commit complete
SQL>
select segment_name
from user_segments
where segment_name
like
'TESTNEW%';
SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW
TESTNEW_IME
SQL>
select INDEX_NAME,TABLE_OWNER
from USER_indexes
where table_name='TESTNEW';
INDEX_NAME
TABLE_OWNER
------------------------------------------------------------
SYS_C0011192
JACK
SQL>
select segment_name
from user_segments
where segment_name='SYS_C0011192';
SEGMENT_NAME
--------------------------------------------------------------------------------
SYS_C0011192
SQL>
truncate
table testnew;
Table truncated
SQL>
select segment_name
from user_segments
where segment_name
like
'TESTNEW%';
SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW
TESTNEW_IME
SQL>
conn /as
sysdba
已连接。
SQL>
create
table testnew_def(id
int
primary
key,name
varchar2(10))
segment creation deferred;
create
table testnew_def(id
int
primary
key,name
varchar2(10))
segment creation deferred
*
第
1
行出现错误:
ORA-14223:
此表不支持延迟创建段
---sys schema里不支持,exp也不会导出
注意:
11gR2默认是使用segmentcreation deferred建立,新建的无记录表不分配segment,当insert第一条记录时分配段空间,不会因truncate而回收,并且在sysschema里不支持,exp也不会导出。
关于这个主要还是跟deferred_segment_creation参数有关,在11gR2中该参数的值为true,说明当创建对象(如表),初始没有数据,不会立即创建segment。
如果该参数设置为false,表明之后的创建的表,初始没有数据,会立即创建segment。
下面看一下它的效果:
SQL>
alter system
set deferred_segment_creation=false;
System altered
SQL>
create
table jack(x
int);
Table created
SQL>
select segment_name,segment_type,extents,blocks
from user_segments
where segment_name='JACK';
SEGMENT_NAME SEGMENT_TYPE
EXTENTS BLOCKS
-------------------------------------------------------------------------------------------------- ---------- ----------
JACK TABLE
1
8
参考文章:http://www.cnblogs.com/Richardzhu/p/3627653.html
一、引言:
ORACLE10G,新建空表以后立刻就分配Segment,
Oracle11gR2,新建空表后没有立即分配Segment。这就是11GR2的新特性,延迟段创建,就是说从11GR2开始默认创建的表不会立即分配segment,不会占用磁盘空间,当第一条数据insert时才会分配空间。
二、实验模拟:
SQL>
select
*
from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle
Database 11g Enterprise Edition Release
11.2.0.1.0
- Production
PL/SQL Release
11.2.0.1.0
- Production
CORE
11.2.0.1.0
Production
TNS
for Linux: Version
11.2.0.1.0
- Production
NLSRTL Version
11.2.0.1.0
- Production
SQL>
create
table
testnew(id int
primary
key,name
varchar2(10));
Table created
SQL>
create
table
testnew_IME(idint
primary
key,name
varchar2(10))
segment creationimmediate;
Table created
SQL>
create
table
testnew_def(idint
primary
key,name
varchar2(10))
segment creationdeferred;
Table created
SQL>
select segment_name
from user_segments
where segment_name
like
'TESTNEW%';
SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW_IME
SQL>
select INDEX_NAME,TABLE_OWNER
from USER_indexes
where table_name='TESTNEW';
INDEX_NAME
TABLE_OWNER
------------------------------------------------------------
SYS_C0011192
JACK
SQL>
select INDEX_NAME,TABLE_OWNER
from USER_indexes
where table_name='TESTNEW_IME';
INDEX_NAME
TABLE_OWNER
------------------------------------------------------------
SYS_C0011193
JACK
SQL>
select INDEX_NAME,TABLE_OWNER
from USER_indexes
where table_name='TESTNEW_DEF';
INDEX_NAME
TABLE_OWNER
------------------------------------------------------------
SYS_C0011194
JACK
SQL>
select segment_name
from user_segments
where segment_name='SYS_C0011192';
SEGMENT_NAME
--------------------------------------------------------------------------------
SQL>
select segment_name
from user_segments
where segment_name='SYS_C0011193';
SEGMENT_NAME
--------------------------------------------------------------------------------
SYS_C0011193
SQL>
select segment_name
from user_segments
where segment_name='SYS_C0011194';
SEGMENT_NAME
--------------------------------------------------------------------------------
SQL>
insert
into testnew
values(1,'anbob.com');
1 row inserted
SQL>
commit;
Commit complete
SQL>
select segment_name
from user_segments
where segment_name
like
'TESTNEW%';
SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW
TESTNEW_IME
SQL>
select INDEX_NAME,TABLE_OWNER
from USER_indexes
where table_name='TESTNEW';
INDEX_NAME
TABLE_OWNER
------------------------------------------------------------
SYS_C0011192
JACK
SQL>
select segment_name
from user_segments
where segment_name='SYS_C0011192';
SEGMENT_NAME
--------------------------------------------------------------------------------
SYS_C0011192
SQL>
truncate
table testnew;
Table truncated
SQL>
select segment_name
from user_segments
where segment_name
like
'TESTNEW%';
SEGMENT_NAME
--------------------------------------------------------------------------------
TESTNEW
TESTNEW_IME
SQL>
conn /as
sysdba
已连接。
SQL>
create
table testnew_def(id
int
primary
key,name
varchar2(10))
segment creation deferred;
create
table testnew_def(id
int
primary
key,name
varchar2(10))
segment creation deferred
*
第
1
行出现错误:
ORA-14223:
此表不支持延迟创建段
---sys schema里不支持,exp也不会导出
注意:
11gR2默认是使用segmentcreation deferred建立,新建的无记录表不分配segment,当insert第一条记录时分配段空间,不会因truncate而回收,并且在sysschema里不支持,exp也不会导出。
关于这个主要还是跟deferred_segment_creation参数有关,在11gR2中该参数的值为true,说明当创建对象(如表),初始没有数据,不会立即创建segment。
如果该参数设置为false,表明之后的创建的表,初始没有数据,会立即创建segment。
下面看一下它的效果:
SQL>
alter system
set deferred_segment_creation=false;
System altered
SQL>
create
table jack(x
int);
Table created
SQL>
select segment_name,segment_type,extents,blocks
from user_segments
where segment_name='JACK';
SEGMENT_NAME SEGMENT_TYPE
EXTENTS BLOCKS
-------------------------------------------------------------------------------------------------- ---------- ----------
JACK TABLE
1
8
参考文章:http://www.cnblogs.com/Richardzhu/p/3627653.html
相关文章推荐
- Oracle 11gR2新建空表不分配Segment
- oracle 11g r2 新建空表不分配semgent
- Oracle 11g R2 新特性:Deferred Segment Generation
- oracle 11g r2 rac怎么新建和配置scan ip的监听
- Oracle 11g R2 RAC dbca新建实例报错
- Oracle 11g R2 安装
- Oracle 11g R2 忘记用户密码的解决办法
- 安装Oracle 11g R2 For Win7 旗舰版
- 配置oracle 11g r2 RAC on rhel5.5 (一)
- 使用Oracle SQL Developer 64位来访问Oracle 11g R2 64bit版本
- CentOS 5.6 安装 Oracle 11g R2
- Oracle 11g R2的Linux安装环境配置
- Oracle 11g R2 exp imp 陷阱問題
- 安装ORACLE 11G R2 +redhat es4遇到的问题
- centos5.5上安装oracle 11g R2 推荐
- centos5 X64 用 VNC 远程桌面安装oracle 11g R2
- Oracle 11g R2安装手册 For Win7 (图文教程)
- ORACLE 11G R2中的并行执行,dbms_parallel_execute
- [基础篇]Oracle 11g SQL Developer 界面 -- 新建用户、授权