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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

oracle rman异地备份,通过RMAN磁盘备份进行异地恢复

發布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle rman异地备份,通过RMAN磁盘备份进行异地恢复 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RMAN的配置,包括Catalog數據庫的配置并不復雜,相關資料也很多,就不贅述了。

通過RMAN備份

在RMAN中,對需要備件的數據庫相關信息進行備份。默認情況下備份是非常簡單的。

$rman catalog rman/rman@test1 target sys/oracle@gz

#catalog數據庫sid為test1

RMAN>backup spfile format ‘/backup/spfilegz.ora’;

#備份spfile

RMAN>copy controlfile to ‘/backup/control01.ctl’;

#備份controlfile

RMAN>backup database; #數據庫全備

RMAN>backup archivelog all;

除了手動指定備份路徑的spfile與controlfile,其他的數據默認被備份到$ORACLE_HOME/flash_recovery_area/GZ下面的archivelog與backupset

(sid是gz)

將備份的數據全部傳到需要恢復的主機上。用rcp當然可以,redhat下默認把rcp封掉了,baidu了一下有一篇用resync命令我覺得挺好,就借用了。

原貼link:

http://www.heibai.net/articles/defense/ruqinjiance/2011/0722/15424.html

備份主機的hostname為swt1,恢復主機的hostname為swt2

#!/bin/sh

#!keep sync of backup between gz and bj

ORACLE_HOME=/u01/oracle/product/10.2.0/db_1

bak_dir=$ORACLE_HOME/flash_recovery_area/GZ/backupset

bak_dir2=/backup

archive_dir=$ORACLE_HOME/flash_recovery_area/GZ/archivelog

dest_db=oracle@192.168.1.172

passwd=oracle

ls -l $bak_dir | awk '{print $NF}'|sed

'1d'>list1

ls -l $archive_dir | awk '{print $NF}'|sed

'1d'>list2

ls -l $bak_dir2 | awk '{print $NF}'|sed

'1d'>list3

Rsync_exec1(){

expect -c "

set timeout 7200;

spawn rsync -rpogtv --files-from=list1?$bak_dir

$dest_db:$bak_dir

expect {

\"*yes/no*\" {send

\"yes\r\";exp_continue}

\"*password*\" {send \"$passwd\r\";}

}

expect eof;"

}

Rsync_exec2(){

expect -c "

set timeout 7200;

spawn rsync -rpogtv?--files-from=list2

$archive_dir $dest_db:$archive_dir

expect {

\"*password*\" {send \"$passwd\r\";}

}

expect eof;"

}

Rsync_exec3(){

expect -c "

set timeout 7200;

spawn rsync -rpogtv --files-from=list3?$bak_dir2

$dest_db:$bak_dir2

expect {

\"*yes/no*\" {send

\"yes\r\";exp_continue}

\"*password*\" {send \"$passwd\r\";}

}

expect eof;"

}

Rsync_exec1

Rsync_exec2

Rsync_exec3

rm -f list1 list2 list3

expect命令是要安裝的,可以用yum或rpm

在相同路徑下通過RMAN恢復

如果只是要把備份的數據恢復到完全相同的路徑,是非常容易的。這里的相同路徑指的是備份文件的路徑與數據庫文件的路徑名都與原來的主機相同。

核心就是幾步。

1.?啟動數據庫到nomount狀態,這時rman就可以工作了

2.?把spfile恢復過來,如果要修改內容,可以生成pfile進行手動編輯

3.?恢復controlfile

4.?啟動到mount狀態,這時就可以恢復數據庫了。

5.?恢復

6.?Recover

7.?Alter database open resetlogs,搞定

在不同路徑下通過RMAN恢復

不同路徑指的是兩種情況

1.?RMAN備份過來的文件存放位置與原來主機上存放位置不一致,原主機上是$ORACLE_HOME/flash_recovery_area/,拷貝到新的主機上放在/backup下

2.?數據庫恢復的位置與原來主機不一致,原主機數據庫數據文件存放在/u01/oracle/product/10.2.0/oradata/gz下,新主機數據庫數據文件存放在/u01/oracle/oradata/gz下

在相同路徑恢復時,可以看到rman很準確地找到了備份數據存放的位置,并且恢復到了正確的位置。那它是從哪里得到這些信息的呢?連接rman時,用得是rman

target

/,并沒有指明catalog數據庫,而且我恢復時干脆把catalog數據庫關掉了。那么就只可能是根據本地的信息來判斷。Spfile的信息很有限,那就只能是controlfile了。用vi打開備份的controlfile,搜索恢復中用到的文件名,果然相關文件的全路徑在controlfile中都有。

現在我們把備份來的備份集文件與歸檔日志都放到/backup下,rman就不知道從哪里讀這些文件了。在rman里直接敲restore

database就可以看到出錯信息,can not identify file

‘/u01/oracle/product/10.2.0/flash_recovery_area/GZ/xfasdfsadfsdfs’之類。所以要通過catalog

archivelog與catalog backuppiece命令告訴rman到哪里找備份集與歸檔日志。

存放controlfile的位置記錄在pfile與spfile中,所以在恢復controlfile之前,先把spfile中的路徑改正確。恢復數據庫時,可以用set

newname的方式把數據庫文件的路徑更改。這樣control file與數據庫文件就都被成功地恢復到新路徑下了。Online

redo日志的位置還是會在原來的路徑中生成,生成新的替換掉就可以了。

[oracle@swt2 ~]$ rman target /

RMAN>

RMAN> startup nomount;

RMAN> restore spfile to

'/u01/oracle/product/10.2.0/db_1/dbs/spfilegz.ora' from

'/backup/spfilegz.ora';

RMAN> sql 'create pfile from spfile';

這時編輯生成的$ORACLE_HOME/dbs/initgz.ora文件,把control

file的路徑改為/u01/oracle/oradata/gz下。

如果想把adump,bdump這些都改了,可以分別進行修改

RMAN> sql 'create spfile from pfile';

RMAN> startup force nomount; #用新的spfile啟動

RMAN> restore controlfile from

'/backup/control01.ctl';

RMAN> alter database mount;

把backup下面的backuppiece與archivelog都加到catalog中,當然可以用腳本的方式。

RMAN> catalog archivelog

'/backup/o1_mf_1_34_7dmtqosj_.arc';

RMAN> catalog archivelog

'/backup/o1_mf_1_35_7dmtqr15_.arc';

RMAN> catalog archivelog

'/backup/o1_mf_1_36_7dmtqvtv_.arc';

RMAN> catalog archivelog

'/backup/o1_mf_1_37_7dmtr5tf_.arc';

RMAN> catalog archivelog

'/backup/o1_mf_1_38_7dmts7dc_.arc';

RMAN> catalog archivelog

'/backup/o1_mf_1_39_7dmtw2d8_.arc';

RMAN> catalog archivelog

'/backup/o1_mf_1_40_7dmtyn0v_.arc';

RMAN> catalog archivelog

'/backup/o1_mf_1_41_7dmv8zdm_.arc';

RMAN> catalog backuppiece

'/backup/o1_mf_annnn_TAG20111121T141808_7dmv91n9_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_annnn_TAG20111121T141808_7dmv91vo_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_annnn_TAG20111121T141808_7dmv9229_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_annnn_TAG20111121T141808_7dmv92cq_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_annnn_TAG20111121T141808_7dmv94kg_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_ncnnf_TAG20111121T141005_7dmtt30k_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_nnndf_TAG20111121T141005_7dmtsys0_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_nnndf_TAG20111121T141005_7dmtszhw_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_nnndf_TAG20111121T141005_7dmtt09t_.bkp';

RMAN> catalog backuppiece

'/backup/o1_mf_nnsnf_TAG20111121T141005_7dmttrcz_.bkp';

RMAN> run {

set newname for datafile

'/u01/oracle/product/10.2.0/oradata/gz/system01.dbf' to

'/u01/oracle/oradata/gz/system01.dbf';

set newname for datafile

'/u01/oracle/product/10.2.0/oradata/gz/sysaux01.dbf' to

'/u01/oracle/oradata/gz/sysaux01.dbf';

set newname for datafile

'/u01/oracle/product/10.2.0/oradata/gz/undotbs01.dbf' to

'/u01/oracle/oradata/gz/undotbs01.dbf';

set newname for datafile

'/u01/oracle/product/10.2.0/oradata/gz/users01.dbf' to

'/u01/oracle/oradata/gz/users01.dbf';

set newname for datafile

'/u01/oracle/product/10.2.0/oradata/gz/example01.dbf' to

'/u01/oracle/oradata/gz/example01.dbf';

set newname for datafile

'/u01/oracle/product/10.2.0/oradata/gz/tbs001.dbf' to

'/u01/oracle/oradata/gz/tbs001.dbf';

restore database;

switch datafile all;

}

RMAN> recover database;

Starting recover at 21-NOV-11

using channel ORA_DISK_1

using channel ORA_DISK_2

using channel ORA_DISK_3

using channel ORA_DISK_4

starting media recovery

archive log thread 1 sequence 39 is already on disk as file

/backup/o1_mf_1_39_7dmtw2d8_.arc

archive log thread 1 sequence 40 is already on disk as file

/backup/o1_mf_1_40_7dmtyn0v_.arc

archive log thread 1 sequence 41 is already on disk as file

/backup/o1_mf_1_41_7dmv8zdm_.arc

archive log filename=/backup/o1_mf_1_39_7dmtw2d8_.arc thread=1

sequence=39

archive log filename=/backup/o1_mf_1_40_7dmtyn0v_.arc thread=1

sequence=40

archive log filename=/backup/o1_mf_1_41_7dmv8zdm_.arc thread=1

sequence=41

unable to find archive log

archive log thread=1 sequence=42

RMAN-00571:

===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS

===============

RMAN-00571:

===========================================================

RMAN-03002: failure of recover command at 11/21/2011

14:52:29

RMAN-06054: media recovery requesting unknown log: thread 1 seq

42 lowscn 777171

上面的錯基本沒什么影響

RMAN> alter database open resetlogs;

database opened

RMAN> exit

這時除了online redo log都恢復好了。

用sqlplus連上來,alter system switch logfile; alter database drop

logfile group 1;alter database add logfile group 1

‘/u01/oracle/oradata/gz/redo01.log’ size 50m; 按這樣的方式把所有log

file都在新的路徑中生成,就齊活了。

總結

以上是生活随笔為你收集整理的oracle rman异地备份,通过RMAN磁盘备份进行异地恢复的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。