场景:windows平台数据库迁移到Linux,备份不落地通过网络完成数据库RMAN的还原
源数据库
ip:192.168.212.247
db_name:orcl
version:11.2.0.4
platform:Windows Server 2008R2
目标数据库
ip:192.168.212.110
db_name:orcl3
version:11.2.0.4 只安装了数据库软件
platform:CentOS 7.2
操作系统 | 数据库版本 | dbname | ip | |
---|---|---|---|---|
源数据库 | Windows Server2008R2 | 11.2.0.4 | orcl | 192.168.212.247 |
目标数据库 | CentOS 7.2 | 11.2.0.4 | orcl | 192.168.212.110 |
操作步骤:
1、编辑Linux目标数据库的参数文件
[oracle@gs dbs]$vi $ORACLE_HOME/dbs/initorcl.ora
control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl'
db_block_size=8192
db_name='orcl'
audit_trail='DB'
db_file_name_convert='E:\APP\ADMINISTRATOR\ORADATA\ORCL\','/u01/app/oracle/oradata/orcl/'
log_file_name_convert='E:\APP\ADMINISTRATOR\ORADATA\ORCL\','/u01/app/oracle/oradata/orcl/'
log_archive_dest_1='location=/u01/arch'
processes=1000
remote_login_passwordfile='EXCLUSIVE'
compatible='11.2.0.4.0'
sga_target=700m
pga_aggregate_target=300m
open_cursors=300
备注:db_file_name_convert、log_file_name_convert,在跨平台迁移时,数据文件目录结尾需要已斜杠结尾,不然会被数据库认定为文件名。并且windows的目录名称全部要大写。
2、拷贝Windows平台密码文件到目标数据库并按实例名前缀重命名
[oracle@gs dbs]$ mv PWDorcl.ora orapworcl
3、创建目标端文件目录结构
[oracle@gs rman]$ mkdir -p /u01/app/oracle/oradata/orcl/
[oracle@gs rman]$ mkdir -p /u01/arch
[oracle@gs rman]$ mkdir -p /u01/app/oracle/admin/orcl/adump
4、配置目标端静态监听
[oracle@gs dbs]$vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.212.110)(PORT = 1521))
)
)
开启监听
lsnrctl start
5、配置源数据库端以及目标端tnsnames用于连接源数据库以及辅助实例
[oracle@gs dbs]$vi $ORACLE_HOME/network/admin/tnsnames.ora
source =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.212.247)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
target =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.212.110)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
备注:源数据库需要与目标数据库使用相同的tnsnames内容,源数据库会通过TNS传输数据到目标数据库
6、在Linux平台启动目标数据库到nomount状态
SQL> startup nomount;
SQL> create spfile from pfile;
跨平台迁移时,Linux端数据库需要先生成spfile
7、在Windows平台用RMAN 连接源数据库以及辅助实例
C:\Users\Administrator>rman target sys/oracle@source auxiliary sys/oracle@target
8、开始复制
备注:
在迁移之前,可查看源数据库是否有只读表空间(如users),如有修改为可读写
DUPLICATE TARGET DATABASE TO orcl FROM ACTIVE DATABASE;
执行过程:
内存脚本的内容:
{
shutdown clone immediate;
startup clone nomount;
}
正在执行内存脚本
Oracle 实例已关闭
已连接到辅助数据库 (未启动)
Oracle 实例已启动
系统全局区域总计 730714112 字节
Fixed Size 2256832 字节
Variable Size 243269696 字节
Database Buffers 478150656 字节
Redo Buffers 7036928 字节
内存脚本的内容:
{
sql clone "alter system set db_name =
''ORCL'' comment=
''Modified by RMAN duplicate'' scope=spfile";
sql clone "alter system set db_unique_name =
''ORCL'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
backup as copy current controlfile auxiliary format '/u01/app/oracle/oradata
/orcl/control01.ctl';
restore clone controlfile to '/u01/app/oracle/oradata/orcl/control02.ctl' fr
om
'/u01/app/oracle/oradata/orcl/control01.ctl';
alter clone database mount;
}
正在执行内存脚本
sql 语句: alter system set db_name = ''ORCL'' comment= ''Modified by RMAN dupl
icate'' scope=spfile
sql 语句: alter system set db_unique_name = ''ORCL'' comment= ''Modified by RM
AN duplicate'' scope=spfile
Oracle 实例已关闭
Oracle 实例已启动
系统全局区域总计 730714112 字节
Fixed Size 2256832 字节
Variable Size 243269696 字节
Database Buffers 478150656 字节
Redo Buffers 7036928 字节
启动 backup 于 17-9月 -18
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=389 设备类型=DISK
通道 ORA_DISK_1: 启动数据文件副本
复制当前控制文件
输出文件名=E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFORCL.ORA 标
记=TAG20180917T145411 RECID=4 STAMP=987087252
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
完成 backup 于 17-9月 -18
启动 restore 于 17-9月 -18
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=1149 设备类型=DISK
通道 ORA_AUX_DISK_1: 已复制控制文件副本
完成 restore 于 17-9月 -18
数据库已装载
内存脚本的内容:
{
set newname for datafile 1 to
"/u01/app/oracle/oradata/orcl/SYSTEM01.DBF";
set newname for datafile 2 to
"/u01/app/oracle/oradata/orcl/SYSAUX01.DBF";
set newname for datafile 3 to
"/u01/app/oracle/oradata/orcl/UNDOTBS01.DBF";
set newname for datafile 4 to
"/u01/app/oracle/oradata/orcl/USERS01.DBF";
set newname for datafile 5 to
"/u01/app/oracle/oradata/orcl/ADMIN.DBF";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/orcl/SYSTEM01.DBF" datafile
2 auxiliary format
"/u01/app/oracle/oradata/orcl/SYSAUX01.DBF" datafile
3 auxiliary format
"/u01/app/oracle/oradata/orcl/UNDOTBS01.DBF" datafile
4 auxiliary format
"/u01/app/oracle/oradata/orcl/USERS01.DBF" datafile
5 auxiliary format
"/u01/app/oracle/oradata/orcl/ADMIN.DBF" ;
sql 'alter system archive log current';
}
正在执行内存脚本
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 backup 于 17-9月 -18
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00001 名称=E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF
输出文件名=/u01/app/oracle/oradata/orcl/SYSTEM01.DBF 标记=TAG20180917T145419
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:15
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00003 名称=E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF
输出文件名=/u01/app/oracle/oradata/orcl/UNDOTBS01.DBF 标记=TAG20180917T145419
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:15
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00002 名称=E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF
输出文件名=/u01/app/oracle/oradata/orcl/SYSAUX01.DBF 标记=TAG20180917T145419
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:15
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00005 名称=E:\APP\ADMINISTRATOR\ORADATA\ORCL\ADMIN.DBF
输出文件名=/u01/app/oracle/oradata/orcl/ADMIN.DBF 标记=TAG20180917T145419
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00004 名称=E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
输出文件名=/u01/app/oracle/oradata/orcl/USERS01.DBF 标记=TAG20180917T145419
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
完成 backup 于 17-9月 -18
sql 语句: alter system archive log current
内存脚本的内容:
{
backup as copy reuse
archivelog like "E:\APP\ARCH\ARC0000000036_0986834039.0001" auxiliary format
"/u01/arch/1_36_986834039.dbf" ;
catalog clone archivelog "/u01/arch/1_36_986834039.dbf";
switch clone datafile all;
}
正在执行内存脚本
启动 backup 于 17-9月 -18
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始复制归档日志
输入归档日志线程=1 序列=36 RECID=4 STAMP=987087309
输出文件名=/u01/arch/1_36_986834039.dbf RECID=0 STAMP=0
通道 ORA_DISK_1: 归档日志复制完成, 经过时间: 00:00:01
完成 backup 于 17-9月 -18
已编目的归档日志
归档日志文件名=/u01/arch/1_36_986834039.dbf RECID=4 STAMP=987087320
数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=4 STAMP=987087320 文件名=/u01/app/oracle/oradata/orcl/SYS
TEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=5 STAMP=987087320 文件名=/u01/app/oracle/oradata/orcl/SYS
AUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=6 STAMP=987087320 文件名=/u01/app/oracle/oradata/orcl/UND
OTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=7 STAMP=987087320 文件名=/u01/app/oracle/oradata/orcl/USE
RS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 RECID=8 STAMP=987087320 文件名=/u01/app/oracle/oradata/orcl/ADM
IN.DBF
内存脚本的内容:
{
set until scn 12775514;
recover
clone database
delete archivelog
;
}
正在执行内存脚本
正在执行命令: SET until clause
启动 recover 于 17-9月 -18
使用通道 ORA_AUX_DISK_1
正在开始介质的恢复
线程 1 序列 36 的归档日志已作为文件 /u01/arch/1_36_986834039.dbf 存在于磁盘上
归档日志文件名=/u01/arch/1_36_986834039.dbf 线程=1 序列=36
介质恢复完成, 用时: 00:00:00
完成 recover 于 17-9月 -18
Oracle 实例已启动
系统全局区域总计 730714112 字节
Fixed Size 2256832 字节
Variable Size 243269696 字节
Database Buffers 478150656 字节
Redo Buffers 7036928 字节
内存脚本的内容:
{
sql clone "alter system set db_name =
''ORCL'' comment=
''Reset to original value by RMAN'' scope=spfile";
sql clone "alter system reset db_unique_name scope=spfile";
shutdown clone immediate;
startup clone nomount;
}
正在执行内存脚本
sql 语句: alter system set db_name = ''ORCL'' comment= ''Reset to original val
ue by RMAN'' scope=spfile
sql 语句: alter system reset db_unique_name scope=spfile
Oracle 实例已关闭
已连接到辅助数据库 (未启动)
Oracle 实例已启动
系统全局区域总计 730714112 字节
Fixed Size 2256832 字节
Variable Size 243269696 字节
Database Buffers 478150656 字节
Redo Buffers 7036928 字节
sql 语句: CREATE CONTROLFILE REUSE SET DATABASE "ORCL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( '/u01/app/oracle/oradata/orcl/REDO01.LOG' ) SIZE 100 M REUSE,
GROUP 2 ( '/u01/app/oracle/oradata/orcl/REDO02.LOG' ) SIZE 100 M REUSE,
GROUP 3 ( '/u01/app/oracle/oradata/orcl/REDO03.LOG' ) SIZE 100 M REUSE
DATAFILE
'/u01/app/oracle/oradata/orcl/SYSTEM01.DBF'
CHARACTER SET ZHS16GBK
内存脚本的内容:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/orcl/TEMP01.DBF";
switch clone tempfile all;
catalog clone datafilecopy "/u01/app/oracle/oradata/orcl/SYSAUX01.DBF",
"/u01/app/oracle/oradata/orcl/UNDOTBS01.DBF",
"/u01/app/oracle/oradata/orcl/USERS01.DBF",
"/u01/app/oracle/oradata/orcl/ADMIN.DBF";
switch clone datafile all;
}
正在执行内存脚本
正在执行命令: SET NEWNAME
临时文件 1 在控制文件中已重命名为 /u01/app/oracle/oradata/orcl/TEMP01.DBF
已将数据文件副本列入目录
数据文件副本文件名=/u01/app/oracle/oradata/orcl/SYSAUX01.DBF RECID=1 STAMP=98708
7336
已将数据文件副本列入目录
数据文件副本文件名=/u01/app/oracle/oradata/orcl/UNDOTBS01.DBF RECID=2 STAMP=9870
87336
已将数据文件副本列入目录
数据文件副本文件名=/u01/app/oracle/oradata/orcl/USERS01.DBF RECID=3 STAMP=987087
336
已将数据文件副本列入目录
数据文件副本文件名=/u01/app/oracle/oradata/orcl/ADMIN.DBF RECID=4 STAMP=98708733
6
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=1 STAMP=987087336 文件名=/u01/app/oracle/oradata/orcl/SYS
AUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=2 STAMP=987087336 文件名=/u01/app/oracle/oradata/orcl/UND
OTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=3 STAMP=987087336 文件名=/u01/app/oracle/oradata/orcl/USE
RS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 RECID=4 STAMP=987087336 文件名=/u01/app/oracle/oradata/orcl/ADM
IN.DBF
内存脚本的内容:
{
Alter clone database open resetlogs;
}
正在执行内存脚本
数据库已打开
完成 Duplicate Db 于 17-9月 -18
RMAN>
9、检查数据库状态
SQL> select status from v$instance;
STATUS
------------------------------------
OPEN
SQL> select open_mode from v$database;
OPEN_MODE
------------------------------------------------------------
READ WRITE
duplicate之后数据库已经open
10、添加新数据库到/etc/oratab
orcl:/u01/app/oracle/product/11.2.0/db_1:N
11、检查下dbs目录物理路径是否存在spfile
12、运行@?/rdbms/admin/utlrp.sql;重新编译一下无效对象(可选)
DUPLICATE Without Target And Recovery Catalog Connection
操作系统 | 数据库版本 | dbname | ip | |
---|---|---|---|---|
源数据库 | Windows Server2008R2 | 11.2.0.4 | orcl | 192.168.212.247 |
目标数据库 | CentOS 7.2 | 11.2.0.4 | orcl | 192.168.212.110 |
场景:可拷贝源数据库的RMAN备份到目标主机,实现基于备份文件的duplicate。
操作步骤:
1、拷贝源数据库RMAN备份(数据文件、控制文件、密码文件、归档备份)到目标主机RMAN备份目录
2、在目标主机编辑参数文件
[oracle@gs dbs]$vi $ORACLE_HOME/dbs/initorcl.ora
control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl'
db_block_size=8192
db_name='orcl'
audit_trail='DB'
db_file_name_convert='E:\APP\ADMINISTRATOR\ORADATA\ORCL\','/u01/app/oracle/oradata/orcl/'
log_file_name_convert='E:\APP\ADMINISTRATOR\ORADATA\ORCL\','/u01/app/oracle/oradata/orcl/'
log_archive_dest_1='location=/u01/arch'
processes=1000
remote_login_passwordfile='EXCLUSIVE'
compatible='11.2.0.4.0'
sga_target=700m
pga_aggregate_target=300m
open_cursors=300
3、创建目标主机的目录结构
[oracle@gs rman]$ mkdir -p /u01/app/oracle/oradata/orcl/
[oracle@gs rman]$ mkdir -p /u01/arch
[oracle@gs rman]$ mkdir -p /u01/app/oracle/admin/orcl/adump
4、目标数据库的辅助实例启动到nomount
startup nomount;
5、RMAN连接辅助实例
[oracle@gs dbs]$ rman auxiliary /
6、开始RMAN duplicate复制
RMAN> duplicate database to orcl backup location '/u01/rman';
7、检查数据库状态
SQL> select status from v$instance;
STATUS
------------------------------------
OPEN
SQL> select open_mode from v$database;
OPEN_MODE
------------------------------------------------------------
READ WRITE
duplicate之后数据库已经open
8、添加新数据库到/etc/oratab
orcl:/u01/app/oracle/product/11.2.0/db_1:N
9、检查下dbs目录物理路径是否存在spfile
shutdown immediate;
create spfile from pfile;
startup;
10、运行@?/rdbms/admin/utlrp.sql;重新编译一下无效对象(可选)
总结:
1、在windows端如果备份包含了plus archivelog,必须拷贝windows database目录下生成的归档