RAC 之 RMAN 備份
這篇主要介紹的是RAC 環境下的RMAN 備份。 關於Oracle 備份與恢復的一些理論知識參考我的Blog:
Oracle 備份 與 恢復 概述
一. RAC 歸檔的設定
1.1 相關理論知識
RAC 在執行的時候,每個例項都會產生歸檔日誌,所有例項的歸檔日誌集中在一起,才能完整地代表資料庫的操作歷史,此外,只有進行介質恢復(Media Recovery)時,才會用到歸檔日誌。進行介質恢復時,才要求在執行恢復操作的那個節點訪問所有例項的歸檔日誌。
正是因為歸檔日誌有這些特點,所以歸檔位置的設計也有兩種方案:
(1)各節點生成的歸檔放到共享儲存上,這樣自然可以確保每個節點都能夠訪問到,比如將歸檔存放到ORACLE的ASM,或者是第三方提供的叢集檔案系統中。 對於這種方法,一些叢集的配置比較麻煩,而且也增加了ASM的維護,出現問題也不好處理。
(2)各節點除在本地生成歸檔檔案外,另外向其它節點或者說執行備份的節點發送歸檔日誌,以確保執行備份的那臺節點能夠訪問到所有的歸檔檔案。在這種方法中,因為ORACLE 的重做日誌傳送機制非常靈活,在10g版本中可以同時向10個目標地寫入歸檔(11g增加到了30個),所以利用這種特性,將各節點生成的歸檔傳送到執行備份的節點中,來實現該節點能夠訪問所需的歸檔檔案。
在第二種方案中,我們可以在每個節點建2個歸檔目錄,分別存放本地和其他節點節點的歸檔日誌,這裡假設是2個節點的RAC.
歸檔位置 |
例項1 |
例項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’ |
在每個節點上建2個目錄: /u02/rac1_arch, /u02/rac2_arch, 並賦予讀寫的許可權:
[[email protected] /]# mkdir /u02/rac1_arch
[[email protected] /]# chown oracle:oinstall /u02/*
[[email protected] /]# chmod 777 /u02/*
1.2 RAC 設定成歸檔模式
RAC的歸檔設定和單例項歸檔設定差不多。 先將所有例項設定為非OPEN狀態,然後在任意一個處於MOUNT狀態的例項執行ALTER DATABASE命令,操作成功後,再正常啟動其它例項即可。
之前整理的一篇RAC 歸檔切換的文件,不過和今天這個實驗不太匹配,就重新在整理下。
Oracle RAC 歸檔 與 非歸檔 切換
1.2.1 設定歸檔引數
1.2.1.1 設定例項orcl1的引數:
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 設定例項orcl2的引數:
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個節點上分別驗證引數的狀態:
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 修改資料庫的歸檔模式
SQL> alter system set cluster_database=false scope=spfile sid='*';
System altered.
1.2.2.2 關閉所有例項
SQL> shutdown immediate
1.2.2.3 在任意一個例項上將資料庫啟動到mount狀態,修改資料庫歸檔模式
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 重啟資料庫,確定歸檔生效
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 在兩個節點分別切換歸檔日誌,並檢查對應的目錄是否產生歸檔日誌
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 資料庫各例項擁有各自的REDO執行緒,歸檔檔名的生成規則由LOG_ARCHIVE_FORMAT初始化引數控制,預設情況下是 %t_%s_%r.dbf ,所以不會導致重複的發生。
注意一個引數:LOG_ARCHIVE_LOCAL_FIRST,用來設定是否首先歸檔檔案到本地,預設為true.
LOG_ARCHIVE_LOCAL_FIRST 這個引數是Oracle 10g 新增的,它主要針對Standby環境退出,在Oracle 10g 以前的Standby中,本地和遠端的歸檔都完成後,聯機日誌檔案才可以被重用,在網路速度慢的環境中,遠端歸檔的配置會很大程度的影響節點的處理能力。而設定LOG_ARCHIVE_LOCAL_FIRST=true,Oracle 會先進行本地歸檔,本地歸檔結束後在進行遠端傳遞,同時使聯機日誌可以重用,從而減少了網路環境對本地的影響。 如果把這個引數設定為FALSE, 則相當於Oracle 10g 之前的方式,這個引數預設是True,如果在應用中遇到找不到歸檔日誌的問題,就可以把這個引數改成FALSE.
二、RAC資料庫的RMAN備份
RAC 和 單例項資料庫備份機制是一樣的,有兩點需要注意:
(1) RMAN 要連線到叢集中的某個例項,而不是連線到整個叢集
(2) 備份歸檔日誌時,必須保證在備份例項上能夠訪問所有例項的歸檔日誌,否則就會報錯。
2.1 先看一個歸檔日誌不一致的問題
在這種情況下備份是會報錯的。 之前啟動歸檔之後,2個節點的歸檔目錄檔案是相同的,現在我們模擬歸檔日誌不一致的情況。
先關閉兩個節點的歸檔位置2。 此時歸檔日誌都不能傳遞到對方的歸檔的目錄下。
SQL> alter system set log_archive_dest_state_2 =defer scope=both sid='*';
System altered.
在手動檔產生歸檔日誌:
SQL> alter system switch logfile;
System altered.
此時兩個節點歸檔目錄下檔案不一致。我們連線到rac1節點,然後用rman 備份一下,看報什麼錯
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
這裡報錯了。 現在我們手動把缺失的日誌從rac2節點copy到節點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 歸檔檔案的刪除問題
在上面備份成功後,這裡有一個新問題,就是對歸檔檔案的刪除。通常我們習慣於在備份完歸檔之後刪除原歸檔檔案,以釋放相應的磁碟空間,不過在RAC環境下,只能刪除節點1上的歸檔檔案,節點2上的無法刪除。因為在節點1上操作不了節點2上的歸檔檔案。
這個問題我們可以通過配置通道來解決。一般有幾個例項,我們就配置幾個通道。 配置通道命令如下:
RMAN> configure channel 1 device type disk connect 'sys/[email protected]';
new RMAN configuration parameters:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT 'sys/[email protected]';
new RMAN configuration parameters are successfully stored
RMAN> configure channel 2 device type disk connect 'sys/[email protected]';
new RMAN configuration parameters:
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT 'sys/[email protected]';
new RMAN configuration parameters are successfully stored
RMAN>
檢視通道情況:
RMAN> show channel;
RMAN configuration parameters are:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT 'sys/[email protected]';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT 'sys/[email protected]';
關於RMAN 通道,在我blog:
RMAN 系列(二) ---- RMAN 設定和配置
中的3.4節: 配置RMAN預設設定 中有介紹。
這樣設定通道除了能刪除其他節點的歸檔日誌外, RMAN還能夠智慧的對備份中出現"問題"的任務進行再分配,比如說通道1和通道2同時執行備份,其中通道1備份資料檔案1,3,4,通道2備份資料檔案2和5,假如通道2執行過程中由於某些原因崩潰,RMAN可以自動將任務放回到通道1上執行。
剛才已經配置過2個不同的通道,現在我們來刪除歸檔檔案試試:
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 備份的一個完整例項
關於搭建RMAN 備份平臺的其他相關操作參考Blog:
如何 搭建 RMAN 備份平臺
RMAN 備份的指令碼參考Blog:
Linux 平臺下 RMAN 全備 和 增量備份 shell 指令碼
這裡我們用nocatalog 模式下的全備備份為例,在執行這個指令碼之前需要配置好歸檔。 具體參考前面的說明。
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 -- 注意,這裡需要連線任意節點就可以
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/[email protected]';
allocate channel c2 device type disk connect 'sys/[email protected]';
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/[email protected]';
allocate channel for maintenance device type disk connect 'sys/[email protected]';
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 " [email protected] < $RMAN_LOG_FILE
exit $RSTAT
指令碼中有指定備份檔案的位置。 這裡要注意,如果是直接備份到硬碟上,那麼在兩個節點上都要建立對應的備份目錄。 因為節點1通道的備份檔案會放在節點1上。節點2的備份檔案會放在節點2上。 這種把備份檔案分開存放,當然不方便我們恢復。
開始在這個問題上,也是碰了釘子,後來才弄明白:
RAC RMAN 備份 RMAN-03009 ORA-19504 channel c3 not allocated 錯誤分析
所以,我們可以通過NFS mount 把備份檔案放在一個節點。 或者直接把備份檔案直接存放在儲存上。
關於NFS mount的配置,參考我的Blog:
Linux NFS 和 Samba 共享配置
這裡只是測試,所以採用的是NFS方式。 當然在實際RAC環境下,是放在儲存上的。
------------------------------------------------------------------------------