啟動數據庫時得到 ORA-01157
我創建了一個數據文件
/tmp/encrypted_ts.dbf
。當機器再次啟動時,數據文件不見了。當我開始它時,我得到了ORA-01157
,詳細資訊是:ORA-01157: cannot identify/lock data file 54 - see DBWR trace file ORA-01110: data file 54: '/tmp/encrypted_ts.dbf'
所以我跑了
alter database datafile 54 offline drop;
,我得到了ORA-01516
。如何再次啟動數據庫?
讓我告訴你甲骨文是怎麼說你的錯誤的。
ORA-01157: 無法辨識/鎖定數據文件字元串 - 請參閱 DBWR 跟踪文件
**原因:**後台程序要麼無法找到其中一個數據文件,要麼無法鎖定它,因為該文件已在使用中。數據庫將禁止訪問此文件,但其他文件不受影響。然而,打開數據庫的第一個實例將需要訪問所有線上數據文件。來自作業系統的伴隨錯誤描述了無法辨識文件的原因。
**行動:**讓作業系統使文件可用於數據庫。然後打開數據庫或執行
ALTER SYSTEM CHECK DATAFILES
.ORA-01516: 不存在的日誌文件、數據文件或臨時文件“字元串”
**原因:**試圖使用
ALTER DATABASE
重命名日誌文件、數據文件或臨時文件;或更改數據文件或臨時文件的屬性(例如,調整大小、自動擴展、線上或離線);或重新創建或移動數據文件。嘗試失敗,因為指定的文件不為數據庫的控製文件所知,或者不是請求支持的類型。**行動:**指定正確類型的現有文件的名稱或編號,視情況而定。檢查相關的 V$ 表以獲取可能的文件列表。
在這種情況下,您可以重新創建數據文件所屬的表空間:
- 如果數據庫已關閉,請掛載它。
STARTUP MOUNT;
- 離線刪除數據文件。
ALTER DATABASE DATAFILE 'full_path_file_name' OFFLINE DROP;
- 如果數據庫處於掛載狀態,請打開它。
ALTER DATABASE OPEN;
- 刪除使用者表空間。
DROP TABLESPACE tablespace_name INCLUDING CONTENTS;
- 重新創建表空間。
我已經測試了上述步驟來模擬您的問題,使用 /tmp 目錄中的數據文件創建了新的表空間,它對我來說非常有效。
我在 RAC 環境中發現了這個問題。
如果環境是
RAC
-real application cluster
,檢查數據文件是否在共享儲存中並且在所有節點中可見。這是一個範例,我的環境使用
ASM
-Automatic Storage Management
來儲存數據文件,但我的表空間使用者位於非共享文件系統中:一種方法是:
- 將數據文件作為副本備份到 ASM;
- 切換數據文件進行複制;
- 恢復數據文件。
注意:使其在文件可見的節點中。
使用表空間使用者的範例:
SQL> select file_id,file_name,tablespace_name from dba_data_files where tablespace_name = 'USERS'; FILE_ID FILE_NAME TABLESPACE ---------- ---------------------------------------------------------------------------------------------------- ---------- 29 /home/oracle/tbsusersdata_D-MOOTDB_I-1967025112_TS-USERS_FNO-29_6qv2k42g USERS
在 RMAN 中:
backup as copy datafile 29 format '+DATA/MOOTDB/DATAFILE/users01.dbf'; switch datafile 29 to copy; recover datafile 29;