Oracle系統表空間剛新增的一個資料檔案誤刪除恢復處理
Oracle系統表空間剛新增的一個資料檔案誤刪除恢復處理
一次誤刪除求助
早上有朋友在itpub論壇發帖求助
標題:急求救!!!誤刪了oracle系統表空間的一個資料檔案導致資料庫無法啟動
帖子地址:http://www.itpub.net/thread-1837554-1-1.html
帖子內容:
昨天檢視資料庫的系統表空間,發現已經使用99%,之前加過一個系統表空間資料檔案,這次再打算增加一個system03.dbf資料檔案,但是加入後誤刪了這個資料檔案,導致資料庫無法啟動了,用了網上的方法offiine drop這個檔案,再次開啟的時候又提示這個檔案offline了,還是打不開,還rman好像也沒奏效,一定要恢復這個檔案嗎???有什麼辦法能開啟資料庫啊,這個檔案倒是無關緊要的,搞了一個晚上也沒弄出來,大牛們幫幫忙吧!!!
這是現在開啟的狀態::
SQL> startup
ORACLE instance started.
Total System Global Area 6714322944 bytes
Fixed Size 2226056 bytes
Variable Size 5066721400 bytes
Database Buffers 1627389952 bytes
Redo Buffers 17985536 bytes
Database mounted.
ORA-01147: SYSTEM tablespace file 25 is offline
ORA-01110: data file 25: '/u01/oradata/wilson/system03.dbf'
無法把offline改為online::
SQL> alter database datafile 25 online;
alter database datafile 25 online
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 25 - see DBWR trace file
ORA-01110: data file 25: '/u01/oradata/wilson/system03.dbf'
這個是system表空間,網上說的刪除表空間的辦法也不可行啊
高手支招:(最後樓主採用此方法恢復成功)
既然新新增的,加的時候一直到現在的日誌都還在嗎,在的話create一個空的然後恢復下就行了
alter database create datafile '/u01/oradata/wilson/system03.dbf';
recover datafile '/u01/oradata/wilson/system03.dbf';
恢復成功。
一點思考和總結:
這種情況的恢復看來也簡單,兩條命令,可是樓主說“搞了一個晚上也沒弄出來”,估計是經驗有限或者搜尋能力有待加強,另外可能沒有高手指點,總之應該走了不少彎路。由此可見,學習和搜尋能力,以及有高手指點,多麼重要!不用擔心受怕,不用那麼折騰了,還能輕鬆搞定問題。
本案例幸虧是剛新增的資料檔案(應該沒有資料),幸虧是誤刪除操作發生的早、發現的早(非歸檔模式,重做日誌還沒被覆蓋),否則可能要使用非常規手段了,比如bbed,或者掃描磁碟。
另外,猜測本案例涉及的應該是linux或unix平臺,發現問題後如果沒有關閉過資料庫,也可以根據檔案控制程式碼來恢復;
參考
最重要的,所有生產庫都應該設定為歸檔模式,特殊情況除外。
還有,操作要小心,做好有效的資料備份,尤其是生產環境。
另外,系統表空間不要輕易動,尤其是一些關鍵的資料字典等物件。表空間使用率高,那有可能只是表面現象,或許資料檔案還可以自動擴充套件,沒搞清楚狀況和做好充分準備前,不要隨便操作。
歸檔模式下做兩個實驗,加強印象
實驗環境 linux 5.7 64位,oracle 11.2.0.4 單例項,檔案系統
實驗一,誤刪除系統表空間新加的資料檔案後,透過建立空檔案,然後使用歸檔日誌或/和重做日誌來恢復
1、歸檔模式,為系統表空間新增資料檔案:
sys@ORACLE11> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 16
Next log sequence to archive 18
Current log sequence 18
sys@ORACLE11> alter tablespace system add datafile '/u01/app/oradata/oracle11g/system02.dbf' size 10m autoextend on;
Tablespace altered.
2、刪除新新增的資料檔案
oracle11g:/u01/app/oradata/oracle11g$mv system02.dbf system02.dbf.bak
3、建立測試表,觸發報錯:
為了觸發oracle檢測到問題,在系統表空間嘗試建立表(生產環境不能這麼操作!),建立失敗,不能開啟6號檔案:
sys@ORACLE11> create table test as select * from dba_objects;
create table test as select * from dba_objects
*
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oradata/oracle11g/system02.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
4、嘗試直接恢復,失敗
此時如果直接恢復,會失敗,報錯檔案在使用或恢復:
sys@ORACLE11> alter database create datafile '/u01/app/oradata/oracle11g/system02.dbf';
alter database create datafile '/u01/app/oradata/oracle11g/system02.dbf'
*
ERROR at line 1:
ORA-01182: cannot create database file 6 - file is in use or recovery
ORA-01110: data file 6: '/u01/app/oradata/oracle11g/system02.dbf'
sys@ORACLE11> recover datafile 6;
ORA-00283: recovery session canceled due to errors
ORA-01124: cannot recover data file 6 - file is in use or recovery
ORA-01110: data file 6: '/u01/app/oradata/oracle11g/system02.dbf'
同時,如果手工產生檢查點,例項直接崩潰,失去聯絡:
sys@ORACLE11> alter system checkpoint;
ERROR:
ORA-03114: not connected to ORACLE
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 4259
Session ID: 1 Serial number: 13
5、重啟資料庫,無法open:
此時,只能嘗試啟動資料庫,報錯,找不到6號資料檔案,資料庫無法open:
sys@ORACLE11> conn / as sysdba
Connected to an idle instance.
idle> startup
ORACLE instance started.
Total System Global Area 308981760 bytes
Fixed Size 2252784 bytes
Variable Size 222298128 bytes
Database Buffers 79691776 bytes
Redo Buffers 4739072 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oradata/oracle11g/system02.dbf'
開始恢復:
6、建立名字一樣的空資料檔案,不要指定大小
idle> alter database create datafile '/u01/app/oradata/oracle11g/system02.dbf';
Database altered.
注意:
此處使用的命令是alter database create datafile
如果嘗試用之前為system表空間新增資料檔案的sql語句來建立檔案會失敗,報錯,資料庫未開啟:
idle> alter tablespace system add datafile '/u01/app/oradata/oracle11g/system02.dbf' size 10m autoextend on;
alter tablespace system add datafile '/u01/app/oradata/oracle11g/system02.dbf' size 10m autoextend on
*
ERROR at line 1:
ORA-01109: database not open
如果指定大小等屬性,也會失敗,報錯:
idle> alter database create datafile '/u01/app/oradata/oracle11g/system02.dbf' size 10m autoextend on;
alter database create datafile '/u01/app/oradata/oracle11g/system02.dbf' size 10m autoextend on
*
ERROR at line 1:
ORA-02000: missing AS keyword
7、資料檔案恢復:
idle> recover datafile 6;
Media recovery complete.
idle> select instance_name ,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
oracle11g MOUNTED
8、開啟資料庫,恢復成功:
idle> alter database open;
Database altered.
idle> conn / as sysdba
Connected.
sys@ORACLE11> select file_name,bytes/1024/1024 M ,autoextensible,status from dba_data_files;
FILE_NAME M AUT STATUS
-------------------------------------------------- ---------- --- ---------
/u01/app/oradata/oracle11g/users01.dbf 213.75 YES AVAILABLE
/u01/app/oradata/oracle11g/undotbs01.dbf 70 YES AVAILABLE
/u01/app/oradata/oracle11g/sysaux01.dbf 550 YES AVAILABLE
/u01/app/oradata/oracle11g/system01.dbf 760 YES AVAILABLE
/u01/app/oradata/oracle11g/goldengate01.dbf 10 YES AVAILABLE
/u01/app/oradata/oracle11g/system02.dbf 10 YES AVAILABLE
6 rows selected.
恢復成功。
實驗二,誤刪除系統表空間新加的資料檔案後,透過檔案控制程式碼,然後使用歸檔日誌或/和重做日誌來恢復
1、資料庫open時,系統級別刪除系統表空間新加的資料檔案
sys@ORACLE11> host rm /u01/app/oradata/oracle11g/system02.dbf
2、建立測試表,觸發報錯
sys@ORACLE11> create table test as select * from dba_objects;
create table test as select * from dba_objects
*
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oradata/oracle11g/system02.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
此時資料庫還沒有關閉,作業系統級別利用檔案控制程式碼複製回資料檔案:
3、獲得dbw程式號:
oracle11g:/u01/app/oradata/oracle11g$ps -ef|grep dbw0|grep -v grep
oracle 4308 1 0 14:34 ? 00:00:00 ora_dbw0_oracle11g
4、dbw程式會開啟所有資料檔案的控制程式碼。到proc相應目錄下檢視,目錄名是程式號,fd表示檔案描述符,紅色標記deleted為被刪除了的:
oracle11g:/u01/app/oradata/oracle11g$cd /proc/4308/fd
oracle11g:/proc/4308/fd$pwd
/proc/4308/fd
oracle11g:/proc/4308/fd$ls
0 1 10 13 2 256 257 258 259 260 261 262 263 264 3 4 5 6 7 8 9
oracle11g:/proc/4308/fd$ls -l
總計 0
lr-x------ 1 oracle oinstall 64 12-27 15:02 0 -> /dev/null
l-wx------ 1 oracle oinstall 64 12-27 15:02 1 -> /dev/null
lrwx------ 1 oracle oinstall 64 12-27 15:02 10 -> /u01/app/oracle/product/11.2/dbs/lkORACLE11G
lr-x------ 1 oracle oinstall 64 12-27 15:02 13 -> /u01/app/oracle/product/11.2/rdbms/mesg/oraus.msb
l-wx------ 1 oracle oinstall 64 12-27 15:02 2 -> /dev/null
lrwx------ 1 oracle oinstall 64 12-27 15:02 256 -> /u01/app/oradata/oracle11g/control01.ctl
lrwx------ 1 oracle oinstall 64 12-27 15:02 257 -> /u01/app/oracle/fast_recovery_area/oracle11g/control02.ctl
lrwx------ 1 oracle oinstall 64 12-27 15:02 258 -> /u01/app/oradata/oracle11g/system01.dbf
lrwx------ 1 oracle oinstall 64 12-27 15:02 259 -> /u01/app/oradata/oracle11g/sysaux01.dbf
lrwx------ 1 oracle oinstall 64 12-27 15:02 260 -> /u01/app/oradata/oracle11g/undotbs01.dbf
lrwx------ 1 oracle oinstall 64 12-27 15:02 261 -> /u01/app/oradata/oracle11g/users01.dbf
lrwx------ 1 oracle oinstall 64 12-27 15:02 262 -> /u01/app/oradata/oracle11g/goldengate01.dbf
lrwx------ 1 oracle oinstall 64 12-27 15:02 263 -> /u01/app/oradata/oracle11g/system02.dbf (deleted)
lrwx------ 1 oracle oinstall 64 12-27 15:02 264 -> /u01/app/oradata/oracle11g/temp01.dbf
lr-x------ 1 oracle oinstall 64 12-27 15:02 3 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-27 15:02 4 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-27 15:02 5 -> /dev/null
lr-x------ 1 oracle oinstall 64 12-27 15:02 6 -> /u01/app/oracle/product/11.2/rdbms/mesg/oraus.msb
lr-x------ 1 oracle oinstall 64 12-27 15:02 7 -> /proc/4308/fd
lr-x------ 1 oracle oinstall 64 12-27 15:02 8 -> /dev/zero
lrwx------ 1 oracle oinstall 64 12-27 15:02 9 -> /u01/app/oracle/product/11.2/dbs/hc_oracle11g.dat
5、直接cp該控制程式碼檔名回原來的位置:
oracle11g:/proc/4308/fd$cp 263 /u01/app/oradata/oracle11g/system02.dbf
oracle11g:/proc/4308/fd$cd /u01/app/oradata/oracle11g/
oracle11g:/u01/app/oradata/oracle11g$ls
control01.ctl redo01.log redo03.log system01.dbf temp01.dbf users01.dbf
goldengate01.dbf redo02.log sysaux01.dbf system02.dbf undotbs01.dbf
6、直接恢復,報錯,當前在使用不能恢復:
因為是系統表空間,不能離線不能直接恢復,需要重啟資料庫後才能進行恢復;
sys@ORACLE11> alter database datafile 6 offline;
alter database datafile 6 offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary
sys@ORACLE11> recover datafile 6;
ORA-00283: recovery session canceled due to errors
ORA-01124: cannot recover data file 6 - file is in use or recovery
ORA-01110: data file 6: '/u01/app/oradata/oracle11g/system02.dbf'
7、重啟資料庫
sys@ORACLE11> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORACLE11> startup
ORACLE instance started.
Total System Global Area 308981760 bytes
Fixed Size 2252784 bytes
Variable Size 222298128 bytes
Database Buffers 79691776 bytes
Redo Buffers 4739072 bytes
Database mounted.
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/app/oradata/oracle11g/system02.dbf'
8、進行系統表空間資料檔案恢復
sys@ORACLE11> sys@ORACLE11> sys@ORACLE11> recover datafile 6;
Media recovery complete.
sys@ORACLE11> truncate table test;
truncate table test
*
ERROR at line 1:
ORA-01109: database not open
9、開啟資料庫,恢復成功:
sys@ORACLE11> alter database open;
Database altered.
恢復成功。
實驗總結:
系統表空間新新增的資料檔案恢復,以上兩種方法都需要重啟資料庫,都需要使用歸檔日誌或線上重做日誌來恢復。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21256317/viewspace-1065042/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle誤刪除表空間的資料檔案Oracle
- Oracle恢復誤刪除的資料檔案Oracle
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- UNDO表空間下的資料檔案被誤刪除後的處理方法
- oracle 失誤刪掉資料檔案後,刪除表空間操作Oracle
- flashback database 恢復誤刪除的表空間。Database
- 誤刪oracle資料庫表空間檔案Oracle資料庫
- 非歸檔庫誤刪表空間後的資料恢復資料恢復
- Oracle資料恢復 - Linux / Unix 誤刪除的檔案恢復(轉)Oracle資料恢復Linux
- rman恢復資料檔案 恢復表空間
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- lsof恢復oracle誤刪除檔案Oracle
- Oracle非關鍵資料檔案作業系統誤刪除處理Oracle作業系統
- 直接刪除undo及temp表空間檔案後的資料庫恢復一例資料庫
- 【北亞資料恢復】zfs檔案系統的伺服器誤刪除的資料恢復資料恢復伺服器
- 錯誤新增表空間的資料檔案
- oracle恢復誤刪除資料Oracle
- oracle8i誤刪除臨時表空間後的恢復Oracle
- Oracle 10g 中誤刪除(drop)表的恢復處理Oracle 10g
- oracle刪除(釋放)資料檔案/表空間流程Oracle
- linux中誤刪除oracle資料檔案的恢復操作LinuxOracle
- 【伺服器資料恢復】Zfs檔案系統下誤刪除怎麼恢復資料伺服器資料恢復
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- 恢復案例:歸檔模式下丟失非系統表空間資料檔案的恢復模式
- Oracle 11g RMAN恢復-使用者誤刪除表空間Oracle
- oracle 小議如何從表空間 刪除 資料檔案Oracle
- linux下恢復誤刪除的資料檔案Linux
- linux中誤刪除oracle資料檔案的恢復操作(轉)LinuxOracle
- 表空間資料檔案故障處理
- Oracle閃回刪除恢復誤刪資料Oracle
- 誤刪除資料檔案、控制檔案的非RMAN恢復方法
- 使用檔案描述符恢復誤刪除的資料檔案
- Oracle10gR2刪除誤新增的空檔案Oracle
- 一個恢復刪除檔案的工具
- 系統表空間IO錯誤 資料損壞處理一則
- 如何正確的刪除表空間資料檔案
- ORACLE RAC 裸裝置資料庫一節點表空間擴容錯誤新增資料檔案到本地的處理Oracle資料庫
- 刪除表空間和表空間包含的檔案