日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RMAN 还原与恢复

發(fā)布時間:2025/3/8 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RMAN 还原与恢复 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么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)到ef,否則不用執(zhí)行ef

??????????? 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。