一. 一些准备知识Oracle 分归档和非归档模式。 这两者的区别就是对redo log的处理。归档模式下,当一个redo log 写满之后,就会把这个redo log里的内容写入归档文件,等写完之后,这个redo log 就可以继续使用,如果是非归档模式下,redo log 就直接覆盖了。 恢复一般都需要归档文件,这里面记录了对数据库的操作,所以生产库一般都运行在归档模式下。 关于归档模式和非归档模式的切换参考Blog:Oracle 归档与非归档的切换
http://www.linuxidc.com/Linux/2008-11/17203.htmRMAN 备份的存放位置也有2种选择,一种是直接备份到磁盘,另一种就是备份到磁带。 现在的大公司,一般都使用Symnatec Veritas NetBackup 软件来进行备份。 这款软件扩展了RMAN的功能和优点,所有用起来比较方便。 08年刚工作的时候就遇到了一个安装NetBackup的实战机会,可惜那时刚接触Oracle,连Oracle 都不了解,更不提NetBackup了, 转眼2年过去了,在也没有遇到这样的机会,不知道什么时候才能玩玩NetBackup。 遗憾啊。使用RMAN 备份也分catalog 和nocatalog,就是是否使用恢复目录,如果不使用恢复目录,那么就是用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息。因此,当使用rman nocatalog方式备份时,备份controlfile是非常重要的。 如果使用catalog模式,就需要句需要创建catalog目录。 当库比较多时,使用catalog也是比较方便的。 RMAN的备份也分两种,一种是全备,另一种增量备份。 全备适用与数据库比较小的情况,如果库大的话就需要使用增量备份了,因为这样能减少备份的时间。 修改控制文件的保存时间,从默认的7天改成14天SQL> show parameter controlSQL> alter system set control_file_record_keep_time=14 scope=both;开启控制文件的自动备份,开启之后在数据库备份或者数据文件(比如添加数据文件)有修改的时候都会自动备份控制文件和spfile文件。Configure controlfile autobackup on;当数据库兼容性设置为大于等于10.0.0时,尽管在没有0级备份情况做1级的增量备份实际上是一个全备,但是这个全备也是1级的,不能用作1级积累增量备份的基础备份,这个是在设计备份策略的时候要注意的问题。二. 全备脚本以 nocatalog 模式为例:Shell 脚本:########################################################################## hot_database_backup.sh #### created by Tianlesoftware #### 2010-7-16 ############################################################################!/bin/sh# ---------------------------------------------------------------------------# Determine the user which is executing this script.# ---------------------------------------------------------------------------CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`# ---------------------------------------------------------------------------# Put output in <this file name>.out. Change as desired.# Note: output directory requires write permission.# ---------------------------------------------------------------------------RMAN_LOG_FILE=${0}.out# ---------------------------------------------------------------------------# You may want to delete the output file so that backup information does# not accumulate. If not, delete the following lines.# ---------------------------------------------------------------------------if [ -f "$RMAN_LOG_FILE" ]thenrm -f "$RMAN_LOG_FILE"fi# -----------------------------------------------------------------# Initialize the log file.# -----------------------------------------------------------------echo >> $RMAN_LOG_FILEchmod 666 $RMAN_LOG_FILE# ---------------------------------------------------------------------------# Log the start of this script.# ---------------------------------------------------------------------------echo Script $0 >> $RMAN_LOG_FILEecho ==== started on `date` ==== >> $RMAN_LOG_FILEecho >> $RMAN_LOG_FILE# ---------------------------------------------------------------------------# Oracle home path.# ---------------------------------------------------------------------------ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1export ORACLE_HOME# ---------------------------------------------------------------------------# the Oracle SID of the target database.# ---------------------------------------------------------------------------ORACLE_SID=orclexport ORACLE_SID# ---------------------------------------------------------------------------# The Oracle DBA user id (account).# ---------------------------------------------------------------------------ORACLE_USER=oracleexport ORACLE_USER# ---------------------------------------------------------------------------# Set the Oracle Recovery Manager name.# ---------------------------------------------------------------------------RMAN=$ORACLE_HOME/bin/rman# ---------------------------------------------------------------------------# Print out the value of the variables set by this script.# ---------------------------------------------------------------------------echo >> $RMAN_LOG_FILEecho "RMAN: $RMAN" >> $RMAN_LOG_FILEecho "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILEecho "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILEecho "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE# ---------------------------------------------------------------------------# Print out the value of the variables set by bphdb.# ---------------------------------------------------------------------------#echo >> $RMAN_LOG_FILE#echo "NB_ORA_FULL: $NB_ORA_FULL" >> $RMAN_LOG_FILE#echo "NB_ORA_INCR: $NB_ORA_INCR" >> $RMAN_LOG_FILE#echo "NB_ORA_CINC: $NB_ORA_CINC" >> $RMAN_LOG_FILE#echo "NB_ORA_SERV: $NB_ORA_SERV" >> $RMAN_LOG_FILE#echo "NB_ORA_POLICY: $NB_ORA_POLICY" >> $RMAN_LOG_FILE# ---------------------------------------------------------------------------# NOTE: This script assumes that the database is properly opened. If desired,# this would be the place to verify that.# ---------------------------------------------------------------------------echo >> $RMAN_LOG_FILE# ---------------------------------------------------------------------------# ---------------------------------------------------------------------------# Call Recovery Manager to initiate the backup.# ---------------------------------------------------------------------------CMD_STR="ORACLE_HOME=$ORACLE_HOMEexport ORACLE_HOMEORACLE_SID=$ORACLE_SIDexport ORACLE_SID$RMAN nocatalog target sys/admin msglog $RMAN_LOG_FILE append << EOFRUN {allocate channel c1 type disk;allocate channel c2 type disk;BACKUP FORMAT "/u01/backup/orcl_%U_%T" skip inaccessible filesperset 5 DATABASE TAG orcl_hot_db_bk;sql "alter system archive log current";BACKUP FORMAT "/u01/backup/arch_%U_%T" skip inaccessible filesperset 5 ARCHIVELOG ALL DELETE INPUT;backup current controlfile tag="bak_ctlfile" format="/u01/backup/ctl_file_%U_%T";backup spfile tag="spfile" format="/u01/backup/ORCL_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 stringif [ "$CUSER" = "root" ]thenecho "Root Command String: $CMD_STR" >> $RMAN_LOG_FILEsu - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILERSTAT=$?elseecho "User Command String: $CMD_STR" >> $RMAN_LOG_FILE/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILERSTAT=$?fi# ---------------------------------------------------------------------------# Log the completion of this script.# ---------------------------------------------------------------------------if [ "$RSTAT" = "0" ]thenLOGMSG="ended successfully"elseLOGMSG="ended in error"fiecho >> $RMAN_LOG_FILEecho Script $0 >> $RMAN_LOG_FILEecho ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILEecho >> $RMAN_LOG_FILE/bin/mailx -s "RMAN Backup SID " daimm@sf-express.com < $RMAN_LOG_FILEexit $RSTAT
基于嵌入式Linux平台的最小文件系统的制作Python 发送 RMAN 备份 Log 脚本相关资讯 Linux Shell Linux教程
- Linux基础知识:shell基础命令 (今 10:39)
- Linux系统监控shell脚本 (04月09日)
- Linux shell脚本编程 (03月01日)
| - Linux shell数组 (07月26日)
- Linux Shell实现批量关闭局域网中 (03月10日)
- Linux系统入门教程:如何知道当前 (11/27/2015 08:36:09)
|
本文评论 查看全部评论 (0)