2017-04-04 26 views
1

专家,我有Oracle数据库11g版本11.2.0.3.0 - 64位生产随着真正的应用集群和自动存储管理。Oracle备份与RMAN需要很长时间

操作系统是Linux Red Hat 2.6.18-348.12.1.el5。

数据库名称:DBNAME

数据库大小约为92 GB。

使用RMAN执行备份需要大约4小时45分钟才能完成任务,并且会损害与数据库交互的其他进程的正确执行。

这些表每天都有很多DML(udpate/insert/delete)。

我看到RMAN日志两位评论家的时刻:

Starting backup at 04-04-2017 04:33:59 
channel dbname_backup_disk1: starting incremental level 1 datafile backup set 
channel dbname_backup_disk1: specifying datafile(s) in backup set 
input datafile file number=00017 name=file_name ....                   
... "here all files"                   
channel dbname_backup_disk1: starting piece 1 at 04-04-2017 04:34:00 
channel dbname_backup_disk1: finished piece 1 at 04-04-2017 07:22:47 
piece handle=+RECOVERY/dbname/backupset/2017_04_04/nnndn1_dbname_level_0_0.2614.940394043 tag=DBNAME_LEVEL_0 comment=NONE 
channel dbname_backup_disk1: backup set complete, ***elapsed time: 02:48:48*** 

和:

Starting backup at 04-04-2017 07:46:20 
backup will be obsolete on date 04-07-2017 07:46:20 
archived logs required to recover from this backup will expire when this 
backup expires 
channel dev1: starting compressed full datafile backup set 
channel dev1: starting piece 1 at 04-04-2017 07:46:21 
channel dev1: finished piece 1 at 04-04-2017 09:22:07 
piece handle=/backup/oracle/backup/DBNAME_940405581_6656_1 tag=TAG20170404T074620 comment=NONE 
channel dev1: backup set complete, ***elapsed time: 01:35:46*** 
Finished backup at 04-04-2017 09:22:07 

请帮我找到钥匙来减少所花费的时间。谢谢

下面的行是主脚本的一部分,称为backup.pl。每天在当地时间凌晨02:30(UTC -3)从crontab执行。

RMAN> run { 
    show all; 
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 1 DAYS; 
    configure controlfile autobackup on; 
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '+RECOVERY/DBTARGET/%F'; 
    CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '+RECOVERY/DBTARGET/%d_%t_%s_%p'; 
    allocate channel dbname_backup_disk1 device type disk; 
    REPORT OBSOLETE; 
    DELETE OBSOLETE; 
    recover copy of database with tag 'dbname_LEVEL_0' until time 'sysdate-1'; 
    backup incremental level 1 cumulative copies=1 for recover of copy with tag 'dbname_LEVEL_0' database include current controlfile; 
    backup archivelog all not backed up format '+RECOVERY/DBTARGET/%d_%t_s%s_s%p'; 
    backup current controlfile for standby; 
    delete archivelog until time='sysdate-3'; 
    release channel dbtarget_backup_disk1; 
    sql "create pfile=''/backup/oracle/backup/ros1or01-initdbtarget1-20170404.ora'' from spfile"; 
    } 
    allocate channel for maintenance type disk; 
    delete noprompt obsolete device type disk; 
    CROSSCHECK BACKUP; 
    CROSSCHECK DATAFILECOPY ALL; 
    CHANGE ARCHIVELOG ALL CROSSCHECK; 
    DELETE EXPIRED ARCHIVELOG ALL; 
    REPORT OBSOLETE; 
    DELETE OBSOLETE; 
    release channel; 
    run 
    { 
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/oracle/backup/%F'; 
    allocate channel dev1 device type disk format '/backup/oracle/backup/%d_%t_%s_%p'; 
    backup backupset completed after 'sysdate-3/24'; 
    backup as compressed backupset datafilecopy all noduplicates KEEP UNTIL TIME 'SYSDATE+3' logs; 
    release channel dev1; 
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '+RECOVERY/DBTARGET/%F'; 
    } 
    quit 
    using target database control file instead of recovery catalog 
    RMAN configuration parameters for database with db_unique_name DBTARGET are: 
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 1 DAYS; 
    CONFIGURE BACKUP OPTIMIZATION OFF; # default 
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default 
    CONFIGURE CONTROLFILE AUTOBACKUP ON; 
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '+RECOVERY/DBTARGET/%F'; 
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default 
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default 
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default 
    CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '+RECOVERY/DBTARGET/%d_%t_%s_%p'; 
    CONFIGURE MAXSETSIZE TO UNLIMITED; # default 
    CONFIGURE ENCRYPTION FOR DATABASE OFF; # default 
    CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default 
    CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default 
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default 
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/cots/oracle/11.2.0/dbhome_1/dbs/snapcf_dbtarget1.f'; # default 

在先进的感谢

+0

除非我错过了一些东西,否则你似乎正在执行增量累积备份,然后是完整备份。为什么要这么做?增量累积备份(级别1)将备份自上次增量级别0备份以来的所有更改...何时最后一次执行增量级别0?由于您已经在进行完整备份,所以您可以快速地使用bandaid,通过完全删除累积级别1,您可以大幅度提高运行时间。然后,将每周一次执行增量级别1和增量级别0的脚本(比如一个周末)放在一起。 –

+0

另外,如果您还没有创建块更改跟踪文件,或者您的增量级别1的速度不会比完整备份(增量级别0)快得多:https://docs.oracle。com/database/121/ADMQS/GUID-3BAA0D48-CA35-4CD7-810E-50C703DC6FEB.htm –

+0

Kris,版本为Standard Edition,不允许使用“块更改跟踪”参数。我会按照你的推荐备份政策。非常感谢 – user2048092

回答

0

能否请你告诉我92GB表达什么?

  • 它是备份大小吗?
  • 这是真正的数据大小吗?
  • 它是所有数据文件的大小吗?

我怀疑它是备份的大小还是真实的数据大小。

我怀疑你有非常零散的表。这意味着,从磁盘读取许多空白块。输出看起来很少工作,但事实上还有很多事情要做(适用于压缩备份)。

除了你的备份脚本是疯了!我会建议先简化它,然后尝试提高性能。

请尝试以下脚本。它和你的差不多:

RMAN> 
#Do all the CONFIGURE... stuff here if you do not want to rely on the current controlfile config. 
# Configure the default channel to disk and configure a format so the output goes to the filesystem not to your FRA (ASM). 
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/DBTARGET/%d_%t_%s_%p'; 
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET; 

# Place your controlfile autobackup to disk not asm. In case of a recovery szenario you will be glad to have it in your filesystem. 
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/DBTARGET/%F'; 

BACKUP DATABASE; 
CROSSCHECK ARCHIVELOG ALL; 
BACKUP ARCHIVELOG ALL DELETE ALL INPUT; 

CROSSCHECK BACKUP; 
DELETE NOPROMPT EXPIRED BACKUP; 
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL; 
DELETE NOPROMPT OBSOLETE; 
run { 
    allocate channel d1 device type disk; 
    recover copy of database with tag 'dbname_LEVEL_0'; 
    backup incremental level 1 for recover of copy with tag 'dbname_LEVEL_0' database; 
} 
+0

92GB表示的输出:从dba_data_files中选择总和(字节)/ 1024/1024 MB;我会按照你对备份脚本变化的建议。非常感谢 – user2048092

+0

这个新脚本只会做“增量1级”备份。以前我必须只获得一次“dbname_LEVEL 0”备份??。谢谢 – user2048092

+0

在您的脚本中,您首先创建了一个图像副本。然后你做其他thigs。图像副本很好地加快了恢复操作,特别是在SE环境中(块损坏)。我还为我的建议添加了图像副本。每次脚本运行时,我的RUN块都会刷新映像副本。第一次它执行0级备份,下一次是1级。我使用与脚本中相同的标记,以便它可以重复使用图像副本而不创建新副本。 –