RMAN备份策略与异机恢复一例(续篇)
本文是《RMAN备份策略与异机恢复一例》的续篇,继续实验验证,最终实现两个需求:
1.异机恢复临时测试的小库
之前异机恢复的需求已经演练成功,现在需要保持之前恢复的库orcl不动,全新恢复一个用于临时测试指定时间点的小库,实例名称规划为testdb。
**注意:**风险点在于一定要注意所有步骤操作仔细,不能影响到现有环境orcl。
**知识点:**
- a.如何恢复指定时间点的数据库
- b.如何重定向数据库各文件的路径
- c.如何验证数据是否是自己需要的
查询数据库全备有两个日期的,一个是2018-06-19的全备,一个是2018-06-21的全备。
RMAN> list backup of database summary;
List of Backups
===============
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
45 B F A DISK 21-JUN-18 1 1 YES TAG20180621T073703
46 B F A DISK 19-JUN-18 1 1 YES TAG20180619T170003
54 B F A DISK 21-JUN-18 1 1 YES TAG20180621T073703
58 B F A DISK 21-JUN-18 1 1 YES TAG20180621T073703
60 B F A DISK 21-JUN-18 1 1 YES TAG20180621T073703
若直接restore database,默认会从最新的全备转储恢复,那如何可以用到之前的全备?
RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
sql statement: alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''
RMAN> restore database until time '2018-06-20 18:00:00' validate;
Starting restore at 21-JUN-18
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
using channel ORA_DISK_4
using channel ORA_DISK_5
using channel ORA_DISK_6
channel ORA_DISK_1: starting validation of datafile backup set
channel ORA_DISK_1: reading from backup piece /tmp/FULLBAK_ORCL_20180619_18_1.DBFILE
channel ORA_DISK_1: piece handle=/tmp/FULLBAK_ORCL_20180619_18_1.DBFILE tag=TAG20180619T170003
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: validation complete, elapsed time: 00:00:45
Finished restore at 21-JUN-18
RMAN>
可以看到只要指定了合适的until time参数,就自动会从之前合适的备份集中转储(这里实验就是20180619了)。
现在来恢复小库到2018-06-20 18:00:00这个时间点,实例名为testdb:
[oracle@jystdrac1 ~]$ export ORACLE_SID=testdb
[oracle@jystdrac1 ~]$ echo $ORACLE_SID
testdb
[oracle@jystdrac1 ~]$ mkdir -p /u01/oradata/testdb
参数文件,适当减少内存参数,增加db_unique_name参数:
[oracle@jystdrac1 tmp]$ strings ORCL.46.1.20180621.SPFILE
[oracle@jystdrac1 testdb]$ vi pfile.ora
*.audit_file_dest='/u01/app/oracle/admin/testdb/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/oradata/testdb/control01.ctl','/u01/oradata/testdb/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_unique_name='testdb'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testdbXDB)'
*.log_archive_dest_1='LOCATION=/u01/arch'
*.memory_target=334173952
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
[oracle@jystdrac1 testdb]$ mkdir -p /u01/app/oracle/admin/testdb/adump
启动到nomount:
SQL> startup nomount pfile='/u01/oradata/testdb/pfile.ora';
恢复控制文件:
[oracle@jystdrac1 tmp]$ rman target /
RMAN> restore controlfile from '/tmp/ORCL.45.1.20180621.CTL';
RMAN> alter database mount;
select name from v$datafile union all
select name from v$tempfile union all
select member from v$logfile;
NAME
------------------------------------------------------
/u01/oradata/orcl/system01.dbf
/u01/oradata/orcl/sysaux01.dbf
/u01/oradata/orcl/undotbs01.dbf
/u01/oradata/orcl/users01.dbf
/u01/oradata/orcl/temp01.dbf
/u01/oradata/orcl/redo03.log
/u01/oradata/orcl/redo02.log
/u01/oradata/orcl/redo01.log
8 rows selected.
set linesize 140 pagesize 100
select 'alter database rename file '''||name||''' to '''||name||''';' from v$tempfile union all
select 'alter database rename file '''||member||''' to '''||member||''';' from v$logfile;
替换规则:`to '/u01/oradata/orcl` => to `'/u01/oradata/testdb`
alter database rename file '/u01/oradata/orcl/temp01.dbf' to '/u01/oradata/testdb/temp01.dbf';
alter database rename file '/u01/oradata/orcl/redo03.log' to '/u01/oradata/testdb/redo03.log';
alter database rename file '/u01/oradata/orcl/redo02.log' to '/u01/oradata/testdb/redo02.log';
alter database rename file '/u01/oradata/orcl/redo01.log' to '/u01/oradata/testdb/redo01.log';
--注意如果这里尝试rename数据文件,由于指定的数据文件还不存在,是会报错的,类似这样的错误:
SQL> alter database rename file '/u01/oradata/orcl/sysaux01.dbf' to '/u01/oradata/testdb/sysaux01.dbf'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01141: error renaming data file 2 - new file '/u01/oradata/testdb/sysaux01.dbf' not found
ORA-01110: data file 2: '/u01/oradata/orcl/sysaux01.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
检查备份和归档:
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt expired archivelog all;
catalog start with '/tmp/';
crosscheck backup;
重定向数据文件-方法1:
run {
set newname for datafile '/u01/oradata/orcl/system01.dbf' to '/u01/oradata/testdb/system01.dbf';
set newname for datafile '/u01/oradata/orcl/sysaux01.dbf' to '/u01/oradata/testdb/sysaux01.dbf';
set newname for datafile '/u01/oradata/orcl/undotbs01.dbf' to '/u01/oradata/testdb/undotbs01.dbf';
set newname for datafile '/u01/oradata/orcl/users01.dbf' to '/u01/oradata/testdb/users01.dbf';
sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
set until time '2018-06-20 18:00:00';
restore database;
switch datafile all;
}
RMAN> recover database until time '2018-06-20 18:00:00';
重定向数据文件-方法2:
--这里语法要求一定要指定%f或者%U,通常选择%U更易识别一些,这里测试使用%f只有文件号,不够友好。
run {
set newname for database to '/u01/oradata/testdb/%f';
sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
set until time '2018-06-20 18:00:00';
restore database;
switch datafile all;
}
RMAN> recover database until time '2018-06-20 18:00:00';
此时一定要重新确认下临时文件和redo日志文件的位置,如果没有更改正确,务必改正,否则会造成灾难性后果!!!
SQL> select name from v$datafile union all
2 select name from v$tempfile union all
3 select member from v$logfile;
NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/oradata/testdb/1
/u01/oradata/testdb/2
/u01/oradata/testdb/3
/u01/oradata/testdb/4
/u01/oradata/orcl/temp01.dbf
/u01/oradata/orcl/redo03.log
/u01/oradata/orcl/redo02.log
/u01/oradata/orcl/redo01.log
8 rows selected.
--如果不对,需要rename修改,然后再次查询确认:
alter database rename file '/u01/oradata/orcl/temp01.dbf' to '/u01/oradata/testdb/temp01.dbf';
alter database rename file '/u01/oradata/orcl/redo03.log' to '/u01/oradata/testdb/redo03.log';
alter database rename file '/u01/oradata/orcl/redo02.log' to '/u01/oradata/testdb/redo02.log';
alter database rename file '/u01/oradata/orcl/redo01.log' to '/u01/oradata/testdb/redo01.log';
汇总一下本节开头提出的问题:
a.如何恢复指定时间点的数据库
RMAN>
sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
restore database until time '2018-06-20 18:00:00';
recover database until time '2018-06-20 18:00:00';
b.如何重定向数据库各文件的路径
--方法1:
RMAN>
run {
set newname for datafile '/u01/oradata/orcl/system01.dbf' to '/u01/oradata/testdb/system01.dbf';
restore...
switch datafile all;
}
--方法2:
RMAN>
run {
set newname for database to '/u01/oradata/testdb/';
restore...
switch database to copy;
}
--注意:已经反复强调过多次,在open resetlogs前都需要检查文件位置是否正确,尤其是redo文件的位置!这里需要将redo和temp文件都重定向到新的目录下:
alter database rename file '/u01/oradata/orcl/temp01.dbf' to '/u01/oradata/testdb/temp01.dbf';
alter database rename file '/u01/oradata/orcl/redo03.log' to '/u01/oradata/testdb/redo03.log';
alter database rename file '/u01/oradata/orcl/redo02.log' to '/u01/oradata/testdb/redo02.log';
alter database rename file '/u01/oradata/orcl/redo01.log' to '/u01/oradata/testdb/redo01.log';
c.如何验证数据是否是自己需要的
SQL> alter database open read only;
Check Your DATA...
SQL> shutdown abort;
SQL> startup mount;
SQL> alter database open resetlogs;
2.传输归档时,实现增量传输
之前传输归档时,当天内的文件是scp直接传输的,现在需要实现增量传输。
知识点:
- a.如何在Linux实现增量传输文件的功能
之前windows是通过 xcopy /y /d来实现这个需求的:
/y
禁止提示确认要覆盖已存在的目标文件。
/d [:MM-DD-YYYY]
只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括“MM-DD-YYYY”值,“xcopy”会复制比现有“Destination”文件新的所有“Source”文件。该命令行选项使您可以更新更改过的文件。
实际测试将之前的scp复制部分替换成rsync --ignore-existing,之前的scp部分注释掉,添加rsync部分:
--全备脚本:
#echo "Begin scp at : `date`" >>${1}/backup_full.log
#scp ${1}/*`date +%Y%m%d`* oracle@192.168.1.61:/tmp/
#echo "End scp at : `date`" >>${1}/backup_full.log
echo "Begin rsync at : `date`" >>${1}/backup_full.log
rsync --ignore-existing ${1}/*`date +%Y%m%d`* oracle@192.168.1.61:/u01/orabak/
echo "End rsync at : `date`" >>${1}/backup_full.log
--归档备份脚本:
#echo "Begin scp at : `date`" >>${1}/backup_arch.log
#scp ${1}/*`date +%Y%m%d`*.{CTL,SPFILE,ARC} oracle@192.168.1.61:/tmp/
#echo "End scp at : `date`" >>${1}/backup_arch.log
echo "Begin rsync at : `date`" >>${1}/backup_arch.log
rsync --ignore-existing ${1}/*`date +%Y%m%d`*.{CTL,SPFILE,ARC} oracle@192.168.1.61:/u01/orabak/
echo "End rsync at : `date`" >>${1}/backup_arch.log
测试,定时任务调整为每个小时在整点时备份归档:
[ora11204@OEL-ASM orabak]$ crontab -l
0 1 * * * /u01/orabak/scripts/backup.sh /u01/orabak
0 * * * * /u01/orabak/scripts/backuparch.sh /u01/orabak
去异机192.168.1.61去观察已经传输过来的文件修改时间,确认每小时确实只复制传输那些新文件:
-rw-r----- 1 oracle oinstall 9.5M Jun 21 13:00 ORCL.79.1.20180621.CTL
-rw-r----- 1 oracle oinstall 96K Jun 21 13:00 ORCL.80.1.20180621.SPFILE
-rw-r----- 1 oracle oinstall 2.5K Jun 21 13:00 ORCL.82.1.20180621.ARC
-rw-r----- 1 oracle oinstall 15K Jun 21 13:00 ORCL.81.1.20180621.ARC
-rw-r----- 1 oracle oinstall 9.5M Jun 21 14:00 ORCL.83.1.20180621.CTL
-rw-r----- 1 oracle oinstall 96K Jun 21 14:00 ORCL.84.1.20180621.SPFILE
-rw-r----- 1 oracle oinstall 2.5K Jun 21 14:00 ORCL.86.1.20180621.ARC
-rw-r----- 1 oracle oinstall 1.2M Jun 21 14:00 ORCL.85.1.20180621.ARC
-rw-r----- 1 oracle oinstall 9.5M Jun 21 15:00 ORCL.87.1.20180621.CTL
-rw-r----- 1 oracle oinstall 96K Jun 21 15:00 ORCL.88.1.20180621.SPFILE
-rw-r----- 1 oracle oinstall 2.5K Jun 21 15:00 ORCL.90.1.20180621.ARC
-rw-r----- 1 oracle oinstall 1.2M Jun 21 15:00 ORCL.89.1.20180621.ARC
-rw-r----- 1 oracle oinstall 9.5M Jun 21 16:00 ORCL.91.1.20180621.CTL
-rw-r----- 1 oracle oinstall 96K Jun 21 16:00 ORCL.92.1.20180621.SPFILE
-rw-r----- 1 oracle oinstall 2.5K Jun 21 16:00 ORCL.94.1.20180621.ARC
-rw-r----- 1 oracle oinstall 1.2M Jun 21 16:00 ORCL.93.1.20180621.ARC
最终考虑到一些特殊情况,比如有些文件同步一半突然断电,所以更偏向于使用rsync -t -v
同步满足需求,这样也更加匹配之前windows的xcopy /y /d
方式。
至此,通过rsync命令实现了增量传输文件的需求。
RMAN备份策略与异机恢复一例(续篇)的更多相关文章
- RMAN备份策略与异机恢复一例
实验环境: A机器(生产用途):RHEL 6.5 + Oracle 11.2.0.4 + IP Address 192.168.1.11 B机器(备机用途):RHEL 6.5 + Oracle 11. ...
- linux下仅仅有rman备份集的异机不同文件夹恢复
昨天在客户那里做了一次rman异机的恢复,把生产库弄一份给測试库用,总库大概80G,总共花费了2个小时,当时客户的环境是windows 11.2.0.3,今天早晨在linux下又一次測试了一下,记录下 ...
- Oracle RMAN 异机恢复一例
背景介绍:本例需求是将NBU备份的oracle数据库恢复到另一主机上. NBU环境配置.异机上的Oracle软件安装配置忽略,下面只介绍OracleDB恢复的过程. ----------------- ...
- RMAN - 备份异机恢复
OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...
- RMAN 备份异机恢复 并创建新DBID
测试平台信息: Oracle:11gR2 操作系统:Redhat 5.5 Target DB:dave 几点说明: (1)RMAN 异机恢复的时候,db_name必须相同. 如果说要想改成其他的实 ...
- rman备份与异机恢复
一.rman备份脚本并为定时任务 #!/bin/bashsource ~/.bash_profileexport LANG=en_USBACKUP_DATE=`date +%d`#RMAN_LOG_F ...
- rman 备份并异机恢复
1.RMAN 备份脚本 RUN { CONFIGURE RETENTION POLICY DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CO ...
- Oracle12c RAC RMAN异机恢复
######################################################## #编辑pfile文件initspdb.ora vi /oracle/app/oracl ...
- RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例
测试环境: 操作系统 : Red Hat Enterprise Linux ES release 4 (Nahant Update 4) VMWARE 数据库 : O ...
随机推荐
- Ubuntu系统中各种文件颜色的含义
蓝 色:文件夹 ,ls -l或ll时可以看到权限部分的第1个字母是d红色:压缩文件 绿色:可执行文件,包括jar白色:文本文件红色闪烁:错误的符号链接淡蓝色:符号链接黄色:设备文件灰色:其它文件 ...
- [No0000F9]C# 运算符重载
您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的.与其他函数一样,重载运 ...
- elasticsearch 安装配置详解
一.安装 简单的安装与启动于前文ElasticSearch初探(一)已有讲述,这里不再重复说明. 二.启动 1.自带脚本启动 1)bin/elasticsearch,不太任何参数,默认在前端启动 2) ...
- gateone安装使用
下载地址 https://github.com/liftoff/GateOne unzip GateOne-master.zip cd GateOne-master/ python setup.py ...
- PHP之错误
三.PHP配置之Error handling logging 1.error_reporting integer error_reporting = E_ALL 设置错误报告的级别.该参数可以是一个任 ...
- echart四川地图
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- LeetCode 872 Leaf-Similar Trees 解题报告
题目要求 Consider all the leaves of a binary tree. From left to right order, the values of those leaves ...
- Java之旅_面向对象_抽象类
参考并摘自:http://www.runoob.com/java/java-abstraction.html Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有 ...
- 20165336 预备作业3 Linux安装及学习
Linux 安装及学习 一.VirtualBox和Ubuntu的安装 依照老师所给的步骤下载了VirtualBox 5.2.6和Ubuntu 16.04.3. 按照步骤一步一步进行了安装,出现的问题有 ...
- Frps 家庭服务器访问解决方案
100.64.0.0/10运营商级(Carrier-grade)NAT保留IP地址 在一次跟踪路由的网络操作时发现自己路由器下一跳路由节点的IP地址比较奇怪,是100.64.0.1.好奇促使我查询 ...