怎么才能把一个数据库的rman备份恢复到同平台上的另一个数据库中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么才能把一个数据库的rman备份恢复到同平台上的另一个数据库中相关的知识,希望对你有一定的参考价值。

要求:本地已有生产数据库prod,制定rman备份策略,将数据备份到制定目录/oracle/rman_bk下。现在需要做恢复测试,验证备份出来的数据是有效的。且不影响原有的生产数据库prod。
解决思路:在备份出来的数据中(控制文件),包含了数据库名,数据文件,redo log等文件的存放路径,如果在本地直接做恢复,将和原有的数据库****,因此,需要修改这些信息,将备份出来的数据恢复到另外一个数据库中。具体步骤如下:
1.创建新数据库数据文件及跟踪文件存放目录
-bash-2.05b$mkdir -p /oracle/oradata/test
-bash-2.05b$mkdir -p /oracle/admin/test/bdump
-bash-2.05b$mkdir -p /oracle/admin/test/udump
-bash-2.05b$mkdir -p /oracle/admin/test/cdump
2.登录到生产数据库。查看当前数据文件信息:
-bash-2.05b$ sqlplus '/ as sysdba'
SQL> select file#,name from v$datafile;
FILE# NAME
---------- --------------------------------------------------
1 /oracle/oradata/test/system01.dbf
2 /oracle/oradata/test/undo01.dbf
3 /oracle/oradata/test/users01.dbf
3.利用rman更改数据文件存放路径并restore到新的路径
run
set newname for datafile 1 to '/oracle/oradata/test/system01.dbf';
set newname for datafile 2 to '/oracle/oradata/test/undo01.dbf';
set newname for datafile 3 to '/oracle/oradata/test/users01.dbf';
restore datafile 1;
restore datafile 2;
restore datafile 3;

4。重建控制文件
CREATE CONTROLFILE REUSE set DATABASE "test" RESETLOGS ARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 16
MAXLOGMEMBERS 2
MAXDATAFILES 30
MAXINSTANCES 1
MAXLOGHISTORY 453
LOGFILE
GROUP 1 '/oracle/oradata/test/redo01.log' SIZE 10M,
GROUP 2 '/oracle/oradata/test/redo02.log' SIZE 10M,
GROUP 3 '/oracle/oradata/test/redo03.log' SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'/oracle/oradata/test/system01.dbf',
'/oracle/oradata/test/undo01.dbf',
'/oracle/oradata/test/users01.dbf'
CHARACTER SET ZHS16GBK
;
5.打开数据库
SQL> alter database open resetlogs;

backup archivelog all delete input format '/rman/rman_%t_%s_%p.arc';

with a as
(select rownum p from dual connect by level<=21)
select
7 + CEIL(
(7 + CEIL(
(7 + CEIL(p/3))
/3))
/3)
from a;
7+CEIL((7+CEIL((7+CEIL(p/3))/3))/3
本答案来自于互联网,仅供参考学习作用
如果您对我的回答有不满意的地方,还请您继续追问;
答题不易,互相理解,互相帮助!
参考技术A 能恢复数据库的数据的。

恢复到特定点(时间点scn日志序列号),rman不完全恢复


将数据库、表空间、数据文件等恢复至恢复备份集保存时间中的任何一个时间点/SCN/日志序列(一般是日志挖掘找到误操作点),但须谨慎,操作前一定需要做好备份,具备条件的情况下最好先恢复到异机,避免业务停机时间。


前提:已经有数据库备份 (作者已经提前准备了备份,这里不进行备份,为了节约空间)
--准备实验环境
SQL> select * from andy.andy;
select * from andy.andy
                   *
ERROR at line 1:
ORA-00942: table or view does not exist
--不完全恢复时间点
SQL> select to_char(sysdate, ‘YYYY-MM-DD HH24:MI:SS‘)  from dual;


TO_CHAR(SYSDATE,‘YY
-------------------
2015-03-25 07:55:12


SQL> create table andy.andy(id int);


Table created.
SQL> insert into andy.andy values(1);


1 row created.
SQL> insert into andy.andy values(100);


1 row created.
SQL> commit;


Commit complete.
SQL>  select * from andy.andy;


ID
----------
1
       100


1 基于时间点
方法一: 在RMAN中执行
RMAN> 
run{
startup mount force;
set until time "to_date(‘2015-03-25 07:55:12‘,‘yyyy-mm-dd hh24:mi:ss‘)";
restore database;
recover database;
alter database open resetlogs;
}


Finished recover at 25-MAR-15


database opened
--恢复时间点之后的表不见了,说明的确是不完全恢复。
SQL> select * from andy.andy;
select * from andy.andy
                   *
ERROR at line 1:
ORA-00942: table or view does not exist


——————————————————————————
方法二:在SQLplus中执行


SQL>startup mount force;
SQL>alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss‘;
SQL>restore database until time "to_date(‘2015-03-25 07:55:12‘,‘YYYY-MM-DD HH24:MI:SS‘)";
SQL>recover database until time "to_date(‘2015-03-25 07:55:12‘,‘YYYY-MM-DD HH24:MI:SS‘)";
SQL>alter database open resetlogs;


2 基于 SCN:
SQL>startup mount force;
SQL>restore database until scn XXXX;
SQL>recover database until scn XXXX;
SQL>alter database open resetlogs;


3 基于日志序列
SQL>startup mount force;
SQL>restore database until SEQUENCE 100 thread 1; //100是日志序列
SQL>recover database until SEQUENCE 100 thread 1;
SQL>alter database open resetlogs;

以上是关于怎么才能把一个数据库的rman备份恢复到同平台上的另一个数据库中的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g R2 rac通过rman 恢复到单实例数据库

oracle有多个整个数据库备份集 如何选择恢复的备份集

RMAN恢复数据库实战

Oracle 11g R2 RAC数据库备份通过RMAN恢复到单实例数据库实现

恢复到特定点(时间点scn日志序列号),rman不完全恢复

rman备份恢复时归档位置说明