背景
为了了解下块清除及延迟清除的相关概念,故有此文。
结论
1,如果当前DML使用数据块的事务未提交,且数据块之前被其它表对象使用过,则数据块会保存之前表的信息这个信息主要为表的对象seg
2,数据块只要新表使用了它,且新表产生的事务已提交,即会除掉这前表对象的信息,或者说新表的事务未提交,旧表的信息仍会存储在数据块上
3,数据块的SCN在事务未提交,提交,强制刷新缓冲池全是一直在变化的
4,而数据块上面存储的表对象则只要除掉了旧表对象后,则无其后其它新表使用这个数据块,数据块上面的表对象信息一直不变
测试思路
测试
数据库版本创建测试表并插入1条记录不提交
SQL> create table t_defer(a int);
Table created.
SQL> select object_name,object_id from user_objects where object_name='T_DEFER';
OBJECT_NAME OBJECT_ID
-------------------------------------------------- ----------
T_DEFER 74433
SQL> insert into t_defer values(1);
1 row created.
转储数据块并查看
--下述测试仅列举有价值的内容,无关内容不再累述
select DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID),DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) from t_defer;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------ ------------------------------------
4 98966
SQL> alter session set tracefile_identifier='session1_uncommit';
Session altered.
SQL> alter system dump datafile 4 block 98966;
System altered.
[oracle@seconary ~]$ cd /oracle/diag/rdbms/guowang/guowang/trace/
[oracle@seconary trace]$ ll -l *session1_uncommit*
[oracle@seconary trace]$ more guowang_ora_26519_session1_uncommit.trc|grep 74433
dbwrid: 0 obj: 74433 objn: 74433 tsn: 4 afn: 4 hint: f
数据块的scn为0x0000.00b3db1a
[oracle@seconary trace]$ more guowang_ora_26519_session1_uncommit.trc|grep scn
scn: 0x0000.00b3db1a seq: 0x01 flg: 0x06 tail: 0xdb1a0601
可见这个数据块还存储着表对象t_checkpoint的信息
[oracle@seconary trace]$ more guowang_ora_26519_session1_uncommit.trc|grep seg
seg/obj: 0x12223 csc: 0x00.b3d915 itc: 2 flg: E typ: 1 - DATA
[oracle@seconary trace]$
SQL> select to_number('12223','xxxxx') from dual;
TO_NUMBER('12223','XXXXX')
--------------------------
74275
SQL> select object_name,object_id from user_objects where object_id=74275;
OBJECT_NAME OBJECT_ID
-------------------------------------------------- ----------
T_CHECKPOINT 74275
提交事务,再看数据块
SQL> commit;
Commit complete.
这下数据块存储全是表t_defer的信息,已无之前t_checkpoint表的信息
dbwrid: 0 obj: 74433 objn: 74433 tsn: 4 afn: 4 hint: f
obj-flags: object_ckpt_list
ckptq: [0xda728b60,0xda728b60] fileq: [0xda7259c0,0xda7259c0] objq: [0xd2735530,0xd2735530]
seg/obj: 0x122c1 csc: 0x00.1788a32 itc: 2 flg: E typ: 1 - DATA
SQL> select to_number('122c1','xxxxxx') from dual;
TO_NUMBER('122C1','XXXXXX')
---------------------------
74433
数据块scn为0x0000.01788a32,发现已经变化了
scn: 0x0000.01788a32 seq: 0x03 flg: 0x04 tail: 0x8a320603
强制刷新缓冲池,再看数据块
SQL> alter system flush buffer_cache;
System altered.
可见数据块scn已发生变化
scn: 0x0000.01795cea seq: 0x01 flg: 0x06 tail: 0x5cea0601
表对象未发生变化
seg/obj: 0x122c1 csc: 0x00.1788a32 itc: 2 flg: E typ: 1 - DATA
个人简介
8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问。
服务过的客户:
中国电信
中国移动
中国联通
中国电通
国家电网
四川达州商业银行
湖南老百姓大药房
山西省公安厅
中国邮政
北京302医院
河北廊坊新奥集团公司
项目经验:
中国电信3G项目AAA系统数据库部署及优化
中国联通4G数据库性能分析与优化
中国联通4G数据库性能分析与优化
中国联通CRM数据库性能优化
中国移动10086电商平台数据库部署及优化
湖南老百姓大药房ERR数据库sql优化项目
四川达州商业银行TCBS核心业务系统数据库模型设计和RAC部署及优化
四川达州商业银行TCBS核心业务系统后端批处理存储过程功能模块编写及优化
北京高铁信号监控系统RAC数据库部署及优化
河南宇通客车数据库性能优化
中国电信电商平台核心采购模块表模型设计及优化
中国邮政储蓄系统数据库性能优化及sql优化
北京302医院数据库迁移实施
河北廊坊新奥data guard部署及优化
山西公安厅身份证审计数据库系统故障评估
国家电网上海灾备项目4 node rac+adg
贵州移动crm及客服数据库性能优化项目
贵州移动crm及客服务数据库sql审核项目
深圳穆迪软件有限公司数据库性能优化项目
贵州移动crm及客服数据库性能优化项目
贵州移动crm及客服务数据库sql审核项目
深圳穆迪软件有限公司数据库性能优化项目
联系方式:
手机:18201115468
qq : 305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900
itpub博客名称:wisdomone1 http://blog.itpub.net/9240380/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-1815354/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-1815354/