Oracle非關鍵資料檔案作業系統誤刪除處理
對Oracle DBA而言,生產運維環境和資料的安全都是安身立命的根本。很多時候,行事謹慎、凡是先思後行往往比技術水平能力更重要。所有的Oracle使用者,在進行資料庫操作,特別是關鍵操作的時候,一定要三思而後行。
1、問題故障
臨下班之前,一個朋友電話諮詢資料檔案誤刪除的處理操作。問題的起因是運維DBA在建立表空間和資料檔案的時候,陰差陽錯的作業系統層面直接就將新建立出的資料檔案刪除掉。現在檔案日誌中不斷報錯說檔案不存在。具體關鍵資訊如下:
ü 測試環境,處在搭建過程中。資料沒有備份;
ü 誤刪除的表空間中沒有資料,經詢問也不需要將OS誤刪除的資料找回來。可以刪掉表空間之後重新建立資料;
ü 誤刪除之後,由於筆者朋友的介入,就沒有貿然關閉伺服器重啟;
ü 誤刪除表空間為普通的資料表空間,非系統System/Sysaux、Temp和Undo;
ü 誤刪除表空間中包括多個資料檔案,只有一部分檔案被刪除;
ü 作業系統OS是Linux環境,具體Oracle版本為10.2.0.5;
從上面的資訊來看,這個案例不難處理。雖然沒有備份,但是畢竟這是測試環境,而且沒有任何業務資料在其中。所以,筆者是贊同將原有表空間進行丟棄處理。而且,資料表空間沒有什麼系統執行依賴,也就是即使目前損壞,也沒有對資料庫本身致命的影響。
由於各種原因,筆者在獲得故障alert_log之後,在自己的實驗環境中進行了相應的故障模擬。
2、實驗環境準備
這個案例中,資料庫Oracle版本不是關鍵問題。所以,筆者選擇了手頭方便的11g進行實驗。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
建立實驗表空間,由多個檔案共同組成。
SQL> create tablespace mytest datafile '/u01/app/oradata/ORA11G/datafile/mytesttbl01.dbf' size 10m autoextend off
2 extent management local uniform. size 1m
3 segment space management auto;
Tablespace created
SQL> alter tablespace mytest add datafile '/u01/app/oradata/ORA11G/datafile/mytesttbl02.dbf' size 10m autoextend off;
Tablespace altered
SQL> alter tablespace mytest add datafile '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf' size 10m autoextend off;
Tablespace altered
SQL> alter tablespace mytest add datafile '/u01/app/oradata/ORA11G/datafile/mytesttbl04.dbf' size 10m autoextend off;
Tablespace altered
建立完的資料表空間和檔案結構如下:
SQL> select file_Name, bytes,tablespace_name from dba_data_files;
FILE_NAME BYTES TABLESPACE_NAME
-------------------------------------------------------------------------------- ---------- ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_users_7vpyc2xd_.dbf 5242880 USERS
/u01/app/oradata/ORA11G/datafile/o1_mf_undotbs1_7vpyc2py_.dbf 267386880 UNDOTBS1
/u01/app/oradata/ORA11G/datafile/o1_mf_sysaux_7vpyc2hb_.dbf 754974720 SYSAUX
/u01/app/oradata/ORA11G/datafile/o1_mf_system_7vpyc1x7_.dbf 754974720 SYSTEM
/u01/app/oradata/ORA11G/datafile/mytesttbl01.dbf 10485760 MYTEST
/u01/app/oradata/ORA11G/datafile/mytesttbl02.dbf 10485760 MYTEST
/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf 10485760 MYTEST
/u01/app/oradata/ORA11G/datafile/mytesttbl04.dbf 10485760 MYTEST
8 rows selected
在OS層面將一部分的資料檔案強制刪除。
[oracle@bsplinux datafile]$ ls -l
total 1836932
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:22 mytesttbl01.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:23 mytesttbl02.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:23 mytesttbl03.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:24 mytesttbl04.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:25 o1_mf_sysaux_7vpyc2hb_.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:23 o1_mf_system_7vpyc1x7_.dbf
-rw-r----- 1 oracle oinstall 54534144 Jul 2 22:26 o1_mf_temp_7vpz05do_.tmp
-rw-r----- 1 oracle oinstall 267395072 Jul 3 03:25 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 5251072 Jul 3 03:14 o1_mf_users_7vpyc2xd_.dbf
[oracle@bsplinux datafile]$ rm -f mytesttbl03.dbf
[oracle@bsplinux datafile]$ rm -f mytesttbl04.dbf
[oracle@bsplinux datafile]$ ls -l
total 1816404
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:22 mytesttbl01.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:23 mytesttbl02.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:26 o1_mf_sysaux_7vpyc2hb_.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:26 o1_mf_system_7vpyc1x7_.dbf
-rw-r----- 1 oracle oinstall 54534144 Jul 2 22:26 o1_mf_temp_7vpz05do_.tmp
-rw-r----- 1 oracle oinstall 267395072 Jul 3 03:26 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 5251072 Jul 3 03:14 o1_mf_users_7vpyc2xd_.dbf
此時,在alert_log中,雖然沒有明確的資訊,但是隻要涉及到相關的檔案操作,都會報錯。
SQL> create table t tablespace mytest as select * from dba_objects ;
create table t tablespace mytest as select * from dba_objects
ORA-01116: 開啟資料庫檔案 7 時出錯
ORA-01110: 資料檔案 7: '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf'
ORA-27041: 無法開啟檔案
Linux Error: 2: No such file or directory
Additional information: 3
3、未關閉伺服器情況下的處理過程
處理檔案誤刪除,要區分是否關閉伺服器。在這個處理案例中,如果沒有關閉伺服器,處理的難度比較小。
處理的方法是直接強制的刪除表空間,連帶刪除檔案和相應內容。命令為:drop tablespace mytest including contents and datafiles。在日誌中,我們看到相關的報錯資訊。但是,還是可以成功的將表空間刪除。
Tue Jul 03 03:30:20 2012
drop tablespace mytest including contents and datafiles
Errors in file /u01/app/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_4232.trc:
(亂碼)
Linux Error: 2: No such file or directory
Additional information: 3
(亂碼)
Linux Error: 2: No such file or directory
Additional information: 3
(亂碼)
Deleted file /u01/app/oradata/ORA11G/datafile/mytesttbl01.dbf
Deleted file /u01/app/oradata/ORA11G/datafile/mytesttbl02.dbf
Completed: drop tablespace mytest including contents and datafiles
對應的檔案資訊,的確也表示已經刪除。
[oracle@bsplinux datafile]$ ls -l
total 1795876
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:30 o1_mf_sysaux_7vpyc2hb_.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:30 o1_mf_system_7vpyc1x7_.dbf
-rw-r----- 1 oracle oinstall 54534144 Jul 2 22:26 o1_mf_temp_7vpz05do_.tmp
-rw-r----- 1 oracle oinstall 267395072 Jul 3 03:30 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 5251072 Jul 3 03:14 o1_mf_users_7vpyc2xd_.dbf
4、關閉伺服器情況下的處理
如果因為各種原因,已經關閉了伺服器。怎麼處理呢?首先,讓我們恢復環境。
SQL> create tablespace mytest datafile '/u01/app/oradata/ORA11G/datafile/mytesttbl01.dbf' size 10m autoextend off
2 extent management local uniform. size 1m
3 segment space management auto;
Tablespace created
SQL> alter tablespace mytest add datafile '/u01/app/oradata/ORA11G/datafile/mytesttbl02.dbf' size 10m autoextend off;
Tablespace altered
SQL> alter tablespace mytest add datafile '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf' size 10m autoextend off;
Tablespace altered
(OS 層面的Ls –l結果)
total 1826668
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:33 mytesttbl01.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:33 mytesttbl02.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:34 mytesttbl03.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:33 o1_mf_sysaux_7vpyc2hb_.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:34 o1_mf_system_7vpyc1x7_.dbf
-rw-r----- 1 oracle oinstall 54534144 Jul 2 22:26 o1_mf_temp_7vpz05do_.tmp
-rw-r----- 1 oracle oinstall 267395072 Jul 3 03:34 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 5251072 Jul 3 03:14 o1_mf_users_7vpyc2xd_.dbf
誤刪除表空間一個檔案。
[oracle@bsplinux datafile]$ rm mytesttbl03.dbf
[oracle@bsplinux datafile]$ ls -l
total 1816404
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:33 mytesttbl01.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:33 mytesttbl02.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:33 o1_mf_sysaux_7vpyc2hb_.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 3 03:34 o1_mf_system_7vpyc1x7_.dbf
-rw-r----- 1 oracle oinstall 54534144 Jul 2 22:26 o1_mf_temp_7vpz05do_.tmp
-rw-r----- 1 oracle oinstall 267395072 Jul 3 03:34 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 5251072 Jul 3 03:14 o1_mf_users_7vpyc2xd_.dbf
注意,在這個時候,只有使用突然斷電和shutdown –abort方法才可能停機。因為其他幾種關機方式都會伴隨檔案檢查過程(如Checkpoint)。
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate;
ORA-01116: error in opening database file 7
ORA-01110: data file 7: '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
SQL> shutdown normal;
ORA-01116: error in opening database file 7
ORA-01110: data file 7: '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
SQL> shutdown abort
ORACLE instance shut down.
SQL>
在重新啟動的時候,從mount到open過程中,是會報錯。
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 318769536 bytes
Database Buffers 96468992 bytes
Redo Buffers 6094848 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf'
此時,alert_log中的資訊為。
Completed: ALTER DATABASE MOUNT
Tue Jul 03 03:41:50 2012
ALTER DATABASE OPEN
Errors in file /u01/app/diag/rdbms/ora11g/ora11g/trace/ora11g_dbw0_4641.trc:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/app/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_4684.trc:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf'
ORA-1157 signalled during: ALTER DATABASE OPEN...
分析可以知道,在open階段,要去定位各個資料檔案,依據的內容是controlfile中的資料檔案資訊。故在open階段會報錯。
處理的方法是啟動到mount,之後透過命令將資料檔案向Oracle“隱藏”掉。具體處理如下:
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 318769536 bytes
Database Buffers 96468992 bytes
Redo Buffers 6094848 bytes
Database mounted.
在mount階段將資料檔案隱藏掉,在open階段將tablespace刪除掉。
SQL> alter database datafile '/u01/app/oradata/ORA11G/datafile/mytesttbl03.dbf' offline drop;
Database altered.
--mount階段不能處理tablespace刪除
SQL> drop tablespace mytest;
drop tablespace mytest
*
ERROR at line 1:
ORA-01109: database not open
SQL> alter database open;
Database altered.
SQL> drop tablespace mytest;
Tablespace dropped.
Alert log上也顯示可以正常的啟動。
Recovery of Online Redo Log: Thread 1 Group 2 Seq 104 Reading mem 0
Mem# 0: /u01/app/oradata/ORA11G/onlinelog/o1_mf_2_7vpyx20p_.log
Mem# 1: /u01/app/flash_recovery_area/ORA11G/onlinelog/o1_mf_2_7vpyxdyv_.log
Completed redo application of 0.00MB
Completed crash recovery at
Thread 1: logseq 104, block 5650, scn 2592058
11 data blocks read, 11 data blocks written, 3 redo k-bytes read
Tue Jul 03 03:47:00 2012
Thread 1 advanced to log sequence 105 (thread open)
Thread 1 opened at log sequence 105
Current log# 3 seq# 105 mem# 0: /u01/app/oradata/ORA11G/onlinelog/o1_mf_3_7vpyxw4h_.log
Current log# 3 seq# 105 mem# 1: /u01/app/flash_recovery_area/ORA11G/onlinelog/o1_mf_3_7vpyy4ls_.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Successfully onlined Undo Tablespace 2.
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
Tue Jul 03 03:47:01 2012
SMON: enabling cache recovery
SMON: enabling tx recovery
Database Characterset is AL32UTF8
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Completed: alter database open
5、結論
在處理表空間、檔案和作業系統的時候,作為DBA一定要小心小心再小心。如果是在生產環境和沒有備份的情況下,問題處理就比較複雜了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-734737/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 作業系統層恢復非關鍵資料檔案作業系統
- oracle資料檔案被誤刪除後的災難處理方法Oracle
- Oracle系統表空間剛新增的一個資料檔案誤刪除恢復處理Oracle
- 非歸檔資料檔案誤刪除解決辦法
- 誤刪除資料檔案、控制檔案的非RMAN恢復方法
- Oracle恢復誤刪除的資料檔案Oracle
- 誤刪資料庫資料檔案的處理方法資料庫
- 【恢復】非歸檔模式下因誤刪除資料檔案導致資料庫無法OPEN的故障處理模式資料庫
- oracle 誤刪除的處理方法Oracle
- Oracle 刪除資料檔案Oracle
- oracle刪除資料檔案Oracle
- oracle誤刪除表空間的資料檔案Oracle
- Linux作業系統上刪除OracleLinux作業系統Oracle
- 轉:Oracle刪除資料檔案Oracle
- linux和windows作業系統下完全刪除oracle資料庫LinuxWindows作業系統Oracle資料庫
- UNDO表空間下的資料檔案被誤刪除後的處理方法
- oracle 失誤刪掉資料檔案後,刪除表空間操作Oracle
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- oracle徹底刪除資料檔案Oracle
- 【undo】undo 意外刪除處理辦法(非歸檔)
- c盤爆紅了可以刪除哪些檔案 怎樣刪除c盤非系統檔案
- 刪除表空間,資料檔案也刪除後,但作業系統層面上空閒空間不見增加。作業系統
- 非系統資料檔案被刪除恢復(IZ0-053, Q574)
- lsof恢復oracle誤刪除檔案Oracle
- 資料檔案誤刪除(DM_單機)
- linux中誤刪除oracle資料檔案的恢復操作LinuxOracle
- AIX刪除檔案系統AI
- Oracle10g刪除資料檔案Oracle
- 刪除某個檔案或資料夾時,系統提示無法刪除!
- 被誤刪的檔案正確處理方法,快速找回誤刪的檔案
- windows刪除檔案的批處理操作Windows
- Oracle11g資料庫引數檔案誤刪除恢復Oracle資料庫
- linux中誤刪除oracle資料檔案的恢復操作(轉)LinuxOracle
- 非歸檔模式下恢復利用offline drop命令誤刪除的資料檔案模式
- oracle恢復誤刪除資料Oracle
- 【伺服器資料恢復】Zfs檔案系統下誤刪除怎麼恢復資料伺服器資料恢復
- redo log 丟失(非歸檔模式,資料庫正常關閉,redo log 被誤刪除!)模式資料庫
- 使用檔案描述符恢復誤刪除的資料檔案