RMAN 还原与恢复
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
--====================
-- RMAN 還原與恢復(fù)
--====================
?
??? 在Oracle中,三大文件即控制文件,數(shù)據(jù)文件,日志文件的丟失與破壞都將需要使用還原或恢復(fù)來使數(shù)據(jù)庫正常化。而RMAN還原與恢復(fù)
是實現(xiàn)數(shù)據(jù)庫完整性、可靠性必不可少的手段之一。還原簡言之即是將所需的文件從備份中復(fù)制到原來文件所在的路徑。還原通常可以包括
數(shù)據(jù)庫、表空間、數(shù)據(jù)文件級別的還原。通常還原后的內(nèi)容會滯后于最新的數(shù)據(jù)庫SCN,因此將歸檔日志、聯(lián)機重做日志文件中的內(nèi)容更新到
還原的數(shù)據(jù)文件中,這個過程稱之為恢復(fù)。
?
??? 恢復(fù)的幾種情形
??????? 1.在mount 或open 階段完成的災(zāi)難恢復(fù)
??????????? 非系統(tǒng)表空間,undo表空間,所有的數(shù)據(jù)文件
??????? 2.在nomount 階段完成的災(zāi)難恢復(fù)
??????????? 控制文件(controlfile)
??????? 3.在mount 階段完成的災(zāi)難恢復(fù)
??????????? 系統(tǒng)表空間,聯(lián)機重做日志文件
???
??? 有關(guān)恢復(fù)、介質(zhì)恢復(fù)、一致性或非一致性恢復(fù)的詳細概念請參考:Oracle 基于用戶管理恢復(fù)的處理
???
一、RMAN在歸檔模式下的還原與恢復(fù)的簡化例子
??? RMAN> connect target /
??? RMAN> startup mount;
??? RMAN> restore database;
??? RMAN> recover database;
??? RMAN> alter database open;
?
二、使用RMAN進行還原與恢復(fù)(非catalog方式)??
?
??? 1.數(shù)據(jù)文件丟失的恢復(fù)處理
??????? --設(shè)定客戶端環(huán)境變量并連接到數(shù)據(jù)庫
??????????? C:/>set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
?
??????????? C:/>rman target sys/redhat@dedicated nocatalog
???????
??????? --對數(shù)據(jù)庫做全備
??????????? RMAN> backup as backupset????????????????
??????????? 2> format? '/u01/bk/rmbk/wb_%U'
??????????? 3> tag=Whole_bak database;
?
??????????? RMAN> sql? 'alter system archive log current';
???????????
??????? --對數(shù)據(jù)庫做級增量備份
??????????? RMAN> run{?????????????????????????????????
??????????? 2> allocate channel ch1 type disk;
??????????? 3> backup incremental level 0 database
??????????? 4> format '/u01/bk/rmbk/Inc_0_%U'
??????????? 5> tag=Inc_0;
??????????? 6> release channel ch1;}
?
??????? --對表插入新記錄并切換日志
??????????? SQL> select * from tb2;
?
??????????????????? ID NAME
??????????? ---------- ---------------------------------------------
??????????????????? ?1 Robinson
??????????????????? ?2 Henry
?
??????????? SQL> insert into tb2 select 3,'Danny' from dual;
?
??????????? SQL> commit;
?
??????????? SQL> alter system checkpoint;
?
??????????? SQL> alter system switch logfile;
???????????
??????? --對數(shù)據(jù)庫做級增量備份
??????????? RMAN> run{?????????????????????????????
??????????? 2>? allocate channel ch1 type disk;
??????????? 3>? backup incremental level 1 database
??????????? 4>? format '/u01/bk/rmbk/Inc_1%U'
??????????? 5>? tag=Inc_1;
??????????? 6>? release channel ch1;}
?
??????????? SQL> shutdown immediate;?? --關(guān)閉數(shù)據(jù)庫
?
??????????? SQL> ho rm $ORACLE_BASE/oradata/orcl/*.dbf? --刪除所有的數(shù)據(jù)文件 */
?
??????????? SQL> startup mount
?
??????? --使用RMAN連接到未mount狀態(tài)的數(shù)據(jù)庫
??????????? RMAN> connect target sys/redhat@dedicated
?
??????????? connected to target database: ORCL (DBID=1257415066, not open)
?
??????? --執(zhí)行數(shù)據(jù)庫還原
??????? --注意當存在完整備份也同時存在級增量備份時,Oracle會自動使用級增量備份來還原數(shù)據(jù)庫
??????????? RMAN> restore database;?
??????????? piece handle=/u01/bk/rmbk/Inc_0_0alqu132_1_1 tag=INC_0?? --下面可以看出還原的數(shù)據(jù)來自級增量備份
?
??????? --執(zhí)行數(shù)據(jù)庫恢復(fù)
??????????? RMAN> recover database;
??????????? piece handle=/u01/bk/rmbk/Inc_10clqu1fe_1_1 tag=INC_1
?
??????? --打開數(shù)據(jù)庫驗證恢復(fù)
??????????? RMAN> alter database open;
?
??????????? SQL> select * from bk.tb2;
?
??????????????????? ID NAME
??????????? ---------- ---------------------------------------------
??????????????????? ?1 Robinson
??????????????????? ?2 Henry
??????????????????? ?3 Danny
???
??? 2.磁盤損壞導(dǎo)致數(shù)據(jù)文件無法恢復(fù)到原始位置或不想恢復(fù)到原始位置的處理
??????? 使用set newname 命令將數(shù)據(jù)文件還原到新路徑
??????????? set newname for datafile 1 to '<newdir>/system01.dbf'; --為恢復(fù)的數(shù)據(jù)文件指定新路徑或重命名
??????? 使用switch命令將變更更新到控制文件
??????????? switch datafile n | all ;????? --等同于alter database rename file命令,該命令將恢復(fù)的數(shù)據(jù)文件重命名更新到控制文件
???????
??????? --下面的示例首先刪除tbs01.dbf,接下來將其恢復(fù)到oradata目錄中
???????
??????????? SQL> ho rm $ORACLE_BASE/oradata/orcl/tbs01.dbf
?
??????????? SQL> startup mount force;
?
??????????? RMAN> connect target sys/redhat@dedicated
?
??????????? connected to target database: ORCL (DBID=1257415066, not open)
?
??????????? RMAN> run{
??????????? 2> set newname for datafile 6 to '/u01/app/oracle/oradata/tbs01.dbf';
??????????? 3> restore database;
??????????? 4> switch datafile all;
??????????? 5> recover database;
??????????? 6> alter database open;}
?
??????????? SQL> select file#,name,status from v$datafile where file#=6;
?
??????????????? ?FILE# NAME??????????????????????????????? ???????????????STATUS
??????????? ---------- -------------------------------------------------- -------
??????????????????? ?6 /u01/app/oracle/oradata/tbs01.dbf????????????????? ONLINE
??????????????????? ?
??????????? SQL> select count(1) from bk.tb2;? --表tb2位于tbs01.dbf內(nèi)
?
??????????? ? COUNT(1)
??????????? ----------
??????????????????? ?3
?
??? 3.恢復(fù)表空間
???????
??????? --刪除表空間內(nèi)的數(shù)據(jù)文件,刪除后在針對位于該表空間的表進行插入記錄以及實施檢查點進程
??????????? SQL> ho rm $ORACLE_BASE/oradata/tbs01.dbf
?
??????????? SQL> insert into bk.tb2 select 4,'Jackson' from dual;
?
??????????? SQL> commit;
?
??????????? SQL> alter system checkpoint;
???????
??????? --強制檢查點后,告警日志出現(xiàn)錯誤提示,視圖v$recover_file給出了故障數(shù)據(jù)文件
??????????? [oracle@oradb ~]$ tail -n 50 $ORACLE_BASE/admin/orcl/bdump/alert_orcl.log
??????????? Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_ckpt_4724.trc:
??????????? ORA-01110: data file 6: '/u01/app/oracle/oradata/tbs01.dbf'
??????????? ORA-01116: error in opening database file 6
??????????? ORA-01110: data file 6: '/u01/app/oracle/oradata/tbs01.dbf'
??????????? ORA-27041: unable to open file
??????????? Linux Error: 2: No such file or directory
???????????
??????????? SQL> select * from v$recover_file;
?
??????????????? ?FILE# ONLINE? ONLINE_ ERROR???????????????? CHANGE# TIME
??????????? ---------- ------- ------- ------------------ ---------- ---------
??????????????????? ?6 OFFLINE OFFLINE FILE NOT FOUND?????????????
?
??????????? SQL> select name,status from v$datafile where file#=6;
?
??????????? NAME????????? ?????????????????????????????????????STATUS
??????????? -------------------------------------------------- -------
??????????? /u01/app/oracle/oradata/tbs01.dbf????????????????? RECOVER
???????
??????? --使用RMAN命令恢復(fù)數(shù)據(jù)文件,此時數(shù)據(jù)庫處于OPEN狀態(tài),因此首先需要將表空間脫機,恢復(fù)完成之后再將其聯(lián)機
??????????? RMAN> run{
??????????? 2> sql 'alter tablespace tbs1 offline immediate';
??????????? 3> set newname for datafile 6 to '/u01/app/oracle/oradata/orcl/tbs01.dbf';
??????????? 4> restore tablespace tbs1;
??????????? 5> switch datafile all;
??????????? 6> recover tablespace tbs1;
??????????? 7> sql 'alter tablespace tbs1 online';}
?
??????????? SQL> select name,status from v$datafile where file#=6;? --位置變動到orcl子目錄下,狀態(tài)變?yōu)?span lang="en-us">online
?
??????????? NAME?????????????????????????????????????????????? STATUS
??????????? -------------------------------------------------- -------
??????????? /u01/app/oracle/oradata/orcl/tbs01.dbf???????????? ONLINE
?
??????? --也可以使用下面的命令完成同樣的功能
??????? --注意如果表空間內(nèi)有多個數(shù)據(jù)文件,而僅有單個數(shù)據(jù)文件損壞則采用下面的方式處理更為妥當
??????????? RMAN> run{
??????????? 2> sql 'alter database datafile 6 offline immediate';
??????????? 3> set newname for datafile 6 to '/u01/app/oracle/oradata/tbs01.dbf';
??????????? 4> restore datafile 6;
??????????? 5> switch datafile all;
??????????? 6> recover datafile 6;
??????????? 7> sql 'alter databaes datafile 6 online';}
?
??? 4.RMAN實現(xiàn)不完全恢復(fù)
??????? 對于RMAN的不完全恢復(fù),使用Oracle的閃回特性的處理有更多的優(yōu)勢。關(guān)于閃回請參考:Oracle 閃回特性
??????? 步驟
??????????? a.加載數(shù)據(jù)到mount狀態(tài)(建議恢復(fù)前先做備份)
??????????? b.為高并發(fā)分配多個通道
??????????? c.還原所有(所需)的數(shù)據(jù)文件
??????????? d.使用until time,until sequence,until scn來恢復(fù)數(shù)據(jù)庫
??????????? e.使用resetlogs打開數(shù)據(jù)庫
??????????? f.全備數(shù)據(jù)庫
???????
??????? 演示RMAN基于until time的例子
??????????? SQL> show user;
??????????? USER is "BK"
??????????? SQL> create table tb1(id int,name varchar2(10));
?
??????????? SQL> insert into tb1 select 1,'Lancy' from dual;
?
??????????? SQL> ho strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Lancy? --查看聯(lián)機日志文件中不存在剛剛插入的記錄
?
??????????? SQL> commit;?????????????????????????????????????????????????????? --注意commit是將日志緩沖內(nèi)容寫入到日志文件
?
??????????? SQL> ho strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Lancy? --提交后聯(lián)機日志文件中才有新增的記錄
??????????? Lancy
?
??????????? SQL> alter system switch logfile;
?
??????????? SQL> ho ls $ORACLE_BASE/oradata/arch
??????????? log_1_1_732989230.arc? log_1_1_732989889.arc
?
??????????? RMAN> run{
??????????? 2> allocate channel ch1 type disk;
??????????? 3> allocate channel ch2 type disk;
??????????? 4> backup as compressed backupset database plus archivelog delete input
??????????? 5> format '/u01/bk/rmbk/wh_lg_%U'
??????????? 6> tag='Wholebak_Pluslog';
??????????? 7> release channel ch1;
??????????? 8> release channel ch2;}
?
??????????? 18:10:36 SQL> drop table tb1;
?
??????????? RMAN> run{
??????????? 2> allocate channel ch1 type disk;
??????????? 3> allocate channel ch2 type disk;
??????????? 4> set until time "to_date('2010-10-21 18:10:36','yyyy-mm-dd hh24:mi:ss')";
??????????? 5> restore database;
??????????? 6> recover database;
??????????? 7> alter database open resetlogs;
??????????? 8> release channel ch1;
??????????? 9> release channel ch2;}
?
??????????? SQL> select * from tb1;
?
??????????????????? ID NAME
??????????? ---------- ----------
??????????????????? ?1 Lancy
?
??? 5. SPFILE文件丟失的恢復(fù)
??????? SPFILE參數(shù)文件可以在RMAN中進行備份,因此可以使用RMAN來恢復(fù)SPFILE文件。可以自動備份SPFILE。
??????? SPFILE的自動備份是隨著控制文件的備份一起被完成的,因此可以通過自動備份控制文件來實現(xiàn)自動備份SPFILE文件的目的
??????? 其次,在備份系統(tǒng)表空間時將引發(fā)控制文件的自動備份,而不論是否設(shè)置自動備份參數(shù)為ON,此時同樣也備份SPFILE文件
???????
???????
??????? 有關(guān)SPFILE文件請參考:Oracle 參數(shù)文件
??????????????????????? ? ???SPFILE 錯誤導(dǎo)致數(shù)據(jù)庫無法啟動(ORA-01565)
???????
??????? SPFILE文件恢復(fù)步驟
??????????? a. startup nomount [force];
??????????? b. set dbid=dbid_no;
??????????? c. restore spfile from autobackup | '<dir>'
??????????? d. startup force;?? 如果d執(zhí)行失敗則轉(zhuǎn)到e,f,否則不用執(zhí)行e,f。
??????????? e. set dbid=dbid_no;
??????????? f. startup;
???????
??????? 下面設(shè)定控制文件的自動備份以及設(shè)置其備份路徑(注意要預(yù)先知道目標數(shù)據(jù)庫的DBID,此次演示的DBID為)
???????
??????????? RMAN> configure controlfile autobackup on;
??????????? RMAN> configure controlfile autobackup format for device type disk to '/u01/bk/rmbk/auto_ctl_%d_%F';
???????????
??????????? RMAN> exit
??????????? sys@ORCL> alter tablespace users add datafile '$ORACLE_BASE/oradata/orcl/users02.dbf' size 5m;
??????????? [oracle@oradb rmbk]$ ls auto*????? --執(zhí)行上一條alter tablespace users add datafile 語句將引發(fā)控制文件的自動備份
??????????? auto_ctl_ORCL_c-1263182651-20101124-00
??????????? sys@ORCL> shutdown immediate;
???????????
??????????? [oracle@oradb dbs]$ mv spfileorcl.ora spfileorcl.ora.bak?? --將原來的spfile文件重命名
???????????
??????????? [oracle@oradb ~]$ rman target / nocatalog
??????????? RMAN> startup nomount force;
??????????? RMAN> set dbid=1263182651;
??????????? RMAN> restore spfile from autobackup;?? --此處并沒有找到文件路徑,按Oracle聯(lián)機文檔,在nomount狀態(tài)應(yīng)該可以找到
??????????? RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
??????????? RMAN> restore spfile from '/u01/bk/rmbk/auto_ctl_ORCL_c-1263182651-20101124-00';??? --手動指定路徑
??????????? RMAN> startup force;
???
??? 6.聯(lián)機重做日志文件丟失的恢復(fù)請參考:
??????? 基于catalog 的RMAN 備份與恢復(fù)
??????? Oracle 聯(lián)機重做日志文件(ONLINE LOG FILE)
???
??? 7.控制文件的恢復(fù)處理
??????? 控制文件中描述了數(shù)據(jù)庫的相關(guān)物理信息,如創(chuàng)建時間、DBID、數(shù)據(jù)文件、日志文件等相關(guān)信息,因此一旦控制文件丟失數(shù)據(jù)庫將
??? 不能啟動,鑒于其重要性,控制文件的備份與恢復(fù)將單獨列出。有關(guān)控制文件請參考下列
??????? 基于catalog 的RMAN 備份與恢復(fù)
??????? Oracle 控制文件的備份與恢復(fù)
???
三、更多參考???
有關(guān)基于用戶管理的備份和備份恢復(fù)的概念請參考:
??????? Oracle 冷備份
??????? Oracle 熱備份
??????? Oracle 備份恢復(fù)概念
??????? Oracle 實例恢復(fù)
??????? Oracle 基于用戶管理恢復(fù)的處理(詳細描述了介質(zhì)恢復(fù)及其處理)
???????
??? 有關(guān)RMAN的恢復(fù)與管理請參考:
??????? RMAN 概述及其體系結(jié)構(gòu)
??????? RMAN 配置、監(jiān)控與管理
??????? RMAN 備份詳解
??????? RMAN 還原與恢復(fù)
???????
??? 有關(guān)Oracle體系結(jié)構(gòu)請參考:
??????? Oracle實例和Oracle數(shù)據(jù)庫(Oracle體系結(jié)構(gòu))
??????? Oracle 表空間與數(shù)據(jù)文件
??????? Oracle 密碼文件
??????? Oracle 參數(shù)文件
Oracle 數(shù)據(jù)庫實例啟動關(guān)閉過程
??????? Oracle 聯(lián)機重做日志文件(ONLINE LOG FILE)
??????? Oracle 控制文件(CONTROLFILE)
??????? Oracle 歸檔日志
?
原文鏈接: http://blog.csdn.net/robinson_0612/article/details/6041247
轉(zhuǎn)載于:https://my.oschina.net/dtec/blog/47387
總結(jié)
以上是生活随笔為你收集整理的RMAN 还原与恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: as3:sprite作为容器使用时,最好
- 下一篇: “街坊”×××数字平台,昔日的思想,曾经