rman備份rac的總結
參考文件:http://blog.chinaunix.net/u1/38775/showart_468805.html
一、歸檔日誌分別存放在本地
備份部分:
對於建立在裸裝置上的RAC環境,由於歸檔不能存放到裸裝置上,因此,所有的歸檔都必須儲存在本地的磁碟上。直接透過RMAN備份會導致錯誤。
首先模仿裸裝置的情況,修改原來LOG_ARCHIVE_DEST_1的配置,將每個例項的歸檔改在本地硬碟:
節點一:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/data1/archivelog' SID = 'testrac1';
節點二:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/data1/archivelog' SID = 'testrac2';
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> backup database plus archivelog delete all input;
6> }
恢復部分:
下面準備透過RMAN進行資料庫的恢復。由於RAC的備份是同時備份到兩個節點的本地硬碟上,因此恢復的時候也應該兩個節點同時進行RESTORE操作。
可以在兩個節點上分別啟動RMAN,將資料庫處於STARTUP MOUNT狀態,然後就可以在任意一個節點上執行RESTORE操作:
分別在兩個節點上如下操作:
$ rman target /
RMAN> startup mount
在任意節點上恢復資料檔案
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> restore database;
6> }
下面恢復歸檔日誌:
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> restore (archivelog sequence between 179 and 183 thread 1)
6> (archivelog sequence between 99 and 103 thread 2);
7> }
現在面臨一個問題,對於還原(RESTORE)操作,可以兩個例項同時進行,但是對於恢復(RECOVER)操作,只能一個例項完成。
這就要求一個例項必須能同時看到兩個例項的歸檔日誌。可以透過nfs mount等方式來實現,這裡採用最簡單的方法,將節點2上的歸檔複製到節點1的歸檔目錄下。
首先關閉資料庫,然後將兩個例項都啟動到mount狀態,然後透過RMAN進行恢復。
RMAN> host 'rcp 172.25.198.223:/data1/archivelog/* /data1/archivelog'
2> ;
主機命令完成
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> recover database;
6> }
二、歸檔日誌在本地放一份,在ASM上放一份
由於日誌檔案的備份和還原只能透過本地的例項進行,而對於恢復的例項來說,並非所有的歸檔日誌都是可見的。這就要求歸檔日誌在還原完成之後,必須透過手工的方式同步到恢復站點,就不僅增加了恢復的複雜性,而且效率比較低,還要求使用者必須清楚的知道需要還原的歸檔日誌有哪些。
解決方法一:將歸檔日誌放到ASM上
如果將歸檔日誌放到ASM上,那麼備份和恢復RAC資料庫就像備份和恢復一個單例項資料庫一樣簡單了。不過ASM有ASM的缺點,個人感覺ASM目前的bug還相對多一些,也許11g的時候,ASM會更加成熟。因此,把資料檔案放到ASM上還是有風險的,不過將歸檔放到ASM上就相對安全一些了。不過如果ASM出現了故障,仍然會導致無法完成歸檔使得資料庫停止響應。個人認為,最穩妥的方法仍然是將歸檔設定在本地的磁碟上,同時兩個例項設定第二歸檔目的地:ASM。利用RMAN的歸檔定位自動FAILOVER功能,來實現歸檔的備份和恢復。
設定log_archive_dest_2到ASM上:
SQL> alter system set log_archive_dest_2 = 'LOCATION=+DISK/testrac/';
備份部分:
1、先備份一次本地的日誌,並刪除
RMAN> run
2> {
3> allocate channel c1 device type sbt connect sys/test@testrac1;
4> allocate channel c2 device type sbt connect sys/test@testrac2;
5> backup archivelog all delete all input;
6> }
2、再整庫+歸檔日誌備份,因本地日誌已找不到,RMAN會找存在於ASM上的歸檔日誌
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> backup database plus archivelog delete all input;
6> }
恢復部分:
$ srvctl stop db -d testrac
$ rman target /
RMAN> startup mount
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> restore database;
6> }
由於設定了ASM,可以不必還原歸檔,而直接進行恢復:
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> recover database;
6> }
問題:
但是這種備份方式存在問題,BACKUP DATABASE PLUS ARCHIVELOG DELETE ALL INPUT由於只連線一個例項,因此只會清除當前例項上的歸檔日誌和ASM上的歸檔日誌,對應另一個例項上的歸檔則無法清除。
解決這個問題的最簡單的辦法是在備份資料庫的時候不要使用DELETE語句,在備份完成後,另外分配合適的CHANNEL來刪除所有的歸檔日誌。
三、歸檔日誌放在本地,使用NFS解決
Oracle的官方文件給出的方法就是透過NFS MOUNT方式來實現。
準備部分:
採用這個方法需要保證每個節點的歸檔目的地都是唯一的,並將這個歸檔目的地以NFS MOUNT方式載入到遠端站點。
首先在兩個節點上分別建立歸檔的目的目錄:
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
$ mkdir /data1/archivelog1 /data1/archivelog2
$ exit
# hostname
racnode1
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
$ mkdir /data1/archivelog1 /data1/archivelog2
$ exit
# hostname
racnode2
在節點一設定目錄的共享:
# share -F nfs -o rw=racnode2 /data1/archivelog1
在節點二設定目錄的共享:
# share -F nfs -o rw=racnode1 /data1/archivelog2
在節點一載入節點二的目錄:
# mount racnode2:/data1/archivelog2 /data1/archivelog2
在節點二載入節點一的目錄:
# mount racnode1:/data1/archivelog1 /data1/archivelog1
分別在節點一和節點二上執行 df –k,確保NFS MOUNT已經載入成功。
注意,如果需要配置在系統重啟後生效,應該將share命令和mount命令的修改新增到主機的/etc/dfs/dfstab檔案和/etc/vfstab。詳細內容可以參考:http://yangtingkun.itpub.net/post/468/284160
如果希望系統重啟後自動進行mount,那麼在nfs客戶端,需要修改/etc/vfstab檔案:
racnode2:/data1/archivelog - /archivelog2 nfs - yes -
為了保證nfs的伺服器端重啟後,share資訊不丟失,可以在/etc/dfs/dfstab檔案中新增:
share -F nfs -o rw=racnode1 /data1/archivelog
下面修改資料庫的初始化引數:
$ sqlplus "/ as sysdba"
SQL> col value format a50
SQL> select inst_id, value from gv$parameter where name = 'log_archive_dest_1';
INST_ID VALUE
---------- --------------------------------------------------
2 LOCATION=/data1/archivelog
1 LOCATION=/data1/archivelog
SQL> alter system set log_archive_dest_1 = 'LOCATION=/data1/archivelog1' sid = 'testrac1';
SQL> alter system set log_archive_dest_1 = 'LOCATION=/data1/archivelog2' sid = 'testrac2';
備份部分:
備份現有歸檔日誌,確保新的設定對以後的備份生效。
RMAN> run
2> {
3> allocate channel c1 device type sbt connect sys/test@testrac1;
4> allocate channel c2 device type sbt connect sys/test@testrac2;
5> backup archivelog all delete all input;
6> }
下面就可以在任意一個節點上進行備份:
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> backup database plus archivelog delete all input;
6> }
恢復部分:
$ srvctl stop db -d testrac
$ rman target /
RMAN> startup mount
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> restore database;
6> recover database;
7> }
問題:
由於在主機上進行了NFS mount,資料庫的備份和恢復可以透過一個節點進行。但是這種情況存在著一個比較嚴重的問題。就是NFS mount在一個節點沒有啟動的情況下,會極大的影響另一個節點的效能。也就是說,如果RAC一個節點出現故障,導致機器無法正常啟動的話,另一個節點不但要承擔全部的資料庫壓力,而且還會受到nfs mount帶來的效能負載,基本上導致這個節點無法正常工作。
由於效能上的考慮,使用NFS mount的時候一定要慎重。
一、歸檔日誌分別存放在本地
備份部分:
對於建立在裸裝置上的RAC環境,由於歸檔不能存放到裸裝置上,因此,所有的歸檔都必須儲存在本地的磁碟上。直接透過RMAN備份會導致錯誤。
首先模仿裸裝置的情況,修改原來LOG_ARCHIVE_DEST_1的配置,將每個例項的歸檔改在本地硬碟:
節點一:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/data1/archivelog' SID = 'testrac1';
節點二:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/data1/archivelog' SID = 'testrac2';
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> backup database plus archivelog delete all input;
6> }
恢復部分:
下面準備透過RMAN進行資料庫的恢復。由於RAC的備份是同時備份到兩個節點的本地硬碟上,因此恢復的時候也應該兩個節點同時進行RESTORE操作。
可以在兩個節點上分別啟動RMAN,將資料庫處於STARTUP MOUNT狀態,然後就可以在任意一個節點上執行RESTORE操作:
分別在兩個節點上如下操作:
$ rman target /
RMAN> startup mount
在任意節點上恢復資料檔案
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> restore database;
6> }
下面恢復歸檔日誌:
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> restore (archivelog sequence between 179 and 183 thread 1)
6> (archivelog sequence between 99 and 103 thread 2);
7> }
現在面臨一個問題,對於還原(RESTORE)操作,可以兩個例項同時進行,但是對於恢復(RECOVER)操作,只能一個例項完成。
這就要求一個例項必須能同時看到兩個例項的歸檔日誌。可以透過nfs mount等方式來實現,這裡採用最簡單的方法,將節點2上的歸檔複製到節點1的歸檔目錄下。
首先關閉資料庫,然後將兩個例項都啟動到mount狀態,然後透過RMAN進行恢復。
RMAN> host 'rcp 172.25.198.223:/data1/archivelog/* /data1/archivelog'
2> ;
主機命令完成
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> recover database;
6> }
二、歸檔日誌在本地放一份,在ASM上放一份
由於日誌檔案的備份和還原只能透過本地的例項進行,而對於恢復的例項來說,並非所有的歸檔日誌都是可見的。這就要求歸檔日誌在還原完成之後,必須透過手工的方式同步到恢復站點,就不僅增加了恢復的複雜性,而且效率比較低,還要求使用者必須清楚的知道需要還原的歸檔日誌有哪些。
解決方法一:將歸檔日誌放到ASM上
如果將歸檔日誌放到ASM上,那麼備份和恢復RAC資料庫就像備份和恢復一個單例項資料庫一樣簡單了。不過ASM有ASM的缺點,個人感覺ASM目前的bug還相對多一些,也許11g的時候,ASM會更加成熟。因此,把資料檔案放到ASM上還是有風險的,不過將歸檔放到ASM上就相對安全一些了。不過如果ASM出現了故障,仍然會導致無法完成歸檔使得資料庫停止響應。個人認為,最穩妥的方法仍然是將歸檔設定在本地的磁碟上,同時兩個例項設定第二歸檔目的地:ASM。利用RMAN的歸檔定位自動FAILOVER功能,來實現歸檔的備份和恢復。
設定log_archive_dest_2到ASM上:
SQL> alter system set log_archive_dest_2 = 'LOCATION=+DISK/testrac/';
備份部分:
1、先備份一次本地的日誌,並刪除
RMAN> run
2> {
3> allocate channel c1 device type sbt connect sys/test@testrac1;
4> allocate channel c2 device type sbt connect sys/test@testrac2;
5> backup archivelog all delete all input;
6> }
2、再整庫+歸檔日誌備份,因本地日誌已找不到,RMAN會找存在於ASM上的歸檔日誌
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> backup database plus archivelog delete all input;
6> }
恢復部分:
$ srvctl stop db -d testrac
$ rman target /
RMAN> startup mount
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> restore database;
6> }
由於設定了ASM,可以不必還原歸檔,而直接進行恢復:
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> recover database;
6> }
問題:
但是這種備份方式存在問題,BACKUP DATABASE PLUS ARCHIVELOG DELETE ALL INPUT由於只連線一個例項,因此只會清除當前例項上的歸檔日誌和ASM上的歸檔日誌,對應另一個例項上的歸檔則無法清除。
解決這個問題的最簡單的辦法是在備份資料庫的時候不要使用DELETE語句,在備份完成後,另外分配合適的CHANNEL來刪除所有的歸檔日誌。
三、歸檔日誌放在本地,使用NFS解決
Oracle的官方文件給出的方法就是透過NFS MOUNT方式來實現。
準備部分:
採用這個方法需要保證每個節點的歸檔目的地都是唯一的,並將這個歸檔目的地以NFS MOUNT方式載入到遠端站點。
首先在兩個節點上分別建立歸檔的目的目錄:
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
$ mkdir /data1/archivelog1 /data1/archivelog2
$ exit
# hostname
racnode1
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
$ mkdir /data1/archivelog1 /data1/archivelog2
$ exit
# hostname
racnode2
在節點一設定目錄的共享:
# share -F nfs -o rw=racnode2 /data1/archivelog1
在節點二設定目錄的共享:
# share -F nfs -o rw=racnode1 /data1/archivelog2
在節點一載入節點二的目錄:
# mount racnode2:/data1/archivelog2 /data1/archivelog2
在節點二載入節點一的目錄:
# mount racnode1:/data1/archivelog1 /data1/archivelog1
分別在節點一和節點二上執行 df –k,確保NFS MOUNT已經載入成功。
注意,如果需要配置在系統重啟後生效,應該將share命令和mount命令的修改新增到主機的/etc/dfs/dfstab檔案和/etc/vfstab。詳細內容可以參考:http://yangtingkun.itpub.net/post/468/284160
如果希望系統重啟後自動進行mount,那麼在nfs客戶端,需要修改/etc/vfstab檔案:
racnode2:/data1/archivelog - /archivelog2 nfs - yes -
為了保證nfs的伺服器端重啟後,share資訊不丟失,可以在/etc/dfs/dfstab檔案中新增:
share -F nfs -o rw=racnode1 /data1/archivelog
下面修改資料庫的初始化引數:
$ sqlplus "/ as sysdba"
SQL> col value format a50
SQL> select inst_id, value from gv$parameter where name = 'log_archive_dest_1';
INST_ID VALUE
---------- --------------------------------------------------
2 LOCATION=/data1/archivelog
1 LOCATION=/data1/archivelog
SQL> alter system set log_archive_dest_1 = 'LOCATION=/data1/archivelog1' sid = 'testrac1';
SQL> alter system set log_archive_dest_1 = 'LOCATION=/data1/archivelog2' sid = 'testrac2';
備份部分:
備份現有歸檔日誌,確保新的設定對以後的備份生效。
RMAN> run
2> {
3> allocate channel c1 device type sbt connect sys/test@testrac1;
4> allocate channel c2 device type sbt connect sys/test@testrac2;
5> backup archivelog all delete all input;
6> }
下面就可以在任意一個節點上進行備份:
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> backup database plus archivelog delete all input;
6> }
恢復部分:
$ srvctl stop db -d testrac
$ rman target /
RMAN> startup mount
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> restore database;
6> recover database;
7> }
問題:
由於在主機上進行了NFS mount,資料庫的備份和恢復可以透過一個節點進行。但是這種情況存在著一個比較嚴重的問題。就是NFS mount在一個節點沒有啟動的情況下,會極大的影響另一個節點的效能。也就是說,如果RAC一個節點出現故障,導致機器無法正常啟動的話,另一個節點不但要承擔全部的資料庫壓力,而且還會受到nfs mount帶來的效能負載,基本上導致這個節點無法正常工作。
由於效能上的考慮,使用NFS mount的時候一定要慎重。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24486203/viewspace-1801470/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 楊廷琨大師總結:RMAN備份恢復--RAC環境資料庫的備份資料庫
- oracle RMAN 備份恢復總結Oracle
- oracle RMAN 備份恢復總結Oracle
- RAC模式下的備份策略以及RMAN備份指令碼模式指令碼
- [記錄]oracle RMAN 備份恢復總結Oracle
- RMAN備份異機恢復流程總結
- RAC模式下的備份策略以及RMAN備份指令碼(轉)模式指令碼
- RAC模式下的備份策略以及RMAN備份指令碼(ZF)模式指令碼
- RMAN備份恢復——RAC環境資料庫的備份(zt)資料庫
- RMAN備份恢復--RAC環境資料庫的備份(十)資料庫
- RMAN備份恢復——RAC環境資料庫的備份(一)資料庫
- RMAN備份相關知識與技能總結
- Oracle的RMAN備份恢復,先從進入RMAN開始總結Oracle
- aix下rac環境rman備份策略部署AI
- Oracle RAC 利用RMAN自動排程備份Oracle
- 【RMAN】RMAN的備份保留策略
- RAC環境下的RMAN 備份指令碼一例指令碼
- RMAN的備份原理
- RMAN的備份加密加密
- Backup And Recovery User's Guide-備份RMAN備份-使用RMAN備份備份集GUIIDE
- Backup And Recovery User's Guide-RMAN備份概念-RMAN備份的多個拷貝-備份的備份GUIIDE
- RMAN說,我能備份(9)--RMAN增量備份與備份保留策略
- exp備份和rman備份的區別
- 【RMAN】RMAN備份至ASMASM
- Aix下使用rman備份Oracle RAC資料庫(轉)AIOracle資料庫
- RMAN說,我能備份(14)--實戰RMAN備份
- 如何準確結束RMAN備份程式
- RMAN結合Read Only、Exclude的備份策略
- RMAN說,我能備份(11)--RMAN中的備份集屬性
- rman 備份策略
- RMAN備份原理
- Backup And Recovery User's Guide-備份RMAN備份-用RMAN備份映象拷貝備份GUIIDE
- rman備份的其它特性
- RMAN備份的並行並行
- Oracle裡邏輯備份、物理備份、Rman備份的區別Oracle
- RMAN說,我能備份(3)--RMAN全庫備份和表空間備份
- RMAN說,我能備份(18)--RMAN中的加密備份和CATALOG加密
- RMAN說,我能備份(13)--RMAN中的備份壓縮和加密加密