迁移应用程序数据库

Oracle Autonomous Transaction Processing 不再需要维护、打补丁和优化数据库主机和软件,因此只提供对数据库的方案级别的访问。 因此,可用于将内部部署数据库迁移到自治事务处理的迁移工具基于数据泵,这是 Oracle Database 附带的模式级迁移工具。

关于迁移应用程序数据库

数据库迁移过程包括在源数据库上创建数据库方案转储、将其上载到 Oracle Cloud Infrastructure (OCI) 上的对象存储、配置自治事务处理数据库以从对象存储导入以及从 Oracle Cloud Infrastructure Object Storage 导入数据库方案转储。

以下是过程概览:

  1. 将数据库方案导出到本地转储文件中。
  2. 使用 OCI CLI 将转储文件移动到对象存储。
  3. 获取自治数据库的 OCID。
  4. 获取 Wallet 以从源数据库(或某个备用主机)访问自治数据库。
  5. 创建用于配置自治数据库的本地隧道。
  6. 获取用于自治数据库的 OCI 验证令牌以访问 Oracle Cloud Infrastructure Object Storage
  7. 配置自治数据库访问身份证明。
  8. 将转储文件从 Oracle Cloud Infrastructure Object Storage 导入到自治数据库。

导出数据库方案和数据

将数据库方案和数据导出到单个转储文件中。

  1. 为转储文件创建 export 文件夹。
    请注意,我们正在创建单个文件转储,在某些情况下该转储可能非常大。有关使用数据泵创建多部分文件的其他选项,请参见。
    EXPORT_DB_DIRNAME=export
    mkdir /home/oracle/${ DIRNAME}
    # drop directory if it exists
    echo "DROP DIRECTORY ${EXPORT_DB_DIRNAME};" | sqlplus system/PASSWORD@$HOST:PORT/SERVICE
    # create a directory object in the DB for export with datapump, pointing to the folder created above
    echo "CREATE DIRECTORY ${EXPORT_DB_DIRNAME} AS '/home/oracle/export/';" | sqlplus 
    system/PASSWORD@$HOST:PORT/SERVICE
    # export the schema 
    expdp system/PASSWORD@$HOST:PORT/SERVICE schemas=SCHEMA_NAME 
    DIRECTORY=${EXPORT_DB_DIRNAME}
  2. 使用 Oracle Cloud Infrastructure (OCI) 命令行界面将转储文件移动到先前创建的 Oracle Cloud Infrastructure Object Storage 存储桶。
    oci os object put \
    -bn bucket-name \
    --file /home/oracle/export/expdat.dmp \
    --name expdat.dmp

获取 Autonomous Database 的 OCID

获取 Oracle Autonomous Transaction Processing 数据库的 OCID、专用端点 IP 和专用端点 URL。

  1. Oracle Cloud Infrastructure 控制台中,依次选择 Oracle Database 和自治事务处理
  2. 从页面左侧的区间列表中选择区间。
    区间是部署资源的位置。
  3. 单击之前预配的数据库以获取详细信息。
  4. 复制 OCID、专用端点 IP 和专用端点 URL (主机名),并将其保存在记事本中以备以后使用。

获取数据库 Wallet 文件

获取 Oracle Autonomous Transaction Processing 数据库 Wallet 文件并通过将目录设置为指向 sqlnet.ora 文件中的 Wallet 位置来更新位置。

  1. 使用 Oracle Cloud Infrastructure (OCI) 命令行界面可以使用 OCID 和密码获取自治事务处理数据库 Wallet 文件。
    oci db autonomous-database generate-wallet --autonomous-database-
    id your ATP OCID --file wallet.zip --password your-password
  2. 解压缩 Wallet。
    unzip wallet.zip
  3. 编辑 sqlnet.ora 文件并替换目录值以匹配解压缩 Wallet 文件的位置。
    WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = 
    (DIRECTORY="/home/oracle/ ")))
    SSL_SERVER_DN_MATCH=yes
  4. 设置 TNS_ADMIN 环境变量以匹配解压缩 Wallet 的文件夹。
    export TNS_ADMIN=$(pwd)

通过堡垒主机创建 Autonomous Database 的本地隧道

通过配置堡垒主机的公共 IP 地址创建隧道。

  1. 从地形输出中获取堡垒主机的公共 IP。
    如果 Apache Tomcat 服务器部署在公共子网中,则可以使用 Tomcat 服务器的公共 IP,否则可以使用堡垒主机公共 IP 地址。
  2. 定义堡垒 IP 以创建隧道。
    export BASTION_IP=Public IP of the bastion
  3. 运行该命令以使用自治事务处理数据库的专用端点 IP 地址将数据库主机导出,并将 ssh 导出到数据库主机。
    DB_HOST 是早期收集的专用端点 IP。
    export DB_HOST=10.0.2.2
    ssh -4 -M -S socket -fnNT -L 1522:${DB_HOST}:1522 opc@${BASTION_IP} cat -
    出现提示时,输入 yes 确认新主机。
  4. 编辑 /etc/hosts 文件以指向自治数据库的专用端点主机到 127.0.0.1 (localhost)。
    这将在 tnsnames.ora 文件中查找专用端点主机。
    ATP_HOSTNAME=$(sed 's|.*(host=\([a-z0-9.-]*\)).*|\1|;' 
    tnsnames.ora | head -n1)
    sudo su -c "printf \"127.0.0.1  ${ATP_HOSTNAME}\n\"  >> 
    /etc/hosts"
  5. 请确保端点正确。
    cat /etc/hosts
    输出应类似于以下内容:
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    172.19.0.3    58aa534ef636
    127.0.0.1  jrhdeexg.adb.region

生成验证标记

生成将数据移动到 Oracle Cloud Infrastructure Object StorageOracle Autonomous Transaction Processing 数据库时要使用的标记。仅在创建验证标记字符串时才会看到该字符串,因此,请务必立即将验证标记复制到安全位置。
  1. 登录到 Oracle Cloud Infrastructure 控制台
  2. 单击用户图标以打开概要信息菜单,然后单击用户设置
    请注意您的完整用户名(如果已激活,可能是您的电子邮件,也可能是带有一次登入服务前缀的电子邮件)。
  3. 单击验证标记,然后单击生成标记
  4. 提供有意义的验证令牌说明,然后单击生成令牌
  5. 复制令牌并保存令牌,以便以后检索令牌。
    令牌仅显示一次。关闭对话框时,您将无法在控制台中再次看到该标记。
  6. 单击关闭

在 Autonomous Database 中配置云身份证明

添加 Oracle Cloud Infrastructure (OCI) 用户名和验证标记口令作为 Oracle Autonomous Transaction Processing 数据库的默认身份证明。

  1. 使用 SQLPLus Instant Client,通过先前创建的隧道连接到远程自治事务处理数据库。
    sqlplus admin@atp_db_name_high
  2. 出现提示时,输入自治事务处理数据库的管理员密码。
    terraform.tfvars 文件中配置的 atp_admin_password
  3. 确保您已登录到 SQLPlus 提示。
    SQL>
  4. 使用以下命令以及 OCI 用户名和 OCI 验证标记口令在自治事务处理数据库中创建 OCI 云身份证明。
    SET DEFINE OFF
    BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'oci username',
        password => 'oci auth token'
    );
    END;
    /
  5. 将身份证明设置为默认身份证明。
    ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 
    'ADMIN.DEF_CRED_NAME';
  6. 退出 SQLPlus。
    SQL> exit

将转储文件导入到 Autonomous Database

使用数据泵将数据转储导入自治事务处理数据库。

  1. 定义区域的环境变量(例如 us-ashburn-1)、名称空间、存储桶、文件名、自治事务处理数据库名称(例如 atpdb和自治事务处理管理员密码。
    export REGION=your-OCI-region
    export NAMESPACE=your namespace
    export BUCKET=atp-upload
    export FILENAME=expdat.dmp
    export ATP_DB_NAME=your ATP DB name
    export ATP_PASSWORD=atp_admin_password
  2. 请运行如下命令:
    impdp admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low 
    directory=data_pump_dir 
    dumpfile=default_credential:https://objectstorage.${REGION}.oracl
    ecloud.com/n/${NAMESPACE}/b/${BUCKET}/o/${FILENAME} parallel=16 
    exclude=cluster,db_link 

    第一次尝试将失败,并出现错误:ORA-01950: no privileges on tablespace 'DATA'。转至下一步,以便为从数据库方案创建的用户提供限额。

  3. 授予用户无限制的表空间。
    echo "GRANT UNLIMITED TABLESPACE TO USER;" | sqlplus 
    admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low
    此时应显示以下输出:
    Grant Succeeded
  4. 删除在步骤 2 中创建的表以允许在下次运行时创建数据。
    echo "DROP TABLE TABLE_NAME;" | sqlplus 
    admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low
  5. 运行以下命令以立即导入用户具有有效限额的数据。
    impdp admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low 
    directory=data_pump_dir 
    dumpfile=default_credential:https://objectstorage.${REGION}.oracl
    ecloud.com/n/${NAMESPACE}/b/${BUCKET}/o/${FILENAME} parallel=16 
    exclude=cluster,db_link 
    您将看到与用户相关的错误已存在。这是正常的,因为对象是在 Step 2 中首次运行命令时创建的。
此时将迁移数据库。