重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2322|回复: 0
打印 上一主题 下一主题

[备份恢复] RMAN 数据库复制(PULL方式)

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-30 09:53:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 windjack 于 2020-12-26 17:24 编辑

RMAN 数据库复制(PULL方式)

-------------------------------------------------------------------------------------------------------------------------

ORACLE12c开始支持复制数据库时使用拉(pull)的方式,早期版本只能使用推(push)的方式。


前期准备工作:

创建spfile、静态监听、复制口令文件、创建adump文件目录、OMF指定的文件目录、

启动至nomount、源库执行数据库备份

此案例我们使用OMF来管理数据文件和日志文件,设置db_create_file_dest

未设置db_file_name_convert和log_file_name_convert参数.


相关参数配置如下:

*.audit_file_dest='/u01/app/oracle/admin/sztech/adump'

*.audit_trail='db'

*.compatible='12.1.0.2.0'

*.control_files='/u01/app/oracle/oradata/sztech/control01.ctl','/u01/app/oracle/oradata/sztech/control02.ctl'

*.db_block_size=8192

*.db_create_file_dest='/u01/app/oracle/oradata/sztech'

*.db_domain=''

*.db_name='sztech'

*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'

*.db_recovery_file_dest_size=4560m

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=sztechXDB)'

*.max_shared_servers=200

*.open_cursors=300

*.pga_aggregate_target=256m

*.processes=300

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=768m

*.shared_server_sessions=500

*.shared_servers=10

*.undo_tablespace='UNDOTBS1'





复制过程如下:

--------------------------------------------------------------------------------------------------------------------------------

PS C:\Users\lg> rman target sys/oracle@192.168.133.120:1521/orcl auxiliary sys/oracle@192.168.133.120:1521/sztech


恢复管理器: Release 12.1.0.2.0 - Production on 星期四 7月 30 09:24:30 2020


Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.


已连接到目标数据库: ORCL (DBID=1567668926)

已连接到辅助数据库: SZTECH (未装载)


RMAN> run {

--分配2个辅助通道和2个源库通道

2> allocate auxiliary channel a1 device type disk;   

3> allocate auxiliary channel a2 device type disk;

4> allocate channel c1 device type disk;

5> allocate channel c2 device type disk;

--duplicate命令加using backupset,使用pull方式,不加就是push方式。

6> duplicate target database to sztech from active database using backupset;

7> }


使用目标数据库控制文件替代恢复目录

分配的通道: a1

通道 a1: SID=13 设备类型=DISK


分配的通道: a2

通道 a2: SID=249 设备类型=DISK


分配的通道: c1

通道 c1: SID=263 设备类型=DISK


分配的通道: c2

通道 c2: SID=36 设备类型=DISK


启动 Duplicate Db 于 30-7月 -20

当前日志已存档


内存脚本的内容:

{

   sql clone "alter system set  db_name =

''ORCL'' comment=

''Modified by RMAN duplicate'' scope=spfile";

   sql clone "alter system set  db_unique_name =

''SZTECH'' comment=

''Modified by RMAN duplicate'' scope=spfile";

   shutdown clone immediate;

   startup clone force nomount

--辅助实例中直接恢复控制文件,来源于源库的控制文件。

   restore clone from service  '192.168.133.120:1521/orcl' primary controlfile;

   alter clone database mount;

}

正在执行内存脚本


sql 语句: alter system set  db_name =  ''ORCL'' comment= ''Modified by RMAN duplicate'' scope=spfile


sql 语句: alter system set  db_unique_name =  ''SZTECH'' comment= ''Modified by RMAN duplicate'' scope=spfile


Oracle 实例已关闭


Oracle 实例已启动


系统全局区域总计     805306368 字节


Fixed Size                     2929552 字节

Variable Size                318770288 字节

Database Buffers             478150656 字节

Redo Buffers                   5455872 字节

分配的通道: a1

通道 a1: SID=240 设备类型=DISK

分配的通道: a2

通道 a2: SID=13 设备类型=DISK


启动 restore 于 30-7月 -20


通道 a1: 正在开始还原数据文件备份集

通道 a1: 正在使用来自服务 192.168.133.120:1521/orcl 的网络备份集

通道 a1: 正在还原控制文件

通道 a1: 还原完成, 用时: 00:00:01

输出文件名=/u01/app/oracle/oradata/sztech/control01.ctl

输出文件名=/u01/app/oracle/oradata/sztech/control02.ctl

完成 restore 于 30-7月 -20


数据库已装载


内存脚本的内容:

{

   set newname for clone datafile  1 to new;

   set newname for clone datafile  3 to new;

   set newname for clone datafile  4 to new;

   set newname for clone datafile  5 to new;

   set newname for clone datafile  6 to new;

--辅助实例恢复数据库,来源于源库的备份集

   restore from service  '192.168.133.120:1521/orcl'   clone database

   ;

   sql 'alter system archive log current';

}

正在执行内存脚本


正在执行命令: SET NEWNAME


正在执行命令: SET NEWNAME


正在执行命令: SET NEWNAME


正在执行命令: SET NEWNAME


正在执行命令: SET NEWNAME


启动 restore 于 30-7月 -20


通道 a1: 正在开始还原数据文件备份集

通道 a1: 正在使用来自服务 192.168.133.120:1521/orcl 的网络备份集

通道 a1: 正在指定从备份集还原的数据文件

通道 a1: 将数据文件 00001 还原到

--辅助实例中还原数据文件时使用了OMF格式

/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_system_%u_.dbf

通道 a2: 正在开始还原数据文件备份集

通道 a2: 正在使用来自服务 192.168.133.120:1521/orcl 的网络备份集

通道 a2: 正在指定从备份集还原的数据文件

通道 a2: 将数据文件 00003 还原到 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_sysaux_%u_.dbf

通道 a1: 还原完成, 用时: 00:00:16

通道 a1: 正在开始还原数据文件备份集

通道 a1: 正在使用来自服务 192.168.133.120:1521/orcl 的网络备份集

通道 a1: 正在指定从备份集还原的数据文件

通道 a1: 将数据文件 00004 还原到 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_undotbs1_%u_.dbf

通道 a2: 还原完成, 用时: 00:00:16

通道 a2: 正在开始还原数据文件备份集

通道 a2: 正在使用来自服务 192.168.133.120:1521/orcl 的网络备份集

通道 a2: 正在指定从备份集还原的数据文件

通道 a2: 将数据文件 00005 还原到 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_example_%u_.dbf

通道 a1: 还原完成, 用时: 00:00:01

通道 a1: 正在开始还原数据文件备份集

通道 a1: 正在使用来自服务 192.168.133.120:1521/orcl 的网络备份集

通道 a1: 正在指定从备份集还原的数据文件

通道 a1: 将数据文件 00006 还原到 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_users_%u_.dbf

通道 a1: 还原完成, 用时: 00:00:01

通道 a2: 还原完成, 用时: 00:00:05

完成 restore 于 30-7月 -20


sql 语句: alter system archive log current

当前日志已存档


内存脚本的内容:

{

--辅助实例从源库复制归档文件

   restore clone force from service  '192.168.133.120:1521/orcl' archivelog from scn  3212400;

   switch clone datafile all;

}

正在执行内存脚本


启动 restore 于 30-7月 -20


通道 a1: 正在开始将归档日志还原到默认目标

通道 a1: 正在使用来自服务 192.168.133.120:1521/orcl 的网络备份集

通道 a1: 正在还原归档日志

归档日志线程=1 序列=43

通道 a2: 正在开始将归档日志还原到默认目标

通道 a2: 正在使用来自服务 192.168.133.120:1521/orcl 的网络备份集

通道 a2: 正在还原归档日志

归档日志线程=1 序列=44

通道 a1: 还原完成, 用时: 00:00:00

通道 a2: 还原完成, 用时: 00:00:00

完成 restore 于 30-7月 -20


数据文件 1 已转换成数据文件副本

输入数据文件副本 RECID=6 STAMP=1047115673 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_system_hl48j4yf_.dbf

数据文件 3 已转换成数据文件副本

输入数据文件副本 RECID=7 STAMP=1047115673 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_sysaux_hl48j56h_.dbf

数据文件 4 已转换成数据文件副本

输入数据文件副本 RECID=8 STAMP=1047115673 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_undotbs1_hl48jnfj_.dbf

数据文件 5 已转换成数据文件副本

输入数据文件副本 RECID=9 STAMP=1047115673 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_example_hl48jnpn_.dbf

数据文件 6 已转换成数据文件副本

输入数据文件副本 RECID=10 STAMP=1047115673 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_users_hl48jp1q_.dbf


内存脚本的内容:

{

--辅助实例基于CANCEL的恢复

   set until scn  3212501;

   recover clone database delete archivelog;

}

正在执行内存脚本


正在执行命令: SET until clause


启动 recover 于 30-7月 -20


正在开始介质的恢复


线程 1 序列 43 的归档日志已作为文件 /u01/app/oracle/fast_recovery_area/SZTECH/archivelog/2020_07_30/o1_mf_1_43_hl48jsnt_.arc 存在于磁盘上

线程 1 序列 44 的归档日志已作为文件 /u01/app/oracle/fast_recovery_area/SZTECH/archivelog/2020_07_30/o1_mf_1_44_hl48jssy_.arc 存在于磁盘上

归档日志文件名=/u01/app/oracle/fast_recovery_area/SZTECH/archivelog/2020_07_30/o1_mf_1_43_hl48jsnt_.arc 线程=1 序列=43

归档日志文件名=/u01/app/oracle/fast_recovery_area/SZTECH/archivelog/2020_07_30/o1_mf_1_44_hl48jssy_.arc 线程=1 序列=44

介质恢复完成, 用时: 00:00:04

完成 recover 于 30-7月 -20

Oracle 实例已启动


系统全局区域总计     805306368 字节


Fixed Size                     2929552 字节

Variable Size                318770288 字节

Database Buffers             478150656 字节

Redo Buffers                   5455872 字节


内存脚本的内容:

{

   sql clone "alter system set  db_name = ''SZTECH'' comment=''Reset to original value by RMAN'' scope=spfile";

   sql clone "alter system reset  db_unique_name scope=spfile";

}

正在执行内存脚本


sql 语句: alter system set  db_name =  ''SZTECH'' comment= ''Reset to original value by RMAN'' scope=spfile


sql 语句: alter system reset  db_unique_name scope=spfile

Oracle 实例已启动


系统全局区域总计     805306368 字节


Fixed Size                     2929552 字节

Variable Size                318770288 字节

Database Buffers             478150656 字节

Redo Buffers                   5455872 字节

--重建了控制文件

sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "SZTECH" RESETLOGS ARCHIVELOG

  MAXLOGFILES     16

  MAXLOGMEMBERS      3

  MAXDATAFILES      100

  MAXINSTANCES     8

  MAXLOGHISTORY      292

LOGFILE

  GROUP   1  SIZE 50 M ,

  GROUP   2  SIZE 50 M ,

  GROUP   3  SIZE 50 M

DATAFILE

  '/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_system_hl48j4yf_.dbf'

CHARACTER SET AL32UTF8



内存脚本的内容:

{

   set newname for clone tempfile  1 to new;

   switch clone tempfile all;

   catalog clone datafilecopy  "/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_sysaux_hl48j56h_.dbf",

"/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_undotbs1_hl48jnfj_.dbf",

"/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_example_hl48jnpn_.dbf",

"/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_users_hl48jp1q_.dbf";

   switch clone datafile all;

}

正在执行内存脚本


正在执行命令: SET NEWNAME


临时文件 1 在控制文件中已重命名为 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_temp_%u_.tmp


已将数据文件副本列入目录

数据文件副本文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_sysaux_hl48j56h_.dbf RECID=1 STAMP=1047115707

已将数据文件副本列入目录

数据文件副本文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_undotbs1_hl48jnfj_.dbf RECID=2 STAMP=1047115707

已将数据文件副本列入目录

数据文件副本文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_example_hl48jnpn_.dbf RECID=3 STAMP=1047115707

已将数据文件副本列入目录

数据文件副本文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_users_hl48jp1q_.dbf RECID=4 STAMP=1047115707


数据文件 3 已转换成数据文件副本

输入数据文件副本 RECID=1 STAMP=1047115707 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_sysaux_hl48j56h_.dbf

数据文件 4 已转换成数据文件副本

输入数据文件副本 RECID=2 STAMP=1047115707 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_undotbs1_hl48jnfj_.dbf

数据文件 5 已转换成数据文件副本

输入数据文件副本 RECID=3 STAMP=1047115707 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_example_hl48jnpn_.dbf

数据文件 6 已转换成数据文件副本

输入数据文件副本 RECID=4 STAMP=1047115707 文件名=/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_users_hl48jp1q_.dbf


内存脚本的内容:

{

--以resetlogs打开辅助库,复制完成

   Alter clone database open resetlogs;

}

正在执行内存脚本


数据库已打开

完成 Duplicate Db 于 30-7月 -20

释放的通道: c1

释放的通道: c2



查看目标库状态:

SQL> conn / as sysdba

Connected.


SQL> select open_mode from v$database;

OPEN_MODE

--------------------

READ WRITE


SQL> show parameter db_name

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------


SQL> show parameter control_file

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      /u01/app/oracle/oradata/sztech/control01.ctl,

                                                          /u01/app/oracle/oradata/sztech/control02.ctl


SQL> select member from v$logfile;

MEMBER

--------------------------------------------------------------------------------

/u01/app/oracle/oradata/sztech/SZTECH/onlinelog/o1_mf_3_hl48ks4y_.log

/u01/app/oracle/fast_recovery_area/SZTECH/onlinelog/o1_mf_3_hl48ks5t_.log

/u01/app/oracle/oradata/sztech/SZTECH/onlinelog/o1_mf_2_hl48krz5_.log

/u01/app/oracle/fast_recovery_area/SZTECH/onlinelog/o1_mf_2_hl48ks0r_.log

/u01/app/oracle/oradata/sztech/SZTECH/onlinelog/o1_mf_1_hl48krr8_.log

/u01/app/oracle/fast_recovery_area/SZTECH/onlinelog/o1_mf_1_hl48krst_.log


6 rows selected.


SQL> select name from v$tempfile;

NAME

--------------------------------------------------------------------------------

/u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_temp_hl48ksr7_.tmp


SQL>  select file#, name from v$datafile


     FILE# NAME

---------- ------------------------------------------------------------------------------------------

         1 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_system_hl48j4yf_.dbf

         3 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_sysaux_hl48j56h_.dbf

         4 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_undotbs1_hl48jnfj_.dbf

         5 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_example_hl48jnpn_.dbf

         6 /u01/app/oracle/oradata/sztech/SZTECH/datafile/o1_mf_users_hl48jp1q_.dbf


如果不喜欢OMF命令方式,可以使用12C在线数据移动更名方式来修改。

SQL> alter database move datafile 1 to '/u01/app/oracle/oradata/sztech/SZTECH/datafile/system01.dbf';


Database altered.


SQL> alter database move datafile 3 to '/u01/app/oracle/oradata/sztech/SZTECH/datafile/sysaux01.dbf';


Database altered.


SQL> alter database move datafile 4 to '/u01/app/oracle/oradata/sztech/SZTECH/datafile/undotbs1.dbf';


Database altered.


SQL> alter database move datafile 5 to '/u01/app/oracle/oradata/sztech/SZTECH/datafile/example01.dbf';


Database altered.


SQL> alter database move datafile 6 to '/u01/app/oracle/oradata/sztech/SZTECH/datafile/users01.dbf';


Database altered.


SQL> select file#, name from v$datafile;

     FILE# NAME

---------- ------------------------------------------------------------------------------------------

         1 /u01/app/oracle/oradata/sztech/SZTECH/datafile/system01.dbf

         3 /u01/app/oracle/oradata/sztech/SZTECH/datafile/sysaux01.dbf

         4 /u01/app/oracle/oradata/sztech/SZTECH/datafile/undotbs1.dbf

         5 /u01/app/oracle/oradata/sztech/SZTECH/datafile/example01.dbf

         6 /u01/app/oracle/oradata/sztech/SZTECH/datafile/users01.dbf


文件命名也可以在复制时使用set newname for datafile 的方式来处理。

run{

2> allocate auxiliary channel a1 device type disk;   

3> allocate auxiliary channel a2 device type disk;

4> allocate channel c1 device type disk;

5> allocate channel c2 device type disk;

6>set newname for datafile 1 to '/u01/app/oracle/oradata/sztech/SZTECH/datafile/system01.dbf';

7>set newname for datafile 3 to '/u01/app/oracle/oradata/sztech/SZTECH/datafile/sysaux01.dbf';

......

8> duplicate target database to sztech from active database using backupset;

}


要保持跟原数据库名称一样的话,在辅助实例中创建跟源库一样的目录,在复制时加参数 nofilenamecheck ,详情参见官方文档。








分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-14 17:33 , Processed in 0.092132 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表