Oracle数据库跨平台迁移:RMAN和Data Pump的最佳实践

在这里插入图片描述

数据库传输

数据库传输的两种主要方法:

  • 在源系统转换数据库格式

    1. 将数据库打开为只读模式。
    2. 使用RMAN将数据库转换为目标平台格式。
    3. 将转换后的文件传输到目标系统。
    4. 在目标系统上打开数据库。
  • 在目标系统转换数据库格式

    1. 将数据库打开为只读模式。
    2. 将源系统的文件传输到目标系统。
    3. 在目标系统上使用RMAN将数据库转换为目标平台格式。
    4. 在目标系统上打开数据库。

Oracle 数据库跨平台迁移详细示例

在源系统转换数据库格式

步骤1:将数据库打开为只读模式。

SQL> startup mount;
SQL> alter database open read only;

步骤2:使用RMAN将数据库转换为目标平台格式。

首先,需要检查数据库是否可以转换:

SQL> SET SERVEROUTPUT ON;
SQL> DECLARE
  db_ready BOOLEAN;
BEGIN
  db_ready := DBMS_TDB.CHECK_DB('Microsoft Windows IA (32-bit)');
END;
/

然后,使用RMAN进行转换:

$ rman target /

RMAN> CONVERT DATABASE 
    NEW DATABASE 'newdb'
    TO PLATFORM 'Microsoft Windows IA (32-bit)'
    FORMAT '/tmp/%U';

步骤3:将转换后的文件传输到目标系统。

# 使用scp命令将文件从源系统传输到目标系统
$ scp /tmp/* user@target-system:/target-directory

步骤4:在目标系统上打开数据库。

在目标系统上执行以下步骤:

$ sqlplus / as sysdba
SQL> startup nomount;
SQL> @/target-directory/crdb.sql

在目标系统转换数据库格式

步骤1:将数据库打开为只读模式。

在源系统上将数据库打开为只读模式:

SQL> startup mount;
SQL> alter database open read only;

步骤2:将源系统的文件传输到目标系统。

使用scp命令将文件从源系统传输到目标系统:

# 在源系统上执行
$ scp /source-directory/* user@target-system:/target-directory

步骤3:在目标系统上使用RMAN将数据库转换为目标平台格式。

首先,在目标系统上连接RMAN:

$ rman target /

然后,使用RMAN进行转换:

RMAN> CONVERT DATABASE 
    ON TARGET PLATFORM
    NEW DATABASE 'newdb'
    FORMAT '/target-directory/%U';

步骤4:在目标系统上打开数据库。

在目标系统上执行以下步骤:

$ sqlplus / as sysdba
SQL> startup nomount;
SQL> @/target-directory/crdb.sql

示例

示例1:在源系统转换数据库格式(Linux到Windows)

  1. 在源系统(Linux)上将数据库设为只读:
SQL> startup mount;
SQL> alter database open read only;
  1. 检查数据库是否可以转换:
SQL> SET SERVEROUTPUT ON;
SQL> DECLARE
  db_ready BOOLEAN;
BEGIN
  db_ready := DBMS_TDB.CHECK_DB('Microsoft Windows IA (32-bit)');
END;
/
  1. 使用RMAN转换数据库格式:
$ rman target /

RMAN> CONVERT DATABASE 
    NEW DATABASE 'newdb'
    TO PLATFORM 'Microsoft Windows IA (32-bit)'
    FORMAT '/tmp/%U';
  1. 将数据文件、PFILE和转换脚本传输到目标系统(Windows):
$ scp /tmp/* user@target-system:/target-directory
  1. 在目标系统(Windows)上打开数据库:
$ sqlplus / as sysdba
SQL> startup nomount;
SQL> @/target-directory/crdb.sql

示例2:在目标系统转换数据库格式(Linux到Windows)

  1. 在源系统(Linux)上将数据库设为只读:
SQL> startup mount;
SQL> alter database open read only;
  1. 将源系统的文件传输到目标系统(Windows):
# 在源系统上执行
$ scp /source-directory/* user@target-system:/target-directory
  1. 在目标系统(Windows)上使用RMAN转换数据库格式:
$ rman target /

RMAN> CONVERT DATABASE 
    ON TARGET PLATFORM
    NEW DATABASE 'newdb'
    FORMAT '/target-directory/%U';
  1. 在目标系统(Windows)上打开数据库:
$ sqlplus / as sysdba
SQL> startup nomount;
SQL> @/target-directory/crdb.sql

Transporting a Database: Conversion

数据库转换

RMAN在数据库转换过程中涉及的组件和步骤:

  • SYSTEM, SYSAUX, Undo TBS, 其他表空间:这些是需要转换的数据文件。
  • Tempfiles, Redo log files, Control files, spfile/pfile:这些文件也需要在转换过程中处理。
  • BFfiles:目录、外部表、密码文件等需要重新定义。
  • RMAN生成的转换脚本:RMAN会生成一个转换脚本来重新创建这些文件。
  • RMAN将数据文件转换为目标平台格式:包括重新格式化Undo表空间。
  • RMAN创建pfile

数据库传输

步骤:

  1. 启动数据库并将其挂载:
SQL> startup mount;
  1. 将数据库设置为只读模式:
SQL> alter database open read only;
  1. 检查数据库是否可以转换:
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  db_ready BOOLEAN;
BEGIN
  db_ready := DBMS_TDB.CHECK_DB('Microsoft Windows IA (32-bit)');
END;
/
  1. 使用RMAN转换数据库格式:
SQL> host rman target=/
RMAN> CONVERT DATABASE TRANSPORT SCRIPT 'crdb.sql' NEW DATABASE 'newdb' TO PLATFORM 'Microsoft Windows IA (32-bit)' FORMAT '/tmp/%U';
  1. 传输数据文件、PFILE和转换脚本到目标平台。
  2. 在目标平台上执行转换脚本:
$ sqlplus / as sysdba
SQL> @crdb.sql

示例:数据库传输

步骤:

  1. 启动数据库并将其挂载:
SQL> startup mount;
  1. 将数据库设置为只读模式:
SQL> alter database open read only;
  1. 检查数据库是否可以转换:
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  db_ready BOOLEAN;
BEGIN
  db_ready := DBMS_TDB.CHECK_DB('Microsoft Windows IA (32-bit)');
END;
/
  1. 使用RMAN生成转换脚本:
SQL> host rman target=/
RMAN> CONVERT DATABASE ON TARGET PLATFORM CONVERT SCRIPT 'cnvt.sql' TRANSPORT SCRIPT 'crdb.sql' NEW DATABASE 'newdb' FORMAT '/tmp/%U';
  1. 传输数据文件、PFILE和转换脚本到目标平台。
  2. 在目标平台上执行转换脚本:
$ sqlplus / as sysdba
SQL> host rman target=/
RMAN> @cnvt.sql
RMAN> exit;
SQL> @crdb.sql

数据库传输的注意事项

  • 在目标平台上创建密码文件。
  • 传输源数据库中使用的BFfiles。
  • 生成的PFILE和转换脚本使用Oracle Managed Files (OMF)。
  • 使用DBNEWID更改DBID。

使用备份集传输数据库

步骤:

  1. 验证前提条件:

    • COMPATIBLE参数应大于或等于12.0。
    • OPEN_MODE为只读。
  2. 启动RMAN会话连接到源数据库:

RMAN> CONNECT TARGET sys/p@orcl;
  1. 查询目标平台的确切名称:
SELECT * FROM V$TRANSPORTABLE_PLATFORM;
  1. 备份源数据库:
RMAN> BACKUP TO PLATFORM 'HP Tru64 UNIX' FORMAT '/bkp_dir/trans_U%' DATABASE;

RMAN> BACKUP FOR TRANSPORT FORMAT '/bkp_dir/trans_U%' DATABASE;
  1. 断开与源数据库的连接。
  2. 将备份集和Data Pump导出的转储文件传输到目标主机。
  3. 连接到目标主机:
RMAN> CONNECT TARGET sys/p@orcl2;
  1. 使用RESTORE命令还原完整备份集:
RMAN> RESTORE FOREIGN DATABASE TO NEW FROM BACKUPSET '/bkp_dir/trans_U%';

示例1:使用RMAN和Data Pump在不同平台之间传输数据库

将Oracle数据库从Linux平台迁移到Windows平台。

  1. 在源平台(Linux)上将数据库设为只读
ALTER DATABASE OPEN READ ONLY;
  1. 检查数据库是否可以转换
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  db_ready BOOLEAN;
BEGIN
  db_ready := DBMS_TDB.CHECK_DB('Microsoft Windows IA (32-bit)');
END;
/
  1. 使用RMAN转换数据库格式
RMAN> CONVERT DATABASE TRANSPORT SCRIPT 'crdb.sql' NEW DATABASE 'newdb' TO PLATFORM 'Microsoft Windows IA (32-bit)' FORMAT '/tmp/%U';
  1. 将数据文件、PFILE和转换脚本传输到目标平台(Windows)
  2. 在目标平台(Windows)上执行转换脚本
$ sqlplus / as sysdba
SQL> @crdb.sql

示例2:使用备份集传输数据库

将Oracle数据库从Linux平台迁移到HP Tru64 UNIX平台。

  1. 在源平台(Linux)上将数据库设为只读
ALTER DATABASE OPEN READ ONLY;
  1. 启动RMAN会话连接到源数据库
RMAN> CONNECT TARGET sys/p@orcl;
  1. 查询目标平台的确切名称
SELECT * FROM V$TRANSPORTABLE_PLATFORM;
  1. 备份源数据库
RMAN> BACKUP TO PLATFORM 'HP Tru64 UNIX' FORMAT '/bkp_dir/trans_U%' DATABASE;
  1. 断开与源数据库的连接
  2. 将备份集和Data Pump导出的转储文件传输到目标平台(HP Tru64 UNIX)
  3. 连接到目标平台
RMAN> CONNECT TARGET sys/p@orcl2;
  1. 使用RESTORE命令还原完整备份集
RMAN> RESTORE FOREIGN DATABASE TO NEW FROM BACKUPSET '/bkp_dir/trans_U%';

非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。




像0-1的学习,提供全面的学习资源和社群,多种副业选择,总有一个适合你。


  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值