表使用的資料塊在事務未提交及提交且強制重新整理緩衝池的block scn及obj變化之系列一

wisdomone1發表於2015-10-21

背景

  為了瞭解下塊清除及延遲清除的相關概念,故有此文。

結論

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資料庫效能分析與最佳化
中國聯通CRM資料庫效能最佳化
中國移動10086電商平臺資料庫部署及最佳化
湖南老百姓大藥房ERR資料庫sql最佳化專案
四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
北京高鐵訊號監控系統RAC資料庫部署及最佳化
河南宇通客車資料庫效能最佳化
中國電信電商平臺核心採購模組表模型設計及最佳化
中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
北京302醫院資料庫遷移實施
河北廊坊新奧data guard部署及最佳化
山西公安廳身份證審計資料庫系統故障評估
國家電網上海災備專案4 node rac+adg 
       貴州移動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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章