通過BBED的COPY來覆蓋表裡現有的資料塊
[i=s] 本帖最後由 wei-xh 於 2012-5-12 13:44 編輯
#通過BBED的COPY來覆蓋表裡現有的資料塊
#修改完成後,需要修改RDBA。
#資料庫版本10.2.0.4
1.建立測試表空間、測試表,表空間的段管理方式為ASSM。
2.檢視錶都佔用了哪些資料塊
2 dbms_rowid.ROWID_RELATIVE_FNO(rowid) rfile#,
3 dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block#
4 from test;
DATA_OBJECT_ID# RFILE# BLOCK#
--------------- ---------- ----------
10815 4 12
10815 4 333.選擇把4,23 的內容覆蓋到4,12裡。
DBA 0x01000017 (16777239 4,23)
BBED> map /v
File: /data1/oracle/crmd/users01.dbf (4)
Block: 23 Dba:0x01000017
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
ub1 type_kcbh @0
ub1 frmt_kcbh @1
ub1 spare1_kcbh @2
ub1 spare2_kcbh @3
ub4 rdba_kcbh @4
BBED> p rdba_kcbh
ub4 rdba_kcbh @4 0x01000017
4,23的rdba_kcbh值為0x01000017
BBED> set dba 4,12
DBA 0x0100000c (16777228 4,12)
BBED> p rdba_kcbh
ub4 rdba_kcbh @4 0x0100000c
4,12的rdba_kcbh值為0x0100000c
BBED> copy dba 4,23 to dba 4,12修改4,12的rdba的值為0c000001(需要對0x0100000c進行反轉)
File: /data1/oracle/crmd/users01.dbf (4)
Block: 12 Offsets: 4 to 515 Dba:0x0100000c
------------------------------------
0c000001 36cb0500 00000104 424d0000
BBED> sum dba 4,12 apply
Check value for File 4, Block 12:
current = 0x4d59, required = 0x4d59
BBED> verify dba 4,12
DBVERIFY - Verification starting
FILE = /data1/oracle/crmd/users01.dbf
BLOCK = 12
DBVERIFY - Verification complete
Total Blocks Examined : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx : 0驗證資料塊OK。沒有塊損壞。
#通過BBED的COPY來覆蓋表裡現有的資料塊
#修改完成後,需要修改RDBA。
#資料庫版本10.2.0.4
1.建立測試表空間、測試表,表空間的段管理方式為ASSM。
2.檢視錶都佔用了哪些資料塊
CODE:
test@CRMD> select distinct dbms_rowid.ROWID_OBJECT(rowid) data_object_id#,2 dbms_rowid.ROWID_RELATIVE_FNO(rowid) rfile#,
3 dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block#
4 from test;
DATA_OBJECT_ID# RFILE# BLOCK#
--------------- ---------- ----------
10815 4 12
10815 4 333.選擇把4,23 的內容覆蓋到4,12裡。
CODE:
BBED> set dba 4,23DBA 0x01000017 (16777239 4,23)
BBED> map /v
File: /data1/oracle/crmd/users01.dbf (4)
Block: 23 Dba:0x01000017
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
ub1 type_kcbh @0
ub1 frmt_kcbh @1
ub1 spare1_kcbh @2
ub1 spare2_kcbh @3
ub4 rdba_kcbh @4
BBED> p rdba_kcbh
ub4 rdba_kcbh @4 0x01000017
4,23的rdba_kcbh值為0x01000017
BBED> set dba 4,12
DBA 0x0100000c (16777228 4,12)
BBED> p rdba_kcbh
ub4 rdba_kcbh @4 0x0100000c
4,12的rdba_kcbh值為0x0100000c
BBED> copy dba 4,23 to dba 4,12修改4,12的rdba的值為0c000001(需要對0x0100000c進行反轉)
CODE:
BBED> m /x 0c000001File: /data1/oracle/crmd/users01.dbf (4)
Block: 12 Offsets: 4 to 515 Dba:0x0100000c
------------------------------------
0c000001 36cb0500 00000104 424d0000
BBED> sum dba 4,12 apply
Check value for File 4, Block 12:
current = 0x4d59, required = 0x4d59
BBED> verify dba 4,12
DBVERIFY - Verification starting
FILE = /data1/oracle/crmd/users01.dbf
BLOCK = 12
DBVERIFY - Verification complete
Total Blocks Examined : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx : 0驗證資料塊OK。沒有塊損壞。
CODE:
test@CRMD>select count(*) from test;
COUNT(*)
----------
877
test@CRMD>delete from test where dbms_rowid.ROWID_BLOCK_NUMBER(rowid) =12;
ERROR:
ORA-03114: not connected to ORACLE
delete from test where dbms_rowid.ROWID_BLOCK_NUMBER(rowid) =12
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
test@CRMD>rollback;
ERROR:
ORA-03114: not connected to ORACLE
test@CRMD>conn test/test
Connected.
test@CRMD>delete from test;
delete from test
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [ktspstchg-1], [], [], [], [], [], [], [] DELETE 出現了問題。
我個人的猜測是:
由於採用的是ASSM管理,這樣搞了之後,3級點陣圖塊內記錄的塊使用資訊(比如使用的百分比)跟實際的不一致,造成了這個問題。
如果非ASSM表空間,這種方式可能就不會有問題。
解決的辦法就是ceate table xx as select xxx;
使用手工段空間管理,沒出現這個問題。過程就不貼出來。CODE:
create tablespace users datafile '/data1/oracle/crmd/users01.dbf' size 2g SEGMENT SPACE MANAGEMENT MANUAL ;
test@CRMD>delete from test where dbms_rowid.ROWID_BLOCK_NUMBER(rowid) =17;
77 rows deleted.
test@CRMD>delete from test where dbms_rowid.ROWID_BLOCK_NUMBER(rowid) =35;
77 rows deleted.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-723406/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 迴圈for資料點選一個push一次 裡面有的覆蓋 沒有的新增進去
- 通過現有的資料庫備份建立新的資料庫資料庫
- 用oracle 11g bbed copy替換同一個表資料塊block為另一個資料塊之系列八OracleBloC
- oracle bbed修改資料塊的例子Oracle
- 資料庫系列:覆蓋索引和規避回表資料庫索引
- 【分散式鎖】通過MySQL資料庫的表來實現-V1分散式MySql資料庫
- MySQL 的覆蓋索引與回表MySql索引
- sqoop export 資料覆蓋更新OOPExport
- SAPABAP裡資料庫表的StorageParameters從哪裡來的資料庫
- istanbul 繞過 window 變數儲存覆蓋率資料變數
- bbed_recover:恢復資料塊資料庫資料庫
- logminer恢復誤覆蓋更新的資料
- php實現矩形覆蓋PHP
- --bbed_recover:恢復資料塊資料庫(mybbed)資料庫
- bbed_recover:恢復資料塊資料庫(續)資料庫
- MySQL 覆蓋索引、回表查詢MySql索引
- SAP ABAP裡資料庫表的Storage Parameters從哪裡來的資料庫
- [20170419]bbed探究資料塊.txt
- 事務註解(@Transactional)引起的資料覆蓋故障
- 通過Vue的過濾器實現資料的資料脫敏Vue過濾器
- 5G通訊呼嘯而來,對未來WiFi覆蓋有何影響?WiFi
- 通過修改資料字典,變更表的owner
- 教你兩種資料庫覆蓋式資料匯入方法資料庫
- firefox覆蓋原來網頁的問題Firefox網頁
- 使用BBED幫助理解Oracle資料塊結構Oracle
- git如何上傳所有的新檔案 gitlab如何上傳所有的新檔案 git本地覆蓋伺服器 強制本地覆蓋伺服器...Gitlab伺服器
- dump表的資料塊
- 用bbed檢視資料檔案的資料塊block 0及block 1BloC
- JavaScript覆蓋率統計實現JavaScript
- Solr 18 - 通過SolrJ區域性更新Solr中的文件 (原子操作、非覆蓋操作)Solr
- Java方法覆蓋和變數覆蓋的區別詳解Java變數
- [20210906]bbed讀取資料塊(bbed-wrap.sh).txt
- BBED (Oracle Block Brower and EDitor Tool) :資料塊修復工具OracleBloC
- 如何避免舊請求的資料覆蓋掉最新請求
- 在做服務端程式碼覆蓋率或者準備做程式碼覆蓋率的兄弟們,來聊聊???服務端
- 利用BBED修改資料塊SCN----極端環境下的資料恢復資料恢復
- C++之過載覆蓋和隱藏C++
- Java中的過載和覆蓋的細微差別 - rajivprabJava