RAC 之 RMAN 备份
?
這篇主要介紹的是RAC 環(huán)境下的RMAN 備份。 關(guān)于Oracle 備份與恢復(fù)的一些理論知識(shí)參考我的Blog:
?
????? Oracle 備份 與 恢復(fù) 概述
?????? http://blog.csdn.net/tianlesoftware/archive/2010/04/16/5490733.aspx
?
?
一.???? RAC 歸檔的設(shè)置
?
1.1? 相關(guān)理論知識(shí)
RAC 在運(yùn)行的時(shí)候,每個(gè)實(shí)例都會(huì)產(chǎn)生歸檔日志,所有實(shí)例的歸檔日志集中在一起,才能完整地代表數(shù)據(jù)庫的操作歷史,此外,只有進(jìn)行介質(zhì)恢復(fù)(Media Recovery)時(shí),才會(huì)用到歸檔日志。 進(jìn)行介質(zhì)恢復(fù)時(shí),才要求在執(zhí)行恢復(fù)操作的那個(gè)節(jié)點(diǎn)訪問所有實(shí)例的歸檔日志。
?
正是因?yàn)闅w檔日志有這些特點(diǎn),所以歸檔位置的設(shè)計(jì)也有兩種方案:
(1)各節(jié)點(diǎn)生成的歸檔放到共享存儲(chǔ)上,這樣自然可以確保每個(gè)節(jié)點(diǎn)都能夠訪問到,比如將歸檔存放到ORACLE的ASM,或者是第三方提供的集群文件系統(tǒng)中。 對于這種方法,一些集群的配置比較麻煩,而且也增加了ASM的維護(hù),出現(xiàn)問題也不好處理。
(2)各節(jié)點(diǎn)除在本地生成歸檔文件外,另外向其它節(jié)點(diǎn)或者說執(zhí)行備份的節(jié)點(diǎn)發(fā)送歸檔日志,以確保執(zhí)行備份的那臺(tái)節(jié)點(diǎn)能夠訪問到所有的歸檔文件。在這種方法中,因?yàn)?/span>ORACLE 的重做日志發(fā)送機(jī)制非常靈活,在10g版本中可以同時(shí)向10個(gè)目標(biāo)地寫入歸檔(11g增加到了30個(gè)),所以利用這種特性,將各節(jié)點(diǎn)生成的歸檔發(fā)送到執(zhí)行備份的節(jié)點(diǎn)中,來實(shí)現(xiàn)該節(jié)點(diǎn)能夠訪問所需的歸檔文件。
?
在第二種方案中,我們可以在每個(gè)節(jié)點(diǎn)建2個(gè)歸檔目錄,分別存放本地和其他節(jié)點(diǎn)節(jié)點(diǎn)的歸檔日志,這里假設(shè)是2個(gè)節(jié)點(diǎn)的RAC.
?
| 歸檔位置 | 實(shí)例1 | 實(shí)例2 |
| 本地磁盤 | Mkdir /rac1_arch Mkdir /rac2_arch | Mkdir /rac1_arch Mkdir /rac2_arch |
| Log_archive_dest_1 | Location=’/rac1_arch’ | Location=’/rac2_arch’ |
| Log_archive_dest_2 | Service=’rac2’ | Service=’rac1’ |
| Standby_archive_dest | ‘/rac2_arch’ | ‘/rac1_arch’ |
?
?
在每個(gè)節(jié)點(diǎn)上建2個(gè)目錄: /u02/rac1_arch, /u02/rac2_arch, 并賦予讀寫的權(quán)限:
?
[root@rac2 /]# mkdir /u02/rac1_arch
[root@rac2 /]# mkdir /u02/rac2_arch
[root@rac2 /]# chown oracle:oinstall /u02/*
[root@rac2 /]# chmod 777 /u02/*
?
??????
1.2 ?RAC 設(shè)置成歸檔模式
?????? RAC的歸檔設(shè)置和單實(shí)例歸檔設(shè)置差不多。 先將所有實(shí)例設(shè)置為非OPEN狀態(tài),然后在任意一個(gè)處于MOUNT狀態(tài)的實(shí)例執(zhí)行ALTER DATABASE命令,操作成功后,再正常啟動(dòng)其它實(shí)例即可。
?
之前整理的一篇RAC 歸檔切換的文檔,不過和今天這個(gè)實(shí)驗(yàn)不太匹配,就重新在整理下。
Oracle RAC 歸檔 與 非歸檔 切換
http://blog.csdn.net/tianlesoftware/archive/2010/04/20/5501184.aspx
?
?
?
1.2.1 設(shè)置歸檔參數(shù)
?
1.2.1.1 設(shè)置實(shí)例orcl1的參數(shù):
?
SQL> alter system set log_archive_dest_1 = 'LOCATION=/u02/rac1_arch' scope=both sid='orcl1';
System altered.
?
SQL> alter system set log_archive_dest_2 = 'service=orcl2' scope=both sid='orcl1';
System altered.
?
SQL> alter system set standby_archive_dest = '/u02/rac2_arch' scope=both sid='orcl1';
System altered.
?
1.2.1.2 設(shè)置實(shí)例orcl2的參數(shù):
?
SQL> alter system set log_archive_dest_1 = 'LOCATION=/u02/rac2_arch' scope=both sid='orcl2';
System altered.
?
SQL> alter system set log_archive_dest_2= 'SERVICE=orcl1' scope=both sid='orcl2';
System altered.
?
SQL> alter system set standby_archive_dest = '/u02/rac1_arch' scope=both sid='orcl2';
System altered.
?
?
?
1.2.1.3 在2個(gè)節(jié)點(diǎn)上分別驗(yàn)證參數(shù)的狀態(tài):
?
SQL> set wrap off
SQL> col dest_name format a20
SQL> select dest_name,status,error from v$archive_dest;
?
DEST_NAME??????????? STATUS??? ERROR
-------------------- --------- -------------------------------------------------
LOG_ARCHIVE_DEST_1?? VALID
LOG_ARCHIVE_DEST_2?? VALID
LOG_ARCHIVE_DEST_3?? INACTIVE
LOG_ARCHIVE_DEST_4?? INACTIVE
LOG_ARCHIVE_DEST_5?? INACTIVE
LOG_ARCHIVE_DEST_6?? INACTIVE
LOG_ARCHIVE_DEST_7?? INACTIVE
LOG_ARCHIVE_DEST_8?? INACTIVE
LOG_ARCHIVE_DEST_9?? INACTIVE
LOG_ARCHIVE_DEST_10? INACTIVE
?
10 rows selected.
?
1.2.2 將RAC 切換成歸檔模式
?
1.2.2.1 修改數(shù)據(jù)庫的歸檔模式
?????? SQL> alter system set cluster_database=false scope=spfile sid='*';
System altered.
?
1.2.2.2 關(guān)閉所有實(shí)例
?????? SQL> shutdown immediate
?
?
1.2.2.3 在任意一個(gè)實(shí)例上將數(shù)據(jù)庫啟動(dòng)到mount狀態(tài),修改數(shù)據(jù)庫歸檔模式
SQL> startup mount
ORACLE instance started.
Total System Global Area? 167772160 bytes
Fixed Size????????????????? 1266392 bytes
Variable Size???????????? 117443880 bytes
Database Buffers?????????? 46137344 bytes
Redo Buffers??????????????? 2924544 bytes
Database mounted.
?
SQL> alter database archivelog;
Database altered.
?
SQL> alter system set cluster_database=true scope=spfile sid='*';
System altered.
?
?????? ? SQL> shutdown immediate
?
1.2.2.4 重啟數(shù)據(jù)庫,確定歸檔生效
?
SQL> archive log list;
Database log mode????????????? Archive Mode
Automatic archival???????????? Enabled
Archive destination??????????? /u02/rac1_arch
Oldest online log sequence???? 54
Next log sequence to archive?? 55
Current log sequence? ?????????55
?
SQL> archive log list;
Database log mode????????????? Archive Mode
Automatic archival???????????? Enabled
Archive destination??????????? /u02/rac2_arch
Oldest online log sequence???? 26
Next log sequence to archive?? 27
Current log sequence?? ????????27
?
?
1.2.2.5 在兩個(gè)節(jié)點(diǎn)分別切換歸檔日志,并檢查對應(yīng)的目錄是否產(chǎn)生歸檔日志
?????? SQL> alter system switch logfile;
System altered.
?
SQL> select inst_id,recid,dest_id,name from gv$archived_log ;
? INST_ID????? RECID??? DEST_ID NAME
---------- ---------- ---------- -----------------------------------------------
???????? 2???????? 12????????? 1 /u02/rac1_arch/1_5_730181171.dbf
???????? 2???????? 13????????? 2 /u01/rac1_arch1_5_730181171.dbf
???????? 2???????? 14????????? 2 /u02/rac2_arch/2_3_730181171.dbf
???????? 2???????? 15????????? 1 /u02/rac1_arch/1_6_730181171.dbf
???????? 2???????? 16????????? 2 /u02/rac1_arch/1_6_730181171.dbf
???????? 2???????? 17????????? 1 /u02/rac1_arch/1_7_730181171.dbf
????????????? ……
???? ????1???????? 12????????? 1 /u02/rac1_arch/1_5_730181171.dbf
???????? 1???????? 13????????? 2 /u01/rac1_arch1_5_730181171.dbf
???????? 1???????? 14????????? 2 /u02/rac2_arch/2_3_730181171.dbf
???????? 1???????? 15????????? 1 /u02/rac1_arch/1_6_730181171.dbf
???????? 1???????? 16????????? 2 /u02/rac1_arch/1_6_730181171.dbf
?
?
提示:RAC 數(shù)據(jù)庫各實(shí)例擁有各自的REDO線程,歸檔文件名的生成規(guī)則由LOG_ARCHIVE_FORMAT初始化參數(shù)控制,默認(rèn)情況下是 %t_%s_%r.dbf ,所以不會(huì)導(dǎo)致重復(fù)的發(fā)生。
?
?
注意一個(gè)參數(shù):LOG_ARCHIVE_LOCAL_FIRST,用來設(shè)置是否首先歸檔文件到本地,默認(rèn)為true.
?
LOG_ARCHIVE_LOCAL_FIRST 這個(gè)參數(shù)是Oracle 10g 新增的,它主要針對Standby環(huán)境退出,在Oracle 10g 以前的Standby中,本地和遠(yuǎn)程的歸檔都完成后,聯(lián)機(jī)日志文件才可以被重用,在網(wǎng)絡(luò)速度慢的環(huán)境中,遠(yuǎn)程歸檔的配置會(huì)很大程度的影響節(jié)點(diǎn)的處理能力。而設(shè)置LOG_ARCHIVE_LOCAL_FIRST=true,Oracle 會(huì)先進(jìn)行本地歸檔,本地歸檔結(jié)束后在進(jìn)行遠(yuǎn)程傳遞,同時(shí)使聯(lián)機(jī)日志可以重用,從而減少了網(wǎng)絡(luò)環(huán)境對本地的影響。 如果把這個(gè)參數(shù)設(shè)置為FALSE, 則相當(dāng)于Oracle 10g 之前的方式,這個(gè)參數(shù)默認(rèn)是True,如果在應(yīng)用中遇到找不到歸檔日志的問題,就可以把這個(gè)參數(shù)改成FALSE.
?
?
?
二、RAC數(shù)據(jù)庫的RMAN備份
RAC 和 單實(shí)例數(shù)據(jù)庫備份機(jī)制是一樣的,有兩點(diǎn)需要注意:
(1)?????? RMAN 要連接到集群中的某個(gè)實(shí)例,而不是連接到整個(gè)集群
(2)?????? 備份歸檔日志時(shí),必須保證在備份實(shí)例上能夠訪問所有實(shí)例的歸檔日志,否則就會(huì)報(bào)錯(cuò)。
?
?
2.1 先看一個(gè)歸檔日志不一致的問題
?????? 在這種情況下備份是會(huì)報(bào)錯(cuò)的。 之前啟動(dòng)歸檔之后,2個(gè)節(jié)點(diǎn)的歸檔目錄文件是相同的,現(xiàn)在我們模擬歸檔日志不一致的情況。
?
先關(guān)閉兩個(gè)節(jié)點(diǎn)的歸檔位置2。 此時(shí)歸檔日志都不能傳遞到對方的歸檔的目錄下。
?
SQL> alter system set log_archive_dest_state_2 =defer scope=both? sid='*';
System altered.
?
在手動(dòng)檔產(chǎn)生歸檔日志:
SQL> alter system switch logfile;
System altered.
?
此時(shí)兩個(gè)節(jié)點(diǎn)歸檔目錄下文件不一致。我們連接到rac1節(jié)點(diǎn),然后用rman 備份一下,看報(bào)什么錯(cuò)
?
RMAN> backup database plus archivelog;
?
Starting backup at 20-SEP-10
current log archived
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup plus archivelog command at 09/20/2010 14:13:32
RMAN-06059: expected archived log not found, lost of archived log compromises recoverability
ORA-19625: error identifying file /u02/rac2_arch/2_11_730181171.dbf
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
?
這里報(bào)錯(cuò)了。 現(xiàn)在我們手動(dòng)把缺失的日志從rac2節(jié)點(diǎn)copy到節(jié)點(diǎn)1. 然后啟用歸檔位置2.
?
SQL> alter system set log_archive_dest_state_2 =enable scope=both? sid='*';
System altered.
?
然后在備份一下看看。
?
?
RMAN> backup database plus archivelog;
?
Starting backup at 20-SEP-10
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=11 recid=29 stamp=730213616
input archive log thread=1 sequence=15 recid=36 stamp=730217603
input archive log thread=1 sequence=16 recid=40 stamp=730221061
input archive log thread=1 sequence=17 recid=45 stamp=730222093
input archive log thread=2 sequence=1 recid=3 stamp=730194853
input archive log thread=2 sequence=2 recid=4 stamp=730194856
input archive log thread=2 sequence=3 recid=14 stamp=730195685
input archive log thread=2 sequence=4 recid=20 stamp=730196124
input archive log thread=2 sequence=5 recid=23 stamp=730204019
input archive log thread=2 sequence=6 recid=25 stamp=730205106
input archive log thread=2 sequence=7 recid=27 stamp=730206847
input archive log thread=2 sequence=8 recid=28 stamp=730213614
input archive log thread=2 sequence=11 recid=37 stamp=730217603
input archive log thread=2 sequence=12 recid=41 stamp=730221072
input archive log thread=2 sequence=13 recid=44 stamp=730222092
channel ORA_DISK_1: starting piece 1 at 20-SEP-10
channel ORA_DISK_1: finished piece 1 at 20-SEP-10
piece handle=+FLASH_RECOVERY_AREA/orcl/backupset/2010_09_20/annnf0_tag20100920t152820_0.265.730222103 tag=TAG20100920T152820 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:37
Finished backup at 20-SEP-10
?
Starting backup at 20-SEP-10
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=+DATA/orcl/datafile/system.276.730181051
input datafile fno=00003 name=+DATA/orcl/datafile/sysaux.277.730181053
input datafile fno=00002 name=+DATA/orcl/datafile/undotbs1.278.730181053
input datafile fno=00005 name=+DATA/orcl/datafile/undotbs2.284.730181347
input datafile fno=00004 name=+DATA/orcl/datafile/users.279.730181053
channel ORA_DISK_1: starting piece 1 at 20-SEP-10
channel ORA_DISK_1: finished piece 1 at 20-SEP-10
piece handle=+FLASH_RECOVERY_AREA/orcl/backupset/2010_09_20/nnndf0_tag20100920t152900_0.266.730222143 tag=TAG20100920T152900 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:28
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 20-SEP-10
channel ORA_DISK_1: finished piece 1 at 20-SEP-10
piece handle=+FLASH_RECOVERY_AREA/orcl/backupset/2010_09_20/ncsnf0_tag20100920t152900_0.267.730222301 tag=TAG20100920T152900 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15
Finished backup at 20-SEP-10
?
Starting backup at 20-SEP-10
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=18 recid=49 stamp=730222306
input archive log thread=2 sequence=14 recid=48 stamp=730222306
channel ORA_DISK_1: starting piece 1 at 20-SEP-10
channel ORA_DISK_1: finished piece 1 at 20-SEP-10
piece handle=+FLASH_RECOVERY_AREA/orcl/backupset/2010_09_20/annnf0_tag20100920t153150_0.268.730222313 tag=TAG20100920T153150 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:04
Finished backup at 20-SEP-10
?
RMAN>
?
?
2.2 歸檔文件的刪除問題
?
在上面?zhèn)浞莩晒?#xff0c;這里有一個(gè)新問題,就是對歸檔文件的刪除。通常我們習(xí)慣于在備份完歸檔之后刪除原歸檔文件,以釋放相應(yīng)的磁盤空間,不過在RAC環(huán)境下,只能刪除節(jié)點(diǎn)1上的歸檔文件,節(jié)點(diǎn)2上的無法刪除。因?yàn)樵诠?jié)點(diǎn)1上操作不了節(jié)點(diǎn)2上的歸檔文件。
?
這個(gè)問題我們可以通過配置通道來解決。一般有幾個(gè)實(shí)例,我們就配置幾個(gè)通道。 配置通道命令如下:
?
RMAN> configure channel 1 device type disk connect 'sys/oracle@orcl1';
new RMAN configuration parameters:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT? 'sys/oracle@orcl1';
new RMAN configuration parameters are successfully stored
?
RMAN> configure channel 2 device type disk connect 'sys/oracle@orcl2';
new RMAN configuration parameters:
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT? 'sys/oracle@orcl2';
new RMAN configuration parameters are successfully stored
?
RMAN>
?
查看通道情況:
RMAN> show channel;
RMAN configuration parameters are:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT? 'sys/oracle@orcl1';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT? 'sys/oracle@orcl2';
?
關(guān)于RMAN 通道,在我blog:
RMAN 系列(二) ---- RMAN 設(shè)置和配置
http://blog.csdn.net/tianlesoftware/archive/2010/06/16/5674309.aspx
?
中的3.4節(jié): 配置RMAN默認(rèn)設(shè)置 中有介紹。
?
這樣設(shè)置通道除了能刪除其他節(jié)點(diǎn)的歸檔日志外, RMAN還能夠智能的對備份中出現(xiàn)"問題"的任務(wù)進(jìn)行再分配,比如說通道1和通道2同時(shí)執(zhí)行備份,其中通道1備份數(shù)據(jù)文件1,3,4,通道2備份數(shù)據(jù)文件2和5,假如通道2執(zhí)行過程中由于某些原因崩潰,RMAN可以自動(dòng)將任務(wù)放回到通道1上執(zhí)行。
?
?
剛才已經(jīng)配置過2個(gè)不同的通道,現(xiàn)在我們來刪除歸檔文件試試:
?
RMAN> crosscheck archivelog all;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=130 instance=orcl1 devtype=DISK
validation failed for archived log
archive log filename=/u02/rac1_arch/1_16_730181171.dbf recid=38 stamp=730221051
validation failed for archived log
archive log filename=/u02/rac1_arch/1_17_730181171.dbf recid=42 stamp=730222091
validation failed for archived log
archive log filename=/u02/rac1_arch/1_18_730181171.dbf recid=46 stamp=730222305
validation failed for archived log
archive log filename=/u02/rac2_arch/2_1_730181171.dbf recid=1 stamp=730194852
validation failed for archived log
archive log filename=/u02/rac2_arch/2_2_730181171.dbf recid=4 stamp=730194856
validation failed for archived log
archive log filename=/u02/rac2_arch/2_3_730181171.dbf recid=11 stamp=730195680
validation failed for archived log
archive log filename=/u02/rac2_arch/2_4_730181171.dbf recid=19 stamp=730196123
validation failed for archived log
archive log filename=/u02/rac2_arch/2_12_730181171.dbf recid=39 stamp=730221056
validation failed for archived log
archive log filename=/u02/rac2_arch/2_13_730181171.dbf recid=43 stamp=730222091
validation failed for archived log
archive log filename=/u02/rac2_arch/2_14_730181171.dbf recid=47 stamp=730222304
Crosschecked 10 objects
?
RMAN> delete archivelog all;
?
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=130 instance=orcl1 devtype=DISK
List of Archived Log Copies
Key???? Thrd Seq???? S Low Time? Name
------- ---- ------- - --------- ----
38????? 1??? 16????? X 20-SEP-10 /u02/rac1_arch/1_16_730181171.dbf
42????? 1??? 17????? X 20-SEP-10 /u02/rac1_arch/1_17_730181171.dbf
46??? ??1??? 18????? X 20-SEP-10 /u02/rac1_arch/1_18_730181171.dbf
1?????? 2??? 1?????? X 20-SEP-10 /u02/rac2_arch/2_1_730181171.dbf
4?????? 2??? 2?????? X 20-SEP-10 /u02/rac2_arch/2_2_730181171.dbf
11????? 2??? 3?????? X 20-SEP-10 /u02/rac2_arch/2_3_730181171.dbf
19????? 2??? 4?????? X 20-SEP-10 /u02/rac2_arch/2_4_730181171.dbf
39????? 2??? 12????? X 20-SEP-10 /u02/rac2_arch/2_12_730181171.dbf
43????? 2??? 13????? X 20-SEP-10 /u02/rac2_arch/2_13_730181171.dbf
47????? 2??? 14????? X 20-SEP-10 /u02/rac2_arch/2_14_730181171.dbf
?
Do you really want to delete the above objects (enter YES or NO)? yes
deleted archive log
archive log filename=/u02/rac1_arch/1_16_730181171.dbf recid=38 stamp=730221051
deleted archive log
archive log filename=/u02/rac1_arch/1_17_730181171.dbf recid=42 stamp=730222091
deleted archive log
archive log filename=/u02/rac1_arch/1_18_730181171.dbf recid=46 stamp=730222305
deleted archive log
archive log filename=/u02/rac2_arch/2_1_730181171.dbf recid=1 stamp=730194852
deleted archive log
archive log filename=/u02/rac2_arch/2_2_730181171.dbf recid=4 stamp=730194856
deleted archive log
archive log filename=/u02/rac2_arch/2_3_730181171.dbf recid=11 stamp=730195680
deleted archive log
archive log filename=/u02/rac2_arch/2_4_730181171.dbf recid=19 stamp=730196123
deleted archive log
archive log filename=/u02/rac2_arch/2_12_730181171.dbf recid=39 stamp=730221056
deleted archive log
archive log filename=/u02/rac2_arch/2_13_730181171.dbf recid=43 stamp=730222091
deleted archive log
archive log filename=/u02/rac2_arch/2_14_730181171.dbf recid=47 stamp=730222304
Deleted 10 objects
?
?
?
?
2.3 ?RMAN 備份的一個(gè)完整實(shí)例
?
關(guān)于搭建RMAN 備份平臺(tái)的其他相關(guān)操作參考Blog:
如何 搭建 RMAN 備份平臺(tái)
http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740896.aspx
?
RMAN 備份的腳本參考Blog:
Linux 平臺(tái)下 RMAN 全備 和 增量備份 shell 腳本
http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740630.aspx
?
?
?
這里我們用nocatalog 模式下的全備備份為例,在運(yùn)行這個(gè)腳本之前需要配置好歸檔。 具體參考前面的說明。
?
Shell 腳本如下:
?
########################################################################
##?? RAC_hot_database_backup.sh????? ##
##?? created by Tianlesoftware?? ##
##??????? 2010-9-21???????????????? ##
#########################################################################
#!/bin/sh
# ---------------------------------------------------------------------------
# Determine the user which is executing this script.
# ---------------------------------------------------------------------------
CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`
# ---------------------------------------------------------------------------
# Put output in <this file name>.out. Change as desired.
# Note: output directory requires write permission.
# ---------------------------------------------------------------------------
RMAN_LOG_FILE=${0}.out
# ---------------------------------------------------------------------------
# You may want to delete the output file so that backup information does
# not accumulate.? If not, delete the following lines.
# ---------------------------------------------------------------------------
if [ -f "$RMAN_LOG_FILE" ]
then
rm -f "$RMAN_LOG_FILE"
fi
# -----------------------------------------------------------------
# Initialize the log file.
# -----------------------------------------------------------------
echo >> $RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
# ---------------------------------------------------------------------------
# Log the start of this script.
# ---------------------------------------------------------------------------
echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
# ---------------------------------------------------------------------------
# Oracle home path.
# ---------------------------------------------------------------------------
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
# ---------------------------------------------------------------------------
# the Oracle SID of the target database.
# ---------------------------------------------------------------------------
ORACLE_SID=orcl1 ??-- 注意,這里需要連接任意節(jié)點(diǎn)就可以
export ORACLE_SID
# ---------------------------------------------------------------------------
# The Oracle DBA user id (account).
# ---------------------------------------------------------------------------
ORACLE_USER=oracle
export ORACLE_USER
# ---------------------------------------------------------------------------
# Set the Oracle Recovery Manager name.
# ---------------------------------------------------------------------------
RMAN=$ORACLE_HOME/bin/rman
?
# ---------------------------------------------------------------------------
# Print out the value of the variables set by this script.
# ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE
echo?? "RMAN: $RMAN" >> $RMAN_LOG_FILE
echo?? "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE
echo?? "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE
echo?? "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
# ---------------------------------------------------------------------------
# Print out the value of the variables set by bphdb.
# ---------------------------------------------------------------------------
#echo? >> $RMAN_LOG_FILE
#echo?? "NB_ORA_FULL: $NB_ORA_FULL" >> $RMAN_LOG_FILE
#echo?? "NB_ORA_INCR: $NB_ORA_INCR" >> $RMAN_LOG_FILE
#echo?? "NB_ORA_CINC: $NB_ORA_CINC" >> $RMAN_LOG_FILE
#echo?? "NB_ORA_SERV: $NB_ORA_SERV" >> $RMAN_LOG_FILE
#echo?? "NB_ORA_POLICY: $NB_ORA_POLICY" >> $RMAN_LOG_FILE
# ---------------------------------------------------------------------------
# NOTE: This script assumes that the database is properly opened. If desired,
# this would be the place to verify that.
# ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Call Recovery Manager to initiate the backup.
# ---------------------------------------------------------------------------
CMD_STR="
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
$RMAN nocatalog target sys/oracle msglog $RMAN_LOG_FILE append << EOF
RUN {
allocate channel c1 device type disk connect? 'sys/oracle@orcl1';
allocate channel c2 device type disk connect? 'sys/oracle@orcl2';
BACKUP FORMAT '/u01/backup/orcl_%U_%T' skip inaccessible filesperset 5 DATABASE TAG orcl_hot_db_bk;
sql 'alter system archive log current';
BACKUP FORMAT '/u01/backup/arch_%U_%T' skip inaccessible filesperset 5 ARCHIVELOG ALL DELETE INPUT;
backup current controlfile tag='bak_ctlfile' format='/u01/backup/ctl_file_%U_%T';
backup spfile tag='spfile' format='/u01/backup/ORCL_spfile_%U_%T';
?
release channel c1;
release channel c2;
}
?
allocate channel for maintenance device type disk connect ?'sys/oracle@orcl1';
allocate channel for maintenance device type disk connect ?'sys/oracle@orcl2';
report obsolete;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;
list backup summary;
release channel;
#EOF
"
# Initiate the command string
?
if [ "$CUSER" = "root" ]
then
??? echo "Root Command String: $CMD_STR" >> $RMAN_LOG_FILE????
??? su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE
??? RSTAT=$?
else
??? echo "User Command String: $CMD_STR" >> $RMAN_LOG_FILE????
??? /bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE
??? RSTAT=$?
fi
# ---------------------------------------------------------------------------
# Log the completion of this script.
# ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ]
then
??? LOGMSG="ended successfully"
else
??? LOGMSG="ended in error"
fi
echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
/bin/mailx -s "RMAN Backup SID " tianlesoftware@vip.qq.com < $RMAN_LOG_FILE
exit $RSTAT
?
?
腳本中有指定備份文件的位置。 這里要注意,如果是直接備份到硬盤上,那么在兩個(gè)節(jié)點(diǎn)上都要?jiǎng)?chuàng)建對應(yīng)的備份目錄。 因?yàn)楣?jié)點(diǎn)1通道的備份文件會(huì)放在節(jié)點(diǎn)1上。節(jié)點(diǎn)2的備份文件會(huì)放在節(jié)點(diǎn)2上。 這種把備份文件分開存放,當(dāng)然不方便我們恢復(fù)。
?
開始在這個(gè)問題上,也是碰了釘子,后來才弄明白:
RAC RMAN 備份 RMAN-03009 ORA-19504 channel c3 not allocated 錯(cuò)誤分析
http://blog.csdn.net/tianlesoftware/archive/2010/09/22/5901031.aspx
?
所以,我們可以通過NFS mount 把備份文件放在一個(gè)節(jié)點(diǎn)。 或者直接把備份文件直接存放在存儲(chǔ)上。 ?
?
關(guān)于NFS mount的配置,參考我的Blog:
?????? Linux NFS 和 Samba 共享配置
http://blog.csdn.net/tianlesoftware/archive/2010/07/22/5752092.aspx
?
這里只是測試,所以采用的是NFS方式。 當(dāng)然在實(shí)際RAC環(huán)境下,是放在存儲(chǔ)上的。
?
?
?
?
?
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
網(wǎng)上資源: http://tianlesoftware.download.csdn.net
相關(guān)視頻:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(滿); DBA2 群:62697977(滿)
DBA3 群:63306533;???? 聊天 群:40132017
--加群需要在備注說明SGA的組成部分,否則拒絕申請
轉(zhuǎn)載于:https://www.cnblogs.com/spring3mvc/archive/2010/09/22/2414776.html
總結(jié)
以上是生活随笔為你收集整理的RAC 之 RMAN 备份的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 习题4-5 换硬币 (20 分)
- 下一篇: 一个十年程序员写给大家的忠告