一数据库版本
SQLselect*fromvversion;
BANNER
----------------------------------------------------------------
OracleDatabase10gEnterpriseEditionRelease10.2.0.4.0-64bi
PL/SQLRelease10.2.0.4.0-Production
CORE10.2.0.4.0Production
TNSforLinux:Version10.2.0.4.0-Production
NLSRTLVersion10.2.0.4.0-Production
二工具
1.Rman:Oracle8i开始就在使用的oracle专业备份恢复工具,这也是广大DBA同志接触最多的备份工具,不仅可以备份单实例还可以在RAC模式下备份,俗话说RMAN在手烦恼没有,下面我们开始深入浅出来讲讲Rman的使用方法和备份策略。
Rman能够干什么:(1)全库备份,这是必然要进行的操作,因为它是一切恢复的源泉
(2)增量备份,目的减少备份的数据量,分为差异和累计
(3)细粒度备份,表空间,数据文件,控制文件,参数文件,归档日志
(4)数据库克隆,使用备份来迁移数据库
(5)设计备份策略
(6)管理备份集
(7)自定义Rman脚本
(8)生成Rman报告
如何学习Rman:很多人见了Rman不知道按照什么规则备份,因为Rman里面有很多参数需要设置,搞不好还会备份错误,备份策略如何设计等等一系列问题。在这里我要说,遇到一个工具最快的掌握方法就是先用起来,用的好用的坏那是另一回事。其实Rman原理并不复杂,就是复制数据库一系列文件打个包放在磁盘or磁带上,需要恢复的时候在拷贝回来。Rman实践要比原理重要的多,因此“实操族”是Rman的最爱。
注意:通过RMAN来备份和恢复数据库时,都必须先启动实例并加载数据库才行,这是给刚入门的朋友一点提示,如果你是大侠请自动忽视吧。
2.登陆RMAN和退出RMAN
RMAN连接本地数据库
[oracle
linuxdbbase]rmantarget/一气呵成法RecoveryManager:Release10.2.0.4.0-ProductiononTueMay:57:
Copyright(c),,Oracle.Allrightsreserved.
connectedtotargetdatabase:BASE(DBID=)这个dbid要记好了,很多时候我们需要它
RMAN
还可以先登陆rman,进入后在连接数据库
[oracle
linuxdbbase]rmanRecoveryManager:Release10.2.0.4.0-ProductiononTueMay:00:
Copyright(c),,Oracle.Allrightsreserved.
RMANconnecttarget/
connectedtotargetdatabase:BASE(DBID=)每个数据库都有一个唯一dbid
RMAN
RMAN连接远程数据库
[oracle
linuxdbbase]rmantargetsys/oraclebase后缀连接串即可RecoveryManager:Release10.2.0.4.0-ProductiononTueMay:10:
Copyright(c),,Oracle.Allrightsreserved.
connectedtotargetdatabase:BASE(DBID=)
RMAN
退出RMAN
RMANexit
RMANquit
这两个命令都可以退出,这是给初学者一点点引航,大侠请肃静and回避
三备份恢复前的一些准备工作
有备无患是DBA们的口头禅,如果你想做一个赏心悦目的DBA那就要把功课做充分,从下面入手
1.control_file_record_keep_time
control_file_record_keep_time初始化参数:rman元数据在控制文件中保留的最小有效天数,默认为7天。
官方文档中描述它是控制文件保留rman元数据有效的最小天数,如果新增加一条记录到控制文件可重用区reusable,这时最老的记录尚没有超出最小保留天数,那么记录将控制文件的这一部分扩展。如果将该参数设置为0,那么控制文件可重用区将永远不会扩展。
注意:这个参数只应用于控制文件中可循环利用的部分,如归档日志文件,各种备份记录。不应用于诸如数据文件,表空间,重做日志等,这些内容只有当其从对应的表空间中删除后才能重用。
最小天数的理解:假设我们设置为7天,那如果我有10天前(甚至更早)的datafilebackup和controlfilebackup+至今的全部日志,就不能完全恢复了嘛?这是否定的,因为rman元数据保留在控制文件可重用区,如果7天内的备份记录没有把可重用区装满,就算过了7天你的备份记录还是存在的,可以正常完全恢复。如果7天内可重用区被装满了,控制文件会拿最老的备份记录来覆盖(但会保证最小天数内的记录是有效的)。
我们根据以往经验,把这个值设置为30天
语法:altersystemsetcontrol_file_record_keep_time=30;
初始化参数control_file_record_keep_time是动态参数可以直接修改,不用重启数据库
SQLshowparametercontrol
NAMETYPEVALUE
------------------------------------------------------------------------------------------
control_file_record_keep_timeinteger30
2.启动归档模式
SYS
basearchiveloglistDatabaselogmodeNoArchiveMode
AutomaticarchivalDisabled
ArchivedestinationUSE_DB_RECOVERY_FILE_DEST
Oldestonlinelogsequence10
Currentlogsequence12
首先我们先要创建一个存放archivelog的目录
Oracle10g11g默认归档、闪回、备份都存放在flash_recovery_area中,默认大小2G,一般在生产环境中为了更方便管理这些重要文件,为其专门创建目录存放。
[oracle
linuxdboracle]mkdirarchdata创建一个archivelog目录路径:/opt/oracle/archdata
登陆sqlplus,设置归档路径
[oracle
linuxdbarchdata]sqlplus/assysdbaSYS
basealtersystemsetlog_archive_dest_1=location=/opt/oracle/archdatascope=both;已经生效Systemaltered.
SQLselectdest_name,destination,status,errorfromvarchive_destwheredest_name=LOG_ARCHIVE_DEST_1;
DEST_NAMEDESTINATIONSTATUSERROR
---------------------------------------------------------------
LOG_ARCHIVE_DEST_1/opt/oracle/archdataVALID
已经生效
重启数据库mount状态,开启归档
SYS
baseshutdownimmediateDatabaseclosed.
Databasedismounted.
ORACLEinstanceshutdown.
SYS
basestartupmountORACLEinstancestarted.
TotalSystemGlobalAreabytes
FixedSizebytes
VariableSizebytes
DatabaseBuffersbytes
RedoBuffersbytes
Databasemounted.
SYS
basealterdatabasearchivelog;开启归档模式Databasealtered.
SYS
basealterdatabaseopen;打开数据库Databasealtered.
凡是alterdatabase操作都是修改“控制文件”内容,走到那说到那嘿
[oracle
linuxdbarchdata]ll刚刚开启归档还没有生成日志,我们手工切换一下总用量0
SQLaltersystemswitchlogfile;手动切换不会触发checkpoint,自动切换会触发checkpoint
Systemaltered
[oracle
linuxdbarchdata]ll这时已经有归档日志生成了总用量
-rw-r-----1oracleoinstall月:_13_.dbf
-rw-r-----1oracleoinstall月:_14_.dbf
SQLselectsequence#,name,archived,appliedfromvarchived_log;数据库层面查看
SEQUENCE#NAMEARCHIVEDAPPLIED
--------------------------------------------------------------------------
13/opt/oracle/archdata/1_13_.dbfYESNO
14/opt/oracle/archdata/1_14_.dbfYESNO
SYS
basearchiveloglist;DatabaselogmodeArchiveMode归档模式
AutomaticarchivalEnabled自动归档启动
Archivedestination/opt/oracle/archdata归档日志目录
Oldestonlinelogsequence13旧在线日志序号,已经归档完的
Nextlogsequencetoarchive15下一个将要归档的日志序号
Currentlogsequence15当前在线日志序号
写的很清楚,从这里我们就可以判断归档日志的情况了,有多少归档,现在是几号日志,已经完成归档是几号等等。
3.安装rlwrap-0.37-1.el5.x86_64.rpm包
大家有没有在sqlplus中不能使用键盘的上下左右键,打错了连删除字符都不行,没天理啊,作为一名“键盘族”这是忍受不了的,熟可忍熟不可忍。那有没有什么法宝可以解决这个看似小问题其实大问题的问题(周鸿祎说过任何理由都应该与用户体验为准绳)
rlwrap-0.37-1.el5.x86_64.rpm包就可以解决这个问题,但在安装这个包之前需要先安装2个依赖包
one:readline-devel-6.0-4.el6.x86_64.rpm
two:ncurses-devel-5.7-3..el6.x86_64.rpm
oracle用户环境变量中添加
[oracle
linuxdb~]vim.bash_profilealiassqlplus="rlwrapsqlplus"添加一个别名
[oracle
linuxdb~]..bash_profile环境变量生效[oracle
linuxdb~]sqlplus/assysdba登陆sqlplus见证奇迹的时刻来临上下左右backspace全都可以使用了对吧是不是很爽啊~nicego~
4.RMAN环境变量
为什么要设置RMAN环境变量
答:这是一个好问题,做什么事之前问一个“为什么”可以有助于你在别人面前提升自己多动脑的光辉形象:)
进入正题,RMAN环境变量和OS环境变量有同工异曲之意,设置好后,对全局生效,不用每次都指定目录指定名称,这是懒人的福音~阿门!不设置可不可以呢,oracle是个开放的软件,当然可以,这就需要在命令中写好参数一次性完成,下次再做继续再写,比较适合我这样喜欢狂敲键盘的人。下面我们来配置配置吧~咚咚波
因RMAN配置信息都是放在数据库控制文件中的,因此我们先要连接到目标库才能显示环境变量
[oracle
linuxdb~]rmantarget/RecoveryManager:Release10.2.0.4.0-ProductiononWedMay:48:
Copyright(c),,Oracle.Allrightsreserved.
connectedtotargetdatabase:BASE(DBID=)有dbid证明已连接到目标库
RMANshowall;
usingtargetdatabasecontrolfileinsteadofrecoverycatalog使用控制文件来代替恢复目录数据库存放rman信息
RMANconfigurationparametersare:
CONFIGURERETENTIONPOLICYTOREDUNDANCY1;#default
CONFIGUREBACKUPOPTIMIZATIONOFF;#default
CONFIGUREDEFAULTDEVICETYPETODISK;#default
CONFIGURECONTROLFILEAUTOBACKUPOFF;#default
CONFIGURECONTROLFILEAUTOBACKUPFORMATFORDEVICETYPEDISKTO%F;#default
CONFIGUREDEVICETYPEDISKPARALLELISM1BACKUPTYPETOBACKUPSET;#default
CONFIGUREDATAFILEBACKUPCOPIESFORDEVICETYPEDISKTO1;#default
CONFIGUREARCHIVELOGBACKUPCOPIESFORDEVICETYPEDISKTO1;#default
CONFIGUREMAXSETSIZETOUNLIMITED;#default
CONFIGUREENCRYPTIONFORDATABASEOFF;#default
CONFIGUREENCRYPTIONALGORITHMAES;#default
CONFIGUREARCHIVELOGDELETIONPOLICYTONONE;#default
CONFIGURESNAPSHOTCONTROLFILENAMETO/opt/oracle/product/10.2.0/db_1/dbs/snapcf_base.f;#default
这只是一部分,如想多多学习请参考Books-BackupandRecoveryReference-CONFIGURE
(1)配置RMAN默认备份介质保存目录/opt/oracle/backup
[oracle
linuxdboracle]mkdirbackup创建保存目录RMANconfigurechanneldevicetypediskformat/opt/oracle/backup/DB_%U;
usingtargetdatabasecontrolfileinsteadofrecoverycatalog
使用目标库“控制文件”代替“恢复目录数据库”存放rman信息
oldRMANconfigurationparameters:
CONFIGURECHANNELDEVICETYPEDISKFORMAT/opt/oracle/backup/DB_%U;
newRMANconfigurationparameters:
CONFIGURECHANNELDEVICETYPEDISKFORMAT/opt/oracle/backup/DB_%U;
newRMANconfigurationparametersaresuccessfullystored
新RMAN配置参数生效
(2)配置控制文件自动备份并保存到/opt/oracle/backup/control
注:当控制文件内容有变化时会自动触发备份
[oracle
linuxdbbackup]mkdircontrol创建保存目录RMANconfigurecontrolfileautobackupon;启动控制文件自动备份
newRMANconfigurationparameters:
CONFIGURECONTROLFILEAUTOBACKUPON;
newRMANconfigurationparametersaresuccessfullystored
RMANconfigurecontrolfileautobackupformatfordevicetypediskto/opt/oracle/backup/control/cf_%F;配置控制文件自动备份保存目录和格式
newRMANconfigurationparameters:
CONFIGURECONTROLFILEAUTOBACKUPFORMATFORDEVICETYPEDISKTO/opt/oracle/backup/control/cf_%F;
newRMANconfigurationparametersaresuccessfullystored
(3)配置备份介质保留期为7天
RMANconfigureretentionpolicytorecoverywindowof7days;
newRMANconfigurationparameters:
CONFIGURERETENTIONPOLICYTORECOVERYWINDOWOF7DAYS;
newRMANconfigurationparametersaresuccessfullystored
设置好后我们再来看一下rman环境变量
RMANshowall;
RMANconfigurationparametersare:
CONFIGURERETENTIONPOLICYTORECOVERYWINDOWOF7DAYS;恢复窗口7天
CONFIGUREBACKUPOPTIMIZATIONOFF;#default
CONFIGUREDEFAULTDEVICETYPETODISK;#default
CONFIGURECONTROLFILEAUTOBACKUPON;启动控制文件自动备份,目录和格式
CONFIGURECONTROLFILEAUTOBACKUPFORMATFORDEVICETYPEDISKTO/opt/oracle/backup/control/cf_%F;
CONFIGUREDEVICETYPEDISKPARALLELISM1BACKUPTYPETOBACKUPSET;#default
CONFIGUREDATAFILEBACKUPCOPIESFORDEVICETYPEDISKTO1;#default
CONFIGUREARCHIVELOGBACKUPCOPIESFORDEVICETYPEDISKTO1;#default
CONFIGURECHANNELDEVICETYPEDISKFORMAT/opt/oracle/backup/DB_%U;备份介质保存目录
CONFIGUREMAXSETSIZETOUNLIMITED;#default
CONFIGUREENCRYPTIONFORDATABASEOFF;#default
CONFIGUREENCRYPTIONALGORITHMAES;#default
CONFIGUREARCHIVELOGDELETIONPOLICYTONONE;#default
CONFIGURESNAPSHOTCONTROLFILENAMETO/opt/oracle/product/10.2.0/db_1/dbs/snapcf_base.f;#default
我们目前配置这4个变量就可以了,其它的什么时候用什么时候做或者直接在命令行中指定。
四备份与恢复实例
1.用RMAN分别作数据库,表空间和数据文件的备份和数据库,表空间和数据文件损坏后的恢复实例
数据库级备份与恢复
全库压缩备份与全库非压缩备份应用场景:
如果你的系统有专用“备份磁阵”或者有足够的磁盘空间来让您随心所欲的用,那说明你很幸运,遇到一个不差钱的boss,往往事与愿违,我们可以自由支配的磁盘空间非常有限,这也验证了国人勤俭节约的优良传统。在有限的空间里如何装下更多的备份呢,这里就用上了压缩属性,把原来很大的文件尽可能压缩,提高空间利用率,当然备份和恢复的时间窗口会长一些,这就是时间换空间的精髓。
Comeon我们先来备个全库吧
全库压缩备份脚本
backupas