Oracle 数据库增量备份周计划脚本

简介: ####------------------------------------------------------------------------------######    shell db_incremental_database_backup.
####------------------------------------------------------------------------------####
##    shell db_incremental_database_backup.sh          
##    author  zongziheng                                         
##    date    2017.01.20                                         
##    func The path and date are set as required                 
##    use meth    ./rmanbackup_lev_sjz.sh BACKUP_DEST ORACLE_HOME ORACLE_SID           
## alter system set db_create_file_dest = '/u01/app/oracle/oradata/';                                      
## alter database enable block change tracking;                                                                        
## alter database enable block change tracking using file '/../../blcok...';                                  
####------------------------------------------------------------------------------####
  
#!/bin/bash

export LANG=en_US
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
backtime=`date +"20%y%m%d%H%M%S"`

RMAN_BACKUP_DATA_DEST=$1
RMAN_LOG_FILE=${RMAN_BACKUP_DATA_DEST}/rmanback_lev_${backtime}.log

BACKUP_DATE=`date +%d`
TODAY=`date`
CURRENT_USER=`id|cut -d "(" -f2|cut -d ")" -f1`
echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE
 
export ORACLE_HOME=$2 
export RMAN=${ORACLE_HOME}/bin/rman
export ORACLE_SID=$3 
export ORACLE_USER=oracle
 
echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE
echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE
echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE
echo "==========================================">>$RMAN_LOG_FILE
echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE
echo "                   ">>$RMAN_LOG_FILE
 
#touch $RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
 
CURRENT_WEEK_DAILY=`date +%a`
 
case  "$CURRENT_WEEK_DAILY" in
       "Mon")
            BAK_LEVEL=1
            ;;
       "Tue")
            BAK_LEVEL=1
            ;;
       "Wed")
            BAK_LEVEL=1
            ;;
       "Thu")
            BAK_LEVEL=1
            ;;
       "Fri")
            BAK_LEVEL=1
            ;;
       "Sat")
            BAK_LEVEL=0
            ;;
       "Sun")
            BAK_LEVEL=1
            ;;
       "*")
            BAK_LEVEL=error
esac
 
export BAK_LEVEL=$BAK_LEVEL
 
echo "Today is : $CURRENT_WEEK_DAILY  incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE
 
 
RUN_SHELL="
 
BAK_LEVEL=$BAK_LEVEL
export BAK_LEVEL
 
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
 
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
 
$RMAN nocatalog TARGET sys/oracle msglog $RMAN_LOG_FILE append <<EOF
run
{
  allocate channel c1 type disk;
  allocate channel c2 type disk;
  backup incremental level= $BAK_LEVEL skip inaccessible filesperset 5 Database format='"$RMAN_BACKUP_DATA_DEST"/"$ORACLE_SID"_lev_"$BAK_LEVEL"_%U_%T' tag='"$ORACLE_SID"_lev_"$BAK_LEVEL"';
  sql 'alter system archive log current';
  backup archivelog all tag='arc_bak' format='"$RMAN_BACKUP_DATA_DEST"/arch_%U_%T' skip inaccessible  filesperset 5 not backed up 1 times delete input;
  backup current controlfile tag='ctlfile_bak' format='"$RMAN_BACKUP_DATA_DEST"/ctl_file_%U_%T';
  backup spfile tag='spfile_bak' format='"$RMAN_BACKUP_DATA_DEST"/spfile_%U_%T';
  release channel c2;
  release channel c1;
}
report obsolete;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;
list backup summary;
EOF
"
# Initiate the command string
if [ "$CUSER" = "root" ]
then
    echo "Root Command String: $RUN_SHELL" >> $RMAN_LOG_FILE
    su - $ORACLE_USER -c "$RUN_SHELL" >> $RMAN_LOG_FILE
    STATUS=$?
else
    echo "User Command String: $RUN_SHELL" >> $RMAN_LOG_FILE
    /bin/sh -c "$RUN_SHELL" >> $RMAN_LOG_FILE
    STATUS=$?
fi
 
# ---------------------------------------------------------------------------
# Record whether or not the log is completed.
# ---------------------------------------------------------------------------
if [ "$STATUS" = "0" ]
then
    LOGMSG="Ended successfully."
else
    LOGMSG="Ended in error!"
fi
 
echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
 
exit $STATUS

####------------------------------------------------------------------------------####

目录
相关文章
|
9天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
27 3
|
9天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
22 3
|
19天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
26 7
|
19天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
22 6
|
19天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
17 5
|
23天前
|
存储 定位技术 数据库
介绍一下数据库的备份和恢复策略
【10月更文挑战第21】介绍一下数据库的备份和恢复策略
|
26天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
8天前
|
数据库
【赵渝强老师】数据库的备份方式
备份数据库是指将数据库中的数据及相关信息保存起来,以便在系统故障时恢复。备份对象不仅限于数据本身,还包括数据库对象、用户权限等。根据备份策略、类型和模式的不同,可分为整体/部分备份、完全/增量备份、一致/非一致备份。文中还附有相关视频讲解。
|
3月前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
293 2
|
4月前
|
存储 缓存 Oracle
Oracle数据库可扩展性和性能
【7月更文挑战第6天】
83 7

推荐镜像

更多