MAXPIECESIZE與FORMAT參數設定不合理導致RMAN備份失敗,maxpiecesizerman

來源:互聯網
上載者:User

MAXPIECESIZE與FORMAT參數設定不合理導致RMAN備份失敗,maxpiecesizerman
今天去客戶那裡搭建DG,當建立RMAN備份組的時候,遇到了個問題,導致備份組始終無法產生,由於客戶的備份組為10G左右,一次備份就要一個多小時,開始浪費了不少時間,診斷後發現,原來問題出在MAXPIECESIZE上,下面自己做了個測試,來說明這個故障現象和解決方案:
[root@ora10g ~]# su - oracle
[oracle@ora10g ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 24 14:32:34 2014
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining options
SQL> select open_mode from v$database;
OPEN_MODE----------READ WRITE
SQL> exitDisconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining options[oracle@ora10g ~]$ rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on 24 14:32:52 2014
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
connected to target database: ORA10G (DBID=4175411955)
RMAN> show all;
using target database control file instead of recovery catalogRMAN configuration parameters are:CONFIGURE RETENTION POLICY TO REDUNDANCY 5;CONFIGURE BACKUP OPTIMIZATION ON;CONFIGURE DEFAULT DEVICE TYPE TO DISK;CONFIGURE CONTROLFILE AUTOBACKUP ON;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/orabackup/backupsets/ora10g-%F.ctl';CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 10000 M;    --最大備份組限制CONFIGURE MAXSETSIZE TO UNLIMITED; # defaultCONFIGURE ENCRYPTION FOR DATABASE OFF; # defaultCONFIGURE ENCRYPTION ALGORITHM 'AES128'; # defaultCONFIGURE ARCHIVELOG DELETION POLICY TO NONE;CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/10.2.0/db_1/dbs/snapcf_ora10g.f'; # default
RMAN> exit

Recovery Manager complete.[oracle@ora10g ~]$ cd /u01/orabackup/scripts/[oracle@ora10g scripts]$ ls -ltotal 4-rwxr-xr-x 1 oracle oinstall 2443 Dec 24 14:29 backup_full.sh[oracle@ora10g scripts]$ ./backup_full.shRMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> 2> 3> RMAN> RMAN> RMAN> RMAN> [oracle@ora10g backupsets]$ ls -lrthtotal 190M-rw-r----- 1 oracle oinstall 9.8M Dec 24 14:24 ora10g-4175411955_20141224_867162246_380.arc-rw-r----- 1 oracle oinstall 1.7M Dec 24 14:24 ora10g-4175411955_20141224_867162255_381.arc-rw-r----- 1 oracle oinstall 439K Dec 24 14:24 ora10g-4175411955_20141224_867162257_382.arc-rw-r----- 1 oracle oinstall 747K Dec 24 14:33 ora10g-4175411955_20141224_867162820_384.arc-rw-r----- 1 oracle oinstall 170M Dec 24 14:36 ora10g-4175411955_20141224_867162823_385.db-rw-r----- 1 oracle oinstall 491K Dec 24 14:36 ora10g-4175411955_20141224_867162990_386.arc-rw-r----- 1 oracle oinstall 7.3M Dec 24 14:36 ora10g-c-4175411955-20141224-00.ctl[oracle@ora10g backupsets]$ 
根據剛才的配置,正確的產生了RMAN備份組,總大小為190M左右,其中最大的資料檔案的備份組為170M,而在RMAN指令碼中配置的
在備份指令碼中,配置了format格式為“$ORACLE_SID-%I_%T_%t_%s.db”,以下為指令碼具體的語句:
backup as compressed backupset database format '$RMAN_BACKUPSETS/$ORACLE_SID-%I_%T_%t_%s.db' tag 'db_bak' plus archivelog format '$RMAN_BACKUPSETS/$ORACLE_SID-%I_%T_%t_%s.arc' not backed up 1 times delete all input tag 'arc_bak';
當把MAXPIECESIZE的值改小,比之前最大的備份組大小(170M)還要小,比方說改成100M後,再運行之前的備份指令碼,然後查看RMAN輸出的記錄檔,發現報ORA-27038,提示檔案已經存在:
[oracle@ora10g backupsets]$ cat ../logs/rman.log |grep ORA-
ORA-19504: failed to create file "/u01/orabackup/backupsets/ora10g-4175411955_20141224_867163196_389.db"
ORA-27038: created file already exists

channel ORA_DISK_1: starting piece 2 at 2014-12-24RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of backup plus archivelog command at 12/24/2014 14:41:52ORA-19504: failed to create file "/u01/orabackup/backupsets/ora10g-4175411955_20141224_867163196_389.db"ORA-27038: created file already existsAdditional information: 1
正常情況下,產生的最大備份組有170M,但是剛才通過修改MAXPIECESIZE參數為100M後,在產生備份組時,一旦備份組大小超過100M時,就會自動產生第2個備份片,而由於我在format中僅僅是配置了“$ORACLE_SID-%I_%T_%t_%s.db”,這幾個萬用字元的含義是:%I -- DBID%T -- 日期時間(年月日)%t -- 自動產生的時間戳記%s -- 備份組序號(Sequence)
當第一個備份片達到MAXPIECESIZE限定的100M後,想去產生第2個檔案,但是由於這幾個萬用字元不足以區分備份組中的備份片(產生了同一個檔案名稱),當第2個備份片建立時提示檔案已存在,最終導致備份失敗。
解決這個問題的方法有2種:
1. 在format參數中增加%p萬用字元
當超過MAXPIECESIZE後,只有%p才能夠產生不同的備份片,因為%t這個時間戳記不足以區分不同的別分區的名稱

[oracle@ora10g backupsets]$ . ../scripts/backup_full.sh 
RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> 2> 3> RMAN> RMAN> RMAN> RMAN> [oracle@ora10g backupsets]$ ls -lrth ../backupsets/total 375M-rw-r----- 1 oracle oinstall 9.8M Dec 24 14:24 ora10g-4175411955_20141224_867162246_380.arc-rw-r----- 1 oracle oinstall 1.7M Dec 24 14:24 ora10g-4175411955_20141224_867162255_381.arc-rw-r----- 1 oracle oinstall 439K Dec 24 14:24 ora10g-4175411955_20141224_867162257_382.arc-rw-r----- 1 oracle oinstall 747K Dec 24 14:33 ora10g-4175411955_20141224_867162820_384.arc-rw-r----- 1 oracle oinstall 170M Dec 24 14:36 ora10g-4175411955_20141224_867162823_385.db-rw-r----- 1 oracle oinstall 491K Dec 24 14:36 ora10g-4175411955_20141224_867162990_386.arc-rw-r----- 1 oracle oinstall 7.3M Dec 24 14:36 ora10g-c-4175411955-20141224-00.ctl-rw-r----- 1 oracle oinstall  30K Dec 24 14:39 ora10g-4175411955_20141224_867163193_388.arc-rw-r----- 1 oracle oinstall 7.4M Dec 24 15:03 ora10g-4175411955_20141224_867164604_390_1.arc-rw-r----- 1 oracle oinstall  99M Dec 24 15:05 ora10g-4175411955_20141224_867164614_391_1.db-rw-r----- 1 oracle oinstall  73M Dec 24 15:06 ora10g-4175411955_20141224_867164614_391_2.db-rw-r----- 1 oracle oinstall  22K Dec 24 15:06 ora10g-4175411955_20141224_867164776_392_1.arc-rw-r----- 1 oracle oinstall 7.3M Dec 24 15:06 ora10g-c-4175411955-20141224-01.ctl[oracle@ora10g backupsets]$ 
在format中增加%p萬用字元後,問題得到解決,通過指令碼備份組又可以正常建立備份組了,注意由於配置了%p,這裡db的備份組變成了2個備份片,分別為“_1”,“_2”,以100M為分割點(MAXPIECESIZE指定的大小)
[oracle@ora10g backupsets]$ cat ../logs/rman.log |grep ORA-ORA-19504: failed to create file "/u01/orabackup/backupsets/ora10g-4175411955_20141224_867163196_389.db"
ORA-27038: created file already exists[oracle@ora10g backupsets]$ 
由於RMAN備份日誌用的是append方式,抓取出來的這個錯誤時之前記錄進去的,沒有新增的ORA-27038出現了
2. 將MAXPIECESIZE的值清空
MAXPIECESIZE設定為無限大,自然可以解決備份組超過上限的問題,也可以不用配置%p,但是不推薦使用這種方法,如果因為資料庫的資料量非常大,將導致產生的備份組過大,不利於儲存和恢複
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK clear;
old RMAN configuration parameters:CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 100 M;old RMAN configuration parameters are successfully deleted    --原來配置的MAXPIECESIZE的值清空完成
RMAN> show all;
RMAN configuration parameters are:CONFIGURE RETENTION POLICY TO REDUNDANCY 5;CONFIGURE BACKUP OPTIMIZATION ON;CONFIGURE DEFAULT DEVICE TYPE TO DISK;CONFIGURE CONTROLFILE AUTOBACKUP ON;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/orabackup/backupsets/ora10g-%F.ctl';CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE MAXSETSIZE TO UNLIMITED; # defaultCONFIGURE ENCRYPTION FOR DATABASE OFF; # defaultCONFIGURE ENCRYPTION ALGORITHM 'AES128'; # defaultCONFIGURE ARCHIVELOG DELETION POLICY TO NONE;CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/10.2.0/db_1/dbs/snapcf_ora10g.f'; # default
可以看到,剛才MAXPIECESIZE的值在show all中已經不存在了,也就是對備份片沒有限制了
再次進行備份,可以通過指令碼運行,也可以單獨執行下面的備份語句:RMAN> backup as compressed backupset database format '$RMAN_BACKUPSETS/$ORACLE_SID-%I_%T_%t_%s.db' tag 'db_bak' plus archivelog format '$RMAN_BACKUPSETS/$ORACLE_SID-%I_%T_%t_%s.arc' not backed up 1 times delete all input tag 'arc_bak';

[oracle@ora10g backupsets]$ . ../scripts/backup_full.sh RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> RMAN> 2> 3> RMAN> RMAN> RMAN> RMAN> [oracle@ora10g backupsets]$  ls -lrth ../backupsets/total 553M-rw-r----- 1 oracle oinstall 9.8M Dec 24 14:24 ora10g-4175411955_20141224_867162246_380.arc-rw-r----- 1 oracle oinstall 1.7M Dec 24 14:24 ora10g-4175411955_20141224_867162255_381.arc-rw-r----- 1 oracle oinstall 439K Dec 24 14:24 ora10g-4175411955_20141224_867162257_382.arc-rw-r----- 1 oracle oinstall 747K Dec 24 14:33 ora10g-4175411955_20141224_867162820_384.arc-rw-r----- 1 oracle oinstall 170M Dec 24 14:36 ora10g-4175411955_20141224_867162823_385.db-rw-r----- 1 oracle oinstall 491K Dec 24 14:36 ora10g-4175411955_20141224_867162990_386.arc-rw-r----- 1 oracle oinstall 7.3M Dec 24 14:36 ora10g-c-4175411955-20141224-00.ctl-rw-r----- 1 oracle oinstall  30K Dec 24 14:39 ora10g-4175411955_20141224_867163193_388.arc-rw-r----- 1 oracle oinstall 7.4M Dec 24 15:03 ora10g-4175411955_20141224_867164604_390_1.arc-rw-r----- 1 oracle oinstall  99M Dec 24 15:05 ora10g-4175411955_20141224_867164614_391_1.db-rw-r----- 1 oracle oinstall  73M Dec 24 15:06 ora10g-4175411955_20141224_867164614_391_2.db-rw-r----- 1 oracle oinstall  22K Dec 24 15:06 ora10g-4175411955_20141224_867164776_392_1.arc-rw-r----- 1 oracle oinstall 7.3M Dec 24 15:06 ora10g-c-4175411955-20141224-01.ctl-rw-r----- 1 oracle oinstall 457K Dec 24 15:25 ora10g-4175411955_20141224_867165923_394.arc-rw-r----- 1 oracle oinstall 170M Dec 24 15:28 ora10g-4175411955_20141224_867165927_395.db-rw-r----- 1 oracle oinstall  20K Dec 24 15:28 ora10g-4175411955_20141224_867166094_396.arc-rw-r----- 1 oracle oinstall 7.3M Dec 24 15:28 ora10g-c-4175411955-20141224-02.ctl[oracle@ora10g backupsets]$ 
第3次執行備份指令碼產生的備份組沒有分區(因為去掉了%p參數),同時也去掉了MAXPIECESIZE的限制
總結
如果才RMAN參數中配置了MAXIECESIZE的值為一個給定的具體值時,那麼再FORMAT中必須叫上%p的萬用字元,否則一旦備份片超過設定的上限值後,就無法產生後續備份片,導致備份失敗。因此通常情況下,建議配置MAXPIECESIZE參數,並且在FORMAT中加上%U萬用字元,它包含了%u(自動計算出的唯一8位編號),%p(備份片號),%c(備份片拷貝數,1-256)。







相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.