Oracle数据库RMAN的自动备份脚本简介
各位同学知道Oracle数据库RMAN如何自动备份脚本嘛?下面我为大家整理了关于Oracle数据库RMAN的自动备份脚本文章,希望能为你提供帮助:
1、数据库设置为归档方式
2、数据库的备份脚本
db_full_backup.sh :数据库全备脚本
db_l0_backup.sh :数据库0级备份脚本
db_l1_backup.sh :数据库1级备份脚本
ftp.sh :数据FTP上传脚本
ftp_del.sh :数据FTP清理脚本
rman_bak.sh :数据备份主程序
3、备份原理
每周1、3、6进行0级备份
每周日、2、4、5进行1级备份
备份文件上传到FTP服务器
FTP服务器每周清理一次,但是清理后将周六和周日的备份进行保留(6.bak和0.bak)
所有工作防暑crontab中自动执行备份
4、备份目录含义
arc :数据库归档目录
rmanbak :数据库备份文件的保存目录
rmanscripts :数据库脚本存放路径
5、FTP目录
ftp上必须手动建立目录
L0:
---1
---3
---6
---6.bak
L1:
---2
---4
---5
---0
---0.bak
rman_bak.sh脚本主程序
#!/bin/bash
#--------------------------------------------
# Oracle auto backup using rman
#
# author:songrh
# week:1,3,6 Level 0 backup
# 2,4,5,0 Level 1 backup
# Copyright by ChenLong Tec
#--------------------------------------------
#
#
export ORACLE_BASE=/u02/oracle
export ORACLE_HOME=/u02/oracle/product/9.2.4
export ORACLE_SID=PROD
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export NLS_LANG=american_america.ZHS16GBK
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NL33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=/bin:/usr/bin:/usr/sbin:$ORACLE_HOME/bin:$PATH
export PATH=$PATH:/opt/local/bin
#
SH_PATH=/u02/rmanscripts
ARC_PATH=/u02/arch
RMAN_BAK_PATH=/u02/rmanbak
#
#FULL_PATH=$RMAN_BAK_PATH/full
L0_PATH=$RMAN_BAK_PATH/L0
L1_PATH=$RMAN_BAK_PATH/L1
#
#DAY_TAG=`date "%Y-%m-%d"`
LOG_TAG=`date "%Y-%m-%d"`
#FIRST_DAY=`date %e`
WEEK=`date %w`
#WEEK=1
#
# FTP configure
IP="122.120.150.155"
FTPUSER="ftpbak"
FTPPASS="******"
FTPROOT0="L0"
FTPROOT1="L1"
#
DISK_USE=`df -k |sed -n '/u02/'p | awk '{print $5}' |sed 's/%//'`
####check path function
############
if [[ $DISK_USE -ge 90 ]]then
rm -rf $L0_PATH/*
rm -rf $L1_PATH/*
fi
if [ "$WEEK" = "6" -o "$WEEK" = "3" -o "$WEEK" = "1" ]then
if [ ! -d $L0_PATH ]then
mkdir $L0_PATH
fi
if [ "$WEEK" = "1" ]then
rm -rf $L0_PATH/*
rm -rf $L1_PATH/*
mkdir $L0_PATH/$WEEK
$SH_PATH/db_l0_backup.sh $L0_PATH/$WEEK
cd $L0_PATH/$WEEK
$SH_PATH/ftp_del.sh $IP $FTPUSER $FTPPASS $FTPROOT0 $WEEK $WEEK_$LOG_TAG.log
else
if [ ! -d $L0_PATH/$WEEK ]then
mkdir $L0_PATH/$WEEK
$SH_PATH/db_l0_backup.sh $L0_PATH/$WEEK
cd $L0_PATH/$WEEK
$SH_PATH/ftp.sh $IP $FTPUSER $FTPPASS $FTPROOT0 $WEEK $WEEK_$LOG_TAG.log
else
创建catalog
步骤一 创建恢复目录用户
step : 为恢复目录单独创建表空间catalog_tbs
创建恢复目录用户 CREATE USER rcat_user IDENTIFIED BY rcat_password DEFAULT TABLESPACE catalog_tbs
step : 为恢复目录授予下列角色
connect
resource
recovery_catalog_owner
GRANT connect resource recovery_catalog_owner TO rcat_user
步骤二 创建恢复目录模式对象
step : 使用RMAN连接的恢复目录
RMAN
catalog=rcat_user/rcat_password
step : 在RMAN 提示符下执行create catalog命令
create catalog tablespace catalog_tbs
步骤三 在恢复目录中注册数据库
step : 使用RMAN 同时连接到数据库和恢复目录
set ORACLE_SID=main_db
RMAN target=backup_admin/backupuserpassword
catalog=rcat_user/rcat_password@recover
step : 使用恢复目录注册数据库
RMAN>Register database
rman catalog 撤消目标数据库注册
步骤一 进入要撤消注册的数据库 获取这个数据库的DBID
SQL>select dbid from v$database
DBID
步骤二 连接拥有恢复目录的模式 确定恢复目录中该数据库的DB_KEY
SQL>select db_key from db where db_id=
DB_KEY
步骤三 使用dbms_rcvcat unregisterdatabase过程从恢复目录中撤消数据库的注册
lishixinzhi/Article/program/Oracle/201311/17549
恢复管理维护任务
这部分主要介绍一下如何管理维护RMAN存储库和快速恢复区
没有恢复目录的情况下如何管理RMAN存储库
交叉验证备份(CROSSCHECKING BACKUP)
删除备份
利用RMAN删除数据库
多个通道的情况下交叉验证和删除 *** 作
如何改变一个备份记录的状态
归档日志目录和手工拷贝
修改RMAN存储库目录
维护快速恢复区
没有恢复目录的情况下管理RMAN存储库
备份控制文件
如果没有恢复目录 控制文件的备份更加重要 要通过多个镜像控制文件或者 *** 作系统镜像来备份变化了的控制文件 另外最好要配置控制文件的自动备份
CONTROLFILE AUTOBACKUP ON
注意 如果从自动备份或者其他备份恢复了控制文件 最近执行的CONFIGURE配置内容将会被覆盖 回到备份时刻的设置
监控控制文件记录重写
没有恢复目录的情况下 oracle的控制文件记录了所有的历史备份记录 为了保证控制文件不会无限制的增长 oracle提供了一个可以设置控制文件保留时间的阀值的初始化参数 CONTROL_FILE_RECORD_KEEP_TIME
例如我们设置了CONTROL_FILE_RECORD_KEEP_TIME= 任何超过 天的纪录都有可能被覆盖 如果没有超过 天的记录 oracle将扩展控制文件的大小 如果由于受到 *** 作系统的限制(比如磁盘空间满)无法扩展控制文件的大小 oracle会强制覆盖最老的记录并且在alter log中记录这一情况 如下所示
kccwnc: following controlfile record written over: RECID # Recno Record timestamp / / : : Thread= Seq#= Backup set key: stamp= count= Low scn: x af f / / : : Next scn: x af b / / : : Resetlogs scn and time scn: x / / : : Block count= Blocksize=
快速恢复区Flash Recovery Area和控制文件记录保存时间参CONTROL_FILE_RECORD_KEEP_TIME之间的相互作用
如果我们在使用快速恢复区保留RMAN备份的话 控制文件将记录恢复区中文件的创建记录 因为一般来讲文件创建的记录要比执行备份的信息要晚 如果有备份文件超过了CONTROL_FILE_RECORD_KEEP_TIME参数所规定的时间 ORACLE试图删除这些这些文件 否则ORACLE将增加控制文件的大小并且在alter log中记录这一情况 如下所示
kccwnc: tring to expand controlfile section nnnn for Oracle Managed Files
如果无法扩展控制文件 则alter log中将出现以下信息
WARNING: Oracle Managed File filename is unknown to controlfile This is the result of limitation in control file size that could not keep all recovery area files
也就是不能满足备份的保留冗余策略来保存备份了
为了避免和降低这种情况的发生 我们可以采取以下措施
使用 K大小的块创建控制文件 如果想设置控制文件 K大小的BLOCK 我们必须首先把SYSTEM表空间设置成为大于或者等于控制文件使用的BLOCK SIZE 修改了控制文件BLOCK_SIZE后 必须重建控制文件
使用BACKUP RECOVERY AREA命令备份快速恢复区使得快速恢复区的文件成为可以删除的文件 或者减小备份保留时间或者减小备份保留冗余度维护控制文件中的RMAN备份存储库
交叉验证备份CROSESSCHECK BACKUPS
验证备份存储库中的备份记录和磁盘(或者磁带)上的备份文件是否一致 如果用磁盘保存备份 CROSSCHECK检查文件头是否有效 如果用磁带保存备份 CROSSCHECK检查文件是否存在 备份文件的三种可能的状态为 AVAILABLE UNAVAILABLE and EXPIRED 我们可以用LIST命令查看或者直接查询V$BACKUP_FILES RC_DATAFILE_COPY RC_ARCHIVED_LOG等视图
给出几个CORSSCHECK示例命令
CROSSCHECK BACKUP# checks backup sets proxy copies and image copies CROSSCHECK COPY OF DATABASECROSSCHECK BACKUPSET CROSSCHECK BACKUPPIECE TAG = nightly_backup CROSSCHECK CONTROLFILECOPY /tmp/control ctl CROSSCHECK DATAFILECOPY CROSSCHECK PROXY
交叉验证指定数据库文件的备份
# these CROSSCHECK mands use configured channels which means that they # always check the disk device If you configured an *** t channel then RMAN # checks the *** t device too CROSSCHECK BACKUP OF DATAFILE ora_home/oradata/trgt/system dbf PLETED AFTER SYSDATE CROSSCHECK BACKUP OF ARCHIVELOG ALL SPFILE
删除备份
删除指定的备份
先用LIST命令找到备份唯一标识
LIST BACKUP OF DATABASE ARCHIVELOG ALL# lists backups of db files and logs LIST COPY# lists only image copies LIST BACKUP# lists everything
删除指定的备份存储库记录和备份文件
DELETE BACKUPPIECE DELETE CONTROLFILECOPY /tmp/control ctl DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE =
批量删除
DELETE BACKUP# deletes all backups on disk and tape DELETE BACKUP OF TABLESPACE users DEVICE TYPE *** t# delete only from tape DELETE COPY OF CONTROLFILE LIKE /tmp/% # LIKE specifies name of the copy DELETE NOPROMPT ARCHIVELOG ALL BACKED UP TIMES TO *** t# backs up only if already backed up X to tape
删除无效备份
RMAN>CROSSCHECK BAKCUPRMAN>DELETE EXPIRED BACKUP
删除过期备份
RMAN>DELETE OBSOLETE
如果没有指定其他参数RMAN默认按照保留冗余策略找到过期备份后执行删除 等效于
DELETE OBSOLETE REDUNDANCY =
删除过期备份也可以指定按照时间冗余策略来删除 例如
DELETE OBSOLETE RECOVERY WINDOW OF DAYS
强制删除备份
如果没有执行CROSSCHECK 而磁盘上备份文件确实被删除了 我们执行删除备份的时候会从RMAN收到错误提示 如下
RMAN>delete backup tag TAG T 使用通道 ORA_DISK_ 备份段列表 BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称 AVAILABLE DISK D:\ORACLE\PRODUCT\ \FLASH_R ECOVERY_AREA\ROME\BACKUPSET\ _ _ \O _MF_NNNDF_TAG T _ VXZTH G_ BKP 是否确定要删除以上对象 (输入 YES 或 NO)? yes RMAN : 警告: 由于状态不匹配 所以不能删除 对象 (对于 DISK 通道) RMAN : 请用 CROSSCHECK 命令修正状态 RMAN : 不匹配对象的列表 RMAN : ========================== RMAN : 对象类型 文件名/句柄 RMAN : RMAN : Backup Piece D:\ORACLE\PRODUCT\ \FLASH_RECOVERY_AREA\ROME\BA CKUPSET\ _ _ \O _MF_NNNDF_TAG T _ VXZTH G_ BKP 我们可以用带有force参数的选项来强制删除备份 RMAN>delete force backup tag TAG T 使用通道 ORA_DISK_ 备份段列表 BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称 AVAILABLE DISK D:\ORACLE\PRODUCT\ \FLASH_R ECOVERY_AREA\ROME\BACKUPSET\ _ _ \O _MF_NNNDF_TAG T _ VXZTH G_ BKP 是否确定要删除以上对象 (输入 YES 或 NO)? yes 已删除备份段 备份段 handle=D:\ORACLE\PRODUCT\ \FLASH_RECOVERY_AREA\ROME\BACKUPSET\ _ _ \O _MF_NNNDF_TAG T _ VXZTH G_ BKP recid= stamp= 对象已删除
多个通道执行交叉验证和删除备份
在执行CROSSCHECK和DELETE之前可以配置或者手工分配多个通道 RMAN将搜索和删除在不同类型的设备上执行的备份文件 适用以下情况
用一个命令交叉验证或者删除在不同设备上备份的文件(例如磁带和磁盘上都有备份文件)
交叉验证或者删除工作在RAC环境下备份到每个节点上的备份文件
RMAN如何在多通道下执行CROSSCHECK和DELETE
举个例子 我们的备份文件全部在磁盘上 磁带上没有备份文件 而我们给出了如下备份脚本 那么RMAN将会执行前边的两个磁盘CROSSCHECK而不会执行第三条磁带CROSSCHECK
RUN {ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK CONNECT SYS/oracle@ node AlLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK CONNECT SYS/oracle@node ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE *** tCROSSCHECK BACKUP OF DATABASE}
注意 如果RMAN标记为EXPIRED状态的备份文件被修复后 我们执行DELETE EXPIRED BACKUP 命令后将会收到如下提示
RMAN>delete expired backup使用通道 ORA_DISK_ 备份段列表 BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称 EXPIRED DISK D:\ORACLE\PRODUCT\ \FLASH_RECOVERY_AREA\ROME\BACKUPSET\ _ _ \O _MF_NNNDF_TAG T _ WF CYG _ BKP 是否确定要删除以上对象 (输入 YES 或 NO)? yes RMAN : 警告: 由于状态不匹配 所以不能删除 对象 (对于 DISK 通道) RMAN : 请用 CROSSCHECK 命令修正状态 RMAN : 不匹配对象的列表 RMAN : ========================== RMAN : 对象类型 文件名/句柄 RMAN : RMAN : Backup Piece D:\ORACLE\PRODUCT\ \FLASH_RECOVERY_AREA\ROME\BACKUPSET\ _ _ \O _MF_NNNDF_TAG T _ WF CYG _ BKP
一个命令交叉验证磁盘和磁带备份的例子
CONFIGURE DEVICE TYPE *** t PARALLELISM CONFIGURE DEFAULT DEVICE TYPE to *** tCROSSCHECK BACKUP OF DATABASE
示例输出文件如下
allocated channel: ORA_SBT_TAPE_ channel ORA_SBT_TAPE_ : sid= devtype=SBT_TAPE channel ORA_SBT_TAPE_ : WARNING: Oracle Test Disk API using channel ORA_DISK_ crosschecked backup piece: found to be AVAILABLE backup piece handle=/oracle/dbs/ c esv _ _ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle=/oracle/dbs/c recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle= c erb _ _ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle= c erba_ _ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle= c erce_ _ recid= stamp= crosschecked backup piece: found to be AVAILABLE backup piece handle=c recid= stamp=
如果没有配置磁带备份设备 也可以手工执行分配通道
ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE *** tCROSSCHECK BACKUP OF DATABASE
RAC环境下交叉验证的例子
CONFIGURE DEVICE TYPE DISK PARALLELISM CONFIGURE CHANNEL DEVICE TYPE DISK CONNECT SYS/oracle@node_ CONFIGURE CHANNEL DEVICE TYPE DISK CONNECT SYS/oracle@node_ CROSSCHECK BACKUP
一个删除磁带和磁盘备份的例子
CONFIGURE DEVICE TYPE *** t PARALLELISM CONFIGURE DEFAULT DEVICE TYPE TO *** tDELETE BACKUPSET
示例输出文件如下
using channel ORA_SBT_TAPE_ using channel ORA_DISK_ List of Backup Pieces BP Key BS Key Pc# Cp# Status Device Type Piece Name AVAILABLE SBT_TAPE c erb _ _ UNAVAILABLE SBT_TAPE c erba_ _ AVAILABLE SBT_TAPE c erce_ _ AVAILABLE SBT_TAPE c AVAILABLE DISK /oracle/dbs/ c esv _ _ AVAILABLE DISK /oracle/dbs/c Do you really want to delete the above objects (enter YES or NO)? y deleted backup piece backup piece handle=/oracle/dbs/ c esv _ _ recid= stamp= deleted backup piece backup piece handle=/oracle/dbs/c recid= stamp= deleted backup piece backup piece handle= c erb _ _ recid= stamp= deleted backup piece backup piece handle= c erba_ _ recid= stamp= deleted backup piece backup piece handle= c erce_ _ recid= stamp= deleted backup piece backup piece handle=c recid= stamp=
释放多个通道 如下命令可以释放所有通道
RELEASE CHANNEL
使用RMAN删除数据库
RMAN连接到处于MOUNT状态的TARGET数据库 就可以删除TARGET数据库 而不需要连接恢复目录 如果RMAN同时连接到恢复目录 并且指定INCLUDE COPIES AND BACKUPS参数 RMAN将删除恢复目录中的备份记录
生成备份文件目录
RMAN>catalog start with d:\oracle\product\ \flash_recovery_area RMAN>DELETE BACKUPSET# deletes all backups RMAN>DELETE COPY# delete all image copies (including archived logs) RMAN>DROP DATABASE# delete all database files and unregister the database
修改备份记录的状态
CHANGE DATAFILECOPY /tmp/control ctl UNAVAILABLECHANGE COPY OF ARCHIVELOG SEQUENCE BEEEN AND UNAVAILABLECHANGE BACKUPSET UNAVAILABLECHANGE BACKUP OF SPFILE TAG TAG T UNAVAILABLECHANGE DATAFILECOPY /tmp/system dbf AVAILABLECHANGE BACKUPSET AVAILABLECHANGE BACKUP OF SPFILE TAG TAG T AVAILABLE
修改备份记录状态使得保留冗余策略外的备份不被删除
我们可以在执行备份的时候直接指定BACKUP……KEEP来把备份文件标记为长期备份 有一点需要注意 如果使用恢复目录来存储备份记录的话 我们应该执行BACKUP……KEEP FOREVER
我们也可以用CHANGE命令来把一个备份标记为长期备份
CHANGE BACKUPSET KEEPCHANGE BACKUPSET NOKEEPCHANGE DATAFILECOPY /tmp/system dbf KEEP UNTIL SYSDATE+
维护存储库目录
如果我们的备份文件中一部分是其他RMAN程序产生的 而我们的RMAN存储库中没有这些备份的记录 我们可以用CATALOG命令来维护我们的备份记录
以下情况需要维护存储库的备份记录
我们利用其他命令(如系统命令等)产生了备份文件 想把这些文件加入RMAN存储库
利用备份控制文件执行恢复并且在恢复过程中改变了归档日志的路径或者格式 存储库中没有恢复需要的归档日志文件 我们必须把这些日志加入到RAMN存储库
如果我们执行数据文件拷贝备份 没有LEVEL 备份而我们又想直接可以执行LEVEL 的增量备份 我们可以通过增加RMAN存储库的目录来实现 虽然不建议这么做 但是的确可以
数据库版本升级 开始使用RMAN 我们可以把以前的热备份文件等加入到RMAN存储库
给几个例子 维护用户备份文件到存储库目录
SQL>ALTER TABLESPACE users BEGIN BACKUP% cp $ORACLE_HOME/oradata/trgt/users dbf /tmp/users dbfSQL>ALTER TABLESPACE users END BACKUPRMAN>CATALOG DATAFILECOPY /tmp/users dbf CATALOG BACKUPPIECE /disk / dtq d_ _ /disk / bdtqdou_ _
维护备份集到存储库目录
CATALOG BACKUPPIECE /disk / dtq d_ _ /disk / bdtqdou_ _
备份集文件加入到存储库目录后可以在如下系统视图查找
V$BACKUP_PIECE V$BACKUP_SET V$BACKUP_DATAFILE V$BACKUP_REDOLOG and V$BACKUP_SPFILE
维护所有备份文件到存储库目录
RMAN>CATALOG RECOVERY AREA# catalog all files in the recovery area RMAN>CATALOG START WITH +disk # catalog all files from an ASM disk group RMAN>CATALOG START WITH /fs /datafiles/ # catalog all files in directory
从存储库目录删除记录
CHANGE ARCHIVELOG UNCATALOG CHANGE CONTROLFILECOPY /tmp/control ctl UNCATALOGCHANGE DATAFILECOPY /tmp/system dbf UNCATALOG
lishixinzhi/Article/program/Oracle/201311/18820
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)