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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

RAC 之 RMAN 备份

發布時間:2025/3/8 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RAC 之 RMAN 备份 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??

RAC 之 RMAN 備份


這篇主要介紹的是RAC 環境下的RMAN 備份。 關于Oracle 備份與恢復的一些理論知識參考我的Blog:

?

? ? ? Oracle 備份 與 恢復 概述

? ? ? ?http://blog.csdn.net/tianlesoftware/archive/2010/04/16/5490733.aspx

?

?

一. ? ? 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, 并賦予讀寫的權限:

?

[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 設置成歸檔模式

? ? ? ?RAC的歸檔設置和單實例歸檔設置差不多。 先將所有實例設置為非OPEN狀態,然后在任意一個處于MOUNT狀態的實例執行ALTER DATABASE命令,操作成功后,再正常啟動其它實例即可。

?

之前整理的一篇RAC 歸檔切換的文檔,不過和今天這個實驗不太匹配,就重新在整理下。

Oracle RAC 歸檔 與 非歸檔 切換

http://blog.csdn.net/tianlesoftware/archive/2010/04/20/5501184.aspx

?

?

?

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/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';

?

關于RMAN 通道,在我blog:

RMAN 系列(二) ---- RMAN 設置和配置

http://blog.csdn.net/tianlesoftware/archive/2010/06/16/5674309.aspx

?

中的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 備份平臺

http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740896.aspx

?

RMAN 備份的腳本參考Blog:

Linux 平臺下 RMAN 全備 和 增量備份 shell 腳本

http://blog.csdn.net/tianlesoftware/archive/2010/07/16/5740630.aspx

?

?

?

這里我們用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/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

?

?

腳本中有指定備份文件的位置。 這里要注意,如果是直接備份到硬盤上,那么在兩個節點上都要創建對應的備份目錄。 因為節點1通道的備份文件會放在節點1上。節點2的備份文件會放在節點2上。 這種把備份文件分開存放,當然不方便我們恢復。

?

開始在這個問題上,也是碰了釘子,后來才弄明白:

RAC RMAN 備份 RMAN-03009 ORA-19504 channel c3 not allocated 錯誤分析

http://blog.csdn.net/tianlesoftware/archive/2010/09/22/5901031.aspx

?

所以,我們可以通過NFS mount 把備份文件放在一個節點。 或者直接把備份文件直接存放在存儲上。 ?

?

關于NFS mount的配置,參考我的Blog:

? ? ? ?Linux NFS 和 Samba 共享配置

http://blog.csdn.net/tianlesoftware/archive/2010/07/22/5752092.aspx

?

這里只是測試,所以采用的是NFS方式。 當然在實際RAC環境下,是放在存儲上的。

?

轉載于:https://blog.51cto.com/itbull/1098554

總結

以上是生活随笔為你收集整理的RAC 之 RMAN 备份的全部內容,希望文章能夠幫你解決所遇到的問題。

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