通过DBMS_SCHEDULER作业备份Oracle物理备用



朋友们!我们有很多主数据库,它们的物理备用数据库位于服务器上的Data Guard配置中。单个服务器上的每个主数据库和单个服务器上每个物理备用数据库。在EM12c中,我们为备份主数据库配置了调度程序作业。不幸的是,当服务器真的很忙时,Agent会暂停备份执行,而我们并没有按照计划进行备份。

因此,我们禁用了EM12c中的备份作业,并希望使用过程DBMS_SCHEDULER.CREATE_JOB在物理待机状态下执行备份。

由于物理备用是只读数据库和主数据库的每个块副本,我必须在主数据库上创建计划作业,并将其应用于备用。

所以,问题是:这可能吗?如果,是的,如何在脚本中实现这一点??

类似这样的东西:

check database_role 
if role='PHYSICAL STANDBY' 
then execute backup script 
else nothing to do..

如果不可能,哪种解决方案最适合解决此任务?有没有一种方法可以解决这个问题,而不在每台服务器上使用单个脚本创建cron任务?是否可以使用恢复目录数据库中的一个全局脚本?

Kris说,我无法从物理备用数据库运行计划作业。因此,我将使用crontab调度我的linux脚本。我的linux脚本是:

#! /usr/bin/bash
LOG_PATH=/home/oracle/scripts/logs; export LOG_PATH
TASK_NAME=backup_database_inc0; export TASK_NAME
CUR_DATE=`date +%Y.%m.%d-%H:%M`; export CUR_DATE
LOGFILE=$LOG_PATH/$TASK_NAME.$CUR_DATE.log; export LOGFILE
    rman target / catalog rmancat/<pswd>@rmancat script 'backup_database' log $LOGFILE
    if [ $? -eq 0 ]
    then
      mail -s "$ORACLE_UNQNAME Backup Status: SUCCESS" dba@server.mail< $LOGFILE
      exit 0
    else
      mail -s "$ORACLE_UNQNAME Backup Status: FAILED" dba@server.mail< $LOGFILE
      exit 1

我不想在每个主机上创建linux文件来调用恢复目录中的备份全局脚本。是否可以在所有主机上配置集中备份执行时间表?我可以将ssh从一个主机配置到所有数据库主机并执行linux脚本进行备份吗?

提前感谢您的回答。

我强烈建议使用Enterprise Manager来运行备份作业。EM与rman目录和每个实例很好地集成在一起,因此您可以只设置rman执行全局脚本命令。其他一切都由EM完成。

我通过EM作业调度程序将作业安排为仅在备用状态下运行,而无需在切换期间更改任何内容。

我只需要级联工作。因此,我有一个步骤来检查目标是否处于备用状态,如果该步骤成功,则我正在运行备份。如果不是,则不会运行下一步。

通过这种方式,监控也与全局数据库监控相集成。您不必在操作系统级别的shell脚本中设置错误捕获。

最新更新