DBF 文件 ORACLE 數據庫恢復


DBF 文件 ORACLE 數據庫恢復

清·魏源《庸易通義》:“至道問學之有知無行,分溫故為存心,知新為致知,而敦厚為存心,崇禮為致知,此皆百密一疏。”

起因

在我們的生產活動中,意外總是在不經意間發生。那天一個安裝有 oracle 數據庫的盤符不小心被格式化了,好幾個項目都炸了。不過還好有備份,不過只有 .DBF 文件和幾個日志文件:

//數據庫系統相關
REDO01.LOG
REDO02.LOG
REDO03.LOG

SYSTEM01.DBF
UNDOTBS01.DBF
SYSAUX01.DBF
USERS01.DBF

//項目相關
xxx.DBF

解決

前期准備

  1. 重新安裝和之前一樣的數據庫版本、實例名都和之前的一致;
  2. 編寫創建控制文件 CONTROLFILE 的命令。

控制文件(Control File)是Oracle的物理文件之一,它記錄了數據庫的名字、數據文件的位置等信息。控制文件的重要性在於,一旦控制文件損壞,數據庫將會宕機。如果沒有數據庫的備份和歸檔日志文件,數據庫將無法恢復。因此,我們應該多路鏡像控制文件(Multiplex Control Files),並把每個鏡像的控制文件分布在不同的物理磁盤。根據經驗,控制文件多路鏡像以后,幾個控制文件同時壞掉的可能性幾乎為零。控制文件管理的重心是重在預防,而不是亡羊補牢!

控制文件實例:

CREATE CONTROLFILE REUSE DATABASE "數據庫名(orcl)" NORESETLOGS  ARCHIVELOG
      MAXLOGFILES 16
      MAXLOGMEMBERS 3
      MAXDATAFILES 100
      MAXINSTANCES 8
      MAXLOGHISTORY 454
LOGFILE
    GROUP 1 '需要恢復的日志文件路徑(E:\oradata\orcl\)REDO01.LOG'  SIZE 50M,
    GROUP 2 '同上\REDO02.LOG'  SIZE 50M,
    GROUP 3 '同上\REDO03.LOG'  SIZE 50M
DATAFILE(數據文件)
	-- 系統相關
    '需要恢復的數據文件路徑(E:\oradata\orcl\)SYSTEM01.DBF',
    '需要恢復的數據文件路徑(E:\oradata\orcl\)UNDOTBS01.DBF',
    '需要恢復的數據文件路徑(E:\oradata\orcl\)SYSAUX01.DBF',
    '需要恢復的數據文件路徑(E:\oradata\orcl\)USERS01.DBF',
    -- 用戶數據相關
    '需要恢復的數據文件路徑(E:\oradata\orcl\)TEST01.DBF',
    '需要恢復的數據文件路徑(E:\oradata\orcl\)TEST02.DBF'
    'CHARACTER SET ZHS16GBK;

操作步驟

1.進入 cmd 輸入命令:

sqlplus

然后以數據庫管理員身份登錄系統,輸入:

sys / as sysdba

輸入命令回車,下一步輸入密碼即可進入到數據庫命令行模式。
2.備份控制文件到 trace 文件,輸入命令:

alter database backup controlfile to trace;

3.停止數據庫,輸入命令:

shutdown immediate;

4.以 nomount 狀態啟動數據庫,輸入命令:

startup nomount;

5.執行創建控制文件的命令,輸入前期准備好的創建控制文件的命令:
6.恢復數據庫,輸入命令:

recover database;

7.將數據庫從 mount 狀態切換到 open 狀態,這時就是使用數據庫了,輸入命令:

alter database open;

oracle數據庫啟動分三個步驟 nomount mount open startup是數據庫從開始階段的啟動du,需要經過上述zhi三個步dao驟 alter database open是數據庫處於mount狀態,從mount狀態打開數據庫的命令

至此,dbf 文件恢復 oracle 數據庫就完成了。祝君好運!

期間遇到的問題

有問題不要害怕,一個一個去解決它,從中汲取養料,相信自己。
問題一
數據庫恢復成功后,連接數據庫遇到

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aNrFPOfC-1609941209785)(https://cdn.jsdelivr.net/gh/filess/img10@main/2021/01/06/1609939139070-3baeea76-c41a-48f7-b36b-fb1c3f3f6ce0.png)]

因為歸檔文件的空間滿了。
解決一
增加歸檔日志空間或者刪除歸檔日志(謹慎操作),可同時操作。
1.增加歸檔日志空間:

//查看當前歸檔空間大小
select * from v$recovery_file_dest; 
//相應增加歸檔日志空間大小
alter system set db_recovery_file_dest_size=20G scope=both;

2.刪除歸檔日志

//重新打開一個 cmd 窗口,輸入命令:進入 rman
rman target / 
//刪除所有的歸檔日志
delete archivelog all;

問題二
ORA-00379: no free buffers available in buffer pool DEFAULT for block size 16K
緩沖池 DEFAULT 中無法提供 16K 塊大小的空閑緩沖區
解決二

  1. 查看 16K 塊大小
show parameter db_16k_cache_size

2.設置 16K 塊緩沖區大小

alter system set db_16k_cache_size=10m;

問題三
ORA-12516
ORA-12516: TNS: 監聽程序找不到符合協議堆棧要求的可用處理程'
解決三
1.查看數據庫現有的進程(process)數是否已經達到參數 processes 的大小;當前會話數量(session)是否達到參數 sessions 的大小。

//獲取當前數據庫所有的進程數量
select count(*) from v$process;
//獲取當前數據庫所有會話數量
select count(*) from v$session;
//獲取 processes 大小
show parameter processes;
//獲取 sessions 大小
show parameter sessions

2.修改 processes 值和 sessions 值

alter system set processes=300 scope=spfile;
alter system set sessions=335 scope=spfile;

3.重啟數據庫生效

shutdown immediate; or shutdown
startup

公眾號“手機APP軟件知識分享庫”,原創文章第一時間推送。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM