【问题标题】:Rman bash script with cronjob带有 cronjob 的 Rman bash 脚本
【发布时间】:2022-06-15 11:28:30
【问题描述】:

我有一个 rman bash 脚本,当我执行它时可以使用 (./backup.sh)。 但是当我使用 cronjob 时,它不起作用。 我的脚本如下

backup.sh

rman target / @backup.rcv log=rman.log

backup.rcv

backup format '/backup/rman/backup/%U.arch.rman' filesperset 2 archivelog all delete input; backup format '/backup/rman/backup/%U.datafiles.rman' filesperset 2 incremental level 0 database; backup format '/backup/rman/backup/%U.arch.rman' filesperset 2 archivelog all delete input; backup format '/backup/rman/backup/%U.ctl.rman' current controlfile; delete noprompt obsolete;

我的 cronjob 看起来像这样

crontab -l

5 0 * * * /nas_backup/rman/svbo/backup/L0backup.sh >/dev/null 2>&1

我对这个 rman 和 bash 脚本非常陌生,因此我们将不胜感激

【问题讨论】:

  • 您可能需要在脚本中设置 Oracle 环境,例如 ORACLE_HOME、ORACLE_SID、PATH、LD_LIBRARY_PATH。或者,如果您有 oraenv 设置 - 只需在您的脚本中执行 oraenv。
  • crontab 中的环境与 bash 中的环境不同。在您的 crontab 中,将 >/dev/null 2>&1 替换为 >/tmp/out.log 2>/tmp/err.log。这将在运行时向您显示错误。就像@Pankaj 所说,它很可能缺少一些环境变量,或者 rman 的路径。

标签: bash oracle rman


【解决方案1】:

步骤 01. 创建具有以下内容的备份脚本(根据需要进行修改)

#!/bin/sh 
#
# Run as: oracle
#
export ORACLE_SID=orcl
export ORACLE_HOME=/oradb/oraclebase/dbhome

rman target /  << EOI
  # Allocating channels (should equal number of physical CPU #lscpu)
  ALLOCATE CHANNEL CH1 DEVICE TYPE DISK;
  ALLOCATE CHANNEL CH2 DEVICE TYPE DISK;

  # change into the highest rate compression - required license 
  CONFIGURE COMPRESSION ALGORITHM 'HIGH' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD FALSE;

  # validate physical existence of backupset & copy
  CROSSCHECK BACKUPSET;
  CROSSCHECK COPY;
  
  # removing metadata of "EXPIRED" info from the catalog
  DELETE NOPROMPT EXPIRED BACKUPSET;
  DELETE NOPROMPT EXPIRED COPY;

  # Backup full database (incremental level 0) on Sunday
  BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE FORMAT '/backup/%d_full_level_0_%U.bak';
  #incremental level 1 on the other days not Sunday
  #enabling block change tracking if you want level 1 goes fast
  #BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE FORMAT '/backup/%d_full_level_1_%U.bak';

  # Backup archivelog log
  BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL DELETE INPUT FORMAT '/backup/%_ARCHIVE_%U.bak';;

  # Clean obsolete backups depending on setting of retention policy 
  CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
  DELETE NOPROMPT OBSOLETE;

  # Allocated channel will release automatically ;)
  exit

EOI

exit

步骤 02:更改所有者和权限 步骤 03:为该脚本设置 crontab 作业。

【讨论】:

    【解决方案2】:

    为了解决这个问题,请替换“L0backup.sh”中的代码 与

    #!/bin/bash
    #
    export ORACLE_SID=your-sid
    export ORACLE_HOME=your-oracle-home
    $ORACLE_HOME/bin/rman target / nocatalog  <<EOF
    backup format '/nas_backup/rman/backup/%U.arch.rman' filesperset 2 archivelog all delete input;
    backup format '/nas_backup/rman/backup/%U.datafiles.rman' filesperset 2 incremental level 0 database;
    backup format '/nas_backup/rman/backup/%U.arch.rman' filesperset 2 archivelog all delete input;
    backup format '/nas_backup/rman/backup/%U.ctl.rman' current controlfile;
    delete noprompt obsolete;
    EOF
    

    获取您的 ORACLE_SID 和 ORACLE_HOME 你可以像这样呼应出来

    #echo $ORACLE_SID
    your-sid
    # echo $ORACLE_HOME
    your-oracle-home
    

    接下来设置您的 crontab - 假设您希望上述文件在每个午夜运行 (Crontab Guru)

    #crontab -e

    5 0 * * * /bin/bash /nas_backup/rman/backup/L0backup.sh  > /nas_backup/rman/backup/rman.log 2>&1
    

    如果您注意到您的输出被记录到“rman.log”。

    此外,您现在可以删除不再使用的“backup.rcv”文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-23
      • 2015-02-16
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      相关资源
      最近更新 更多