Oracle 10g 对象 默认 ITL 数量 测试

2014-11-24 18:54:02 · 作者: · 浏览: 6

对象的ITL数由对象的initrans 和 maxtrans 参数决定,Oracle 官方文档中记载:initrans 的默认值是1,maxtrans 是255. 实际上任何block中的ITL 都是可以根据需要动态增长的,只要block里还有足够的空间。ITL的最大数限制是255,实际上其大小受data block的大小决定。 在Oracle 10g之后的版本,对于8KB的block size,最大的ITL数只能是169.



Oracle之前版本中,表的initrans参数默认值是1,但是最近的版本中Oracle改成2,即使数据字典还是显示为1.



下面我们在Oracle10.2.0.4 的环境下测试一下这个默认值到底是多少。


[oracle@localhost ~]$ sqlplus / as sysdba;


SQL*Plus: Release 10.2.0.4.0 - Productionon 6 7 09:37:32 2012


Copyright (c) 1982, 2007, Oracle. All Rights Reserved.



Connected to:


Oracle Database 10g Enterprise EditionRelease 10.2.0.4.0 - Production


With the Partitioning, Data Mining and RealApplication Testing options



SQL> create table anqing(id number,namevarchar2(20));


Table created.


SQL> insert into anqingvalues(1,'tianlesoftware');


1 row created.


SQL> commit;


Commit complete.



SQL> select distinctdbms_rowid.rowid_block_number(rowid) from anqing;


DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)


------------------------------------


94658



从这个语句我们可以判断该表使用了一个block94658



--确认block 存在具体datafile编号:


SQL> selectdbms_rowid.rowid_relative_fno(rowid) file_id,dbms_rowid.rowid_block_number(rowid)block_id from anqing;



FILE_ID BLOCK_ID


---------- ----------


1 94658




--dump Block,确认ITL数量:


SQL> alter system dump datafile 1 block94658;


System altered.



--查看trace 文件:


SQL> oradebug setmypid


Statement processed.


SQL> oradebug tracefile_name


/oradata/XEZF/admin/udump/xezf_ora_31544.trc




这里确实是2条ITL信息。现在我们看一下表默认的创建参数值:



SQL> set long 2000000


SQL> set pagesize 0


SQL> executedbms_metadata.set_transform_param(dbms_metadata.session_transform,'storage',false);


--该语句是在会话级别设置不显示某些属性,让我们的返回结果看上去更简洁。



PL/SQL procedure successfully completed.



SQL> selectdbms_metadata.get_ddl('TABLE','ANQING','SYS') from dual;



CREATE TABLE "SYS"."ANQING"


( "ID" NUMBER,


"NAME" VARCHAR2(20)


)


PCTFREE 10 PCTUSED 40


INITRANS 1 MAXTRANS 255


NOCOMPRESS LOGGING


TABLESPACE "SYSTEM"


--注意这里返回的结果:initrans 1. 因此也即使说即使我们的数据字典里ITL初始化值是1,但在实际创建时使用的ITL数为2.


SQL> executedbms_metadata.set_transform_param(dbms_metadata.session_transform,'default');


PL/SQL procedure successfully completed.


--还原设置