你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Linux 虚拟机 (VM) 上实现 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
在 Windows、Linux 或 Azure Shell 上打开你偏好的 shell。
使用 az login 命令登录 Azure 订阅。 然后,遵照屏幕指令进行操作。
$ az login
通过验证订阅名称和/或 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)
创建网络安全组 (NSG) 以锁定你的虚拟网络。
$ az network nsg create \ --resource-group GoldenGateOnAzureLab \ --name ggVnetNSG
创建 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
创建 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
将 NSG 分配到托管服务器的子网。
$ az network vnet subnet update --resource-group GoldenGateOnAzureLab --vnet-name ggVNet --name ggSubnet1 --network-security-group ggVnetNSG
创建 Bastion 网络
创建 Bastion 子网。 子网名称必须为 AzureBastionSubnet。
$ az network vnet subnet create \ --resource-group GoldenGateOnAzureLab \ --name AzureBastionSubnet \ --vnet-name ggVnet \ --address-prefixes 10.0.1.0/24
为 Bastion 创建公共 IP。
$ az network public-ip create \ --resource-group GoldenGateOnAzureLab \ --name ggBastionIP \ --sku Standard
创建 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。
- 从 Azure 门户导航到 ggXServer
- 在左侧导航中找到“概览”
- 选择顶部菜单上的“连接”>“Bastion”
- 选择“Bastion”选项卡
- 单击“使用 Bastion”
准备 ggXServer 以运行 X Server
本实验室的后续步骤需要 X Server。 执行以下步骤以安装并启动 X Server。
将 Xming X Server for Windows 下载到 ggXServer,并使用所有默认选项进行安装。
确保未在安装结束时选择“启动”
从“开始”菜单启动“XLAUNCH”应用程序。
选择“多个窗口”
选择“不启动客户端”
选择“无访问控制”
选择“允许访问”以允许 X Server 通过 Windows 防火墙
如果重启 ggXServer VM,请按照上述步骤 2-6 重启 X Server 应用程序。
创建 Oracle Database 虚拟机
在本实验室中,我们将从 Oracle Database 19c 映像创建虚拟机 ggVM1
和 ggVM2
。 如果默认密钥位置中不存在 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。
- 从 Azure 门户导航到 ggVM1。
- 转到左侧窗格中的“概述”。
- 选择顶部菜单上的“连接”>“Bastion”
- 选择“Bastion”选项卡
- 选择“使用 Bastion”
在 ggVM1(主)上创建数据库
Oracle 软件已在市场映像上安装,因此下一步是创建数据库。
- 以
oracle
用户身份运行该软件。
$ sudo su - oracle
- 使用以下命令创建数据库。 此命令可能需要 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.
- 设置 ORACLE_SID 和 LD_LIBRARY_PATH 变量。
$ export ORACLE_SID=cdb1
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib
- 运行以下命令,以将 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
- 启动 Oracle 侦听器
$ lsnrctl start
连接到 ggVM2(复制)
使用 Bastion 连接到 ggVM2。
- 从 Azure 门户导航到 ggVM2。
- 转到左侧窗格中的“概述”。
- 选择顶部菜单上的“连接”>“Bastion”
- 选择“Bastion”选项卡
- 选择“使用 Bastion”
打开 ggVM1 的防火墙端口
将防火墙配置为允许来自 ggVM1 的连接。 以下命令在 ggVM2 上运行。
$ sudo su -
$ firewall-cmd --permanent --zone=trusted --add-source=10.0.0.5
$ firewall-cmd --reload
$ exit
在 ggVM2(复制)上创建数据库
- 如有必要,请切换到
oracle
用户
$ sudo su - oracle
- 创建数据库
$ 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
- 设置 ORACLE_SID and ORACLE_HOME 变量。
$ export ORACLE_SID=cdb1
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib
- 运行以下命令,以将 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
- 启动 Oracle 侦听器
$ lsnrctl start
在 ggVM1 上配置 Golden Gate
按照本部分中的步骤安装和配置 Golden Gate。
在 ggVM1(主)上启用存档日志模式
- 连接到
sqlplus
$ sqlplus / as sysdba
- 启用存档日志
SQL> SELECT log_mode FROM v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
- 启用强制日志记录,并确保至少存在一个日志文件。
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 软件
从 Oracle Golden Gate 下载页下载 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip 文件,它在下载标题 Oracle GoldenGate 21.3.0.0.0 for Oracle on Linux x86-64 下。
将 .zip 文件下载到客户端计算机后,可以使用安全复制协议 (SCP) 将文件复制到虚拟机(ggVM1 和 ggVM2)。 确保
scp
命令指向 .zip 文件的正确路径。复制到 ggVM1
登录并确保根据需要使用正确的订阅,如登录到 Azure 中所述
使用以下 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
若要通过隧道连接到目标 VM,让第一个命令提示符保持运行状态,并打开第二个命令提示符。 在此第二个命令提示符窗口中,你可以使用以下命令将文件从本地计算机上传到目标 VM。 用于访问虚拟机的正确
id_rsa
密钥文件必须位于.ssh
目录中,或者可以使用scp
命令的-i
参数指向其他密钥文件。scp -P 57500 "213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip" azureuser@127.0.0.1:.
复制到 ggVM2
使用以下 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
让第一个命令提示符保持运行状态,并打开第二个命令提示符,以通过隧道连接到目标 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 软件
使用 Bastion 连接到 ggVM1。
- 从 Azure 门户导航到 ggVM1。
- 转到左侧面板中的“概述”
- 选择顶部菜单上的“连接”>“Bastion”
- 选择“Bastion”选项卡
- 选择“使用 Bastion”
将 .zip 文件移动到 /opt 文件夹,然后更改所有者
$ sudo su - $ mv /home/azureuser/*.zip /opt
解压缩文件(如果尚未安装解压缩实用工具,请安装)
$ yum install unzip $ cd /opt $ unzip 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip
更改权限
$ chown -R oracle:oinstall /opt/fbo_ggs_Linux_x64_Oracle_shiphome $ exit
启动 Golden Gate 安装程序
$ sudo su - oracle $ export DISPLAY=10.0.0.4:0.0 $ cd /opt/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1 $ ./runInstaller
该安装程序将在 ggXServer 上打开。
选择“Oracle GoldenGate for Oracle Database 21c”。 然后选择“下一步”继续。
将软件位置设置为 /u01/app/oracle/product/19.0.0/oggcore_1,确保选中“启动管理器”框,然后选择“下一步”继续。
在“摘要”屏幕上,选择“安装”以继续。
等待安装完成。
选择“关闭”以继续。
使用 Bastion 连接到 ggVM2。
- 从 Azure 门户导航到 ggVM2。
- 转到左侧窗格中的“概述”
- 选择顶部菜单上的“连接”>“Bastion”
- 选择“Bastion”选项卡
- 选择“使用 Bastion”
在 ggVM2 上重复上述步骤 2-10
在 ggVM1(主)上设置服务
创建或更新 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) ) )
创建 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;
创建 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;
配置提取参数文件。
启动 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
按
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;
注册提取 - 集成提取。
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
设置提取检查点并启动实时提取
$ ./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(复制)上设置服务
创建或更新 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) ) )
创建复制帐户。
$ 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;
创建 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;
用于复制更改的 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.*;
设置复制检查点。
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;
观察数据复制
连接到 ggVM1 上的主数据库
$ sqlplus test/test@pdb1
从表中选择现有记录
SQL> select * from TCUSTORD;
创建一条测试记录
SQL> INSERT INTO TCUSTORD VALUES ('OLLJ',TO_DATE('11-APR-99'),'CYCLE',400,16000,1,102); SQL> COMMIT; SQL> EXIT;
观察 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.
连接到 ggVM2 上的主数据库
$ sqlplus test/test@pdb1
验证是否已复制新记录
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