如何刪除控制文件中過去rman備份到磁帶的備份集


案例分析:

問題描述:監控短信通知一oracle服務器磁盤空間告警,登錄主機后確認為備份目錄使用率過高,此目錄只做rman備份,且rman保留策略為1份,正常不可能磁盤空間告警,查看rman備份腳本,備份存儲在本地磁盤,其中腳本中刪除過期備份策略沒有問題,如下:
report obsolete;

crosscheck archivelog all; 
crosscheck backup;
crosscheck copy;
delete noprompt expired backup;
delete noprompt expired copy;
delete noprompt obsolete;


手工執行刪除過期備份命令,出現如下報錯(且從備份日志中也看到每次執行此步驟都報錯,所以過期備份一直沒有刪除,導致了磁盤空間緊張):
RMAN> delete obsolete; --報錯RMAN-06091:備份通道不匹配
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of delete command at 05/07/2008 22:04:21
RMAN-06091: no channel allocated for maintenance (of an appropriate type)

這個命令沒有問題,為何會執行失敗呢,列出備份信息,發現有SBT類型的備份,突然想起此oracle服務器近期通過rman整庫遷移方式搬遷的,而老庫是使用的NBU備份到磁帶庫,則老庫的備份信息保留在控制文件中,而新庫的控制文件在搬遷過程中使用的是老庫的,這些存儲在控制文件中的老庫中的備份,在檢查時被發現,沒有分配合適的通道,無法刪除。所以執行命令報錯了,所以現在問題就是怎樣去把控制文件中的那些到磁帶的備份信息刪掉。
RMAN> list backup summary;
List of Backups
===============
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
41333 B 0 A SBT_TAPE 15-FEB-17 1 1 NO HOT_DB_BK_LEVEL0
41340 B 0 A SBT_TAPE 15-FEB-17 1 1 NO HOT_DB_BK_LEVEL0
.............
41372 B A A SBT_TAPE 16-FEB-17 1 1 NO TAG20170216T000929
41386 B F A SBT_TAPE 20-FEB-17 1 1 NO TAG20170220T001015
.............

生產為上,先強制刪除類型為disk的過期備份釋放空間吧。
RMAN> delete force noprompt obsolete device type disk;


再想辦法磁帶的備份信息刪掉,但問題關鍵是現在已經沒有磁帶備份設備了,則無法為其分配磁帶通道,怎樣去分配一個到磁帶的渠道,幸運的是看到了一個類似的案例
Suppose your current backup strategy uses only disk, but you have several old tape backups you want to get rid of. You can allocate a maintenance channel for performing the deletion of the tape backups by using the dummy sbt API (because the media manager isn’t available any longer). You can then use the delete obsolete command to remove the tape backups. Here’s an example showing how to do those things:
RMAN> allocate channel for maintenance device type sbt
parms 'SBT_LIBRARY=Oracle.disksbt,
ENV=(BACKUP_DIR=/tmp)';
RMAN> delete obsolete;
Although the media manager isn’t available any longer, RMAN simulates a callout to the media management layer (MML) and successfully initiates the maintenance command to delete the old tape backups you want toget rid of.

於是執行如下,過期與廢棄的SBT類型的備份都被刪除了:
RMAN> allocate channel for maintenance device type sbt parms 'SBT_LIBRARY=oracle.disksbt, ENV=(BACKUP_DIR=/tmp)';
RMAN> delete noprompt obsolete;
RMAN> delete noprompt expired backup;
RMAN> release channel ;

再查看備份集信息,發現居然還有SBT類型的備份,這是怎么回事?繼續執行看看什么情況:
RMAN> list backup summary;
RMAN> allocate channel for maintenance device type sbt parms 'SBT_LIBRARY=oracle.disksbt, ENV=(BACKUP_DIR=/tmp)';
allocated channel: ORA_MAINT_SBT_TAPE_2
channel ORA_MAINT_SBT_TAPE_2: SID=1281 instance=notedb2 device type=SBT_TAPE
channel ORA_MAINT_SBT_TAPE_2: WARNING: Oracle Test Disk API
注:如果曾經使用過SBT,現在沒有磁帶備份設備,而且rman也無法連接到磁帶通道,oracle給出上述測試API。

RMAN> delete backup;
List of Backup Pieces
BP Key BS Key Pc# Cp# Status Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
41333 41333 1 1 AVAILABLE SBT_TAPE bk_41368_1_935977151
41334 41334 1 1 AVAILABLE SBT_TAPE bk_41367_1_935977150
41372 41372 1 1 AVAILABLE SBT_TAPE al_41407_1_936058169
41385 41385 1 1 AVAILABLE SBT_TAPE al_41418_1_936403779
41386 41386 1 1 AVAILABLE SBT_TAPE cntrl_41420_1_936403815
Do you really want to delete the above objects (enter YES or NO)? yes
RMAN-06207: WARNING: 18 objects could not be deleted for SBT_TAPE channel(s) due
RMAN-06208: to mismatched status. Use CROSSCHECK command to fix status

RMAN> crosscheck backup;
RMAN> delete noprompt expired backup;
RMAN> list backup summary;
從上述可看到,未刪除的SBT備份是因其SBT_TAPE 不匹配狀態,需執行CROSSCHECK檢查備份的有效性,嚴重警告:生產庫上直接delete backup操作是不允許的,因當前操作做了穩妥的備案,所以執行此命令查看狀態,最終發現了問題並解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM