Oracle11g新特性点评之RMAN

Oracle11g新特性点评之RMAN,第1张

RMAN除了单纯的备份恢复功能 已经被赋予了越来越多的责任 比如创建Standby数据库 比如跨平台传输表空间中的表空间转换 Oracle g的RMAN倒是没有太多飞跃性的更新

自定义archivelog删除策略

我们知道在 g之前 只有backupset的删除策略可以定义 比如保留多长时间的备份或者保留多少份有效备份 而删除归档日志只有在delete命令中定义删除全部备份完毕的或者删除从哪一个时间点到哪一个时间点的 而在 g中我们已经可以通过configure命令来定义归档日志的删除策略的 比如增加了下面的语法 只有在磁带上备份了 次的归档日志才会被delete命令删除

CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP TIMES TO DEVICE TYPE *** t

当然 仅仅是增加语法那就只能称为比较无聊的新功能了 除了configure语法之外 现在在 g中通过APPLIED ON STANDBY关键字可以定义只有对于所有的standby站点都已经applied的归档日志才会被删除 或者定义所有被成功传送到standby站点的归档日志就可以被删除 而以前这些都需要DBA自己撰写脚本从数据字典中查询到相关信息然后再通过脚本删除

直接通过网络复制数据库

在 g之前如果要使用duplicate命令来复制一份数据库 那么则需要源数据库 需要在目标机器上的一份有效备份 需要目标数据库 在 g中这一切被大大简化 通过FROM ACTIVE DATABASE关键字 我们只需要有一个源数据库 就可以简单地通过网络在另外一台机器上复制一个相同的数据库了 Oracle会通过一系列 Memory Script在内存中recover并且open目标数据库

另外 在 g之前 duplicate数据库是不会自动复制spfile的 而现在 我们通过下面的语句 就可以让Oracle在复制过程中自动生成一份spfile 并且其中的初始化参数允许额外定义

DUPLICATE TARGET DATABASETO aux_dbFROM ACTIVE DATABASESPFILE PARAMETER_VALUE_CONVERT /u /u SET SGA_MAX_SIZE = M SET SGA_TARGET = M SET LOG_FILE_NAME_CONVERT = /u /u DB_FILE_NAME_CONVERT /u /u

在 g中使用duplicate复制一个数据库的准备步骤只需要目标数据库(AUXILIARY实例)

a 通过一个最简单的pfile把实例启动到nomount状态 这个pfile中只需要包含DB_NAME和REMOTE_LOGIN_PASSWORFILE参数即可

b password文件必须事先建好 而且SYS密码需要跟source数据库中相同 这个通过orapwd可以轻松完成

c 目录结构需要事先创建好并且具有正确的权限

并行备份大文件

现在Oracle数据库中单个数据文件可以最大到 T 而在以前的版本中RMAN的最小备份单位就是datafile 那么对于以后可能出现的这种超大数据文件 RMAN备份就几乎无法 *** 作了 在 g中 通过backup命令中的SECTION SIZE关键字 我们可以对数据文件指定section了 每个section都作为一个独立单位来处理 每个数据文件可以最多指定 个 section

Section的好处在于 一可以并行备份多个section 提高备份速度 二可以分多个时间分别备份一个大文件的多个section 时间上化整为零 更具有 *** 作性

RMAN Catalog管理性增强

IMPORT CATALOG命令允许我们将一个catalog库中的信息转储到另外一个catalog库 这在以前完全需要手工 *** 作

lishixinzhi/Article/program/Oracle/201311/17666

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

恢复管理维护任务

这部分主要介绍一下如何管理维护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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6834249.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-29
下一篇2023-03-29

发表评论

登录后才能评论

评论列表(0条)

    保存