【问题标题】:Oracle Backup with RMAN take a long time使用 RMAN 进行 Oracle 备份需要很长时间
【发布时间】:2017-08-29 20:23:12
【问题描述】:

专家,我有 Oracle 数据库 11g 版本 11.2.0.3.0 - 具有真正应用集群和自动存储管理的 64 位生产。

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

数据库名称:数据库名

数据库大小约为 92 GB。

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

这些表每天每时每刻都有很多 DML(更新/插入/删除)。

我在 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。每天凌晨 2: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

在此致谢

【问题讨论】:

  • 除非我遗漏了什么,否则您似乎在进行增量累积备份,然后进行完整备份。为什么要这么做?增量累积备份(级别 1)将备份自上次增量级别 0 备份以来的所有更改...您上次进行增量级别 0 备份是什么时候?由于您已经在进行完整备份,因此作为快速创可贴,您可以通过完全删除增量累积级别 1 来显着提高运行时间。然后,编写一个脚本,该脚本每晚执行一次增量 1 级,每周执行一次增量 0 级(比如在一个周末)。
  • 另外,如果您还没有一个块更改跟踪文件,或者您的增量级别 1 不会比您的完整备份(增量级别 0)快多少:docs.oracle.com/database/121/ADMQS/…
  • Kris,版本为标准版,不允许“区块变更跟踪”参数。我将遵循您关于备份策略的建议。非常感谢

标签: oracle oracle11g rman


【解决方案1】:

你能告诉我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;
}

【讨论】:

  • 92GB 表示输出:select sum(bytes)/1024/1024 MB from dba_data_files;我会按照您对备份脚本更改的建议进行操作。非常感谢
  • 这个新脚本只会做“增量 1 级”备份???。以前我必须只获得一次“dbname_LEVEL 0”备份??。谢谢
  • 在您的脚本中,您首先创建了一个图像副本。然后你做其他事情。映像副本可以很好地加快恢复操作,尤其是在 SE 环境中(块损坏)。我还在我的推荐中添加了图像副本。每次脚本运行时,我的 RUN 块都会刷新图像副本。第一次进行 0 级备份,下一次进行 1 级备份。我使用了与脚本中相同的标签,因此它会重复使用您的图像副本,而不是创建新的。
  • 如果您配置一次 RMAN,所有CONFIGURE 行都可以被删除。
猜你喜欢
  • 2013-12-29
  • 2021-12-25
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多