1. 程式人生 > >Oracle控制檔案的恢復

Oracle控制檔案的恢復

                                                                                                                       轉載自https://blog.csdn.net/yanfalee/article/details/52638271

控制檔案包含資料庫的結構資訊,這些檔案對資料庫而言至關重要。如若丟失控制檔案,則不能開啟資料庫。

控制檔案的丟失分兩種。第一種是部分控制檔案丟失(只丟失了1個或者2個);另外一種是所有控制檔案都丟失。

預設情況下,資料庫會自動生成3個控制檔案,但是會在同一目錄下,本著資料安全的需求,強烈建議將

3個控制檔案放在不同的磁盤裡。

移動控制檔案的方法為:

SQL> alter system set control_files=

'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL',

'd:\ORACLE\ORCL\CONTROL02.CTL',

'e:\ORACLE\ORCL\CONTROL03.CTL'

scope=spfile;

因為控制檔案和資料且檔案一樣,不能再聯機狀態下移動。故需要先shutdown 資料庫,然後進行移動,最後Startup即可。

1.部分控制檔案丟失後的恢復

同樣的,先shutdown,然後刪除一個控制檔案CONTROL03.CTL ,重啟資料庫報錯。

SQL> startup

ORA-32004: obsolete or deprecatedparameter(s) specified for RDBMS instance

ORACLE 例程已經啟動。

Total System Global Area  778387456 bytes

Fixed Size                  1374808 bytes

Variable Size             260048296 bytes

Database Buffers          511705088 bytes

Redo Buffers                5259264 bytes

ORA-00205: ?????????, ??????, ???????

首先要解決的問題是ORA-00205:?????????, ??????, ???????

?表明字符集除了問題。解決方法如下:

SQL> Alter session setnls_language=american;

Session altered.

SQL> alter database mount;

alter database mount

ERROR at line 1:

ORA-00205: error in identifying controlfile, check alert log for more info

隱刀資料庫進入mount狀態,報不能識別控制檔案的錯誤。將現有的控制檔案CONTROL01.CTL複製一份改名為CONTROL03.CTL

對恢復資料庫提示沒有進行mount狀態。

SQL> recover database;

ORA-01507: database not mounte

啟動資料庫到mount狀態下

SQL> alter database mount;

Database altered.

然後對恢復資料庫

SQL> recover database;

ORA-00283: recovery session canceled due toerrors

ORA-00264: no recovery required

由於是正常關閉資料庫進行的測試,資料庫不需要執行恢復。

SQL> conn sys/oracle as sysdba;

已連線。

SQL> alter database open;

資料庫已更改。

SQL> select * from global_name;

GLOBAL_NAME

-----------------------------------------------------------------------------

ORCL

2.所有控制檔案丟失後的恢復

2.1方法一:重新建立控制檔案來恢復

用這種方法也有2種方式來實現,第一種是直接自己手動編寫指令碼來建立控制檔案,但前提是對資料庫的重做日誌、資料檔案的目錄要非常清楚;另外一種方式是在資料庫正常狀態時,備份一下建立控制檔案指令碼到跟蹤檔案,這樣建立控制檔案的所有指令碼資訊都會很完整,就無需手工編寫了,但前提自然是管理員要有覺悟,提前備份一份建立控制檔案到trance檔案。

我們直接測試第二種方式:

我們檢視一下生成的trace檔案的目錄。

SQL> show parameter  user_dump_dest;

NAME            TYPE        VALUE

------------------------ -----------   ----------------------

user_dump_dest     string     c:\app\administrator\diag\rdbms\orcl\orcl\trace

然後是備份建立控制檔案的指令碼到跟蹤檔案中

SQL> Alter database backup controlfileto trace;

資料庫已更改。

我們關閉資料庫,然後刪除所有的控制檔案。

然後是到c:\app\administrator\diag\rdbms\orcl\orcl\trace目錄中尋找剛才生成有建立控制檔案指令碼的跟蹤檔案。經過一一尋找驗證之後,發現是orcl_ora_3696.trc這個檔案。(此處要注意:在實際環境下,應該是執行上述命令之後,立即儲存到特定目錄中已被恢復使用)。

接下來我們開啟這個trace檔案,可以找到相關的指令碼資訊:

STARTUP NOMOUNT

CREATE CONTROLFILE REUSEDATABASE "ORCL" NORESETLOGS ARCHIVELOG

   MAXLOGFILES 16

   MAXLOGMEMBERS 3

   MAXDATAFILES 100

   MAXINSTANCES 8

   MAXLOGHISTORY 292

LOGFILE

 GROUP 1 (

  'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG',

   'C:\APP\ADMINISTRATOR\ORADATA\XC2\REDO01.LOG'

 ) SIZE 50M BLOCKSIZE 512,

 GROUP 2 (

  'C:\APP\ADMINISTRATOR\ORADATA\XC2\REDO02.LOG',

  'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG'

 ) SIZE 50M BLOCKSIZE 512,

 GROUP 3 (

   'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG',

  'C:\APP\ADMINISTRATOR\ORADATA\XC2\REDO03.LOG'

 ) SIZE 50M BLOCKSIZE 512

DATAFILE

'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF',

'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF',

'C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF',

 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF',

'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM02.DBF',

'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX02.DBF',

'C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS02.DBF',

'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS02.DBF',

'C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF'

CHARACTER SET ZHS16GBK;

執行之後會提示:控制檔案已建立。此指令碼還需注意開頭部分的STARTUP NOMOUNT 命令,必須在nomount狀態執行才能建立控制檔案。

SQL> VARIABLE RECNO NUMBER;

SQL> EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP

','ON');

PL/SQL 過程已成功完成。

此處是執行一個PL/SQL 的儲存過程,目的是執行DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE包,讓RMAN自動備份控制檔案。

當然此處我們是手工備份與恢復,所以不進行如上操作也可以。

接下來我們就開始恢復資料庫

SQL> recover database;

ORA-00283: recovery session canceled due toerrors

ORA-00264: no recovery required

此時根據提示可知,資料庫無需恢復。

SQL> alter database open;

Database altered.

SQL> conn sys/oracle as sysdba;

已連線。

SQL> select * from global_name;

GLOBAL_NAME

-------------------------------------------------------------------------------

ORCL

目前已是正常狀態了。

方法二:通過備份的控制檔案進行恢復

同樣的,先shutdown,然後刪除所有的控制檔案,重啟資料庫報錯。

SQL> startup

ORA-32004: obsolete or deprecatedparameter(s) specified for RDBMS instance

ORACLE 例程已經啟動。

Total System Global Area  778387456 bytes

Fixed Size                  1374808 bytes

Variable Size             260048296 bytes

Database Buffers          511705088 bytes

Redo Buffers                5259264 bytes

ORA-00205: ?????????, ??????, ???????

先修改字符集的回話語言。

SQL> Alter session setnls_language=american;

Session altered.

SQL> alter database mount;

alter database mount

ERROR at line 1:

ORA-00205: error in identifying controlfile, check alert log for more info

提示不能識別控制檔案,這時所有的控制檔案都已丟失,只能依靠備份的控制檔案,將之前備份的控制檔案CONTROL02.BAK改名複製到控制檔案原目錄中。

如若不知道3個控制檔案的原目錄,可以通過警告日誌alertORCL.log來檢視。

執行命令show parameter background_dump_dest,檢視警告日誌的目錄。

SQL>show parameter background_dump_dest;

NAME                                 TYPE

----------------------------------------------------------

VALUE

------------------------------

background_dump_dest                 string

c:\app\administrator\diag\rdbm

s\orcl\orcl\trace

開啟警告日誌,在最後看到如下資訊:

Thu May23 17:12:21 2013

ORA-00210:cannot open the specified control file

ORA-00202:control file: 'C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL'

ORA-27041:unable to open file

OSD-04002:無法開啟檔案

O/S-Error:(OS 2) 系統找不到指定的檔案。

ORA-00210:cannot open the specified control file

ORA-00202:control file: 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL03.CTL'

ORA-27041:unable to open file

OSD-04002:無法開啟檔案

O/S-Error:(OS 2) 系統找不到指定的檔案。

ORA-00210:cannot open the specified control file

ORA-00202:control file: 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL'

ORA-27041:unable to open file

OSD-04002:無法開啟檔案

O/S-Error:(OS 2) 系統找不到指定的檔案。

ORA-205signalled during: alter database mount...

由此可知;3個控制檔案的目錄。

改名複製完控制檔案之後,啟動資料庫到mount狀態,如後恢復。

SQL> recover database using backupcontrolfile

ORA-00911: invalid character

出現上述問題:原因是controlfile後面的分號是中文模式下輸入導致的,千萬注意!

恢復資料庫

SQL> recover database;

ORA-00283: recovery session canceled due toerrors

ORA-01610: recovery using the BACKUPCONTROLFILE option must be done

由上可知必須使用控制檔案恢復。

SQL> recover database using backupcontrolfile;

ORA-00279: change 2426235 generated at05/23/2013 14:31:12 needed for thread 1

ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000068_0806146542.0001

ORA-00280: change 2426235 for thread 1 isin sequence #68

Specify log: {<RET>=suggested |filename | AUTO | CANCEL}

Auto(此處可選擇自動尋找歸檔日誌)

ORA-00279: change 2433122 generated at05/24/2013 10:38:10 needed for thread 1

ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000069_0806146542.0001

ORA-00280: change 2433122 for thread 1 isin sequence #69

ORA-00278: log file'C:\ORACLE\ORCL\ARCH\ARC0000000068_0806146542.0001' no

longer needed for this recovery

ORA-00279: change 2435842 generated at05/24/2013 13:14:00 needed for thread 1

ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000070_0806146542.0001

ORA-00280: change 2435842 for thread 1 isin sequence #70

ORA-00278: log file'C:\ORACLE\ORCL\ARCH\ARC0000000069_0806146542.0001' no

longer needed for this recovery

再執行一次恢復命令

SQL> recover database using backupcontrolfile;

ORA-00279: change 2459108 generated at05/24/2013 13:50:09 needed for thread 1

ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000071_0806146542.0001

ORA-00280: change 2459108 for thread 1 isin sequence #71

Specify log: {<RET>=suggested |filename | AUTO | CANCEL}

C:\app\Administrator\oradata\orcl\REDO01.LOG(此處是提示要尋找標號為71的歸檔日誌,但是開啟歸檔日誌目錄發現最大的編號才是70,說明編號為71的歸檔資訊還在redolog裡面,指定正在使用的redolog目錄即可。又因為目前不知道正在使用的redolog是哪個檔案,此處是先從REDO01.LOG開始嘗試)

ORA-00310: archived log contains sequence70; sequence 71 required

ORA-00334: archived log:'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'

SQL> recover database using backupcontrolfile;

ORA-00279: change 2459108 generated at05/24/2013 13:50:09 needed for thread 1

ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000071_0806146542.0001

ORA-00280: change 2459108 for thread 1 isin sequence #71

Specify log: {<RET>=suggested |filename | AUTO | CANCEL}

C:\app\Administrator\oradata\orcl\REDO02.LOG(嘗試失敗之後,換2號重做日誌,提示成功)

Log applied.

Media recovery complete.

改變資料庫為open狀態:

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01589: must use RESETLOGS or NORESETLOGSoption for database open

提示錯誤:啟動open狀態必須設定引數RESETLOGS or NORESETLOGS

使用resetlogs 會導致歸檔日誌的編號歸零,重新從1開始編號。使用noresetlogs則不會打斷原有的歸檔日誌編號的順序而繼續編號。

SQL> alter database open noresetlogs;

alter database open noresetlogs

ERROR at line 1:

相關推薦

oracle-控制檔案備份和恢復

控制檔案(control file)是資料庫重要的檔案,一旦其丟失將導致資料庫宕機。控制檔案在資料庫的MOUNT階段被讀取,它記錄著資料庫許多重要的資訊。因此控制檔案的日常檢查以及一些常規故障恢復方法就是需要我們必須要掌握的。 一、控制檔案的查詢 -->通過引數查詢

Oracle控制檔案恢復

                                                                                                                       轉載自https://blog.csd

ARCHIVELOG模式下使用者管理恢復控制檔案—使用二進位制控制檔案恢復

在生產資料庫中,控制檔案一般多路複用的。每個控制檔案的內容是一模一樣的,只要其中有一個沒有丟失,那麼就可以複製一下,改一下名字就可以用了。   首先在資料庫中備份執行一個二進位制的控制檔案,也可以使用作業系統的命令直接複製控制檔案來備份。 [sql]

Oracle控制檔案和日誌檔案管理

控制檔案管理 1、控制檔案的特徵:二進位制檔案 2、控制檔案的內容: 資料庫名稱和sid標誌; 資料檔案和日誌檔案列表(包含檔名稱和對應的路徑資訊); 資料庫建立的時間戳; 表空間資訊; 當前重做日誌檔案序列號; 歸檔日誌資訊; 檢查點資訊; 回滾段(undo segmen

Oracle控制檔案

轉載網站:Oracle技術圈 轉載地址:https://www.oraclejsq.com/oraclegl/010300654.html Oracle控制檔案 Oracle控制檔案是Oracle資料庫儲存資訊的重要檔案,它是一個二進位制檔案,控制檔案主要用來存放資料庫名字、資料檔案位置等資訊的檔案。O

ORACLE控制檔案備份

1、將控制檔案備份為二進位制檔案 SQL>alter database backup controlfile to 'i:\oracle\backup\control.bkp'; 2、將控制檔案備份為文字檔案(備份到oracle\base\admin\sid\udump目錄下的跟蹤檔案中,將在跟蹤檔案

Oracle資料庫檔案恢復與備份思路

轉載地址:http://soft.chinabyte.com/database/169/12619169.shtml 任何資料庫在長期使用過程中,都會存在一定的安全隱患。對於資料庫管理員來說不能僅寄希望於計算機作業系統的安全執行,而是要建立一整套的資料庫備份與恢復機制。當

oracle備份之rman_恢復控制檔案

測試環境:redhat 5.5  oracle 11g RMAN> backup database; Starting backup at 21-DEC-17 using channel ORA_DISK_1 channel ORA_DISK_1: starting full d

Oracle 基於備份控制檔案恢復(unsing backup controlfile)

    通常在當前控制檔案丟失,或者當前的控制檔案與需要恢復的控制檔案不一致的情況下,我們需要重新建立一個控制檔案或者使用 unsingbackup controlfile方式來恢復控制檔案。說簡單點,只要是備份的控制檔案與當前的控制檔案不一致進行恢復資料庫,就需要使用到 u

Oracle備份恢復-控制檔案損壞的各種場景恢復專題

1、檢視資料庫基本資訊和資料庫狀態        SQL> show parameter db_name NAME                                 TYPE        VALUE ------------------------------------ -------

oracle恢復控制檔案

資料庫在執行過程當中,可能會處於某種原因導致控制檔案丟失或者損壞,資料庫檔案記錄著資料庫的結構資訊,包括資料檔案,歸檔日誌檔案等資料庫的重要資訊,控制檔案丟失,直接會導致資料庫宕機。這篇部落格會模擬各種控制檔案丟失的情況,來恢復資料庫的正常使用。 丟失部分控制檔案 控制檔

ARCHIVELOG模式下使用者管理恢復控制檔案—使用trace檔案重建控制檔案

首先生成控制檔案的sql指令碼 [sql] view plain copy print ? SQL> alter database backup contr

ARCHIVELOG模式下使用者管理的不完全恢復—基於備份控制檔案的不完全恢復

基於備份控制檔案的恢復只要適用於以下情況:表空間被意外刪除;所有控制檔案全部損壞。   先關閉資料庫,執行一次全庫冷備份。 [sql] view plain copy print ?

Oracle 查看錶空間的名稱及大小 表空間物理檔案的名稱及大小 回滾段名稱及大小 表空間的使用情況 控制檔案 日誌檔案 歸檔方式

  首頁 > 資料庫 > Oracle > Oracle 查看錶空間的大小及使用情況sql語句 Oracle 查看錶空間的大小及使用情況sql語句 Oracle 作者:454629049&n

Oracle 快照控制檔案(snapshot control file)

  聽說過Oracle 控制檔案,還有快照控制檔案這個說法呢?沒錯,儘管快照控制檔案很少被提及,但確實是存在,只不過在使用RMAN時這個快照控制檔案被使用。回顧一下 Oracle 控制檔案,我們知道控制檔案是Oracle體系結構中的重要組成部分之一,記錄了當前資料庫的結構資訊,同

linux平臺通過lsof命令恢復被誤刪的oracle資料檔案

背景:測試環境suse12作業系統,開發人員誤刪了/home/oracle下面的資料檔案             oracle狀態看起來一切正常,但資料檔案已經被rm掉。 恢復方法:通過lsof命令找到被刪除的資料檔案,拷貝出來

Oracle dump檔案匯入/恢復

在window下,還原Dump資料檔案。 1、建立使用者  在SQL視窗執行如下語句: CREATE USER 使用者名稱 IDENTIFIED BY 密碼 DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP 2、授

Oracle 11g ORA-03113故障,重建控制檔案

Windows環境下的Oracle 11g在一次關機後,無法正常啟動,且無法啟動到mount狀態,一直提示: ORA-03113: end-of-file on communication channel Process ID: 4276 Session ID: 1286S

Oracle dmp檔案備份和恢復

1.備份資料庫 backup.bat @ECHO OFF set user=root set password=123456 set sid=ORCL set logfile=./backup_20180912.log set backupfile=C:\temp\TES

oracle資料庫控制檔案的認識

控制檔案(mount階段被讀取,open階段一直被呼叫)控制檔案的內容及管理:·存放資料庫的物理資訊(資料庫的名字,ID,建立時間,版本,角色)·存放聯機日誌和資料檔案的指標·記錄聯機日誌中包含的red