【BBED】使用BBED修改資料檔案SCN,使該檔案從offline轉變為online
一、 使用場景
使用BBED 對資料檔案修改 scn 主要用於兩個方面:
1. 某個資料檔案早已被offline ,在將資料檔案進行 online 時,發現歸檔日誌早已不在,無法正常進行 recover 的極端情況。
這種情況原理很簡單。在正常情況下所有online 狀態的資料檔案 SCN 會持續前進,並保持一致。而將資料檔案 offline 時,該檔案的 SCN 就不會繼續前進了(落伍了),想要把這個檔案 SCN 拉起來,必須保證該檔案和其他檔案能擁有一樣的 SCN 號,這個時候就需要歸檔日誌來進行補充,幫助該檔案的 SCN 追上其他檔案。但是很多情況歸檔日誌進行被刪除了很多,無法達到這樣的目的。這時常規 recover 方式就不能發揮作用了。
2. 資料庫在進行冷備時,沒有關閉資料庫,導致進行了不一致的備份。然後恢復時發現問題,卻為時已晚。此時資料庫只能恢復到mount 狀態,不能進行 open 。
這種情況的原理,是因為在進行冷備時,要儲存所有資料檔案。正常情況下進行冷備時,資料庫用進行shutdown ,該過程要執行 checkpoint ,保證所有資料檔案和控制檔案保持一致的 SCN ,用以確保下次資料庫能夠正常開啟。而如果沒有進行 shutdown 就儲存資料檔案的話,就會導致資料檔案和控制檔案 scn 號參差不齊,肯定是無法正常開啟使用的。
上面兩種情況有著相同點。在將資料檔案online 或將資料庫進行 open 操作時,要保證所有的資料檔案在一條線上(相同 SCN ),這樣才能保證資料庫可以正常開啟,以達到正常使用的目的。
本文用以介紹使用BBED 將早已 offline 的資料檔案進行修改 SCN 的操作,以達到 online 該資料檔案的目的。
二、 測試環境準備
1) 建立表空間
SQL> create tablespace test1 datafile '/u01/app/oracle/oradata/orcl/test01.dbf' size 50m ;
2) 建立使用者
SQL> create user test01 identified by oracle default tablespace test1;
SQL> grant dba to test01;
3) 建立表資料
SQL> create table tab_test as select * from dba_objects;
SQL> select count(*) from tab_test;
COUNT(*)
----------
86958
4) 檢查資料檔案
SQL> set linesize 200
SQL> col name for a50
SQL> col scn for a10
SQL> select file#,name,to_char(checkpoint_change#) SCN,status from v$datafile;
FILE# NAME SCN STATUS
---------- --- --------------------------------- ---------- -------
1 /u01/app/oracle/oradata/orcl/system01.dbf 1113225 SYSTEM
2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 1113225 ONLINE
3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 1113225 ONLINE
4 /u01/app/oracle/oradata/orcl/users01.dbf 1113225 ONLINE
5 /u01/app/oracle/oradata/orcl/example01.dbf 1113225 ONLINE
6 /u01/app/oracle/oradata/orcl/test01.dbf 1113225 ONLINE
7 /u01/app/oracle/oradata/orcl/test02.dbf 1113225 ONLINE
5) 檢查歸檔情況(非歸檔)
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 7
Current log sequence 9
6) 將test01 資料檔案 offline
SQL> alter database datafile 6 offline drop;
7) 執行多次切換日誌
SQL> alter system switch logfile;
8) 再次檢視資料檔案情況
SQL> select file#,name,to_char(checkpoint_change#) SCN,status from v$datafile;
FILE# NAME SCN STATUS
-------- ------------------------------------------ ---------- -------
1 /u01/app/oracle/oradata/orcl/system01.dbf 1115481 SYSTEM
2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 1115481 ONLINE
3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 1115481 ONLINE
4 /u01/app/oracle/oradata/orcl/users01.dbf 1115481 ONLINE
5 /u01/app/oracle/oradata/orcl/example01.dbf 1115481 ONLINE
6 /u01/app/oracle/oradata/orcl/test01.dbf 1115069 RECOVER
7 /u01/app/oracle/oradata/orcl/test02.dbf 1115481 ONLINE
9) 將test01 進行 online
SQL> alter database datafile 6 online;
alter database datafile 6 online
*
ERROR at line 1:
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/test01.dbf'
SQL> recover datafile 6;
ORA-00279: change 1115069 generated at 11/09/2020 21:45:11 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2020_11_09/o1_mf_1_9_%u_.arc
ORA-00280: change 1115069 for thread 1 is in sequence #9
10) 解決思路
我們發現被offline 的資料檔案的 SCN 小於其他資料檔案的 SCN ,我們只需要將 datafile 6 的 SCN 從 1115069 修改為 1115481 即可。
為了測試方便需要將庫切換到mount 狀態,為了防止資料庫進行 checkpoint ,導致 SCN 號的再次向前推進(實際上只要保證資料庫不執行 checkpoint, 就不需要停庫)。這樣一會操作的時候就不會受到 ckpt 程式的干擾了,這裡需要注意的一點是,停庫是會做 checkpoint 的,所以起到 mount 狀態後,我們再查一次,結果如下:
FILE# NAME SCN STATUS
-------- ------- ---------------------------- -------- ----------------
1 /u01/app/oracle/oradata/orcl/system01.dbf 1121994 SYSTEM
2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 1121994 ONLINE
3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 1121994 ONLINE
4 /u01/app/oracle/oradata/orcl/users01.dbf 1121994 ONLINE
5 /u01/app/oracle/oradata/orcl/example01.dbf 1121994 ONLINE
6 /u01/app/oracle/oradata/orcl/test01.dbf 1115069 RECOVER
7 /u01/app/oracle/oradata/orcl/test02.dbf 1121994 ONLINE
三、 使用BBED 進行修正
1) 編輯filelist 檔案
$ vi filelist.txt
1 /u01/app/oracle/oradata/orcl/system01.dbf 786432000
2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 576716800
3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 94371840
4 /u01/app/oracle/oradata/orcl/users01.dbf 5242880
5 /u01/app/oracle/oradata/orcl/example01.dbf 328335360
6 /u01/app/oracle/oradata/orcl/test01.dbf 52428800
7 /u01/app/oracle/oradata/orcl/test02.dbf 62914560
上述檔案可以用以下SQL 進行查詢
SQL> select file#||' '||name||' '||bytes from v$datafile ;
2) 編輯 bbed.par 檔案
$ vi / home/oracle /bbed.par
blocksize=8192
listfile=/ home/oracle /filelist.txt
mode=edit
3) 使用引數檔案進入bbed
$ bbed parfile=/home/oracle/bbed.par
Password: 預設密碼 blockedit
BBED: Release 2.0.0.0.0 - Limited Production on Tue Nov 10 01:19:17 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED>
4) 檢視需要編輯的檔案
BBED> info
File# Name Size(blks)
----- ---- ----------
1 /u01/app/oracle/oradata/orcl/system01.dbf 96000
2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 70400
3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 11520
4 /u01/app/oracle/oradata/orcl/users01.dbf 640
5 /u01/app/oracle/oradata/orcl/example01.dbf 40080
6 /u01/app/oracle/oradata/orcl/test01.dbf 6400
7 /u01/app/oracle/oradata/orcl/test02.dbf 7680
5) 檢視其它檔案的檔案頭資訊(datafile 7 )
BBED> set file 7 block 1
FILE# 7
BLOCK# 1
BBED> map
File: /u01/app/oracle/oradata/orcl/test02.dbf (7)
Block: 1 Dba:0x01c00001
------------------------------------------------------------
Data File Header
struct kcvfh, 860 bytes @0
ub4 tailchk @8188
從上圖我們可以看出包含兩個大的結構,kcvfh 和 tailcjk
6) 檢視kcvfh 結構
BBED> p kcvfh
上圖顯示,在kcvfhckp 結構下面有一個 kcvcpscn
7) 檢視kcvfhckp
BBED> p kcvfhckp
上圖所示, kcvcpscn 這個結構就是存的 SCN ,他基於 8K 的偏移量為 484
8) 檢視偏移量為484 的資訊
BBED> set offset 484
OFFSET 484
BBED> dump
File: /u01/app/oracle/oradata/orcl/test02.dbf (7)
Block: 1 Offsets: 484 to 995 Dba:0x01c00001
-----------------------------------------------------------------
ca1e1100 00000000 3c63f23e 01000000 18000000 552a0000 10000b8b 02000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0d000d00 0d000100 00000000 00000000 00000000 0200c001 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
根據上面結果顯示,“ ca1e1100 ”就是 11 號檔案的 SCN 號。這裡存的是 16 進位制,需要轉換為 10 進位制。由於 linux 存的是小位元組序,意味著實際存的數是反過來的。所以“ ca|1e|11|00 ”反過來就是“ 00|11|1e|ca ”,在計算器算一下,該數轉換為 10 進位制後的數字為“ 1121994 ”,正好是檔案 7 的 SCN 號!
現在我們明確了,需要將6 號檔案頭的對應位置改為“ ca1e1100 ”即可
9) 檢視datafile 6 的檔案頭資訊
BBED> set file 6 block 1
FILE# 6
BLOCK# 1
BBED> set offset 484
OFFSET 484
BBED> dump
File: /u01/app/oracle/oradata/orcl/test01.dbf (6)
Block: 1 Offsets: 484 to 995 Dba:0x01800001
---------------------------------------------------------
bd031100 00000000 e72ef23e 01000000 09000000 475d0000 10000000 02000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0d000d00 0d000100 00000000 00000000 00000000 02008001 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
10) 修改datafile 6 檔案頭
BBED> modify / x ca1e11
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File: /u01/app/oracle/oradata/orcl/test01.dbf (6)
Block: 1 Offsets: 484 to 995 Dba:0x01800001
---------------------------------------------------------
ca1e1100 00000000 e72ef23e 01000000 09000000 475d0000 10000000 02000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0d000d00 0d000100 00000000 00000000 00000000 02008001 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
BBED> sum apply -- 重新生成校驗值
Check value for File 6, Block 1:
current = 0xe6d3, required = 0xe6d3
BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle/oradata/orcl/test01.dbf
BLOCK = 1
DBVERIFY - Verification complete
Total Blocks Examined : 1
Total Blocks Processed (Data) : 0
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
Message 531 not found; product=RDBMS; facility=BBED
此時已經修改完成
四、 修改完驗證
SQL> recover datafile 6;
Media recovery complete.
SQL> alter database open;
Database altered.
SQL> alter database datafile 6 online;
Database altered.
SQL> alter system checkpoint;
System altered.
SQL> select file#,name,to_char(checkpoint_change#) SCN,status from v$datafile;
FILE# NAME SCN STATUS
---------- --------- ------ ------------------------------- -------------------
1 /u01/app/oracle/oradata/orcl/system01.dbf 1123830 SYSTEM
2 /u01/app/oracle/oradata/orcl/sysaux01.dbf 1123830 ONLINE
3 /u01/app/oracle/oradata/orcl/undotbs01.dbf 1123830 ONLINE
4 /u01/app/oracle/oradata/orcl/users01.dbf 1123830 ONLINE
5 /u01/app/oracle/oradata/orcl/example01.dbf 1123830 ONLINE
6 /u01/app/oracle/oradata/orcl/test01.dbf 1123830 ONLINE
7 /u01/app/oracle/oradata/orcl/test02.dbf 1123830 ONLINE
SQL> select count(*) from test01. tab_test;
COUNT(*)
----------
86958
---- end ----
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2736969/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【kingsql分享】使用BBED修改Oracle資料檔案頭推進SCNSQLOracle
- ORA-01190使用bbed強制online資料檔案
- BBED 修改oracle 資料檔案的 SCN 號來做資料庫不完全恢復。Oracle資料庫
- Oracle 之利用BBED修改資料塊SCN----沒有備份資料檔案的資料恢復Oracle資料恢復
- 透過修改控制檔案scn推進資料庫scn資料庫
- 表空間與資料檔案的offline和online操作
- [20190104]bbed手動修改資料.txt
- [BBED]斷電異常後修復Oracle資料檔案(ORA-00702: bootstrap verison)Oracleboot
- 利用offline datafile檔案方式遷移資料
- [20180604]在記憶體修改資料(bbed).txt記憶體
- oracle 推進scn(poke、gdb、event、bbed)方法Oracle
- 27_bbed實戰(1)_修改資料內容
- 如何使用python把json檔案轉換為csv檔案PythonJSON
- [20210906]bbed讀取資料塊(bbed-wrap.sh).txt
- PDF檔案轉換為DWF檔案
- bbed修改undo段狀態
- [20181204]bbed修改問題.txt
- python 將 CVS檔案轉為HTML檔案PythonHTML
- 【BBED】丟失歸檔檔案情況下的恢復
- ar——建立或修改備存檔案,或是從備存檔案中抽取檔案
- 修改Oracle資料檔名及資料檔案存放路徑Oracle
- 【Oracle】如何修改資料檔案和日誌檔案的路徑Oracle
- 網站檔案修改資料庫,安全高效地修改網站資料庫中的檔案資訊網站資料庫
- 如何將BigWig 檔案轉化為 bed 檔案
- 如何將.ipynb檔案轉換為.py檔案
- Mxnet模型檔案轉換為Pb模型檔案模型
- 修改檔案、資料夾許可權
- 【BBED】BBED基礎知識
- [20181122]bbed人為修改事務提交標誌.txt
- 使用pd從資料庫逆向生成pdm檔案資料庫
- SVN培訓筆記(下拉專案、同步修改、新增檔案、修改檔案、刪除檔案、改名檔案等)筆記
- [20190104]bbed手工插入資料.txt
- Json檔案轉換為Excel檔案!涉及讀檔案,時間戳轉化,寫文件JSONExcel時間戳
- Word檔案如何轉為PDF檔案,小技能分享!
- ORA-00279異常處理_offline資料檔案缺失日誌檔案問題一鍵修復
- GBFF檔案轉GFF檔案
- sed 修改檔案
- Oracle使用RMAN將普通資料檔案轉成ASMOracleASM