RMAN(11G)备份恢复到异机数据库(同路径)
2022-03-16 09:59阅读:
说明:
1.此处环境为同平台、同版本(操作系统版本可以不同,但数据库版本需相同),源机器和目标机器具有相同的目录结构。
2.目标机器只需要安装oracle只安装oracle数据库软件,不创建数据库(no netca dbca)。
3.第一次利用备份恢复测试环境,之后从源机器拷贝备份到目标机器并在控制文件中注册,再进行恢复测试。
一、环境描述
1. 源数据库环境
操作系统版本 : CentOS 6.8 x64
数据库版本 : Oracle 11.2.0.4 x64
数据库名 : ora11g
数据库SID : ora11g
db_unique_name : ora11g
instance_name : ora11g
IP : 192.168.3.105
2. 目标数据库环境
操作系统版本 : CentOS 6.8 x64
数据库版本 : Oracle 11.2.0.4 x64 (只安装oracle数据库软件,no netca dbca)
数据库名 : ora11g
数据库SID : ora11g
db_unique_name: ora11g
instance_name : ora11g
IP:192.168.3.106
主要过程是将参数文件备份、控制文件备份、数据文件备份、密码文件以及归档备份拷贝到目标主机进行rman恢复。
注意:当使用rman nocatalog恢复时,数据库必须是处于“mount”状态的。而Oracle startup
mount的前提条件是control必须存在。因此,你必须在恢复datafile之前先恢复controlfile。
二、源数据库服务器
1、查看源数据库DBID、控制文件、数据文件和redo日志文件的存储位置:
# 查看源数据库的DBID:
SQL> select dbid from v$database;
dbid 98872961
# 查看控制文件:
SQL> select name from v$controlfile;
/u01/oracle/oradata/ora11g/contr
ol01.ctl
/u01/oracle/fast_recovery_area/ora11g/control02.ctl
# 查看数据文件:
SQL> select status,name from v$datafile;
# 查看日志文件:
SQL> select * from v$logfile;
2、rman备份源数据库:
通过rman进行一次全备:
rman target /
RMAN>
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
方式1 分别备份
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
#backup as compressed backupset database format
'/u01/rman/fulldb_%T_%U';
backup database format '/u01/rman/full_%T_%U_%U.bak' ;
sql 'alter system archive log current';
#backup as compressed backupset archivelog all format
'/u01/rman/arc_%T_%U' delete all input;
backup archivelog all format
'/u01/rman/arc_%T_%U.bak';
backup current controlfile
format='/u01/rman/ctl_file_%T_%U.bak';
backup spfile format='/u01/rman/spfile_%T_%U.bak';
sql 'alter system archive log current';
release channel c1;
release channel c2;
}
方式2 整体备份
run{
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT
'/u01/rman/all_%T_%U.bak';
CONFIGURE CONTROLFILE AUTOBACKUP ON;
sql 'alter system archive log current';
backup database include current controlfile spfile plus archivelog
delete input;
sql 'alter system archive log current';
}
report obsolete;
list backup summary;
【注意:控制文件一定要最后备份,由于没做归档目录数据库,rman备份信息都放在控制文件里面,要保证备份过程的信息内容都进入到控制文件,保证数据文件和控制文件是一致备份】
分别列出参数文件备份,控制文件备份,数据文件备份,以及归档备份的名字:
list backup of spfile;
list backup of controlfile;
list backup of database;
list backup of archivelog all;
3、备份参数文件:
create pfile='/u01/rman/initOra11g.ora' from spfile;
# 【pfile备份后,拷贝到目标数据库服务器】
4、将备份文件、密码文件copy至目标机器:
a.拷贝rman备份文件
b.拷贝参数文件
scp *20220314* oracle@192.168.3.106:/u01/rman/
c.拷贝密码文件
scp /u01/oracle/product/11.2.0.4/db_1/dbs/orapworcl11g
oracle@192.168.3.106:/u01/rman/
三、目标数据库服务器
1、目标服务器上创建相应的目录:
mkdir -p /u01/oracle/admin/ora11g/{adump,dpdump,pfile,scripts}
mkdir -p /u01/oracle/oradata/ora11g
mkdir -p /u01/oracle/fast_recovery_area/ora11g
mkdir -p /u01/archivelog
mkdir -p /u01/rman
chown -R oracle:oinstall /u01/oracle/
chown -R oracle:oinstall /u01/rman
chmod -R 775 /u01/
2、恢复参数文件,将数据库启动到nomount:
[oracle@ora11g dbs]$ export ORACLE_SID=ora11g
方式1
拷贝参数文件
编辑上面生成的pfile参数文件,将其中的文件路径的都修改为B机的路径注意此处控制文件路径要是可访问的路径,因为在稍后还原的控制文件会还原到此目录
sqlplus / as sysdba
startup nomount pfile='/u01/rman/initOra11g.ora'
方式2
rman target /
restore spfile to '/u01/oracle/product/11.2.0/dbs/spfileora11g.ora'
from '/u01/rman/spfile_20220314_1q0ocgfe_1_1.bak';
startup nomount
需要对拷贝过来的pfile进行修改【由于Windows跟Linux磁盘路径不一样,要手工修改到目标数据库的相关路径,并建立相关数据库目录】,不然会提示找不到adump
udump等目录路径文件的。
用spfile生成pfile文件:
SQL> create spfile from pfile;
SQL> shutdown immediate;
SQL> startup nomount; --启动到nomount状态
也可
restore spfile to pfile
'/u01/oracle/product/11.2.0/dbs/initora11g.ora' from
'/u01/rman/spfile_20220314_1q0ocgfe_1_1.bak';
3、恢复控制文件:
[oracle@orcl ~]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Dec 12
20:40:14 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All
rights reserved.
connected to target database: orcl (not mounted)
RMAN> set DBID=98872961;
RMAN> restore controlfile from
'/u01/rman/ctl_file_20220314_1p0ocgfc_1_1.bak';
RMAN> alter database mount; --将数据库启动到mount
4、恢复数据文件:
[oracle@orcl ~]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Dec 12
20:40:14 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All
rights reserved.
connected to target database: orcl (mounted)
# 将备份集信息重新导入到当前控制文件中(一定要用“/”结尾,不然可能会找不到真实的路径)
RMAN> catalog start with '/u01/rman/';
RMAN> restore database; --还原数据文件
RMAN> recover database; --还原归档日志
# 恢复完成后,将库启动到read only模式,查询一下数据是否正常
SQL> alter database open read only;
5、恢复密码文件:
将拷贝过来的密码文件恢复至数据库对应目录下:
cp /u01/rman/orapworcl
/u01/oracle/product/11.2.0.4/db_1/dbs/orapworcl
或者手动创建密码文件:
orapwdfile='/u01/oracle/product/11.2.0.4/db_1/dbs/orapworcl'
password=oracle entries=30 force=y
6、恢复归档日志:
可能在恢复的过程中归档没有及时生成,可以在最后再备份一下归档日志,或者将新产生的归档拷贝到归档的相应目录下,然后进行如下的恢复操作步骤:
RMAN> startup mount;
RMAN> catalog start with '/u01/archive/';
RMAN> recover database;
7、RESETLOGS打开数据库:
SQL> alter database open resetlogs;
SQL> select name,OPEN_MODE from v$database;
--验证数据库状态
SQL> select max(sequence#) from v$archived_log;
重新启动数据库
SQL> shutdown immediate;
SQL> startup