本帖最后由 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 ,详情参见官方文档。
|