What You See Is What You Get Element

如何使用 Data Pump“可传输表空间”模式将内部部署的 Oracle 数据库实例迁移到 Oracle 云

作者:Joel Pérez 和 Skant Gupta

本文介绍如何使用 Oracle 数据库的 Data Pump 特性的“可传输表空间”模式将整个数据库从内部部署主机迁移到 Oracle 数据库云服务数据库部署。

:仅当满足以下条件时才可以使用此方法:内部部署平台是小端,内部部署数据库和 Oracle 数据库云服务数据库的数据库字符集相兼容。

可传输表空间方法通常比常规导出/导入方法的速度要快得多,因为只需将包含所有实际数据的数据文件复制到目标位置。您使用 Data Pump 仅将表空间对象的元数据传输到新数据库。

要使用 Data Pump 可传输表空间方法将内部部署的 Oracle 数据库实例迁移到 Oracle 数据库云服务上的数据库部署,请执行以下操作:

  1. 在内部部署数据库主机上,将所有待传输的表空间(可传输集)设置为只读模式,让数据库为 Data Pump 可传输表空间导出做好准备。
  2. 在内部部署数据库主机上,调用 Data Pump Export (expdp) 执行可传输表空间导出。
  3. 创建一个新的 Oracle 数据库云服务实例。
  4. 连接到 Oracle 数据库云服务计算节点。
  5. 使用安全的复制实用程序将 Data Pump Export 转储文件和表空间数据文件传输到 Oracle 数据库云服务计算节点。
  6. 将内部部署表空间重新设置为读写模式。
  7. 在 Oracle 数据库云服务计算节点上,对数据库进行相应的设置,为表空间导入做好准备。
  8. 在 Oracle 数据库云服务计算节点上,调用 Data Pump Import (impdp) 并连接到数据库。
  9. 将 Oracle 数据库云服务数据库上的表空间设置为读写模式。
  10. 验证数据已成功导入后,删除转储文件。

以下几节中的示例演示使用 Data Pump 可传输表空间方法将 Oracle Database 11g 第 2 版的内部部署实例迁移到 Oracle 数据库云服务数据库所需的任务。不过,也可以使用类似的过程来迁移 Oracle Database 12c 第 1 版或 12c 第 2 版的内部部署实例中的表空间。

本示例执行 TBSP_DATA 和 TBSP_INDEX 表空间的迁移。

在本例中,内部部署数据库位于一台 Linux 主机上。

导出内部部署数据库

  1. 在内部部署数据库主机上,对数据库进行相应的设置,为 Data Pump 可传输表空间导出做好准备:

    a.在内部部署数据库主机上,在操作系统中创建一个用于内部部署导出的目录。

    [oracle@cloud ~]$ mkdir -p /u01/app/dpump
    


    b.在内部部署数据库主机上,调用 SQL *Plus 并以 SYSTEM 用户身份登录内部部署数据库。

    [oracle@cloud ~]$ sqlplus SYSTEM
    SQL*Plus: Release 11.2.0.4.0 Production on Thu Jun 1 01:49:18 2017
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    Enter password:
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    SQL>
    


    c.在内部部署数据库中创建一个引用操作系统目录的目录对象。

    SQL> CREATE DIRECTORY prem_to_cloud AS '/u01/app/dpump';
    Directory created.
    


    d.通过查询 DBA_DATA_FILES 来确定属于 TBSP_DATA 和 TBSP_INDEX 表空间的数据文件的名称。这些文件也将列出在导出输出中。

    SQL> SELECT tablespace_name, file_name FROM dba_data_files where tablespace_name = 'TBSP_DATA';
    
    TABLESPACE_NAME
    ------------------------------
    FILE_NAME
    --------------------------------------------------------------
    TBSP_DATA
    /u01/app/oracle/oradata/ORA11G/tbspdata01.dbf
    SQL> SELECT tablespace_name, file_name FROM dba_data_files where tablespace_name = 'TBSP_INDEX';
    
    TABLESPACE_NAME
    ------------------------------
    FILE_NAME
    --------------------------------------------------------------
    TBSP_DATA
    /u01/app/oracle/oradata/ORA11G/tbspindex01.dbf
    


    e.在内部部署数据库主机上,将所有待传输的表空间(可传输集)设置为只读模式。

    SQL> ALTER TABLESPACE tbsp_data READ ONLY;
    Tablespace altered.
    SQL> ALTER TABLESPACE tbsp_index READ ONLY;
    Tablespace altered.
    


    f.退出 SQL*Plus。
  2. 在内部部署数据库主机上,调用 Data Pump Export 实用程序并连接到内部部署数据库。使用 TRANSPORT_TABLESPACES 选项导出内部部署表空间。根据提示输入 SYSTEM 用户的密码。

    [oracle@cloud ~]$ expdp system TRANSPORT_TABLESPACES=tbsp_data,tbps_index TRANSPORT_FULL_CHECK=YES DIRECTORY=prem_to_cloud
    Export: Release 11.2.0.4.0 - Production on Sat Jun 3 23:30:03 2017
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    Password:
    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01":  system/******** TRANSPORT_TABLESPACES=tbsp_data,tbps_index TRANSPORT_FULL_CHECK=YES DIRECTORY=prem_to_cloud
    

创建一个新的 Oracle 数据库云服务实例

  1. 登录您的 Oracle 云服务帐户,转至“Oracle 数据库云服务”页面,创建一个新服务:

    - 在 Service Name 中,输入 Cloud-Mig11g
    - 从 Service Level 列表中,选择 Oracle Database Cloud Service
    - 从 Metering Frequency 列表中,选择适合您环境的频率。
    - 从 Software Release 列表中,选择 Oracle Database 11g Release 2
    - 从 Software Edition 列表中,选择 Enterprise Edition
    - 从 Database Type 列表中,选择 Single Instance

    然后,单击 Next 继续。

    图 1 创建新服务

    图 1. 创建新服务 (Cloud-Mig11g)

  2. 在 Service Details 屏幕上,执行以下操作:

    - 在 DB Name (SID) 中,输入 MIGORCL
    - 设置您的管理密码并确认密码(这将是您的 sys 密码)。
    - 在 Usable Database Storage (GB) 中,输入 25
    - 从 Compute Shape 列表中,选择 OC3 -1 OCPU, 7.5 GB RAM(这是最低要求)。
    - 在 SSH Public Key 中,输入 rsa-key-20170111.pub

    然后,单击 Next 继续。

    图 2 指定

    图 2. 指定服务详细信息

  3. 最后,检查配置并单击 Create 创建云数据库。

    图 3 创建主云数据库实例

    图 3. 创建云数据库实例

    几分钟后,云数据库实例已成功创建。

    图 4 创建数据库

    图 4. 云数据库已创建

  4. 单击服务名称 (Cloud-Mig11g) 打开数据库的主页面。

    图 5 数据库主页面

    图 5. 云数据库的主页面

  5. 在尝试连接到云端的数据库实例之前,您必须启用 dblistener 访问规则。执行以下操作:

    a.打开数据库服务,从菜单中选择 Access Rules

    图 6 选择 Access Rules

    图 6. 选择 Access Rules 项目

    b.对于 ora_p2_dblistener 规则,从 Actions 菜单中选择 Enable

    图 7 启用监听器

    图 7. 启用 ora_p2_dblistener 规则

连接到云数据库、传输转储文件并导入数据

  1. 打开 PuTTY 可执行文件的一个实例,使用 SSH 公钥连接到 Oracle 数据库云服务计算节点。

    图 8 使用 PuTTY 连接

    图 8. 使用 PuTTY 连接到机器

  2. 使用安全的复制实用程序将 Data Pump Export 转储文件和表空间数据文件传输到 Oracle 数据库云服务计算节点。

    在本例中,转储文件会复制到 /u01 目录。根据要传输文件的大小选择适当的位置。

    a.在 Oracle 数据库云服务计算节点上,为转储文件创建一个目录。

    [oracle@Cloud-Mig11g ~]$ mkdir -p /u01/app/on_premise
    [oracle@Cloud-Mig11g ~]$
    


    b.在使用 scp 实用程序复制文件之前,确保提供对 Oracle 数据库云服务计算节点的访问权限的 SSH 私钥在您的内部部署主机上可用。

    c.在内部部署数据库主机上,使用 scp 实用程序将转储文件和可传输集的所有数据文件传输到 Oracle 数据库云服务计算节点。

    [oracle@cloud ~]$ scp -i rsa-key-20170111.ssh /u01/app/dpump/expdat.dmp oracle@129.144.152.230:/u01/app/on_premise
    Enter passphrase for key 'rsa-key-20170111.ssh':
    expdat.dmp                100%   97MB 121.3KB/s   13:42
    [oracle@cloud ~]$ scp -i rsa-key-20170111.ssh /u01/app/oracle/oradata/ORA11G/tbspdata01.dbf oracle@129.144.152.230:/u02/app/oracle/oradata/PROD
    Enter passphrase for key 'rsa-key-20170111.ssh':
    tbspdata01.dbf             100%  141MB 183.7KB/s   16:00 
    [oracle@cloud ~]$ scp -i rsa-key-20170111.ssh /u01/app/oracle/oradata/ORA11G/tbspindex01.dbf oracle@129.144.152.230:/u02/app/oracle/oradata/PROD
    Enter passphrase for key 'rsa-key-20170111.ssh':
    tbspindex01.dbf            100%  14MB 183.7KB/s   2:00 
    [oracle@cloud ~]$
    
  3. 将内部部署表空间重新设置为读写模式。

    a.调用 SQL *Plus 并以 SYSTEM 用户身份登录。

    b.将 TBPS_DATA 和 TBSP_INDEX 表空间重新设置为读写模式。

    SQL> ALTER TABLESPACE tbsp_data READ WRITE;
    Tablespace altered.
    SQL> ALTER TABLESPACE tbsp_index READ WRITE;
    Tablespace altered.
    


    c.退出 SQL*Plus。
      
  4. 在 Oracle 数据库云服务计算节点上,对数据库进行相应的设置,为表空间导入做好准备。

    a.在 Oracle 数据库云服务计算节点上,调用 SQL *Plus 并以 SYSTEM 用户身份登录数据库。

    b.在 Oracle 数据库云服务数据库中,创建一个目录对象。

    SQL> CREATE DIRECTORY on_cloud AS '/u01/app/on_premise';
    Directory created.
    


    c.如果待导入对象的所有者不在数据库中,请先创建它们,再执行导入。可传输表空间模式的导入不会创建用户。

    SQL> CREATE USER test PROFILE default IDENTIFIED BY test TEMPORARY TABLESPACE temp ACCOUNT UNLOCK;
    
    User Created.
    
  5. 在数据库云服务计算节点上,调用 Data Pump Import 实用程序并连接到数据库。使用 TRANSPORT_DATAFILES 选项将数据导入数据库。

    [oracle@Cloud-Mig11g PROD]$ impdp system DIRECTORY=on_cloud \
    > TRANSPORT_DATAFILES='/u02/app/oracle/oradata/PROD/tbspdata01.dbf' \
    >'/u02/app/oracle/oradata/ORCL/tbspindex01.dbf'
    
    Import: Release 11.2.0.4.0 - Production on Sat Jun 3 19:16:50 2017
    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
    Password:
    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning and Real Application Testing options
    Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
    Source time zone version is 14 and target time zone version is 28.
    Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/******** DIRECTORY=on_cloud TRANSPORT_DATAFILES=/u02/app/oracle/oradata/PROD/ tbspdata 01.dbf,/u02/app/oracle/oradata/ORCL/tbspindex01.dbf
    
  6. 将 Oracle 数据库云服务数据库上的表空间设置为读写模式。

    a.调用 SQL *Plus 并以 SYSTEM 用户身份登录。

    b.将 TBSP_DATA 和 TBSP_INDEX 表空间设置为读写模式。

    SQL> ALTER TABLESPACE tbsp_data READ WRITE;
    Tablespace altered.
    SQL> ALTER TABLESPACE tbsp_index READ WRITE;
    Tablespace altered.
    


    c.退出 SQL*Plus。
  7. 验证数据已成功导入后,您可以删除 expdat.dmp 转储文件。至此,整个过程已完成。

我们希望本文能为您提供一些帮助,欢迎继续阅读本专栏关于 Oracle 云的后续文章。

关于作者

Joel Pérez 是一位资深 DBA 和 Oracle ACE 总监,同时还是 Oracle 高可用性架构、Oracle 数据库云管理以及 Oracle Database 11g 和 12c 领域的 Oracle 认证大师。他在 Oracle 技术领域拥有超过 17 年的实践经验,致力于从事云、高可用性 (HA)、灾难恢复、升级、复制以及与 Oracle 数据库相关的大部分领域的设计和实施工作。目前,他在云和恩墨(北京)信息技术有限公司担任云技术、Oracle 高可用架构和高可用性领域的首席技术专家和架构师。

Skant Gupta 是 Oracle Database 12c 的 Oracle 认证云专家,Oracle Database 11g 中的 Oracle Real Application Clusters (Oracle RAC) 的 Oracle 认证专家以及 Oracle Database 10g、11g 和 12c 的 Oracle 认证专家。他目前任职于英国的 Vodafone Technology,此前曾在迪拜的 Etisalat 担任高级 DBA。他拥有六年的 Oracle 技术经验,主要致力于云、数据库和高可用性解决方案、Oracle WebLogic Suite 和 Oracle GoldenGate。他经常在全球各地的 Oracle 用户组活动上发表演讲,最近刚在美国、阿联酋和印度的活动上发表了演讲。