完全恢複-介質恢複

來源:互聯網
上載者:User

標籤:

恢複階段

1、損壞或丟失檔案從備份中還原

2、從歸檔和線上記錄檔必要的被應用來改變資料,復原塊也在這時產生,這個稱為前滾或恢複緩衝

3、資料庫可能包含提交、不提交的改變資料

4、復原塊被使用於任何未提交的資料被復原,這個稱為復原或事務恢複

5、資料庫現在為恢複狀態

無開啟歸檔模式恢複

A、好處:

執行簡單,出錯率低

恢復就是還原所有的檔案花費的時間

B、不利:

資料丟失,必須手工應用

整個資料庫被還原到關閉備份的最後一個時間點

 

帶有重做記錄檔的備份非歸檔的恢複

SQL>SHUTDOWN ABORT

還原資料:

UNIX: cp /BACKUP/*  /databases/db01/ORADATA

NT: copy d:\disk1\backup\*.*  d:\disk1\data\

複製完成,開啟執行個體

CONN /AS SYSDBA

STARTUP

 

不帶有重做記錄檔的備份非歸檔的恢複

關閉資料庫

 shutdown immediate

還原資料檔案和控制檔案

資料檔案的恢複 cp /db01/backup/*dbf /ORADATA/*

控制檔案恢複 cp /db01/backup/*.ctl /ORADTA

沒有備份線上日誌,無法應用線上日誌

recover database until cancel

SQL> shutdown immediate;資料庫已經關閉。已經卸載資料庫。ORACLE 常式已經關閉。SQL> startup mount;ORACLE 常式已經啟動。Total System Global Area  612368384 bytesFixed Size                  1250428 bytesVariable Size             239078276 bytesDatabase Buffers          364904448 bytesRedo Buffers                7135232 bytes資料庫裝載完畢。SQL> alter database open;alter database open*第 1 行出現錯誤:ORA-00338: 日誌 1 (用於線程 1) 比控制檔案更新ORA-00312: 聯機日誌 1 線程 1: ‘D:\ORADATA\ORCL\REDO01.LOG‘SQL> recover database until cancel;完成介質恢複。SQL> alter database open;alter database open*第 1 行出現錯誤:ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項SQL> alter database open restlogs;alter database open restlogs                    *第 1 行出現錯誤:ORA-02288: 無效的 OPEN 模式SQL> alter database open resetlogs;資料庫已更改。

  

查看資料字典-哪個檔案需要恢複

 

V$RECOVER_FILE決定哪個檔案需要恢複V$ARCHIVED_LOG羅列全部的歸檔日誌V$RECOVERY_LOG羅列全部歸檔日誌需要恢複的SQL> create tablespace tbs datafile ‘/u01/test01.dbf‘ size 100M;資料表空間已建立。#在歸檔模式下alter DATABASE  datafile ‘/u01/test01.dbf‘ offline;#不在歸檔下alter DATABASE  datafile ‘/u01/test01.dbf‘ offline DROP ;SQL> select * from v$recover_file;FILE# ONLINE ONLINE_STA ERROR CHANGE# TIME---------- ---------- ---------- ---------- ---------- ---------------5 OFFLINE OFFLINE 1093567 05-4月 -15ERROR列有兩種可能為NULL錯誤為止如果恢複不需要OFFLINE NORMALCHANGE#列返回SCN從恢複開始例子闡述:歸檔模式下SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。我只有3組日誌組,最舊的會被替換掉。在查看v$recovery_logSQL> select * from v$recovery_log;   THREAD#  SEQUENCE# TIME           ARCHIVE_NAME---------- ---------- -------------- ------------------------------         1          3 02-4月 -15     D:\FLASH_RECOVERY_AREA\ORCL\AR                                     CHIVELOG\2015_04_06\O1_MF_1_3_                                     BL4WZX0Z_.ARC說明:v$log之前sequence=3的已經被替換了,只能在歸檔在恢複SQL> alter database datafile 7 online;alter database datafile 7 online*第 1 行出現錯誤:ORA-01113: 檔案 7 需要介質恢複ORA-01110: 資料檔案 7: ‘D:\ORADATA\ORCL\GULL01.DBF‘SQL> recover datafile 7;ORA-00279: 更改 1129093 (在 04/02/2015 21:26:50 產生) 對於線程 1 是必需的ORA-00289: 建議:D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_3_%U_.ARCORA-00280: 更改 1129093 (用於線程 1) 在序列 #3 中指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}auto已應用的日誌。完成介質恢複。SQL> alter database datafile 7 online;資料庫已更改。備忘說明:也可以使用 直接使用recover automatic datafile 7;再次把歸檔備份的另外的目錄下,可以採用指定歸檔檔案的位置恢複SQL> recover automatic datafile 7;ORA-00279: 更改 1143303 (在 04/06/2015 20:11:52 產生) 對於線程 1 是必需的ORA-00289: 建議:D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_%U_.ARCORA-00280: 更改 1143303 (用於線程 1) 在序列 #6 中ORA-00278: 此恢複不再需要記錄檔‘D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_BL4Y290Z_.ARC‘ORA-00308: 無法開啟歸檔日誌‘D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_BL4Y290Z_.ARC‘ORA-27041: 無法開啟檔案OSD-04002: 無法開啟檔案O/S-Error: (OS 2) 系統找不到指定的檔案。指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}filenameORA-00308: 無法開啟歸檔日誌 ‘filename‘ORA-27041: 無法開啟檔案OSD-04002: 無法開啟檔案O/S-Error: (OS 2) 系統找不到指定的檔案。指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\O1_MF_1_6_BL4Y290Z_.ARC已應用的日誌。完成介質恢複。SQL>



 

可以通過v$datafile_header的checkpoint_change#到v$archived_log.FIRST_CHANGE#和next_change#,確定需要恢複那些歸檔

  

RECOVER 命令的使用

A、在mount狀態下

recover [AUTOMATIC] database或recover [AUTOMATIC] datafile ‘/u01/test01.dbf‘;

B、資料庫開啟下的恢複

recover [AUTOMATIC] tablespace users或recover [AUTOMATIC] datafile 3;

AUTOMATIC自動應用歸檔日誌和重做記錄檔,不使用AUTOMATIC只會應用重做日誌

 

更改普通資料檔案(不是系統用的)的目錄
SQL> alter database datafile 7 offline;資料庫已更改。SQL> alter database rename file ‘D:\ORADATA\ORCL\GULL01.DBF‘ to ‘D:\ORADATA\GULL01.DBF‘  2  ;作業系統中拷貝檔案的指定的目錄SQL> recover datafile 7;完成介質恢複。SQL> alter database datafile 7 online;資料庫已更改。
系統檔案的恢複

在使用過程無法使系統資料檔案離線

SQL> alter database datafile 1 offline;alter database datafile 1 offline*第 1 行出現錯誤:ORA-01541: 系統資料表空間無法離線; 如有必要請關閉

 需要更改系統檔案system的路徑,只能在mount狀態下進行。

SQL> shutdown immediate;資料庫已經關閉。已經卸載資料庫。ORACLE 常式已經關閉。作業系統資料檔案拷貝SQL> startup mount;ORACLE 常式已經啟動。Total System Global Area  612368384 bytesFixed Size                  1250428 bytesVariable Size             234883972 bytesDatabase Buffers          369098752 bytesRedo Buffers                7135232 bytes資料庫裝載完畢。SQL> alter database datafile 1 offline;資料庫已更改。SQL> alter database rename file ‘D:\ORADATA\ORCL\SYSTEM01.DBF‘ to ‘D:\ORADATA\SYSTEM01.DBF‘;資料庫已更改。SQL> alter database datafile 1 oNline;資料庫已更改。SQL> alter database open;資料庫已更改。SQL>
資料檔案丟失無備份的恢複資料檔案

如資料庫關閉狀態下,資料庫MOUNT狀態下,使資料檔案(無備份)OFFLINE,開啟資料庫,使用者只能使用這個資料表空間。

如資料庫在開啟狀態,立即把對應的資料表空間offline狀態

 

SQL> alter TABLESPACE GULL OFFLINE IMMEDIATE;資料表空間已更改。SQL> select * from v$recover_file;     FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME---------- ------- ------- -------------------- ---------- --------------         7 OFFLINE OFFLINE FILE NOT FOUND                0         8 OFFLINE OFFLINE                         1147508 06-4月 -15SQL> alter database create datafile ‘D:\ORADATA\GULL01.DBF‘;資料庫已更改。SQL> select * from v$recover_file;     FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME---------- ------- ------- -------------------- ---------- --------------         7 OFFLINE OFFLINE UNKNOWN ERROR            579936 03-3月 -15         8 OFFLINE OFFLINE                         1147508 06-4月 -15歸檔檔案需要都在才能恢複SQL> recover automatic tablespace gull;資料表空間線上alter tablespace gull online;

  

唯讀資料表空間的恢複

1、備份之前的資料表空間是read-only,現在還是read-only。

這樣恢複不需要任何的redo log

SQL> alter tablespace gull read only;資料表空間已更改。把資料表空間的資料檔案gull01備份SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。把之前備份的gull01直接替換不需要做任何恢複就可以使用

  2、資料表空間現在是read-wirte,備份是通過read-only,需要應用redo和歸檔

 

SQL> create tablespace gull datafile ‘d:\oradata\gull01.dbf‘ size 20M;資料表空間已建立。SQL> alter tablespace gull read only;資料表空間已更改。備份資料檔案gull01SQL> alter tablespace gull read write;資料表空間已更改。SQL> conn gull/oracle已串連。SQL> create table test0408 as select *from  dba_objects;表已建立。SQL> alter system checkpoint;系統已更改。SQL> alter system checkpoint;系統已更改。SQL> alter system checkpoint;系統已更改。SQL> alter system switch;alter system switch                  *第 1 行出現錯誤:ORA-01900: 需要 LOGFILE 關鍵字SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。SQL> alter database datafile 7 online;alter database datafile 7 online*第 1 行出現錯誤:ORA-01113: 檔案 7 需要介質恢複ORA-01110: 資料檔案 7: ‘D:\ORADATA\GULL01.DBF‘SQL> recover automatic datafile 7;完成介質恢複。SQL> alter database datafile 7 online;資料庫已更改。SQL> select count(*) from  test0408;  COUNT(*)----------     50365SQL>

  3、現在為read-only,之前為read-write

先要把對應的檔案改為offline,在恢複

SQL> create table test040801 as select *from  dba_objects;表已建立。SQL> alter tablespace gull read only;資料表空間已更改。SQL> create table test040802 as select *from  dba_objects;create table test040802 as select *from  dba_objects                                         *第 1 行出現錯誤:ORA-01647: 資料表空間 ‘GULL‘ 是唯讀, 無法在其中分配空間SQL> alter tablespace gull read write;alter tablespace gull read write*第 1 行出現錯誤:ORA-01122: 資料庫檔案 7 驗證失敗ORA-01110: 資料檔案 7: ‘D:\ORADATA\GULL01.DBF‘ORA-01208: 資料檔案是舊的版本 - 不能訪問目前的版本SQL> recover datafile 7;ORA-00283: 恢複會話因錯誤而取消ORA-01124: 無法恢複資料檔案 7 - 檔案在使用中或在恢複中ORA-01110: 資料檔案 7: ‘D:\ORADATA\GULL01.DBF‘SQL> alter database datafile 7 offline;資料庫已更改。SQL> recover automatic datafile 7;完成介質恢複。SQL> alter tablespace gull read write;alter tablespace gull read write*第 1 行出現錯誤:ORA-01135: DML/query 訪問的檔案 7 處於離線狀態ORA-01110: 資料檔案 7: ‘D:\ORADATA\GULL01.DBF‘SQL> alter database datafile 7 online;資料庫已更改。SQL> alter tablespace gull read write;資料表空間已更改。SQL> select count(*) from test040801;  COUNT(*)----------     50366SQL>

  

 

完全恢複-介質恢複

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.