2-oracle-rac-rman恢复到单库操作记录(全备、全备+增备)
备份脚本:点击
概述:
1、数据恢复文件有三:参数文件,控制文件,数据文件 2、全备恢复:三个数据文件路劲均指定全备数据的文件夹路径:即(/data/backup/qgcs/20250518的具体文件名) 3、全备+增备恢复:参数文件、控制文件均指定最后一个增量文件夹的对应文件(/data/backup/qgcs/20250522的具体文件名),数据文件指定全局目录即(/data/backup/qgcs/20250522)
1、数据备份目录
将备份的全备含后续的增量备份文件同步到灾备环境的指定目录,即: [oracle@db1 ~]$ ll /data/backup/qgcs/ 总用量 20 drwxr-xr-x 7 oracle oinstall 4096 5月 18 01:00 20250518 drwxr-xr-x 7 oracle oinstall 4096 5月 19 01:00 20250519 drwxr-xr-x 7 oracle oinstall 4096 5月 20 01:00 20250520 drwxr-xr-x 7 oracle oinstall 4096 5月 21 01:00 20250521 drwxr-xr-x 7 oracle oinstall 4096 5月 22 01:00 20250522
备份数据授权
chown -R oracle.oinstall /data/backup/qgcs/
2、数据存储目录
[oracle@db1 ~]$ cp .bash_profile .bash_profile_qgcs [oracle@db1 ~]$ sed -i 's#icdc#qgcs#g' .bash_profile_qgcs [oracle@db1 ~]$ source .bash_profile_qgcs mkdir -p $ORACLE_BASE/admin/qgcs/adump/ mkdir -p /data/oracle/oradata/qgcs/ mkdir -p /data/oracle/fast_recovery_area/qgcs/ mkdir /data/oracle/oradata/qgcs/archive-qgcs mkdir /data/oracle/oradata/qgcs/controlfile/
3、恢复数据
3.1恢复参数文件
添加临时参数文件 cat > $ORACLE_HOME/dbs/1.ora << ! db_name='qgcs' ! 启动到nomount状态 cd $ORACLE_HOME/dbs/ sqlplus / as sysdba startup nomount pfile='$ORACLE_HOME/dbs/1.ora' _-------------------------------参数文件恢复---------------------------------- [oracle@db1 ~]$ source .bash_profile_qgcs [oracle@db1 ~]$ rman target / -- 以 PFILE 形式恢复,以便手动修改参数 RESTORE SPFILE TO '/tmp/spfile_rac.ora' FROM '/data/backup/qgcs/20250522/spfile/spfile_r33q27pt_1_1_20250522_20250522010001.bak'; 从恢复出的 SPFILE 创建 PFILE sqlplus / as sysdba SQL> CREATE PFILE='/tmp/init_qgcs.ora' FROM SPFILE='/tmp/spfile_rac.ora'; 修改 PFILE 内容适配单机 打开 /tmp/init_qgcs.ora 文件,重点修改以下参数: 参数名 | 原 RAC 值(示例) | 单机值修改建议 cluster_database | TRUE | FALSE(必须改) instance_number | 2 | 1 undo_tablespace | UNDOTBS2 | 改为 UNDOTBS1(或 RAC 中第 1 节点使用的) thread | 2 | 1 control_files | +DATA/... ASM 路径 | 改为本地路径,如 /u01/oradata/orcl/control01.ctl db_create_file_dest | +DATA | 改为如 /u01/oradata/orcl remote_listener | 存在 | 注释或删除 log_archive_config、fal_server、fal_client | RAC/DG 用 | 注释或删除 *.memory_target=26852982784 | 注释或删除 修改后的配置 [oracle@db1 ~]$ cat /tmp/init_qgcs.ora qgcs1.__db_cache_size=603979776 qgcs2.__db_cache_size=637534208 qgcs1.__java_pool_size=16777216 qgcs2.__java_pool_size=16777216 qgcs1.__large_pool_size=33554432 qgcs2.__large_pool_size=33554432 qgcs1.__pga_aggregate_target=419430400 qgcs2.__pga_aggregate_target=419430400 qgcs1.__sga_target=1258291200 qgcs2.__sga_target=1258291200 qgcs1.__shared_io_pool_size=0 qgcs2.__shared_io_pool_size=0 qgcs1.__shared_pool_size=570425344 qgcs2.__shared_pool_size=536870912 qgcs1.__streams_pool_size=0 qgcs2.__streams_pool_size=0 *.audit_file_dest='/opt/app/oracle/admin/qgcs/adump' *.audit_trail='db' *.cluster_database=false *.compatible='11.2.0.4.0' *.control_files='/data/oracle/oradata/qgcs/controlfile/control01.ctl' *.db_block_size=8192 *.db_create_file_dest='/data/oracle/oradata/qgcs' *.db_domain='' *.db_name='qgcs' *.db_recovery_file_dest='/data/oracle/oradata/qgcs' *.db_recovery_file_dest_size=32212254720 *.diagnostic_dest='/opt/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=qgcsXDB)' qgcs.instance_number=1 *.log_archive_dest_1='LOCATION=/data/oracle/oradata/qgcs/archive-qgcs' *.log_archive_format='%t_%s_%r.dbf' *.open_cursors=300 *.pga_aggregate_target=415236096 *.processes=150 *.remote_login_passwordfile='exclusive' *.sga_target=1245708288 qgcs.thread=1 qgcs.undo_tablespace='UNDOTBS1' 使用修改后的 PFILE 启动 NOMOUNT sqlplus / as sysdba SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP NOMOUNT PFILE='/tmp/init_qgcs.ora'; 创建新 SPFILE SQL> CREATE SPFILE FROM PFILE='/tmp/init_qgcs.ora'; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP NOMOUNT; -- 此时用的就是新生成的 SPFILE
3.2恢复控制文件
RMAN> startup force nomount; RMAN> restore controlfile from '/data/backup/qgcs/20250522/control/control_r43q27pu_1_1_20250522_20250522010001.bak'; 控制文件恢复后就可以启动到mount状态了, RMAN> alter database mount;
3.3、数据文件恢复(全备)
启动到mount状态先别着急恢复数据库,需要先将备份集注册到rman中 RMAN> catalog start with '/data/backup/qgcs/20250518'; 注册完成后,先交叉校验备份集: RMAN> crosscheck backupset; 删除过期的备份,因为你备份是异地备份,所以在RAC中记录的备份全部过期,进行清除 RMAN> delete expired backup; 现在开始恢复数据库文件,因为RAC数据库数据文件、日志文件等存储路径时在ASM磁盘中,路径基本是以 ‘+DATA’ 开头,在执行restore database 命令前需要进行文件路径转换。 先在原库上生成关于数据文件路径转换的脚本,便于恢复操作,脚本如下(在原库查询得出脚本) 查询脚本 select 'set newname for datafile ' || a.FILE# || ' to "' || a.NAME || '";' from v$datafile a union all select 'set newname for tempfile ' || a.FILE# || ' to "' || a.NAME || '";' from v$tempfile a; 结果 1 set newname for datafile 1 to "+DATA/qgcs/datafile/system.258.1155087435"; 2 set newname for datafile 2 to "+DATA/qgcs/datafile/sysaux.290.1155087435"; 3 set newname for datafile 3 to "+DATA/qgcs/datafile/undotbs1.291.1155087435"; 4 set newname for datafile 4 to "+DATA/qgcs/datafile/users.256.1155087435"; 5 set newname for datafile 5 to "+DATA/qgcs/datafile/undotbs2.289.1155087569";
…… 会将所有涉及到的数据文件全部显示,得到以上脚本后进行简单的编辑: ramn> run{ allocate channel ch1 device type disk; set newname for datafile 1 to "+DATA/qgcs/datafile/system.258.1155087435"; set newname for datafile 2 to "+DATA/qgcs/datafile/sysaux.290.1155087435"; set newname for datafile 3 to "+DATA/qgcs/datafile/undotbs1.291.1155087435"; set newname for datafile 4 to "+DATA/qgcs/datafile/users.256.1155087435"; …… restore database; switch datafile all; switch tempfile all; } 然后就可以在rman中运行以上修改好的 run 块(脚本)进行数据库恢复。 此处我并没有生成关于redo日志的转换语句,因为我在讲redo日志转换放到 run脚本块中执行总会提示 +DATA开头的路径不存在, 所以就省略了redo,但是我发现数据库恢复并未受影响,而且在恢复后redo日志路径已经转换了 数据库文件恢复后,执行recover database会报错,提示缺少归档文件: RMAN> recover database; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 05/20/2025 16:36:12 RMAN-06054: media recovery requesting unknown archived log for thread 2 with sequence 9229 and starting SCN of 119623030 RMAN> recover database until sequence 39595; RMAN> alter database open resetlogs;
3.3、数据文件恢复(全备+增备)
启动到mount状态先别着急恢复数据库,需要先将备份集注册到rman中 RMAN> catalog start with '/data/backup/qgcs/'; 注册完成后,先交叉校验备份集: RMAN> crosscheck backupset; 删除过期的备份,因为你备份是异地备份,所以在RAC中记录的备份全部过期,进行清除 RMAN> delete expired backup; rman> run{ SET UNTIL TIME "TO_DATE('2025-05-22 02:00:00', 'YYYY-MM-DD HH24:MI:SS')"; set newname for datafile 1 to "+DATA/qgcs/datafile/system.258.1150758321"; set newname for datafile 2 to "+DATA/qgcs/datafile/sysaux.257.1150758323"; set newname for datafile 3 to "+DATA/qgcs/datafile/undotbs1.264.1150758325"; …… SWITCH DATAFILE ALL; RECOVER DATABASE; } RMAN> alter database open resetlogs;
本文来自博客园,作者:!!雪莲花!!,转载请注明原文链接:https://www.cnblogs.com/zhj5418/p/18896890
浙公网安备 33010602011771号