[20130524]11G的Deferred segment creation的问题.txt

[20130524]11G的Deferred segment creation的问题.txt

11G的Deferred segment creation是一个非常好的特性,有这个特性也产生一些问题.

自己以前写的链接:
http://space.itpub.net/267265/viewspace-716102
http://space.itpub.net/267265/viewspace-695835
http://space.itpub.net/267265/viewspace-713311
http://space.itpub.net/267265/viewspace-714646
http://space.itpub.net/267265/viewspace-745133

如果要使用exp/imp导入会存在一些问题,空表无法导出.虽然现在很少人在使用exp/imp命令.

实际上只要给这些对象分配空间就可以了.

11.2.0.2提供的DBMS_SPACE_ADMIN包含两个过程MATERIALIZE_DEFERRED_SEGMENTS,DROP_EMPTY_SEGMENTS.通过
MATERIALIZE_DEFERRED_SEGMENTS可以给这些没有分配段的对象分配段,DROP_EMPTY_SEGMENTS可以给已经没有记
录的段回收空间.自己做一个简单测试.

1.测试环境:

SQL> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

create table t(id number ,image clob);
create unique index i_t_id on t(id);

select segment_name, segment_type, bytes, extents from dba_segments
where wner=user and segment_name in ('T','I_T_ID') or
segment_name IN (SELECT segment_name FROM dba_lobs WHERE wner=user and table_name = 'T')
ORDER BY 1,2;

no rows selected
--可以发现没有段分配.

2.执行dbms_space_admin.materialize_deferred_segments看看.

--以sys用户执行.

SQL> exec dbms_space_admin.materialize_deferred_segments(schema_name => 'SCOTT',table_name  => 'T');
PL/SQL procedure successfully completed.
select segment_name, segment_type, bytes, extents from dba_segments 
where wner=user and segment_name in ('T','I_T_ID') or 
segment_name IN (SELECT segment_name FROM dba_lobs WHERE wner=user and table_name = 'T')
ORDER BY 1,2;
SEGMENT_NAME                   SEGMENT_TYPE            BYTES    EXTENTS
------------------------------ ------------------ ---------- ----------
I_T_ID                         INDEX                   65536          1
SYS_LOB0000275118C00002$$      LOBSEGMENT              65536          1
T                              TABLE                   65536          1

--可以发现现在分配了空间.

2.执行dbms_space_admin.DROP_EMPTY_SEGMENTS.看看.

--先插入一条.

SQL> insert into t values (1,'x');
1 row created.
SQL> commit ;
Commit complete.

--以sys用户执行.

SQL> exec dbms_space_admin.DROP_EMPTY_SEGMENTS(schema_name => 'SCOTT',table_name  => 'T');
PL/SQL procedure successfully completed.
select segment_name, segment_type, bytes, extents from dba_segments 
where wner=user and segment_name in ('T','I_T_ID') or 
segment_name IN (SELECT segment_name FROM dba_lobs WHERE wner=user and table_name = 'T')
ORDER BY 1,2;
SEGMENT_NAME                   SEGMENT_TYPE            BYTES    EXTENTS
------------------------------ ------------------ ---------- ----------
I_T_ID                         INDEX                   65536          1
SYS_LOB0000275118C00002$$      LOBSEGMENT              65536          1
T                              TABLE                   65536          1

--因为有数据存在,自然无法回收.

SQL> delete from t;
1 row deleted.
SQL> commit ;
Commit complete.

--以sys用户执行.

SQL> exec dbms_space_admin.DROP_EMPTY_SEGMENTS(schema_name => 'SCOTT',table_name  => 'T');
PL/SQL procedure successfully completed.
select segment_name, segment_type, bytes, extents from dba_segments 
where wner=user and segment_name in ('T','I_T_ID') or 
segment_name IN (SELECT segment_name FROM dba_lobs WHERE wner=user and table_name = 'T')
ORDER BY 1,2;
no rows selected

--这样一些没有记录的段占用的空间也可以回收回来.

时间: 2024-09-20 20:39:15

[20130524]11G的Deferred segment creation的问题.txt的相关文章

[20131109]deferred segment creation与12c的exp命令.txt

[20131109]deferred segment creation与12c的exp命令.txt 参考链接:http://space.itpub.net/267265/viewspace-713311 昨天想导出一些数据在自己的12c测试环境,发现具有段延迟建立特性的表使用exp也能导出. 例子如下: SCOTT@test01p> @ver BANNER                                                                       

[20111214]汇总11GR2 Deferred Segment Creation一些相关信息.txt

11G R2引入了Deferred Segment Creation的新特性,在建立空表时并不分配空间.这样对于一些系统能节省许多空间.但是也可能遇到一些问题,我把这段时间看到关于这个方面的信息做一个汇总. 1.sys用户不受这个限制: 测试例子:sqlplus sys as sysdbaSQL> create table t1 (a number);Table created.SQL> select  table_name ,segment_created from user_tables

[20120927]deferred segment creation与system,sys用户.txt

[20120927]deferred segment creation与system,sys用户.txt 今天看了一篇blog,才知道sys,system用户不能使用deferred segment creation. http://blog.tanelpoder.com/2010/07/11/dropping-and-creating-tables-in-read-only-tablespaces-what/ 自己重复了测试: SQL> select * from v$version ; BA

Oracle 11gR2新特性--延迟段创建(Deferred Segment Creation)

Oracle 11gR2新特性--延迟段创建(Deferred Segment Creation) 真题1. 什么是延迟段创建(Deferred Segment Creation)? 答案:在Oracle 11.2中,当创建一个空表或者空分区时,为了加快创建速度,Oracle并不会立即分配初始段和空间,实际的表段(Table Segement)被延迟到第一行数据插入时创建.延迟段创建特性通过DEFERRED_SEGMENT_CREATION参数控制,默认为TRUE,表示开启该功能.延迟段创建可以

[20170825]11G备库启用DRCP连接3.txt

[20170825]11G备库启用DRCP连接3.txt --//昨天测试了11G备库启用DRCP连接,要设置alter system set audit_trail=none scope=spfile ; --//参考链接http://blog.itpub.net/267265/viewspace-2144036/. --//在测试过程中我遇到1个奇怪问题,就是如果主库没有打开drcp,备库执行exec dbms_connection_pool.start_pool();失败. --//今天分

[20120109] 11g alert log的一些细小变化.txt

[20120109] 11g alert log的一些细小变化.txt 我个人检查数据库,查看alert log文件,喜欢查看文本格式,而不喜欢查看xml格式的文件,对于adrci的命令不是很熟悉,以及不习惯使用. 今天查看对比了两个格式的文件,发现以后要习惯查看xml格式,学会使用adrci命令. 对比如下:1.xml格式的文件可以精确到milliseconds. Thread 1 cannot allocate new log, sequence 264Checkpoint not comp

[20140823]11g增加字段与缺省值.txt

[20140823]11g增加字段与缺省值.txt --12c 当插入NULL时可以指定缺省值.不知道为什么设置这个特性,有点怪怪的.自己先测试11G增加字段带缺省值的情况. --11G 增加字段带缺省值,可以很快完成,不需要update表.简单测试其内部机制: 1.建立测试环境: SCOTT@test01p> @ver BANNER                                                                               CON

[20131210]11G的内部视图X$DBGALERTEXT补充.txt

[20131210]11G的内部视图X$DBGALERTEXT补充.txt http://blog.itpub.net/267265/viewspace-775126/ 曾经写过一篇blog,以前我们看alert*.log文件,一般直接进入目录,直接查看.当然也可以通过外部表来访问alert*.log. 而11G开始引入了新的ADR自动诊断仓库特性,默认的Alert.log转换为LOG.XML的形式,默认存放在$ADR_HOME/alert&trace目录下,并且 为日志条目增加了如Level之

聊聊Oracle 11g中的Reference Partition(上)

  Data Partition是Oracle早期提出的一项针对大数据对象的解决方案.经过若干版本的演变,Partition依然是目前比较流行.应用广泛并且接受程度较高的技术策略. 从Oracle产品线角度,Partition的成功是与Oracle不断丰富完善分区技术和方案是分不开的.在每一个版本中,Partition技术都推出一些新的进步和发展.无论是8.8i还是11g.12c,Partition技术都是在不断的向前进步,来满足更加复杂的实际应用需求. 本篇主要介绍11g新推出的Referen