【恢復】非歸檔模式下因誤刪除資料檔案導致資料庫無法OPEN的故障處理
模擬一下這個資料庫故障,同時給出一個“簡單”的恢復處理過程。
1.查詢獲得TBS_SEC_D表空間對應的資料檔案資訊
sys@ora10g> col FILE_NAME for a40
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
FILE_NAME FILE_ID STATUS
---------------------------------------- ---------- ---------
/oracle/oradata/ora10g/tbs_sec_d_01.dbf 5 AVAILABLE
/oracle/oradata/ora10g/hou.dbf 13 AVAILABLE
2.非歸檔模式下模擬誤刪除資料檔案
1)確認資料庫的歸檔模式
sys@ora10g> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /oracle/arch/ora10g
Oldest online log sequence 1541
Current log sequence 1543
2)模擬誤刪除hou.dbf資料檔案
sys@ora10g> !rm -f /oracle/oradata/ora10g/hou.dbf
3)此時的資料庫狀態沒有異樣
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
FILE_NAME FILE_ID STATUS
---------------------------------------- ---------- ---------
/oracle/oradata/ora10g/tbs_sec_d_01.dbf 5 AVAILABLE
/oracle/oradata/ora10g/hou.dbf 13 AVAILABLE
3.重啟資料庫觀察一系列的報錯資訊
1)關閉資料庫過程中的報錯資訊
sys@ora10g> shutdown immediate;
ORA-03113: end-of-file on communication channel
2)啟動資料過程中的報錯資訊
NotConnected@> startup;
ORACLE instance started.
Total System Global Area 209715200 bytes
Fixed Size 2071640 bytes
Variable Size 125830056 bytes
Database Buffers 75497472 bytes
Redo Buffers 6316032 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 13 - see DBWR trace file
ORA-01110: data file 13: '/oracle/oradata/ora10g/hou.dbf'
這裡提示無法定位13號資料檔案。
此時資料庫僅處於mount狀態。
NotConnected@> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
4.恢復方法
既然資料檔案被誤刪除了,而且我們又沒有有效的備份可用,同時資料庫又處於非歸檔的狀態(“杯具”到了極致),那我們只能容忍資料的丟失(如果13號資料檔案存有資料的情況下)。
1)在mount狀態下使用offline drop命令將資料檔案與表空間之間的關係隔斷。
NotConnected@> col name for a50
NotConnected@> select FILE#,STATUS,ENABLED,NAME from v$datafile where name like '%hou%';
FILE# STATUS ENABLED NAME
---------- ------- ---------- ---------------------------------------
13 ONLINE READ WRITE /oracle/oradata/ora10g/hou.dbf
NotConnected@> alter database datafile '/oracle/oradata/ora10g/hou.dbf' offline drop;
Database altered.
NotConnected@> select FILE#,STATUS,ENABLED,NAME from v$datafile where name like '%hou%';
FILE# STATUS ENABLED NAME
---------- ------- ---------- ----------------------------------------
13 RECOVER READ WRITE /oracle/oradata/ora10g/hou.dbf
2)此時我們便可以順利的OPEN資料庫
NotConnected@> alter database open;
Database altered.
5.收尾工作
即便按照上述的方法簡單處理了這個故障,但是在資料庫中還是遺留了一下“垃圾”資訊。
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
FILE_NAME FILE_ID STATUS
---------------------------------------- ---------- ---------
/oracle/oradata/ora10g/tbs_sec_d_01.dbf 5 AVAILABLE
/oracle/oradata/ora10g/hou.dbf 13 AVAILABLE
此時表明物理上已經不存在的“/oracle/oradata/ora10g/hou.dbf”檔案還是歸屬於表空間TBS_SEC_D。如何徹底的斷絕這樣的無意義的關係?
這裡給出“簡單粗暴”的重建表空間方法。
大體步驟如下:
1)想辦法邏輯備份表空間中包含的資料
2)刪除表空間
sys@ora10g> drop tablespace TBS_SEC_D including contents and datafiles;
Tablespace dropped.
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
no rows selected
3)重建表空間
sys@ora10g> create tablespace TBS_SEC_D datafile '/oracle/oradata/ora10g/tbs_sec_d_01.dbf' size 10m;
Tablespace created.
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
FILE_NAME FILE_ID STATUS
---------------------------------------- ---------- ---------
/oracle/oradata/ora10g/tbs_sec_d_01.dbf 5 AVAILABLE
4)使用邏輯備份恢復表空間的內容
6.小結
又一次實踐證明,【無備份、非歸檔】是DBA界最可怕的場景。
假設這個故障發生之前存在有效的備份,恢復的過程將會非常的簡便,也不會冒著丟失資料的風險。
珍愛DBA生命,請及時完善備份策略並定期安排備份介質有效性驗證等常規“枯燥”任務,只有“她們”才是最美麗的!
Good luck.
secooler
10.06.02
-- The End --
1.查詢獲得TBS_SEC_D表空間對應的資料檔案資訊
sys@ora10g> col FILE_NAME for a40
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
FILE_NAME FILE_ID STATUS
---------------------------------------- ---------- ---------
/oracle/oradata/ora10g/tbs_sec_d_01.dbf 5 AVAILABLE
/oracle/oradata/ora10g/hou.dbf 13 AVAILABLE
2.非歸檔模式下模擬誤刪除資料檔案
1)確認資料庫的歸檔模式
sys@ora10g> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /oracle/arch/ora10g
Oldest online log sequence 1541
Current log sequence 1543
2)模擬誤刪除hou.dbf資料檔案
sys@ora10g> !rm -f /oracle/oradata/ora10g/hou.dbf
3)此時的資料庫狀態沒有異樣
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
FILE_NAME FILE_ID STATUS
---------------------------------------- ---------- ---------
/oracle/oradata/ora10g/tbs_sec_d_01.dbf 5 AVAILABLE
/oracle/oradata/ora10g/hou.dbf 13 AVAILABLE
3.重啟資料庫觀察一系列的報錯資訊
1)關閉資料庫過程中的報錯資訊
sys@ora10g> shutdown immediate;
ORA-03113: end-of-file on communication channel
2)啟動資料過程中的報錯資訊
NotConnected@> startup;
ORACLE instance started.
Total System Global Area 209715200 bytes
Fixed Size 2071640 bytes
Variable Size 125830056 bytes
Database Buffers 75497472 bytes
Redo Buffers 6316032 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 13 - see DBWR trace file
ORA-01110: data file 13: '/oracle/oradata/ora10g/hou.dbf'
這裡提示無法定位13號資料檔案。
此時資料庫僅處於mount狀態。
NotConnected@> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
4.恢復方法
既然資料檔案被誤刪除了,而且我們又沒有有效的備份可用,同時資料庫又處於非歸檔的狀態(“杯具”到了極致),那我們只能容忍資料的丟失(如果13號資料檔案存有資料的情況下)。
1)在mount狀態下使用offline drop命令將資料檔案與表空間之間的關係隔斷。
NotConnected@> col name for a50
NotConnected@> select FILE#,STATUS,ENABLED,NAME from v$datafile where name like '%hou%';
FILE# STATUS ENABLED NAME
---------- ------- ---------- ---------------------------------------
13 ONLINE READ WRITE /oracle/oradata/ora10g/hou.dbf
NotConnected@> alter database datafile '/oracle/oradata/ora10g/hou.dbf' offline drop;
Database altered.
NotConnected@> select FILE#,STATUS,ENABLED,NAME from v$datafile where name like '%hou%';
FILE# STATUS ENABLED NAME
---------- ------- ---------- ----------------------------------------
13 RECOVER READ WRITE /oracle/oradata/ora10g/hou.dbf
2)此時我們便可以順利的OPEN資料庫
NotConnected@> alter database open;
Database altered.
5.收尾工作
即便按照上述的方法簡單處理了這個故障,但是在資料庫中還是遺留了一下“垃圾”資訊。
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
FILE_NAME FILE_ID STATUS
---------------------------------------- ---------- ---------
/oracle/oradata/ora10g/tbs_sec_d_01.dbf 5 AVAILABLE
/oracle/oradata/ora10g/hou.dbf 13 AVAILABLE
此時表明物理上已經不存在的“/oracle/oradata/ora10g/hou.dbf”檔案還是歸屬於表空間TBS_SEC_D。如何徹底的斷絕這樣的無意義的關係?
這裡給出“簡單粗暴”的重建表空間方法。
大體步驟如下:
1)想辦法邏輯備份表空間中包含的資料
2)刪除表空間
sys@ora10g> drop tablespace TBS_SEC_D including contents and datafiles;
Tablespace dropped.
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
no rows selected
3)重建表空間
sys@ora10g> create tablespace TBS_SEC_D datafile '/oracle/oradata/ora10g/tbs_sec_d_01.dbf' size 10m;
Tablespace created.
sys@ora10g> select FILE_NAME,FILE_ID,STATUS from dba_data_files where TABLESPACE_NAME='TBS_SEC_D';
FILE_NAME FILE_ID STATUS
---------------------------------------- ---------- ---------
/oracle/oradata/ora10g/tbs_sec_d_01.dbf 5 AVAILABLE
4)使用邏輯備份恢復表空間的內容
6.小結
又一次實踐證明,【無備份、非歸檔】是DBA界最可怕的場景。
假設這個故障發生之前存在有效的備份,恢復的過程將會非常的簡便,也不會冒著丟失資料的風險。
珍愛DBA生命,請及時完善備份策略並定期安排備份介質有效性驗證等常規“枯燥”任務,只有“她們”才是最美麗的!
Good luck.
secooler
10.06.02
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-664275/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- 【伺服器資料恢復】Zfs檔案系統下誤刪除怎麼恢復資料伺服器資料恢復
- 【資料庫資料恢復】LINUX EXT3檔案系統下ORACLE資料庫誤操作導致資料丟失的資料恢復案例資料庫資料恢復LinuxOracle
- 【伺服器資料恢復】linux ext3檔案系統下誤刪除mysql資料庫的資料恢復案例伺服器資料恢復LinuxMySql資料庫
- 【伺服器資料恢復】RAID故障導致資料庫分割槽無法識別的資料恢復伺服器資料恢復AI資料庫
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- 【北亞資料恢復】輸入錯誤命令導致MySQL資料庫資料被刪除的資料恢復案例資料恢復MySql資料庫
- 【北亞資料恢復】zfs檔案系統的伺服器誤刪除的資料恢復資料恢復伺服器
- 【北亞資料恢復】非物理故障導致的伺服器藍屏且無法重啟的資料恢復案例資料恢復伺服器
- 【北亞資料恢復】分散式儲存hbase和hive資料庫底層檔案被誤刪除的資料恢復案例資料恢復分散式Hive資料庫
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- 對歸檔模式下CLEAR 未歸檔日誌後恢復資料庫的一點看法模式資料庫
- 【分散式儲存資料恢復】hbase和hive資料庫底層檔案誤刪的資料恢復案例分散式資料恢復Hive資料庫
- 【虛擬機器資料恢復】誤刪除VMware虛擬機器vmdk檔案的資料恢復案例虛擬機資料恢復
- 【伺服器資料恢復】重灌系統導致XFS檔案系統分割槽無法訪問的資料恢復伺服器資料恢復
- 【伺服器資料恢復】伺服器誤刪除導致郵件資料丟失的資料恢復案例伺服器資料恢復
- 【NetApp資料恢復】誤刪除NetApp上的lun導致伺服器當機的NetApp資料恢復APP資料恢復伺服器
- 【資料庫資料恢復】HP-UX系統ORACLE資料庫被誤刪除的資料恢復資料庫資料恢復UXOracle
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 【伺服器資料恢復】意外斷電導致FreeNAS中UFS2檔案系統故障的資料恢復伺服器資料恢復
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- Sybase SQL Anywhere(ASA)資料庫恢復,ASA資料恢復,資料誤刪除恢復工具ReadASADBSQL資料庫資料恢復
- 伺服器儲存檔案誤刪資料恢復伺服器資料恢復
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- 【伺服器資料恢復】VSAN故障導致虛擬機器無法訪問的資料恢復案例伺服器資料恢復虛擬機
- 【資料庫資料恢復】磁碟空間不足導致sql server錯誤的資料恢復資料庫資料恢復SQLServer
- 【資料庫資料恢復】EXT3檔案系統下MYSQL資料庫恢復案例資料庫資料恢復MySql
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 【伺服器資料恢復】raid5故障導致儲存的卷無法掛載的資料恢復伺服器資料恢復AI
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- 電腦裡刪除的檔案怎麼恢復,資料恢復方法大全資料恢復
- 【北亞資料恢復】伺服器誤刪除卷導致raid5陣列資料丟失的資料恢復資料恢復伺服器AI陣列
- 【伺服器資料恢復】IBM儲存raid5故障導致卷無法掛載的資料恢復伺服器資料恢復IBMAI
- 伺服器資料恢復-誤操作導致mysql資料庫資料丟失的資料恢復案例伺服器資料恢復MySql資料庫
- MySQL資料災難挽救之ibdata檔案誤刪恢復MySql
- 【NetApp資料恢復案例】針對NetApp誤刪除資料的恢復APP資料恢復