关于延迟段创建-P1

1 疑问点

P1页有句话说道:

在Oracle 11.2.0.3.0以上版本中,创建新表时默认一个区都不会分配。

其实SYS用户是不遵循这个规则的。

2 环境创建

以版本11.2.0.4.0为例子。

2.1 创建用户

授权,创建表空间,更改默认表空间。

SYS@zkm1> create user zkm identified by oracle;

User created.

SYS@zkm1> grant dba to zkm;

Grant succeeded.

SYS@zkm1> create tablespace tbs1 datafile '+data' size 10m;

Tablespace created.

SYS@zkm1> alter user zkm default tablespace tbs1;

User altered.

2.2 创建表test

新的用户zkm和sys用户下均创建表test。

SYS@zkm1> create table test(id int);

Table created.

SYS@zkm1> create table zkm.test(id int);

Table created.

SYS@zkm1> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)

SYS@zkm1> desc zkm.test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)

2.3 查看表的段信息

可以看到用户sys的表没有遵循延迟段创建的规则。

SYS@zkm1> set linesize 500
SYS@zkm1> select owner,segment_name from dba_segments where owner in ('SYS','ZKM') and segment_name='TEST';

OWNER                          SEGMENT_NAME
------------------------------ ---------------------------------------------------------------------------------
SYS                            TEST

SYS@zkm1> insert into zkm.test values(1);

1 row created.

SYS@zkm1> select owner,segment_name from dba_segments where owner in ('SYS','ZKM') and segment_name='TEST';

OWNER                          SEGMENT_NAME
------------------------------ ---------------------------------------------------------------------------------
ZKM                            TEST
SYS                            TEST

SYS@zkm1> commit;

Commit complete.

2.4 延迟段创建相关参数

默认是启用的,可以动态修改为禁用后,只对修改后的表起作用。
对于已经延迟段创建并且还没有insert过数据的表,exp是不导出这些表的,expdp则不受影响。

SYS@zkm1> show parameter deferred_segment_creation

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation            boolean     TRUE
SYS@zkm1> alter system set deferred_segment_creation=false sid='*' scope=both;

System altered.

SYS@zkm1> create table zkm.test1(id int);

Table created.

SYS@zkm1> select owner,segment_name from dba_segments where owner='ZKM' and segment_name='TEST1';

OWNER                          SEGMENT_NAME
------------------------------ ---------------------------------------------------------------------------------
ZKM                            TEST1
posted @ 2020-03-25 17:14  PiscesCanon  阅读(232)  评论(0编辑  收藏  举报