10g RAC rman tips

beatony發表於2010-06-12
1、清除歸檔日誌
由於新的帶庫還沒有到位,所以無法進行,只能臨時先刪除歸檔日誌,刪除一個小時之前的歸檔日誌,歸檔刪除的指令碼如下:
0 * * * * cd /oracle/xigua/rman ; ./clean_arch.sh >> clean_arch.log 2>&1
more clean_arch.sh
#!/bin/ksh

. $HOME/.profile
echo "--------------------------------------------"
echo "Begin delete archivelog ......"
echo "Begin time:"`date`

rman target / nocatalog << !EOF
run
{
allocate channel ch_node1 device type disk connect 'sys/password@rac1_taf' ;
allocate channel ch_node2 device type disk connect 'sys/password@rac2_taf' ;
delete noprompt archivelog until time 'sysdate-0.05';
release channel ch_node1 ;
release channel ch_node2 ;
}
quit
!EOF

echo "Delete archivelog successful."
echo "End time:"`date`

這裡的歸檔保留時間設定的比較小,主要因為目前系統經常需要做資料修改,在短時間內會產生大量的日誌。
/dev/vx/dsk/archdg/archivelv 346112000 16074261 309410509    5% /archivelog
SQL> show parameter db_recovery
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                stri      /archivelog
db_recovery_file_dest_size           big integer 250G
當前的設定如下,/archivelog為兩個節點共享檔案系統。當時我的想法是避免一邊的節點佔用過多的歸檔空間,所以db_recovery_file_dest_size設定為250G,結果節點1因為歸檔空間不夠,hung住了,差點釀成大事故。當然節點2還是正常的。
在這裡,可能大家考慮不同,在設定的時候也會不同。但我還是建議這個size不要設定的太大,避免有問題的時候兩個節點都hung住。這樣最起碼可以保留一個節點是正常的。當然,這個東西也不是絕對的。


2、備份歸檔日誌
對於生產系統,不做備份,風險還是很大的,所以之後找了netapp,san連線,劃了10幾個T用於備份。但是沒有做群集檔案系統,只有節點1可以訪問。
備份歸檔的指令碼:
0 * * * * cd /oracle/xigua/rman ; ./backup_arch.sh >> backup_arch.log 2>&1
cat backup_arch.sh
#!/bin/ksh

. $HOME/.profile

echo "--------------------------------------------"
echo "Begin backup archivelog  ......"
echo "Begin time:"`date`

rman target / nocatalog << !EOF
#CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 8 DAYS ;
run
{
allocate channel ch_rac1 device type disk ;
#allocate channel ch_rac1 device type disk connect 'sys/password@rac1_taf' ;
#allocate channel ch_rac2 device type disk connect 'sys/password@rac2_taf' ;
'alter system archive log current' ;
backup filesperset=10 archivelog until time 'SYSDATE-0.05' delete input format '/racbak/arch_bak/RMAN_ARCH%s%t.arc' ;
release channel ch_rac1 ;
#release channel ch_rac2 ;
}
delete noprompt expired archivelog all ;
delete noprompt obsolete recovery window of 8 days ;
quit
!EOF

echo "Archive logs backup successful."
echo "End time:"`date`

碰到的問題1:
在這裡,原來我是連線到兩個例項進行備份的,但是因為我的檔案系統不是群集檔案系統,只有節點1可以訪問,連線到節點2進行歸檔備份的時候,就會報錯。
input archive log thread=2 sequence=1727 recid=440 stamp=679946290
channel ch_rac2: starti piece 1 at 27-FEB-09
RMAN-03009: failure of backup command on ch_rac2 channel at 02/27/2009 19:00:16
ORA-19504: failed to create file "/racbak/archivelog/RMAN_ARCH2679950014.arc"
ORA-17502: ksfdcre:4 Failed to create file /racbak/archivelog/RMAN_ARCH2679950014.arc
ORA-17500: ODM err:ODM ERROR V-41-4-1-101-2 No such file or directory
channel ch_rac2 disabled, job failed on it will be run on another channel
因為在節點2無法讀寫指定目錄,最終還是將備份傳遞到節點1進行備份。所以後來做了修改,直接連線到本地例項進行備份。
因為我的歸檔目錄/archivelog是共享的群集檔案系統,所以這樣寫,也沒什麼問題,對備份的速度影響也不大,因為不需要在節點之間傳送日誌。
如果兩個節點都寫自己的目錄,比如/arch1,/arch2,在這種情況下,要實現這樣的備份,就會造成日誌在節點之間的傳送,影響備份的速度。


碰到的問題2:
delete noprompt obsolete recovery window of 8 days ;
因為我的檔案系統大小不足,不能保留多份全備和歸檔日誌檔案。因為我是一個星期做一個全備,其他的都只備份歸檔,所以我的想法是保留8天的歸檔加上最後一次全備。對於8天之前歸檔的可以刪除。
對於recovery window保留策略的理解不正確,寫了上面這個語句,結果並不是我期望的結果。在經過多次的之後,才發現原來我對recovery window的理解根本錯誤。

log10               log50   log75  log100  log120
fullbak              fullbak             fullbak  now            
  |                          |                     |             |                           
--|-------------------|----------|-----|----------|------|----------------|-------
  1                        7        11|     14       18|     21               28
                                           |                      |                              
                               recovery window 7 days                                       

假設我們每週全備一次,在1號,7號,14號都做過一次全備,歸檔日誌一直在備份。
當前日期為18號,recoery window=7。
在這種情況下,我們執行delete noprompt obsolete recovery window of 7 days ;只能刪除1號的全備和log50之前的歸檔日誌。
簡單點說,我們可以把 recovery window of 7 days理解為:保留恢復到最近7天內任何一個時刻所需要的備份。
所以,如果我們想刪除14號之前的所有全備和歸檔,可以執行
delete noprompt obsolete recovery window of 1 days ;
這裡1 days,可以換成2 days,3days,4days都可以。


3、備份全庫
全庫備份的指令碼如下:
more backup_full_db.sh
#!/bin/ksh

. $HOME/.profile

echo "--------------------------------------------"
echo "Begin full database backup  ......"
echo "Begin time:"`date`

rman target / nocatalog << !EOF
run
{
allocate channel ch_rac11 device type disk maxpiecesize 20G connect 'sys/password@rac1_taf' ;
allocate channel ch_rac12 device type disk maxpiecesize 20G connect 'sys/password@rac1_taf' ;
allocate channel ch_rac21 device type disk maxpiecesize 20G connect 'sys/password@rac2_taf' ;
allocate channel ch_rac22 device type disk maxpiecesize 20G connect 'sys/password@rac2_taf' ;
backup full database include current controlfile tag 'rac_full_backup' format '/racbak/db_bak/rac_fullbak_%U';
backup current controlfile format '/racbak/db_bak/control_bak_%T';
sql 'alter system archive log current' ;
release channel ch_rac11 ;
release channel ch_rac11 ;
release channel ch_rac21 ;
release channel ch_rac22 ;
}
quit
!EOF

echo "Full Database backup successful."
echo "End time:"`date`

全庫備份有一個問題和歸檔備份一樣,因為備份的目的地只能在節點1讀寫,所以也會在執行的時候報錯,然後傳遞到節點1執行備份。


4、增量合併和壓縮備份
全庫備份和歸檔的備份太消耗空間,都無法同時保留兩份全備,所以想節約一點空間,想到了兩個新特性:
1)壓縮備份,壓縮備份怕消耗的CPU比較多、備份速度不夠快,所以也沒敢做。
2)增量合併。
   啟用增量合併需要開啟跟蹤
   alter database enable block chae tracki usi file '/racbak/chae.log';
   跟蹤檔案中記錄的應該是檔案號,變更的塊號等資訊,所以這個檔案的體積不會長的很大。metalink還提供了一個詳細的檔案大小演算法:
   Doc ID: 306112.1
   size of chae tracki file = # of redo threads * (# of old backups + 2) * (size of db/250000)
   所以這個檔案在我們的系統中基本不會超過1G,大小是可以接受的。
   新特性總是讓你擔心bug的問題,所以順手查了一下,結果找到一個bug,Bug No. 7408455。
   CTWR CRASHED DATABASE INSTANCE WITH ORA-00600 [KRCCAUB_2]
   在核心業務系統上,還是穩定壓倒一切,所以還是決定不用了。
  
指令碼如下:
零級備份
more backup_full_db_lv0.sh
#!/bin/sh

. $HOME/.profile

echo "--------------------------------------------"
echo "Begin database level 0 full backup  ......"
echo "Begin time:"`date`

rman target / nocatalog << !EOF
run
{
allocate channel ch_rac11 device type disk maxpiecesize 20G connect 'sys/password@rac1_taf' ;
allocate channel ch_rac12 device type disk maxpiecesize 20G connect 'sys/password@rac1_taf' ;
allocate channel ch_rac21 device type disk maxpiecesize 20G connect 'sys/password@rac2_taf' ;
allocate channel ch_rac22 device type disk maxpiecesize 20G connect 'sys/password@rac2_taf' ;
backup incremental level 0 database include current controlfile tag 'fullbak_lv0' format '/racbak/rac_fullbak_lv0_%U';
backup current controlfile format '/racbak/control_bak_%T';
sql 'alter system archive log current' ;
release channel ch_rac11 ;
release channel ch_rac11 ;
release channel ch_rac21 ;
release channel ch_rac22 ;
}
quit
!EOF

echo "Database level 0 full backup successful."
echo "End time:"`date`

1級增量合併
cat backup_full_db_lv1.sh
#!/bin/ksh

######
# Enable block chae tracki:
# alter database enable block chae tracki usi file '/racdata1/chae.log' ;
# Disable block chae tracki:
# alter database disable block chae tracki ;
# Query block chae tracki status:
# select filename, status from v$block_chae_tracki ;
#
######

. $HOME/.profile

echo "--------------------------------------------"
echo "Begin database level 1 incremental backup  ......"
echo "Begin time:"`date`

rman target / nocatalog << !EOF
run
{
allocate channel ch_rac11 device type disk maxpiecesize 20G connect 'sys/password@rac1_taf' ;
allocate channel ch_rac12 device type disk maxpiecesize 20G connect 'sys/password@rac1_taf' ;
allocate channel ch_rac21 device type disk maxpiecesize 20G connect 'sys/password@rac2_taf' ;
allocate channel ch_rac22 device type disk maxpiecesize 20G connect 'sys/password@rac2_taf' ;
backup incremental level 1 for recover of copy with tag 'fullbak_lv0' database include current controlfile format '/racbak/rac_fullbak_lv0_%U';
backup current controlfile format '/racbak/control_bak_%T';
sql 'alter system archive log current' ;
release channel ch_rac11 ;
release channel ch_rac11 ;
release channel ch_rac21 ;
release channel ch_rac22 ;
}
quit
!EOF

echo "Database level 1 incremental backup successful."
echo "End time:"`date`   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22578826/viewspace-665096/,如需轉載,請註明出處,否則將追究法律責任。

相關文章