oracle誤刪除表空間的資料檔案
事故原因:
1.由於誤操作用hp unix 命令 rm -f datafilename 刪除表空間的資料檔案
2.alter tablespace tablespacenaem drop datafile datafile ;
3.drop tablespace tablespacename including content and datafiles;
上述兩個步驟我用了近三個小時都沒有執行完,最後導致資料庫當機。下面把我當時啟動資料的後臺頁面展現給大家,為以後出現同樣的問題,提供一個參照的作用.
SP2-0734: unknown command beginning "sqlplus /n..." - rest of line ignored.
SQL> conn sys/passwd as sysdba;
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 3.2212E 10 bytes
Fixed Size 2115136 bytes
Variable Size 3204450752 bytes
Database Buffers 2.8991E 10 bytes
Redo Buffers 14659584 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 39 - see DBWR trace file
ORA-01110: data file 39: '/data/tbs_db_bas2.dbf'
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 3.2212E 10 bytes
Fixed Size 2115136 bytes
Variable Size 3204450752 bytes
Database Buffers 2.8991E 10 bytes
Redo Buffers 14659584 bytes
Database mounted.
SQL> recover datafile tbs_db_bas2.dbf;
ORA-02236: invalid file name
SQL> recover datafile '/data/tbs_db_bas2.dbf';
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 39: '/data/tbs_db_bas2.dbf'
ORA-01157: cannot identify/lock data file 39 - see DBWR trace file
ORA-01110: data file 39: '/data/tbs_db_bas2.dbf'
SQL> revover database;
SP2-0734: unknown command beginning "revover da..." - rest of line ignored.
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 39: '/data/tbs_db_bas2.dbf'
ORA-01157: cannot identify/lock data file 39 - see DBWR trace file
ORA-01110: data file 39: '/data/tbs_db_bas2.dbf'
SQL> shutdown immediat;
SP2-0717: illegal SHUTDOWN option
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 3.2212E 10 bytes
Fixed Size 2115136 bytes
Variable Size 3204450752 bytes
Database Buffers 2.8991E 10 bytes
Redo Buffers 14659584 bytes
Database mounted.
SQL> alter database datafile '/data/tbs_db_bas1.dbf' offline drop;
Database altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 39 - see DBWR trace file
ORA-01110: data file 39: '/data/tbs_db_bas2.dbf'
SQL> alter database datafile '/data/tbs_db_bas2.dbf' offline drop;
Database altered.
SQL> alter database open;
Database altered.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
lsnrctl
LSNRCTL for HPUX: Version 10.2.0.4.0 - Production on 03-MAY-2010 20:13:51
Copyright (c) 1991, 2007, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hljww)(PORT=1521)))
The command completed successfully
LSNRCTL> start
Starting /oracle/oracle/OraHome_1/bin/tnslsnr: please wait...
TNSLSNR for HPUX: Version 10.2.0.4.0 - Production
System parameter file is /oracle/oracle/OraHome_1/network/admin/listener.ora
Log messages written to /oracle/oracle/OraHome_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hljww)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hljww)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for HPUX: Version 10.2.0.4.0 - Production
Start Date 03-MAY-2010 20:14:08
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/oracle/OraHome_1/network/admin/listener.ora
Listener Log File /oracle/oracle/OraHome_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hljww)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "hljwxwl" has 1 instance(s).
Instance "hljwxwl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
-- 總結上述報錯原因是由於我的資料檔案沒有在oracle內部進行刪除導致資料庫重新啟動時找不到相應的資料檔案,報上述錯誤,所以我建議大家遇到問題時,要沉著,冷靜,不要亂,做好備份工作,特別是遇到錯誤時我們上網查一下oracle錯誤,進行相應的處理。下面我把這次我用到的文件分享給大家,其中粉紅色字型為本次用到的解決方案。
ORA-1157, "cannot identify/lock data file %s - see DBWR trace file"
引起的原因:
因為資料檔案已經在被使用了從而導致資料庫的後臺程式不能找到相應的資料檔案或者不能鎖定相應的資料檔案,這樣資料庫將禁止訪問這些資料檔案而其他的資料檔案則沒有影響。伴隨這個錯誤作業系統將會提示是哪個資料檔案不能被識別。
ORA-01157錯誤一般和ORA-01110錯誤一起出現,往往還有作業系統級別上的錯誤,例如ORA-07360,同時一個DBWR的trace檔案會在background_dump_dest的目錄下生成。例如,在Solaris的平臺上,會有如下的錯誤資訊顯示:
more..
less..
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/export/home/Oracle/oradata/817/users01.dbf'
然後檢視DBWR的trace檔案內容,會有如下的內容:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/export/home /Oracle/oradata/817/users01.dbf'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3
下面就幾個容易產生ORA-1157錯誤的方面詳細談談:
二. 通常引起ORA-1157錯誤的原因和解決方法
如果你是使用Oracle9i,就用SQLPLUS代替SVRMGRL執行以下的命令。
1. 資料檔案存在,但是Oracle認不到它
這種情況可能是在作業系統級上資料檔案被重新命名了或者移動到了一個新的分割槽或者位置,這種情況比較簡單,只是需要將資料檔案恢復成原始的資料檔名字或者重新命名資料檔案到一個新的位置/目錄就可以解決問題了。
重新命名資料檔案到一個新的位置/目錄的方法:
A. 資料庫是開啟狀態的
1)檢視那個資料檔案所在的表空間還包含有哪些資料檔案,執行以下查詢:
SELECT FILE_NAME, STATUS FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = '';
2)確定所有資料檔案的狀態都是可用的。
3)把表空間變成只讀表空間:
ALTER TABLESPACE READ ONLY;
4)確定在資料字典中表空間是顯示為只讀的:
SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME = '';
TABLESPACE_NAME STATUS
------------------------------ ---------
READ ONLY
5)用作業系統命令複製資料檔案到一個新的位置,複製完成後把整個表空間OFFLINE,這個時候使用者是不能訪問這個表空間的:
ALTER TABLESPACE OFFLINE;
6)重新命名這個資料檔案到一個新的位置了,這個操作會自動的更新控制檔案中的內容:
ALTER DATABASE RENAME FILE
'/FULL_PATH_OF_OLD_LOCATION/AND_DATAFILE_NAME.DBF'
TO
'/FULL_PATH_OF_NEW_LOCATION/AND_DATAFILE_NAME.DBF';
7)ONLINE這個表空間:
ALTER TABLESPACE YOUR_TABLESPACE_NAME ONLINE;
8)把這個表空間置成可讀寫的狀態:
ALTER TABLESPACE YOUR_TABLESPACE_NAME READ WRITE;
9)在作業系統級上刪除原來舊的資料檔案。
B.資料庫是關閉狀態的
1) 先正常關閉資料庫。
2) 用作業系統命令複製資料檔案到一個新的位置。
3) MOUNT資料庫,這樣將讀取控制檔案,但是不會讀取資料檔案:
STARTUP MOUNT
4) 重新命名這個資料檔案到一個新的位置了,這個操作會自動的更新控制檔案中的內容:
ALTER DATABASE RENAME FILE
'/FULL_PATH_OF_OLD_LOCATION/AND_DATAFILE_NAME.DBF'
TO
'/FULL_PATH_OF_NEW_LOCATION/AND_DATAFILE_NAME.DBF';
5) 開啟資料庫:
ALTER DATABASE OPEN;
2. 資料檔案不存在或者對於Oracle來說是不可用的
資料檔案被物理的移走了或者損壞導致Oracle不能再認到了,例如資料檔案被截斷或者覆蓋了,一般會出現ORA-27046、ORA-1157的錯誤提示:
ORA-27046: file size is not a multiple of logical block size
這種情況下可以有兩種選擇去解決問題:
A. 重建資料檔案所屬的那個表空間
這種方法比較適用於USERS、TEMP、INDEX表空間,如果資料庫是正常關閉的,也就是說回滾段中沒有啟用的表空間事務,也推薦使用這種方法。如果是SYSTEM表空間,則要重建資料庫了。
具體步驟如下:
1) MOUNT資料庫:
STARTUP MOUNT PFILE='';
2) OFFLINE DROP資料檔案:
ALTER DATABASE DATAFILE '' OFFLINE DROP;
3) 開啟資料庫:
ALTER DATABASE OPEN;
4) 刪除表空間:
DROP TABLESPACE INCLUDING CONTENTS;
5) 重建表空間:
CREATE TABLESPACE DATAFILE
' SIZE ;
6) 重建表空間中所有以前存在的物件:可以使用以前建立物件的指令碼或者利用最近可用的EXPORT DUMP來重建以前存在的物件。
B.用正常的恢復過程去恢復資料檔案
這種方法比較適用於只讀表空間或者那種不能用重建表空間的方法的USERS和INDEX表空間。如果是回滾段表空間,那必須要求資料庫是正常關閉的才能使用這個方法。如果是SYSTEM表空間,並且備份和所有的歸檔日誌都全的情況下,強烈建議使用這種方法去恢復的,但是如果是非歸檔方式,則就只能利用當前所有的聯機日誌進行恢復了。
在很多的情況下,重建表空間是不可能的或者是非常費時費力的,因此,從備份和利用歸檔日誌恢復資料檔案是一種比較好的方法,尤其是對於只讀表空間來說,因為沒有資料的寫入和更改,因此直接用備份來恢復是最快最省事的。
具體步驟如下:
1) 從備份中恢復丟失或者損壞的資料檔案。
2) MOUNT資料庫:
STARTUP MOUNT PFILE='';
3) 執行以下的查詢:
SELECT V1.GROUP#, MEMBER, SEQUENCE#,
FIRST_CHANGE#
FROM V$LOG V1, V$LOGFILE V2
WHERE V1.GROUP# = V2.GROUP#;
這個查詢將列出所有聯機重做日誌以及它們所代表的SEQUENCE和FIRST CHANGE NUMBER.
4) 如果資料庫是非歸檔狀態下的,執行以下的查詢:
SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;
如果CHANGE#大於最小的聯機重做日誌檔案的FIRST_CHANGE#,那麼資料檔案可以被恢復,記住恢復資料檔案的時候要應用所有的聯機重做日誌檔案,然後到第5步。
如果CHANGE#小於最小的聯機重做日誌檔案的FIRST_CHANGE#,那麼這個資料檔案將不能被恢復了,那麼只能從最近的資料庫全備份恢復或者重建這個資料檔案所屬的表空間了。
5) 恢復資料檔案:
RECOVER DATAFILE '';
6) 確認所有的歸檔日誌都被應用了直至出現"Media recovery complete"的提示資訊,如果Oracle提示有一個不存在的歸檔日誌檔案,那麼就可能要應用所有的聯機重做日誌檔案來恢復直至出現"Media recovery complete"的提示資訊。
7) 開啟資料庫:
ALTER DATABASE OPEN;
3. 資料庫臨時表空間的資料檔案的丟失
當資料庫的臨時表空間的資料檔案丟失也會引起ORA-01157的錯誤。因為資料庫對臨時表空間的資料檔案不會發生檢查點,所以這個時候資料庫照樣能夠開啟。這種情況下的解決方法是邏輯上刪除臨時表空間的資料檔案,並且重新增加一個新的臨時表空間的資料檔案。
例如:
SELECT * FROM DBA_OBJECTS ORDER BY OBJECT_NAME;
select * from dba_objects order by object_name;
* ERROR at line 1:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/Oracle/oradata/temp01.dbf'
ALTER DATABASE TEMPFILE ‘/Oracle/oradata/temp01.dbf‘ DROP;
SELECT TABLESPACE_NAME,FILE_NAME FROM DBA_TEMP_FILES;
ALTER TABLESPACE TEMP ADD TEMPFILE ‘/Oracle/oradata/temp01.dbf‘ SIZE 100M;
三.由於作業系統的問題或者第三方軟體的問題導致ORA-01157錯誤
1. 當使用vxfddstat去訪問快速I/O或者其它的應用,會獲得"Cannot open file"的錯誤,而Oracle會返回如下的錯誤:
ORA-01157: cannot identify data file 1 - file not found
ORA-01110: data file 1: ''
這個時候使用者應該去聯絡Veritas的技術支援,技術支援網站網址為。
2.在HP-UNIX的機器上,如果系統核心引數nflock設定不是足夠大的時候,這樣可能會使Oracle不能鎖定所需要的資料檔案而導致錯誤:
ORA-27086: skgfglk: unable to lock file - already in use
或者錯誤:
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-0110: data file 4: '/Oracle/oradata/user01.dbf'
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28612416/viewspace-764494/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 失誤刪掉資料檔案後,刪除表空間操作Oracle
- 誤刪oracle資料庫表空間檔案Oracle資料庫
- oracle刪除(釋放)資料檔案/表空間流程Oracle
- oracle 小議如何從表空間 刪除 資料檔案Oracle
- 如何正確的刪除表空間資料檔案
- 刪除表空間和表空間包含的檔案
- UNDO表空間下的資料檔案被誤刪除後的處理方法
- 使用中undo表空間資料檔案被誤刪
- Oracle系統表空間剛新增的一個資料檔案誤刪除恢復處理Oracle
- Oracle 11g 表空間的誤刪除, 當前的控制檔案不識別該表空間Oracle
- Oracle 刪除使用者、表空間、資料檔案、使用者下的所有表Oracle
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- 刪除資料庫表空間資料庫
- [待整理]oracle10g刪除(釋放)資料檔案/表空間流程Oracle
- 錯誤新增表空間的資料檔案
- 刪除空資料檔案
- Oracle恢復誤刪除的資料檔案Oracle
- Oracle 表空間與資料檔案Oracle
- oracle 資料檔案表空間管理Oracle
- Oracle 刪除資料後釋放資料檔案所佔磁碟空間Oracle
- oracle 回收表空間的資料檔案大小Oracle
- ORACLE表空間的建立修改刪除Oracle
- oracle 表空間 資料檔案 筆記Oracle筆記
- Oracle 表空間資料檔案遷移Oracle
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 刪除表空間,資料檔案也刪除後,但作業系統層面上空閒空間不見增加。作業系統
- Oracle10gR2刪除誤新增的空檔案Oracle
- 非歸檔庫誤刪表空間後的資料恢復資料恢復
- flashback database 恢復誤刪除的表空間。Database
- Oracle資料庫表空間的資料檔案大小上限。Oracle資料庫
- Oracle 刪除資料檔案Oracle
- oracle刪除資料檔案Oracle
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- 【Oracle-資料庫維護】-刪除臨時表空間Oracle資料庫
- oracle 普通表空間資料檔案壞塊Oracle
- oracle級聯刪除使用者,刪除表空間Oracle
- 臨時表空間資料刪除問題
- linux下恢復誤刪除oracle的資料檔案LinuxOracle