RMAN配置、备份和恢复操作基础
3.1、设置与配置
RMAN需要在归档模式下进行操作,是需要CDB或者说整个数据库处于归档模式,单个pdb处于归档模式并没有用。归档模式下日志存储位置有两个,oracle得FRA区域该区域为默认存储位置,二是归档日志目标目录
log_archive_dest_n#1-10 oracle总计有最多10个不同得归档日志目标参数,目录可以为本地、网络甚至nas
alter system set log_archive_dest_1='location=c:\oracle\oraarc\betal'
log_archive_max_processes
log_archive_min_succeed_dest #指定归档日志目录中应该包含多少联机重做日志才算归档成功
log_archive_state_n#1-10 每个归档日志定义两种不容状态中得一种,设置为enable,归档进程会将改状态视为一个有效得归档日志目标,并为之努力
log_archive_format #命名归档得重做日志提供一个oracle使用得模板,主要用于创建归档日志名称时使用
log_archive_start #10g不在使用,10g前使用归档日志需要开启
log_archive_max_processes #定义oracle启动时归档进程数量
RMAN一般都与FRA快速闪回恢复区密切相关,具体参考Oracle FRA专区
3.1.1、RMAN的兼容性
使用RMAN时应该考虑客户端与所连接的目标数据库兼容性问题以及回复目录的兼容性。需要防止其他服务的同名rman命令没有运行
目标数据库/辅助数据库版本 | RMAN客户端版本要求 |
---|---|
8.0.6 | 8.0.6 |
8.1.7 | 8.0.6.1或8.1.7 |
8.1.7.4 | 8.1.7.4 |
9.0.1 | 9.0.1 |
9.2.0 | >=9.0.1.3<=目标库可执行版本 |
10.1.0.5 | >=10.1.0.5<=目标库可执行版本 |
10.2.0 | >=10.1.0.5<=目标库可执行版本 |
11.1.0 | >=10.1.0.5<=目标库可执行版本 |
11.2.0 | >=10.1.0.5<=目标库可执行版本 |
12.1.0.x | =12.1.0.x |
RMAN与oracle口令文件的关联
3.1.2、control_file_record_keep_time参数
show parameter control_file_record_keep_time
#该参数用于控制控制文件中存储备份记录的保存时间,主要是备份的记录而不是备份的文件本身,与rman备份策略的设置没有关系,基础单位位天。
#但是设置建议与备份文件保存周期一致
#直接影响数据库控制文件的大小,因为记录越多,所占空间越多,如果设置为0则相当于金庸扩展控制文件,会使rman备份保存周期不稳定
3.1.3、RMAN连接错误处理
#本次作为实际碰到的实例情况进行演示
#问题描述:
#我创建了两个pdb:pdbcreatetest和connecttest,他们都拥有在cdb下创建的c##rmancreatetest用户,然后通过rman尝试连入这两个目标库
#rman target c##rmanconnecttest/rmanconnecttest@connecttest
#rman target c##rmanconnecttest/rmanconnecttest@pdbcreatetest
#其中 pdbcreatetest库成功连接,但是connecttest缺发生如下报错
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-12170: TNS:Connect timeout occurred
#这种应该如何处理
#问题处理:
#首先要先知道ora-12170是什么错误,这边是超时,所以实际是监听没找到目标库,首先检查tnsname.ora是不是有对这两个pdb做了实例创建,
#然后查看监听状态 lsnrctl status 查看tnsname中对pdb创建的是不是有生效
1、如果都正常的但是就是连不到目标库可以选择 lsnrctl stop \lsnrctl start 重启监听
2、如果tnsnames.ora里有关目标库的信息是手敲的,这边建议走net manger工具重新针对目标库创建一个新监听服务的tnsname.ora,然后信息复制到原tnsnames.ora文件中#该问题原因未知,操作指导网站 https://www.cnblogs.com/sunice/p/11781066.html
3.1.4、RMAN与oracle net的连接安全性
rman连接数据库的四种方式
1、通过os
#rman taeget /
#针对于unix系统,由于在oracle安装时会与一个已经存在与unix的dba组关联,若关联对像跟unix账户用户同名,则可以不用进行其他操作直接连入目标库
2、使用用户名和口令
# C##rmanconnecttest/rmanconnecttest@pdbcreatetest2
3、通过oracle net直接连入到容器cdb
4、通过oracle net直接连入到cdb下的pdb
#rman target C##rmanconnecttest/rmanconnecttest@pdbcreatetest2
3.2、RMAN命令
3.2.1、启动RMAN并连接得数据库
#标准方式
rman target=backup/manager@orcl # 连入数据库名/数据库创建得密码口令@oracle唯一名
rman target=backup/manager#未指定监听
#g版本
#g版本就一个主库,所以可以直接连主库
rman target / 直接连入主库(本机上运行)
#注册目标数据库。此时就可以使用RMAN的恢复目录对目标数据库进行备份和恢复操作。
#c版本
#针对c版本,使用rman是不允许使用alter session set container切换到pdb否则会有报错,可采取如下方式直接连入pdb库
#方式一 由于插拔式数据库概念,需要指定连入得数据库名称
rman target rmanpdb #此处指定连入数据库pdb名称
rmantest #按照提示输入数据库创建时得密码口令
#方式二 插拔库pdb有配置到tnsname.ora加入监听
rman target=system/wangziyuan431320@rmanpdb #使用根容器用户/数据创建密码@插拔数据库pdb名称
使用c##用户连入rman、检查表空间情况的操作步骤 包含创建
#1、创建与授权
create user c##rmanconnecttest identified by rmanconnecttest container=all;
#创建多租户用户数据库的常用账户
grant sysbackup to c##ramnconnecttest
#C##默认拥有sysbackup权限,但是以防万一
grant RECOVERY_CATALOG_OWNER to c##ramnconnecttest;
grant create session to c##ramnconnecttest;
#赋予常用账户常用权限,如果需要涉及到恢复归档日志需要授予RECOVERY_CATALOG_OWNER权限
#2、连入目标库
rman target C##rmanconnecttest/rmanconnecttest@pdbcreatetest2
#tnsname.ora有添加pdb pdbcreatetest2信息,然后使用在cdb下创建得共有有c##用户连入对应pdb进行操作
Recovery Manager: Release 12.1.0.2.0 - Production on Mon May 8 15:23:09 2023
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1659314280)
RMAN> select name from v$tablespace; #用于简单判断当前连入是否连入目标库,我是通过检查数据库dbf,(有提前在外部切入到pdb查看库文件)
using target database control file instead of recovery catalog
NAME
------------------------------
UNDOTBS1
SYSTEM
SYSAUX
TEMP
PDBC
WANGWANG
WANGWANGTEST02
7 rows selected
#rman内部连接库的命令--connect
connect target #连接到另一个不同的目标数据库
connect catalog #连接到另一个不同的恢复目录
connect auxili #连接到另一个辅助数据
connect taregt sys/passwd@testpdb
connect catalog rcat_user/passwd@robdb
3.2.2、configure配置命令
#修改配置--configure/修改默认配置的建议连入到cdb 目标库里中操作
#1、指定默认备份设备类型
configure default device type to disk #此处类型为磁盘
#2、设置备份备份片的类型
configure device type disk backup type to backupset
configure device type disk backup type to compressed backupset
configure device type disk backup type to copy
#3、信道默认设置
configure device type disk parallelism 2; #配置为2默认通道进行备份操作
#默认目标库通道数量为2,未配置情况下
configure channel 1 device type disk maxpiecesize 100m maxopenfiles 8 rate 100 mb
#信道1上创建的备份片最大(maxpiecesize)为100MB,且信道最多打开8个文件(maxopenfiles),且只允许拥有100mb的吞吐量
#rman进行目标库备份时需要使用到空闲信道对文件进行读写,一般通过下面命令给连入的目标库当场配置信道
allocate channer d1 device type disk #配置d1通道给目标库使用
#4、设置备份片格式串命令
configure channel device type disk format 'E:\app\Administrator\db_bak\rmanbak\backup_%d_%T_%s_%p'
#参数都有各自的意义,%d表示数据库名称、%t表述备份集时间,%T表示当前时间年月日格式
#5、重置rman默认配置
configure device type disk backup type clear #如果在此之前又修改过configure命令的各个参数,则会执行失败。只有在configure参数没有操作过时,该命令才能正常执行
#6、创建备份时额外进行一次自动备份,进行双副本
configure datafile backup copies for device type disk to 2
#to后跟随副本个数,该命令主要为备份备份集作用
#7、排除一个目标库的表空间的备份
configure exclude for tablesoace old_data #old_data表空间后续不进行rman备份
#8、备份优化
configure backup optimization on;
#开启备份优化,rman备份文件时会跳过在同一个备份设备上相同备份文件的备份(已备份无差异的文件不会二次备份)
#9、rman日志记录
#日志缺省记录7天
desc v$rman_output #rman会将所有日志文件记录(无所谓正负向)存放在改表内
configure rman output to keep for 30 days #设置rman日志存放时间最大30天
configure rman output clear #将日志记录时间返回到默认值七天
show all #可以进行检查默认参数变化
#10、操纵快照控制文件
#1.3介绍的快照控制文件,属于控制文件的备份时间点副本
configure snapshot controlfile name to 'E:\app\testcontrol_file'
#修改快照控制文件默认存储未知,或者弄成唯一名的方式对每次备份文件保持唯一性
#11、配置控制文件和spfile等重要数据库文件自动备份的开启
#c版本后,rman在备份cdb时会默认启用控制文件备份。而值备份pdb时则不会启用
configure controlfile autobackup on; #该命令用于开启重要数据库文件的自动备份
configure controlfile autobackup off;
#重要文件备份规则
#1、所有发出的rman backup或者copy命令都会自动备份控制文件和spfile参数文件
#2、如果采取使用的程序块操作rman,若程序块最后命令不会包含backup和copy则,执行结束后自动备份控制文件和spfile文件
#3、若数据库处于归档模式,则任何发生的结构变化都会导致自动进行备份控制文件到默认指定的位置。
#12、
3.2.3、RMAN连接权限
sysbackup #仅用来执行备份得账户类型
#C版本以前rman延用sysdba权限连接到目标数据库,但c版本后我们引入得了sysbackup权限得C##开头用户,sysbackup类型可以基于特定容器为普通用户授权
# C##123拥有pdb1和pdb2得权限,则用户c##123可以对这两个pdb进行数据备份,但是不能从odb及逆行归档重做日志得备份
#如果需要连接备份归档重做日志,需要授予RECOVERY_CATALOG_OWNER权限即可,官方原话为
#These privileges are not required when connecting to the recovery catalog. You must grant the role to the catalog schema ownerRECOVERY_CATALOG_OWNER.
sqlplus / as sysbackup #通过空闲进程连入主库
3.2.4、RMAN执行错误处理
rman checksyntax
#由cmd执行,该命令执行后进入rman,但是此时rman对于输入的命令不去具体执行,而是检查其语法错误,常用于rman备份脚本的错误检查和测试
eg:
rman checksyntax
RMAN> run [backup database;]
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01006: error signalled during parse
RMAN-02001: unrecognized punctuation symbol "[
3.3、RMAN还原与恢复
3.3.1、过期备份文件删除
report obsolete#报告过期备份集文件,一般都是基于当前文件保留策略计算出来的,可以直接删除,这边只是列出信息
delete obsolete#删除上述所有报告的备份集文件
3.3.2、配置rman备份文件三种保留策略
#oralce针对备份文件拥有三种保留策略:基于恢复窗口、基于冗余和无保留策略
#三种策略基于configureretention policy命令进行配置,用于自动删除不需要的备份文件
report obsolete #查看所有到期的备份集文件,这个到期是依据备份保留策略决定的
show retention policy #查看当前设定保存策略,
#1、基于恢复窗口的保留策略
配置恢复时间点,用于确保数据库可以恢复到特定的时间点,使用时必须开启归档模式。
configure retention policy to recovery window of 20 days
#数据库恢复到三天前的状态
#该策略特点,实际备份存在时间会比设定的还要靠前,如上面设定备份存在时间是三天,但是数据库内备份文件却是完整备份到5天或者10天前的文件,这些靠前的文件是作为我们最多恢复到三天前状态的有利保障,所以实际空间占用会比较高。
#2、基于冗余的保留策略
依照数据库产生的备份总数,来决定是否自动删除备份文件。
show retention policy
configure retention policy to redundancy 3;#仅保留最近备份所产生的三个文件
show retention policy #注意使用show 检查下备份策略的执行情况
#3、无保留策略
configure retention policy clear #重置所有备份状态
3.3.3、配置默认加密级别-创建加密备份集
https://blog.csdn.net/congdao9826/article/details/100360933
#10gR2后,rman允许创建加密备份,使用加密备份还原时orcle会进行解密操作
#目前oracle有3种不同的加密模式
#1、透明模式具体请参考TDE文章
该模式需要配置oracle加密的电子皮夹(oracle encryptionwallet),多了一层加密但是实际使用时仍然是数据给到还是明文
#(1)修改sqlnet.ora文件 配置电子皮夹
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=D:/oradatawallet)))#directory是wallet所指定存放路径,需要自己新建
#(2)指定wallet密钥
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "oracle"
#(3)涉及到关闭开启等等
alter system set encryption wallet open identified by oracle;#重新打开wallet密钥
select * from testwallet#这次就可以查找到数据
#2、口令模式
desc v$rman_encryption_algorithms;#该视图存储当前数据库支持的加密方式,默认应该三种,128位、192位、256位
show all#查看当前配置的加密方式
CONFIGURE ENCRYPTION ALGORITHM TO 'AES256';#修改加密方式
set encryption identified by password only#为加密设置口令,开启加密备份。目前口令都是明文,相对比较不太安全,但是这个基本也用不到
还原流程:#假定还原使用的备份片采取密码ps
RMAN> set decryption identified by "ps";
正在执行命令: SET decryption
RMAN> restore database;
#3、双重模式
通过口令或者oracle的wallet实习先还原双重模式备份
#1、配置口令模式
configure encryption for database on; #开启TDE。可以针对库、表空间、表、列
#configure encryption for tablespace test on ;
#configure encryption for tablespace plug_test:test on 针对名为plug_test的pdb的test表空间做加密
set encryption on identified by robert only;#设置口令密码
select *from v$rman_encryption_algorithms#查看当前支持的加密方式
configure encryption algorithm 'AES128'#根据上面的结果,选择加密方式
# 双重模式下,如果备份执行前oracle有先配置了使用过TDE,则备份前务必确保oracle的wallet开启,否则备份失败,
表格是针对rman使用期间,使用的不同加密或压缩的数据的rman的备份的实际处理过程
应用数据 | 启用rman压缩时备份 | 启用rman加密时备份 | 压缩和加密同时启用时 |
---|---|---|---|
未加密 | 压缩数据 | 加密数据 | 先压缩在加密完成备份 |
TDE列加密 | 压缩数据:处理已加密列就如同没有加密时(透明) | 加密列会再度进行加密 | 先压缩,在加密数据,处理已加密列保持透明,然后在对已加密列做二次加密 |
TDE表空间加密 | 对加密表空间解密,然后压缩再加密 | 加密表空间原样传给备份 | 对加密表空间解密,然后压缩再加密 |
上面的表格是针对rman使用期间,使用的不同加密或压缩的数据的rman的备份的实际处理过程
3.3.4、归档日志删除策略
1、rman内配置的策略对fra和fra以外的归档重做日志都有效,但是实际只有fra内部的会被删除,因为oracle本身会优先级高,默认会尽可能长时间的保护日志,除非空间有需要或者日志被标记。
2、11g版本以前,该删除策略仅仅对应用到备份数据库的归档重做日志有效,
capplied on standby用于强制删除将备份数据库内的归档内容标记成可删除,前提是这些归档日志已经成功应用于备用数据库
3、针对c版本,该策略必须要在cdb根容器下进行,否则pdb容器下会失败
#跟归档日志删除相关得rman报错
rman-08137(日志删除失败需要更改状态或日志仍然被使用)、
rman-08120、(新版本针对08137会增加这个错误)
rman-08591(错误得日志策略)
#归档日志得三种删除策略
#其中none为默认配置,最常用,剩下两个涉及到oracle date guard的主备数据同步和事务一致
1、to none#rman中归档日志得默认状态,禁用归档日志删除策略
configure archivelog deletion policy to none
2、APPLIED ON STANDBY/applied on all standby#归档日志传送到目标位置且确定应用后允许删除
#该模式下,需满足归档日志已应用于所需备用数据库且删除策略不需要归档日志时才允许删除操作
#不带all,强制只有传输到远程目标后才能删除这些已归档的日志
#带all,无所谓归档日志全部转移到远程目标且应用到目标之后,都能允许删除该日志
configure archivelog deletion policy to APPLIED ON STANDBY
#该模式适用于单节点rac和asm备库
3、shipped on standby/shipped on all standby #归档日志传送到目标位置时允许删除
#归档重做日志文件已传输到所需得远程目标且未设置任何删除策略或者说删除策略不需要日志
#带all,强制传输到远程目标后能删除已归档重做日志
#不带all,无论是否有强制转移到所有远程目标,日志都可以删除可以删除
configure archivelog deletion policy to shipped on standby
#归档日志删除策略-已经备份
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO SBT;
#指定fra中归档日志已经备份2次以上时,会被更改为可删除状态
#针对fra以外的日志,需要使用delete obsolet或则 delete archivelog命令才可执行删除,其中delete obsolete只会删除标记为过期的归档日志
configure archivelog deletion policy to backed up 3 times
3.3.5、RMAN与共享服务器
#所谓共享服务器,早期版本中简称为MTS。一对多处理短连接事务
#如果oracle使用MTS,则oracle需要创建一个专用服务器供RMAN使用,需要加到tnsname.ora中
rob1_ded =
(
description=
(address=(protocol=tcp)(host=robpc)(port=1521))
(connect_data=(service_name=rob1_ded)(server=dedicated))
)