Recover_Database

tthero00boo發表於2013-11-26


首先,recover是sqlplus命令

RECOVER

Syntax

RECOVER {general | managed | BEGIN BACKUP | END BACKUP}

where the general clause has the following syntax:

[AUTOMATIC] [FROM location]{ {full_database_recovery | partial_database_recovery | LOGFILE filename}
[ {TEST | ALLOW integer CORRUPTION | parallel_clause } [TEST | ALLOW integer CORRUPTION | parallel_clause ]...]| CONTINUE [DEFAULT] | CANCEL}

where the full_database_recovery clause has the following syntax:

[STANDBY] DATABASE [ {UNTIL {CANCEL | TIME date | CHANGE integer} | USING BACKUP CONTROLFILE}
[UNTIL {CANCEL | TIME date | CHANGE integer} | USING BACKUP CONTROLFILE]...]

where the partial_database_recovery clause has the following syntax:

{TABLESPACE tablespace [, tablespace]... | DATAFILE {filename | filenumber} [, filename | filenumber]... |
STANDBY {TABLESPACE tablespace [, tablespace]... | DATAFILE {filename | filenumber} [, filename | filenumber]...}
UNTIL [CONSISTENT WITH] CONTROLFILE }

where the parallel clause has the following syntax:

{ NOPARALLEL | PARALLEL [ integer ] }


/* Terms */

AUTOMATIC

Automatically generates the name of the next archived redo log file needed to continue the recovery operation. Oracle Database uses the LOG_ARCHIVE_DEST (or LOG_ARCHIVE_DEST_ 1) and LOG_ARCHIVE_FORMAT parameters (or their defaults) to generate the target redo log filename. If the file is found, the redo contained in that file is applied. If the file is not found, SQL*Plus prompts you for a filename, displaying a generated filename as a suggestion.

If you do not specify either AUTOMATIC or LOGFILE, SQL*Plus prompts you for a filename, suggesting the generated filename. You can either accept the generated filename or replace it with a fully qualified filename. You can save time by using the LOGFILE clause to specify the filename if you know the archived filename differs from the filename Oracle Database would generate.

FROM location

Specifies the location from which the archived redo log file group is read. The value of location must be a fully specified file location. If you omit this parameter, SQL*Plus assumes the archived redo log file group is in the location specified by the initialization parameter LOG_ARCHIVE_DEST or LOG_ARCHIVE_DEST_1. Do not specify FROM if you have set a file with SET LOGSOURCE.

DATABASE

Recovers the entire database.

UNTIL CANCEL

Specifies an incomplete, cancel-based recovery. Recovery proceeds by prompting you with suggested filenames of archived redo log files, and recovery completes when you specify CANCEL instead of a filename.

/* 指定不完全恢復,恢復到你input CANCEL為止, 一個一個讓你確認redo的名字,直到你敲了cancel */

UNTIL TIME

Specifies an incomplete, time-based recovery. Use single quotes, and the following format:

'YYYY-MM-DD:HH24:MI:SS'

UNTIL CHANGE

Specifies an incomplete, change-based recovery. integer is the number of the System Change Number (SCN) following the last change you wish to recover. For example, if you want to restore your database up to the transaction with an SCN of 9, you would specify UNTIL CHANGE 10.

/* 想恢復到9,要until change 10 ,recover until < 10 ... */

USING BACKUP CONTROLFILE

Specifies that a backup of the control file be used instead of the current control file.

TABLESPACE

Recovers a particular tablespace. tablespace is the name of a tablespace in the current database. You may recover up to 16 tablespaces in one statement.

DATAFILE

Recovers a particular datafile. You can specify any number of datafiles.

/*******************************************************************************************************/

Recovery 有 Media Recovery 和 Crash Recovery

Datafile media recovery is the most basic form of user-initiated data recovery. It can be used to recover from a lost or damaged current datafile, SPFILE or control file. It can also recover changes that were recorded in the redo logs but not in the datafiles for a tablespace that went offline without the OFFLINE NORMAL option. Datafile media recovery can be performed whether you use Recovery Manager or user-managed backup and recovery. (For user-managed backup and recovery, it is in fact the main option available.)

The need to restore a datafile from backup is not detected automatically. The first step in performing media recovery is to manually restore the datafile by copying it from a backup. Once a datafile has been restored from backup, however, the database does automatically detect that this datafile is out of date and must undergo media recovery.

/*  介質恢復是使用者發起的 ,
 current datafile, SPFILE or control file 壞了丟了都可以適用
 redo的資訊可以重新覆蓋到非正常離線的檔案上
 Rman和sqlplus命令,sql語句都可以支援
 
 不會自動幫你找備份的檔案
 首先你必須自己從備份cp一個回來
 然後就能自動檢測需不需要介質恢復
*/
Several situations force you to perform media recovery:

You restore a backup of a datafile.

You restore a backup control file (even if all datafiles are current).

A datafile is taken offline (either by you or automatically by the database) without the OFFLINE NORMAL option.

For a datafile to be available for media recovery, one of two things must be true:

The database that the datafile belongs to must not be open;

or

The specific datafile needing recovery must be offline, if the database is open.

A datafile that needs media recovery cannot be brought online until media recovery has been completed. A database cannot be opened if any of the online datafiles needs media recovery.

/*  以下情況,迫使你要執行介質恢復:
  舊的備份覆蓋了當前檔案
  一個檔案被不正常的離線了
 想做介質恢復,必須:
  資料庫沒有開啟  或者
  資料庫是開啟的, 檔案是離線的
*/
The crash recovery process is a special form of recovery, which happens the first time an Oracle database instance
is started after a crash (or SHUTDOWN ABORT). In crash recovery, the goal is to bring the datafiles to a
transaction-consistent state, preserving all committed changes up to the point when the instance failed.

/*  崩潰恢復是一種特殊形式的恢復
 在例項崩了之後的第一次開啟庫的時候被髮起
 目標是把資料庫拉到一個事務級別一致性的狀態
 保證崩了之前的所有提交都有效
*/

However, there are a number of important differences between the two:

Media recovery must be explicitly invoked by a user. The database will not run media recovery on its own.

Media recovery applies needed changes to datafiles that have been restored from backup, not to online datafiles left over after a crash.

Media recovery must use archived logs as well as the online logs, to find changes reaching back to the time of the datafile backup.

/*  雖然都是為了保證資料完整性,兩者的區別還是很多的
 
 介質恢復必須顯式的由使用者發起 ,不會自動執行介質恢復
 介質恢復只是負責把舊的補齊成和當前差不多,如果壞了之前還是crash的,不管崩了那一下的損失
 崩潰恢復用online redo, 介質恢復除了用online redo還要用archived logs
 ( 非歸檔模式是可以做介質恢復的,但是視窗很小,
   歸檔模式也是要用online redo的,而且當一個seq#既有redo又有archive的時候,會優先redo)
 crash recovery 永遠不會使用archived logs
*/

 

 

/* ARCHIVELOG 模式下的完全恢復 */

 假定資料庫故障沒有損害當前每個聯機重做日誌組中的所有成員和未備份的任何歸
檔的重做日誌,那麼我們可以在ARCHIVELOG 模式下恢復故障點的資料庫備份。如果
丟失了歸檔的重做日誌或聯機重做日誌,就需要執行某些形式的時間點恢復,後面將討
論時間點恢復問題。此外,如果丟失了當前控制檔案的所有副本,就需要恢復控制檔案
並執行不完全恢復。

 執行下面的步驟可以在ARCHIVELOG 模式下從資料庫的一個備份中執行資料庫的
完全恢復:

 (1)  從備份中還原所有資料庫資料檔案。
 (2)  還原所有備份的歸檔的重做日誌。
 (3)  載入資料庫(使用startup mount 命令)。
 (4)  恢復資料庫(使用recover database 命令)。
 (5) Oracle 提示您應用歸檔的重做日誌中的重做。在提示符下只需要簡單地輸入
AUTO ,Oracle 會自動應用所有重做日誌。
 (6)  一旦應用了所有重做日誌,就可以開啟恢復的資料庫( 使用alter database open
命令) 。

/* ARCHIVELOG 模式下的表空間恢復和資料檔案恢復 */

 在資料庫載入或資料庫開啟時可以執行表空間恢復和資料檔案恢復。按照下面的步
驟可以在Oracle 資料庫開啟時執行一個表空間恢復:

 (1)  使表空間離線(使用alter tablespace offline命令)。
 (2)  還原與要恢復的表空間相關聯的所有資料檔案。
 (3)  聯機恢復表空間(使用recover tablespace 命令)。
 (4)  一旦完成了恢復,使表空間聯機(使用alter tablespace online 命令)。

 正如可以恢復表空間一樣,還可以恢復指定的資料檔案。這樣做的優點是可以保持
表空間聯機。在恢復程式期間僅僅是駐留在離線資料檔案中的資料不可用,資料庫的其
他部分在恢復期間都是可用的。資料檔案恢復的基本步驟為:

 (1)  使資料檔案離線(使用alter database datafile 'file_name ' offline 命令)。
 (2)  還原所有要恢復的資料檔案。
 (3)  聯機恢復表空間(使用recover datafile 命令)。
 (4)  一旦完成了恢復,就使資料檔案聯機(使用alter database datafile 'file_name' online
命令)。

/* ARCHIVELOG 模式下的時間點恢復 */

 ARCHIVELOG 模式的另一個優點是可以將資料庫恢復到指定時間點,而不是恢復
到發生故障時的狀態。在建立克隆資料庫時(可能出於測試和報告的原因而建立克隆資料
庫),或者在主要的應用程式錯誤和使用者錯誤情況中,經常會用到上述功能。我們既可以
將資料庫恢復到指定時間點,也可以恢復到指定資料庫SCN 的狀態。

 如果要恢復某個時間點的表空間,則需要恢復相同時間點的整個資料庫(除非執行表
空間的時間點恢復,這是另一種恢復方式)。例如,假設您有一個賬戶管理資料庫,大部
分資料位於ACCT 表空間中,並且您打算恢復兩天前的資料庫。因為其餘的表空間(例如
SYSTEM 、TEMP 和RBS 表空間)仍然與當前時間點一致,所以您不能只是還原ACCT
表空間並將其恢復到兩天前的時間點,否則由於資料庫的不一致,資料庫將開啟失敗。

 執行下面的步驟可以恢復某一時間點的資料庫:

 (1)  從一個備份中恢復所有資料庫資料檔案,這個備份在要恢復資料庫的時間點之
前結束。
 (2)  使用recover database until time '01-01-2010 21:00:00'命令並且應用所需的重做日
志,恢復指定時間點的資料庫。
 (3)  一旦完成恢復,就使用alter database open resetlogs 命令開啟資料庫。

 也可以執行下面的步驟,選擇使用SCN 號恢復資料庫:

 (1)  從一個備份中恢復所有資料庫資料檔案,這個備份在要恢復資料庫的時間點之
前結束。
 (2)  使用recover database until change '221122' 命令並且應用所需的重做日誌,恢復指
定系統更改號(SCN) 的資料庫。
 (3)  一旦完成恢復,則開啟資料庫。

 進一步來說,可以應用資料庫的更改並在應用指定的歸檔的重做日誌之後手動取
消程式:

 (1)  從一個備份中恢復所有資料庫資料檔案,這個備份在要恢復資料庫的時間點之
前結束。
 (2)  使用recover database until cancel 命令並且應用所需的重做日誌,恢復指定時間
點的資料庫。當應用了最後一個歸檔的重做日誌後,可以簡單地執行cancel 命令來結束
重做日誌應用。
 (3)  一旦完成恢復,則開啟資料庫。

執行時間點恢復( 或者有關這一問題的任何恢復) 時一定要牢記資料庫的一致性概
念。如果要恢復給定時間點的資料庫,就必須使用在這個時間點之前結束的備份來恢復
資料庫,還必須利用所有歸檔的重做日誌(可能還需要剩餘的聯機重做日誌)來完成恢復。

 

/***********************************************************************************/

1  recover database using backup controlfile
2  recover database until cancel
3  recover database using backup controlfile until cancel;
4  recover database until cancel using backup controlfile;

recover database的四條語句區別:

1. recover database using backup controlfile

 如果丟失當前控制檔案,用冷備份的控制檔案恢復的時候,用來告訴oracle,不要以controlfile中的scn作為恢復的終點;
 
2. recover database until cancel
 
如果丟失current/active redo的時候,手動指定終點。
 
3. recover database using backup controlfile until cancel;
 
 如果丟失當前controlfile並且current/active redo都丟失,會先去自動應用歸檔日誌,可以實現最大的恢復;
 
4. recover database until cancel using backup controlfile;
 
如果丟失當前controlfile並且current/active redo都丟失,以舊的redo中的scn為恢復終點。因為沒有應用歸檔日誌,所有會丟失資料。
要理解recover database using backup controlfile,先理解 recover database,也就是說,不加using backup controlfile的情況。
在普通的recover database 或者 recover tablespace, recover datafile時, Oracle會以當前controlfile所紀錄的SCN為準,利用archive log和 redo log的redo entry, 把相關的datafile 的 block恢復到“當前controlfile所紀錄的SCN”
而某些情況下,Oracle需要把資料恢復到比當前controlfile所紀錄的SCN還要靠後的位置(比如說,control file是backup controlfile , 或者 controlfile是根據trace create的。),這時候,就需要用using backup controlfile.   恢復就不會受“當前controlfile所記錄的SCN”的限制。這時候的限制就來自於你的語句(until time , until scn),或者可用的archive log(until cancel) ...
結果如下:
如果控制檔案丟失,restore備份的控制檔案後,則必須使用using backup controlfile選項。而until cancel則是不完全恢復,即current/active redo丟失,或者從restore資料庫後某個歸檔檔案缺失,則終止。

結論:
1、適用於restore舊的控制檔案,且歸檔日誌和cuurrent/active redo都沒有丟失情況。如果一切歸檔日誌和線上日誌完好,可以不丟失資料。類似於recover database
2、當前控制檔案未丟失(不需要restore舊的控制檔案),此時有歸檔日誌或者current/active log有丟失情況下,則終止。最大可能恢復資料

可以得出結果,如果有舊的資料庫備份,在歸檔日誌和線上日誌全部儲存完好的情況下,使用recover database或recover database using backup controlfile。則不丟失資料
如果存在備份資料檔案restore後,歸檔日誌或者線上日誌(active、current)丟失情況下,則可以恢復到丟失的前一個歸檔日誌

until cancel就是不完全恢復
需要alter database open resetlogs
資料庫開啟後需要理解做一個全庫備份

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28859270/viewspace-1061158/,如需轉載,請註明出處,否則將追究法律責任。