Oracle

啟動數據庫時得到 ORA-01157

  • June 13, 2020

我創建了一個數據文件/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$ 表以獲取可能的文件列表。

在這種情況下,您可以重新創建數據文件所屬的表空間:

  1. 如果數據庫已關閉,請掛載它。
STARTUP MOUNT;
  1. 離線刪除數據文件。
ALTER DATABASE DATAFILE 'full_path_file_name' OFFLINE DROP;
  1. 如果數據庫處於掛載狀態,請打開它。
ALTER DATABASE OPEN;
  1. 刪除使用者表空間。
DROP TABLESPACE tablespace_name INCLUDING CONTENTS;
  1. 重新創建表空間。

我已經測試了上述步驟來模擬您的問題,使用 /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; 

引用自:https://dba.stackexchange.com/questions/128268