Oracle单实例数据库Windows环境跨平台迁移到Linux

Oracle单实例数据库Windows环境跨平台迁移到Linux

  • 一、基于网络Active database
  • 二、基于备份集Backup-based

一、基于网络Active database

场景: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 字节

启动 backup17-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
完成 backup17-9-18

启动 restore17-9-18
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=1149 设备类型=DISK

通道 ORA_AUX_DISK_1: 已复制控制文件副本
完成 restore17-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

启动 backup17-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
完成 backup17-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;
}
正在执行内存脚本

启动 backup17-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
完成 backup17-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;重新编译一下无效对象(可选)

二、基于备份集Backup-based

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目录下生成的归档

你可能感兴趣的:(迁移,Oracle数据库多环境迁移,单实例,windows到linux)