你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Linux 虚拟机上实施 Oracle Golden Gate

适用于:✔️ Linux VM

Azure CLI 用于从命令行或脚本创建和管理 Azure 资源。 本指南详细介绍了如何使用 Azure CLI 从 Azure 市场库映像部署 Oracle 19c 数据库。

本文档逐步演示如何在 Azure VM 上创建、安装和配置 Oracle Golden Gate。 在本教程中,将在单个区域的可用性集中设置两个虚拟机。 同一教程可用于为单个 Azure 区域的不同可用性区域中的 VM 或两个不同区域中的 VM 设置 OracleGolden Gate。

在开始之前,请确保已安装 Azure CLI。 有关详细信息,请参阅 Azure CLI 安装指南

简介

GoldenGate 是一种逻辑复制软件,可实现数据从源数据库到目标数据库的实时复制、筛选和转换。 此功能可确保实时复制源数据库中的更改,从而使目标数据库能够使用最新数据保持最新状态。

GoldenGate 主要用于异类复制情况,例如将数据从不同的源数据库复制到单一数据库。 例如,数据仓库。 还可以将其用于跨平台迁移(例如从 SPARC 和 AIX 迁移到 Linux x86 环境),以及高级高可用性和可伸缩性场景。

此外,GoldenGate 还适用于几乎零停机时间的迁移,因为它支持联机迁移,并且对源系统造成的中断最少。

虽然 GoldenGate 有助于进行双向复制,但必须相应地配置应用程序。 此外,该软件还允许筛选和转换数据以满足特定的业务需求,使用户能够将复制的数据用于各种用途。

准备环境

若要执行 Oracle Golden Gate 安装,需要在同一可用性集中创建两个 Azure VM。 用来创建 VM 的市场映像是 Oracle:oracle-database-19-3:oracle-database-19-0904:19.3.1

你还需要熟悉 Unix 编辑器 vi,并对 X Server 有基本的了解。

下表汇总了环境配置:

主站点 复制站点
Oracle 版本 Oracle Database 19.3.1.0 Oracle Database 19.3.1.0
计算机名 ggVM1 ggVM2
操作系统 Oracle Linux 7.x Oracle Linux 7.x
Oracle SID CDB1 CDB1
复制架构 TEST TEST
Golden Gate 所有者/复制 C##GGADMIN REPUSER
Golden Gate 进程 EXTORA REPORA

登录 Azure

  1. 在 Windows、Linux 或 Azure Shell 上打开首选 shell。

  2. 使用 az login 命令登录 Azure 订阅。 然后,遵照屏幕指令进行操作。

    $ az login
    
  3. 通过验证订阅名称和/或 ID,确保已连接到正确的订阅。

    $ az account show
    
    {
      "environmentName": "XXXXX",
      "homeTenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
      "id": "<SUBSCRIPTION_ID>",
      "isDefault": true,
      "managedByTenants": [],
      "name": "<SUBSCRIPTION_NAME>",
      "state": "Enabled",
      "tenantId": XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
      "user": {
        "cloudShellID": true,
        "name": "aaaaa@bbbbb.com",
        "type": "user"
      }
    }
    

生成身份验证密钥

我们将基于密钥文件的身份验证与 ssh 配合使用,以连接到 Oracle Database VM。 确保在 shell 上创建了私有(名为 id_rsa)和公共(名为 id_rsa.pub)密钥文件。

密钥文件的位置取决于源系统。

Windows:%USERPROFILE%.ssh Linux:~/.ssh

如果它们不存在,则可以创建新的密钥文件对。

ssh-keygen -m PEM -t rsa -b 4096

已创建 .ssh 目录和密钥文件。 有关详细信息,请参阅创建和管理用于 Azure 中 Linux VM 的身份验证的 SSH 密钥

创建资源组

若要创建资源组,请使用 az group create 命令。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。

$ az group create --name GoldenGateOnAzureLab --location westus

创建和配置网络

创建虚拟网络

使用以下命令创建虚拟网络来托管我们在此实验室中创建的资源。

$ az network vnet create \
  --name ggVnet \
  --resource-group GoldenGateOnAzureLab \
  --address-prefixes "10.0.0.0/16" \
  --subnet-name ggSubnet1 \
  --subnet-prefixes "10.0.0.0/24"

创建网络安全组 (NSG)

  1. 创建网络安全组 (NSG) 以锁定虚拟网络。

    $ az network nsg create \
      --resource-group GoldenGateOnAzureLab \
      --name ggVnetNSG
    
  2. 创建 NSG 规则以允许在虚拟网络内进行通信。

    $ az network nsg rule create  --resource-group GoldenGateOnAzureLab --nsg-name ggVnetNSG \
        --name ggAllowVnet \
        --protocol '*' --direction inbound --priority 3400 \
        --source-address-prefix 'VirtualNetwork' --source-port-range '*' \
        --destination-address-prefix 'VirtualNetwork' --destination-port-range '*' --access allow
    
  3. 创建 NSG 规则以拒绝所有入站连接

    $ az network nsg rule create \
      --resource-group GoldenGateOnAzureLab \
      --nsg-name ggVnetNSG \
      --name ggDenyAllInBound \
      --protocol '*' --direction inbound --priority 3500 \
      --source-address-prefix '*' --source-port-range '*' \
      --destination-address-prefix '*' --destination-port-range '*' --access deny
    
  4. 将 NSG 分配到托管服务器的子网。

    $ az network vnet subnet update --resource-group GoldenGateOnAzureLab --vnet-name ggVNet --name ggSubnet1 --network-security-group ggVnetNSG
    

创建 Bastion 网络

  1. 创建 Bastion 子网。 子网名称必须为 AzureBastionSubnet

    $ az network vnet subnet create  \
        --resource-group GoldenGateOnAzureLab \
        --name AzureBastionSubnet \
        --vnet-name ggVnet \
        --address-prefixes 10.0.1.0/24
    
  2. 为 Bastion 创建公共 IP

    $ az network public-ip create \
        --resource-group GoldenGateOnAzureLab \
        --name ggBastionIP \
        --sku Standard
    
  3. 创建 Azure Bastion 资源。 部署资源大约需要 10 分钟的时间。

    $ az network bastion create \
        --resource-group GoldenGateOnAzureLab \
        --name ggBastion \
        --public-ip-address ggBastionIP \
        --vnet-name ggVnet \
        --sku Standard \
        --enable-tunneling \
        --enable-ip-connect true
    

创建 X Server VM (ggXServer)

请替换密码并运行以下命令,以创建从中部署 X Server 的 Windows 工作站 VM。

$ az vm create \
     --resource-group GoldenGateOnAzureLab \
     --name ggXServer \
     --image MicrosoftWindowsDesktop:Windows-10:win10-22h2-pro-g2:19045.2604.230207 \
     --size Standard_DS1_v2  \
     --vnet-name ggVnet \
     --subnet ggSubnet1 \
     --public-ip-sku Standard \
     --nsg "" \
     --data-disk-delete-option Delete \
     --os-disk-delete-option Delete \
     --nic-delete-option Delete \
     --admin-username azureuser \
     --admin-password <ENTER_YOUR_PASSWORD_HERE>

通过 Bastion 连接到 ggXServer

使用 Bastion 连接到 ggXServer

  1. 从 Azure 门户导航到 ggXServer
  2. 转到左侧边栏选项卡中的“概述
  3. 选择顶部菜单上的“连接”>“Bastion”
  4. 选择“Bastion”选项卡
  5. 单击“使用 Bastion

准备 ggXServer 以运行 X Server

本实验室的后续步骤需要 X Server。 执行以下步骤以安装并启动 X Server。

  1. Xming X Server for Windows 下载到 ggXServer,并使用所有默认选项进行安装。

  2. 确保未在安装结束时选择“启动”

  3. 从“开始”菜单启动“XLAUNCH”应用程序。

  4. 选择“多个窗口”

    XLaunch 向导步骤 1 的屏幕截图。

  5. 选择“不启动客户端”

    XLaunch 向导步骤 2 的屏幕截图。

  6. 选择“无访问控制”

    XLaunch 向导步骤 3 的屏幕截图。

  7. 选择“允许访问”以允许 X Server 通过 Windows 防火墙

    XLaunch 向导步骤 4 的屏幕截图。

如果重启 ggXServer VM,请按照上述步骤 2-6 重启 X Server 应用程序。

创建 Oracle Database 虚拟机

在本实验室中,我们将从 Oracle Database 19c 映像创建虚拟机 ggVM1ggVM2。 如果默认密钥位置中不存在 SSH 密钥,则此命令还会创建这些密钥。 若要使用特定的一组密钥,请使用 --ssh-key-value 选项。 如果已在生成身份验证密钥部分创建了 SSH 密钥,则将使用这些密钥。

创建新虚拟机时,size 参数表示所创建的虚拟机的大小和类型。 根据你选择用于创建虚拟机的 Azure 区域和订阅设置,某些虚拟机大小和类型可能不可用。 以下示例使用此实验室 Standard_DS1_v2 所需的最小大小。 如果要更改虚拟机的规格,请从“Azure VM 大小”中选择一个可用大小。 出于测试目的,可以从常规用途(D 系列)虚拟机类型中进行选择。 对于生产或试点部署,内存优化型(E 系列和 M 系列)更合适。

创建 ggVM1(主)

$ az vm create \
     --resource-group GoldenGateOnAzureLab \
     --name ggVM1 \
     --image Oracle:oracle-database-19-3:oracle-database-19-0904:19.3.1 \
     --size Standard_DS1_v2 \
     --generate-ssh-keys \
    --admin-username azureuser \
    --vnet-name ggVnet \
    --subnet ggSubnet1 \
    --public-ip-address "" \
    --nsg "" \
    --zone 1

创建 ggVM2(复制)

$ az vm create \
    --resource-group GoldenGateOnAzureLab \
    --name ggVM2 \
    --image Oracle:oracle-database-19-3:oracle-database-19-0904:19.3.1 \
    --size Standard_DS1_v2  \
    --generate-ssh-keys \
    --admin-username azureuser \
    --vnet-name ggVnet \
    --subnet ggSubnet1 \
    --public-ip-address "" \
    --nsg "" \
    --zone 2

连接到 ggVM1(主)

使用 Bastion 连接到 ggVM1

  1. 从 Azure 门户导航到 ggVM1
  2. 转到左侧窗格中的“概述”。
  3. 选择顶部菜单上的“连接”>“Bastion”
  4. 选择“Bastion”选项卡
  5. 单击“使用 Bastion”

在 ggVM1(主)上创建数据库

Oracle 软件已在市场映像上安装,因此下一步是创建数据库。

  1. oracle 用户身份运行该软件。
$ sudo su - oracle
  1. 使用以下命令创建数据库。 此命令可能需要 30-40 分钟才能完成。
$ dbca -silent \
   -createDatabase \
   -templateName General_Purpose.dbc \
   -gdbname cdb1 \
   -sid cdb1 \
   -responseFile NO_VALUE \
   -characterSet AL32UTF8 \
   -sysPassword OraPasswd1 \
   -systemPassword OraPasswd1 \
   -createAsContainerDatabase true \
   -numberOfPDBs 1 \
   -pdbName pdb1 \
   -pdbAdminPassword OraPasswd1 \
   -databaseType MULTIPURPOSE \
   -automaticMemoryManagement false \
   -storageType FS \
   -datafileDestination "/u01/app/oracle/oradata/" \
   -ignorePreReqs

输出应类似于以下响应。

Copying database files
1% complete
2% complete
8% complete
13% complete
19% complete
27% complete
Creating and starting Oracle instance
29% complete
32% complete
33% complete
34% complete
38% complete
42% complete
43% complete
45% complete
Completing Database Creation
48% complete
51% complete
53% complete
62% complete
70% complete
72% complete
Creating Pluggable Databases
78% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/cdb1/cdb1.log" for more details.
  1. 设置 ORACLE_SID 和 LD_LIBRARY_PATH 变量。
$ export ORACLE_SID=cdb1
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib
  1. 运行以下命令,以将 ORACLE_SID 和 LD_LIBRARY_PATH 添加到 .bashrc 文件,以便保存这些设置以供将来登录。应该已在 .bashrc 文件中设置了 ORACLE_HOME 变量。
$ sed -i '$ a export ORACLE_SID=cdb1' .bashrc
$ sed -i '$ a export LD_LIBRARY_PATH=$ORACLE_HOME/lib' .bashrc
  1. 启动 Oracle 侦听器
$ lsnrctl start

连接到 ggVM2(复制)

使用 Bastion 连接到 ggVM2

  1. 从 Azure 门户导航到 ggVM2
  2. 转到左侧窗格中的“概述”。
  3. 选择顶部菜单上的“连接”>“Bastion”
  4. 选择“Bastion”选项卡
  5. 单击“使用 Bastion

打开 ggVM1 的防火墙端口

将防火墙配置为允许来自 ggVM1 的连接。 以下命令在 ggVM2 上运行。

$ sudo su -
$ firewall-cmd --permanent --zone=trusted --add-source=10.0.0.5
$ firewall-cmd --reload
$ exit

在 ggVM2(复制)上创建数据库

  1. 如有必要,请切换到 oracle 用户
$ sudo su - oracle
  1. 创建数据库
$ dbca -silent \
   -createDatabase \
   -templateName General_Purpose.dbc \
   -gdbname cdb1 \
   -sid cdb1 \
   -responseFile NO_VALUE \
   -characterSet AL32UTF8 \
   -sysPassword OraPasswd1 \
   -systemPassword OraPasswd1 \
   -createAsContainerDatabase true \
   -numberOfPDBs 1 \
   -pdbName pdb1 \
   -pdbAdminPassword OraPasswd1 \
   -databaseType MULTIPURPOSE \
   -automaticMemoryManagement false \
   -storageType FS \
   -datafileDestination "/u01/app/oracle/oradata/" \
   -ignorePreReqs
  1. 设置 ORACLE_SID and ORACLE_HOME 变量。
$ export ORACLE_SID=cdb1
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib
  1. 运行以下命令,以将 ORACLE_SID 和 LD_LIBRARY_PATH 添加到 .bashrc 文件,以便保存这些设置以供将来登录。应该已在 .bashrc 文件中设置了 ORACLE_HOME 变量。
$ sed -i '$ a export ORACLE_SID=cdb1' .bashrc
$ sed -i '$ a export LD_LIBRARY_PATH=$ORACLE_HOME/lib' .bashrc
  1. 启动 Oracle 侦听器
$ lsnrctl start

在 ggVM1 上配置 Golden Gate

按照本部分中的步骤安装和配置 Golden Gate。

在 ggVM1(主)上启用存档日志模式

  1. 连接到 sqlplus
$ sqlplus / as sysdba
  1. 启用存档日志
SQL> SELECT log_mode FROM v$database;

LOG_MODE
------------
NOARCHIVELOG

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
  1. 启用强制日志记录,并确保至少存在一个日志文件。
SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> ALTER SYSTEM set enable_goldengate_replication=true;
SQL> ALTER PLUGGABLE DATABASE PDB1 OPEN;
SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SQL> ALTER SESSION SET CONTAINER=PDB1;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SQL> EXIT;

下载 Golden Gate 软件

  1. Oracle Golden Gate 下载页面下载 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip 文件。 它位于下载标题“适用于 Linux x86-64 上的 Oracle 的 Oracle GoldenGate 21.3.0.0.0”下。

  2. 将 .zip 文件下载到客户端计算机后,可以使用安全复制协议 (SCP) 将文件复制到虚拟机(ggVM1 和 ggVM2)。 确保 scp 命令指向 .zip 文件的正确路径。

  3. 复制到 ggVM1

    1. 登录并确保根据需要使用正确的订阅,如登录到 Azure 中所述

    2. 使用以下 PowerShell 命令打开连接到目标 VM 的隧道

      $ggVM1id=$(az vm show --resource-group GoldenGateOnAzureLab --name ggVM1 --query 'id' --output tsv)
      az network bastion tunnel --name ggBastion --resource-group GoldenGateOnAzureLab --target-resource-id $ggVM1id --resource-port 22 --port 57500
      
    3. 让第一个命令提示符保持运行状态,并打开第二个命令提示符,以通过隧道连接到目标 VM。 在此第二个命令提示符窗口中,你可以使用以下命令将文件从本地计算机上传到目标 VM。 用于访问虚拟机的正确 id_rsa 密钥文件必须位于 .ssh 目录中,或者可以使用 scp 命令的 -i 参数指向其他密钥文件。

       scp -P 57500 "213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip"  azureuser@127.0.0.1:.
      
  4. 复制到 ggVM2

    1. 使用以下 PowerShell 命令打开连接到目标 VM 的隧道

      $ggVM2id=$(az vm show --resource-group GoldenGateOnAzureLab --name ggVM2 --query 'id' --output tsv)
      az network bastion tunnel --name ggBastion --resource-group GoldenGateOnAzureLab --target-resource-id $ggVM2id --resource-port 22 --port 57501
      
    2. 让第一个命令提示符保持运行状态,并打开第二个命令提示符,以通过隧道连接到目标 VM。 在此第二个命令提示符窗口中,你可以使用以下命令将文件从本地计算机上传到目标 VM。 用于访问虚拟机的正确 id_rsa 密钥文件必须位于 .ssh 目录中,或者可以使用 scp 命令的 -i 参数指向其他密钥文件。

      scp -P 57501 "213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip"  azureuser@127.0.0.1:.
      

安装 Golden Gate 软件

  1. 使用 Bastion 连接到 ggVM1

    1. 从 Azure 门户导航到 ggVM1
    2. 转到左侧面板中的“概述”
    3. 选择顶部菜单上的“连接”>“Bastion”
    4. 选择“Bastion”选项卡
    5. 单击“使用 Bastion
  2. 将 .zip 文件移动到 /opt 文件夹,然后更改所有者

    $ sudo su -
    $ mv /home/azureuser/*.zip /opt
    
  3. 解压缩文件(如果尚未安装解压缩实用工具,请安装)

    $ yum install unzip
    $ cd /opt
    $ unzip 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip
    
  4. 更改权限

    $ chown -R oracle:oinstall /opt/fbo_ggs_Linux_x64_Oracle_shiphome
    $ exit
    
  5. 启动 Golden Gate 安装程序

    $ sudo su - oracle
    $ export DISPLAY=10.0.0.4:0.0
    $ cd /opt/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1
    $ ./runInstaller
    

    该安装程序将在 ggXServer 上打开。

  6. 选择“Oracle GoldenGate for Oracle Database 21c”。 然后选择“下一步”继续。

    Golden Gate 安装向导步骤 1 的屏幕截图。

  7. 将软件位置设置为 /u01/app/oracle/product/19.0.0/oggcore_1,确保选中“启动管理器”框,然后选择“下一步”继续。

    Golden Gate 安装向导步骤 2 的屏幕截图。

  8. 在“摘要”屏幕上,选择“安装”以继续。

    Golden Gate 安装向导步骤 3 的屏幕截图。

  9. 等待安装完成。

    Golden Gate 安装向导步骤 4 的屏幕截图。

  10. 选择“关闭”以继续。

Golden Gate 安装向导步骤 5 的屏幕截图。

  1. 使用 Bastion 连接到 ggVM2

    1. 从 Azure 门户导航到 ggVM2
    2. 转到左侧窗格中的“概述”
    3. 选择顶部菜单上的“连接”>“Bastion”
    4. 选择“Bastion”选项卡
    5. 单击“使用 Bastion
  2. ggVM2 上重复上述步骤 2-10

在 ggVM1(主)上设置服务

  1. 创建或更新 tnsnames.ora 文件。

    $ sudo su - oracle
    $ cd $ORACLE_HOME/network/admin
    $ vi tnsnames.ora
    

    当 vi 编辑器打开时,必须按 i 切换到插入模式,复制并粘贴文件内容,然后按 Esc:wq! 以保存文件。

    cdb1=
     (DESCRIPTION=
       (ADDRESS=
         (PROTOCOL=TCP)
         (HOST=localhost)
         (PORT=1521)
       )
       (CONNECT_DATA=
         (SERVER=dedicated)
         (SERVICE_NAME=cdb1)
       )
     )
    
    pdb1=
     (DESCRIPTION=
       (ADDRESS=
         (PROTOCOL=TCP)
         (HOST=localhost)
         (PORT=1521)
       )
       (CONNECT_DATA=
         (SERVER=dedicated)
         (SERVICE_NAME=pdb1)
       )
     )
    
  2. 创建 Golden Gate 所有者和用户帐户。

    注意

    所有者帐户必须具有 C## 前缀。

    $ sqlplus / as sysdba
    
     SQL> CREATE USER C##GGADMIN identified by ggadmin;
     SQL> EXEC dbms_goldengate_auth.grant_admin_privilege('C##GGADMIN',container=>'ALL');
     SQL> GRANT DBA to C##GGADMIN container=all;
     SQL> connect C##GGADMIN/ggadmin
     SQL> ALTER SESSION SET CONTAINER=PDB1;
     SQL> EXIT;
    
  3. 创建 Golden Gate 测试用户帐户

    $ cd /u01/app/oracle/product/19.0.0/oggcore_1
    $ sqlplus system/OraPasswd1@pdb1
    
    SQL> CREATE USER test identified by test DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
    SQL> GRANT connect, resource, dba TO test;
    SQL> ALTER USER test QUOTA 100M on USERS;
    SQL> connect test/test@pdb1
    SQL> @demo_ora_create
    SQL> @demo_ora_insert
    SQL> EXIT;
    
  4. 配置提取参数文件。

    启动 Golden Gate 命令行接口 (ggsci):

    $ sudo su - oracle
    $ cd /u01/app/oracle/product/19.0.0/oggcore_1
    $ ./ggsci
    
    GGSCI> DBLOGIN USERID test@pdb1, PASSWORD test
    Successfully logged into database  pdb1
    GGSCI>  ADD SCHEMATRANDATA pdb1.test
    2017-05-23 15:44:25  INFO    OGG-01788  SCHEMATRANDATA has been added on schema test.
    2017-05-23 15:44:25  INFO    OGG-01976  SCHEMATRANDATA for scheduling columns has been added on schema test.
    
    GGSCI> EDIT PARAMS EXTORA
    
  5. i 键切换到插入模式,然后将以下内容复制并粘贴(在 SSH 窗口上单击鼠标右键)到 EXTRACT 参数文件。 按 Esc 键 :wq! 以保存文件。

    EXTRACT EXTORA
    USERID C##GGADMIN@cdb1, PASSWORD ggadmin
    RMTHOST 10.0.0.5, MGRPORT 7809
    RMTTRAIL ./dirdat/rt
    DDL INCLUDE MAPPED
    DDLOPTIONS REPORT
    LOGALLSUPCOLS
    UPDATERECORDFORMAT COMPACT
    TABLE pdb1.test.TCUSTMER;
    TABLE pdb1.test.TCUSTORD;
    
  6. 注册提取 - 集成提取。

    GGSCI> dblogin userid C##GGADMIN@cdb1, password ggadmin
    Successfully logged into database CDB$ROOT.
    
    GGSCI> REGISTER EXTRACT EXTORA DATABASE CONTAINER(pdb1)
    
    2023-03-03 19:37:01  INFO    OGG-02003  Extract group EXTORA successfully registered with database at SCN 2142014.
    
    GGSCI> exit
    
  7. 设置提取检查点并启动实时提取

    $ ./ggsci
    
    GGSCI>  ADD EXTRACT EXTORA, INTEGRATED TRANLOG, BEGIN NOW
    EXTRACT (Integrated) added.
    
    GGSCI>  ADD RMTTRAIL ./dirdat/rt, EXTRACT EXTORA, MEGABYTES 10
    RMTTRAIL added.
    
    GGSCI>  START EXTRACT EXTORA
    
    Sending START request to MANAGER ...
    EXTRACT EXTORA starting
    
    GGSCI > INFO ALL
    
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    
    MANAGER     RUNNING
    EXTRACT     RUNNING     EXTORA      00:00:11      00:00:04
    
    GGSCI > EXIT
    

    在此步骤中,可找到启动 SCN(以后会在其他部分中使用)。

    $ sqlplus / as sysdba
    
    SQL> alter session set container = pdb1;
    SQL> SELECT current_scn from v$database;
    CURRENT_SCN
    -----------
       2172191
    SQL> EXIT;
    
    $ ./ggsci
    GGSCI> EDIT PARAMS INITEXT
    

    当 vi 编辑器打开时,必须按 i 切换到插入模式,复制并粘贴文件内容,然后按 Esc:wq! 以保存文件。

    EXTRACT INITEXT
    USERID C##GGADMIN@cdb1, PASSWORD ggadmin
    RMTHOST 10.0.0.6, MGRPORT 7809
    RMTTASK REPLICAT, GROUP INITREP
    TABLE pdb1.test.*, SQLPREDICATE 'AS OF SCN 2172191';
    
    GGSCI> ADD EXTRACT INITEXT, SOURCEISTABLE
    Extract added.
    GGSCI> EXIT
    

在 ggVM2(复制)上设置服务

  1. 创建或更新 tnsnames.ora 文件。

    $ cd $ORACLE_HOME/network/admin
    $ vi tnsnames.ora
    

    当 vi 编辑器打开时,必须按 i 切换到插入模式,复制并粘贴文件内容,然后按 Esc:wq! 以保存文件。

    cdb1=
     (DESCRIPTION=
       (ADDRESS=
         (PROTOCOL=TCP)
         (HOST=localhost)
         (PORT=1521)
       )
       (CONNECT_DATA=
         (SERVER=dedicated)
         (SERVICE_NAME=cdb1)
       )
     )
    
    pdb1=
     (DESCRIPTION=
       (ADDRESS=
         (PROTOCOL=TCP)
         (HOST=localhost)
         (PORT=1521)
       )
       (CONNECT_DATA=
         (SERVER=dedicated)
         (SERVICE_NAME=pdb1)
       )
     )
    
  2. 创建复制帐户。

    $ sqlplus / as sysdba
    
    SQL> ALTER SYSTEM set enable_goldengate_replication=true;
    SQL> ALTER SESSION SET CONTAINER = pdb1;
    SQL> CREATE USER REPUSER IDENTIFIED BY REP_PASS CONTAINER=CURRENT;
    SQL> GRANT DBA TO REPUSER;
    SQL> EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('REPUSER',CONTAINER=>'PDB1');
    SQL> CONNECT REPUSER/REP_PASS@PDB1
    SQL> EXIT;
    
  3. 创建 Golden Gate 测试用户帐户。

    $ cd /u01/app/oracle/product/19.0.0/oggcore_1
    $ sqlplus system/OraPasswd1@pdb1
    
    SQL> CREATE USER test identified by test DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
    SQL> GRANT connect, resource, dba TO test;
    SQL> ALTER USER test QUOTA 100M on USERS;
    SQL> CONNECT test/test@pdb1
    SQL> @demo_ora_create
    SQL> EXIT;
    
  4. 用于复制更改的 REPLICAT 参数文件。

    $ cd /u01/app/oracle/product/19.0.0/oggcore_1
    $ ./ggsci
    
    GGSCI> EDIT PARAMS REPORA
    

    当 vi 编辑器打开时,必须按 i 切换到插入模式,复制并粘贴文件内容,然后按 Esc:wq! 以保存文件。

    REPLICAT REPORA
    ASSUMETARGETDEFS
    DISCARDFILE ./dirrpt/repora.dsc, PURGE, MEGABYTES 100
    DDL INCLUDE MAPPED
    DDLOPTIONS REPORT
    DBOPTIONS INTEGRATEDPARAMS(parallelism 6)
    USERID repuser@pdb1, PASSWORD REP_PASS
    MAP pdb1.test.*, TARGET pdb1.test.*;
    
  5. 设置复制检查点。

    GGSCI> ADD REPLICAT REPORA, INTEGRATED, EXTTRAIL ./dirdat/rt
    GGSCI> EDIT PARAMS INITREP
    

    当 vi 编辑器打开时,必须按 i 切换到插入模式,复制并粘贴文件内容,然后按 Esc:wq! 以保存文件。

    REPLICAT INITREP
    ASSUMETARGETDEFS
    DISCARDFILE ./dirrpt/tcustmer.dsc, APPEND
    USERID repuser@pdb1, PASSWORD REP_PASS
    MAP pdb1.test.*, TARGET pdb1.test.*;
    
    GGSCI> ADD REPLICAT INITREP, SPECIALRUN
    GGSCI> EXIT
    

设置复制(ggVM1 和 ggVM2)

1. 在 ggVM2(复制)上设置复制

登录到 ggsci

$ cd /u01/app/oracle/product/12.1.0/oggcore_1
$ ./ggsci
GGSCI> EDIT PARAMS MGR

使用以下内容更新文件。

PORT 7809
ACCESSRULE, PROG *, IPADDR *, ALLOW

重启管理器服务。

GGSCI> STOP MGR
GGSCI> START MGR
GGSCI> EXIT

2. 在 ggVM1(主)上设置复制

启动初始加载,并检查错误。

$ cd /u01/app/oracle/product/19.0.0/oggcore_1
$ ./ggsci
GGSCI> START EXTRACT INITEXT
GGSCI> VIEW REPORT INITEXT

3. 在 ggVM2(复制)上设置复制

使用之前获取的编号更改 SCN 编号。

$ cd /u01/app/oracle/product/19.0.0/oggcore_1
$ ./ggsci
START REPLICAT REPORA, AFTERCSN 2172191

复制已开始,可以通过向 TEST 表插入新记录来测试它。

查看作业状态和故障排除

查看报表

  • 若要在 ggVM1 上查看报告,请运行以下命令。

    GGSCI> VIEW REPORT EXTORA
    
  • 若要在 ggVM2 上查看报告,请运行以下命令。

    GGSCI> VIEW REPORT REPORA
    

查看状态和历史记录

  • 若要在 ggVM1 上查看状态和历史记录,请运行以下命令。

    GGSCI> DBLOGIN USERID C##GGADMIN@CDB1, PASSWORD ggadmin
    GGSCI> INFO EXTRACT EXTORA, DETAIL
    
  • 若要在 ggVM2 上查看状态和历史记录,请运行以下命令。

    GGSCI> DBLOGIN USERID REPUSER@PDB1 PASSWORD REP_PASS
    GGSCI> INFO REP REPORA, DETAIL
    
    $ sqlplus test/test@pdb1
    
    SQL> select * from TCUSTMER;
    SQL> select * from TCUSTORD;
    

观察数据复制

  1. 连接到 ggVM1 上的主数据库

    $ sqlplus test/test@pdb1
    
  2. 从表中选择现有记录

    SQL> select * from TCUSTORD;
    
  3. 创建一条测试记录

    SQL> INSERT INTO TCUSTORD VALUES ('OLLJ',TO_DATE('11-APR-99'),'CYCLE',400,16000,1,102);
    SQL> COMMIT;
    SQL> EXIT;
    
  4. 观察 Golden Gate 获取的事务(记下插入总数值)

$ cd /u01/app/oracle/product/19.0.0/oggcore_1
$ ./ggsci
GGSCI> STATS EXTORA
  Sending STATS request to Extract group EXTORA ...

  Start of statistics at 2023-03-24 19:41:54.

  DDL replication statistics (for all trails):

  *** Total statistics since extract started     ***
  Operations                           0.00
  Mapped operations                    0.00
  Unmapped operations                    0.00
  Other operations                    0.00
  Excluded operations                    0.00

  Output to ./dirdat/rt:

  Extracting from PDB1.TEST.TCUSTORD to PDB1.TEST.TCUSTORD:

  *** Total statistics since 2023-03-24 19:41:34 ***
     Total inserts                              1.00
     Total updates                              0.00
     Total deletes                              0.00
     Total upserts                              0.00
     Total discards                             0.00
     Total operations                           1.00

  *** Daily statistics since 2023-03-24 19:41:34 ***
     Total inserts                              1.00
     Total updates                              0.00
     Total deletes                              0.00
     Total upserts                              0.00
     Total discards                             0.00
     Total operations                           1.00

  *** Hourly statistics since 2023-03-24 19:41:34 ***
     Total inserts                              1.00
     Total updates                              0.00
     Total deletes                              0.00
     Total upserts                              0.00
     Total discards                             0.00
     Total operations                           1.00

  *** Latest statistics since 2023-03-24 19:41:34 ***
     Total inserts                              1.00
     Total updates                              0.00
     Total deletes                              0.00
     Total upserts                              0.00
     Total discards                             0.00
     Total operations                           1.00

  End of statistics.
  1. 连接到 ggVM2 上的主数据库

    $ sqlplus test/test@pdb1
    
  2. 验证是否已复制新记录

    SQL> select * from TCUSTORD;
    
     CUST ORDER_DAT PRODUCT_   ORDER_ID PRODUCT_PRICE PRODUCT_AMOUNT TRANSACTION_ID
     ---- --------- -------- ---------- ------------- -------------- --------------
     OLLJ 11-APR-99 CYCLE       400   16000      1    102
     WILL 30-SEP-94 CAR       144   17520      3    100
     JANE 11-NOV-95 PLANE       256  133300      1    100
    

现已在 Oracle Linux 上完成 Golden Gate 的安装和配置。

删除 ggXServer VM

ggXServer VM 仅在安装期间使用。 完成此实验室文档后,可以安全地将其删除,但 Azure 实验室上的 GoldenGate 设置将保持不变。

$ az vm delete --resource-group GoldenGateOnAzureLab --name ggXServer --force-deletion yes

$ az network public-ip delete --resource-group GoldenGateOnAzureLab --name ggXServerPublicIP

在 Azure 实验室设置中删除 Golden Gate

如果不再需要资源组、VM 和此实验室的所有相关资源,则可以使用以下命令将其删除。

$ az group delete --name GoldenGateOnAzureLab

后续步骤

创建高可用性虚拟机教程

浏览 VM 部署 CLI 示例