Oracle 11gR2新建空表不分配Segment
2014-03-27 10:16
316 查看
一、引言:
在看《收获,不止Oracle》的神奇,走进逻辑体系世界一章时,需要新建一张表查看Extents的情况,由于该书的环境是ORACLE10G的,因此新建空表以后立刻就分配Segment,而我使用的是Oracle11gR2,新建空表后没有立即分配Segment。这就是11GR2的新特性,延迟段创建,就是说从11GR2开始默认创建的表不会立即分配segment,不会占用磁盘空间,当第一条数据insert时才会分配空间。
二、实验模拟:
注意:
11gR2默认是使用segment creation deferred建立,新建的无记录表不分配segment,当insert第一条记录时分配段空间,不会因truncate而回收,并且在sys schema里不支持,exp也不会导出。
关于这个主要还是跟deferred_segment_creation参数有关,在11gR2中该参数的值为true,说明当创建对象(如表),初始没有数据,不会立即创建segment。
如果该参数设置为false,表明之后的创建的表,初始没有数据,会立即创建segment。
下面看一下它的效果:
在看《收获,不止Oracle》的神奇,走进逻辑体系世界一章时,需要新建一张表查看Extents的情况,由于该书的环境是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(id int primary key,name varchar2(10)) segment creation immediate; Table created SQL> create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred; 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: 此表不支持延迟创建段
注意:
11gR2默认是使用segment creation deferred建立,新建的无记录表不分配segment,当insert第一条记录时分配段空间,不会因truncate而回收,并且在sys schema里不支持,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
相关文章推荐
- Oracle 11gR2新建空表不分配Segment
- oracle 11g r2 新建空表不分配semgent
- oracle 11g r2 rac怎么新建和配置scan ip的监听
- Oracle 11g R2 RAC dbca新建实例报错
- Oracle 11g R2 新特性:Deferred Segment Generation
- RHEL5.5_x64安装Oracle_11g_R2(用于vCenter数据库)-2
- centOS x64系统上安装 oracle 11g R2 x64
- Linux安装 oracle 11g r2
- oracle 11g r2安装到 server2003 https://localhost:1158/em 无法显示该网页
- Oracle 10g R2升级到Oracle 11g R2
- Linux安装 oracle 11g r2
- CentOS 6.3部署Oracle 11g R2手记
- 完全卸载删除oracle 11G R2
- Oracle 11gR2中针对备份恢复功能的增强
- Oracle 11G r2 Rac修改IP
- 北京公司招聘 oracle 11g r2 dba
- Oracle 11G R2 Install 1 ASMLib - 安装错误
- Oracle 11g R2版本使用exp命令导出表不全的解决方案
- Oracle 11g R2 for Win7旗舰版(64位)的安装步骤
- Oracle 11g R2 for Win7旗舰版(64位)的安装步骤