暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

使用Ogg23ai for MSSQL来同步alwayson的数据

原创 曹海峰 2025-03-22
160

前言

前两天看一篇文章说OGG不支持MS SQL always on,今天我就写一个OGG采用always on的,而且也是从oracle到SQL Server双向同步。

环境规划

本文采用5台虚拟机,其中一台安装Oracle 19.26和 OGG for Oracle 23.7.1.25.0.2,三个机器安装MS SQL 2022,一台机器安装OGG for MS SQL 23.7.1.25.0.2。

主机名

IP

操作系统

数据库版本

OGG版本

ogg-mssql00

172.16.1.1

Oracle Linux 8.10

oracle 19.26

OGG for Oracle 23.7.1.25.0.2

ogg-mssql01

172.16.1.2

Windows 2025

MSSQL 2022

 

ogg-mssql02

172.16.1.3

Windows 2025

MSSQL 2022

 

ogg-mssql03

172.16.1.4

Windows 2025

MSSQL 2022

 

ogg-mssql04

172.16.1.5

Oracle Linux 8.10

 

OGG for MSSQL 23.7.1.25.0.2

Oracle 19.26采用多租户特性,建了两个PDB,pdb1和pdb2;MS SQL建了两个数据库test1、test2。从Oracle到MySQL复制的时候,pdb1作为源头,test2作为目标。从MySQL往Oracle复制的时候,test1作为与源头,pdb2作为目标。ogg数据源用于存放ogg数据。

配置Oracle数据库

ogg-mysql00上安装数据库oracle 19.26,安装过程这里就省略了。

修改数据库为归档模式

SHUTDOWN immediate
STARTUP mount
ALTER SYSTEM SET log_archive_dest_1 = 'location=/arch';
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
复制

如果数据库已经是归档模式,这一步可以省略。

设置force logging

ALTER DATABASE FORCE LOGGING;
复制

CDB添加附加日志

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
复制

PDB添加附加日志

登录到pdb1,添加附加日志

ALTER SESSION SET CONTAINER=PDB1;
ALTER PLUGGABLE DATABASE ADD SUPPLEMENTAL LOG DATA;
复制

数据库开启OGG支持

ALTER SYSTEM SET enable_goldengate_replication = TRUE;
复制

创建OGG用户

先创建OGG表空间

CREATE TABLESPACE OGG
DATAFILE
  SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
复制

需要在每个PDB都创建表空间

在PDB创建OGG用户

CREATE USER ogg IDENTIFIED BY ogg
DEFAULT TABLESPACE ogg;
复制

给OGG用户授权

EXEC dbms_goldengate_auth.grant_admin_privilege('OGG');
EXEC dbms_goldengate_auth.grant_admin_privilege('OGG','*', grant_optional_privileges=>'*');
GRANT DBA TO ogg;
复制

如果归档存放在ASM中,还需要以下授权:

GRANT SELECT ON SYSTEM.logmnr_session$ TO ogg;
复制

创建测试用户

在PDB1和PDB2中分别创建test用户

创建test表空间

CREATE TABLESPACE TEST
DATAFILE
  SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
复制

创建用户

CREATE USER test IDENTIFIED BY test1234 DEFAULT TABLESPACE test;
复制

给test用户授权

GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO test;
GRANT UNLIMITED TABLESPACE TO test;
复制


创建测试表

在PDB1和PDB2的test用户下面创建测试表

CREATE TABLE "TEST"."T1"
   (  "ID" NUMBER NOT NULL ENABLE,
   "NAME" VARCHAR2(255),
   "ADDRESS" VARCHAR2(255),
   "AGE" NUMBER,
   "BIRTHDAY" DATE,
    PRIMARY KEY ("ID")
  TABLESPACE "TEST";
复制

配置TNS

给每个PDB创建TNS

PDB1=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST= ogg-mysql00)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=pdb1)
    )
  )

PDB2=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST= ogg-mysql00)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=pdb2)
    )
  )
复制


创建OGG安装目录

创建OGG的安装目录,将可执行文件和部署目录分开

mkdir -p /ogg/oggma
mkdir -p /ogg/ogginst
chown -R oracle: /ogg
复制


配置Always on

在三台windows服务器上添加多路径和故障转移集群。故障转移集群有个仲裁机制,可以采用共享文件夹和共享磁盘,我这里是单独建了一个共享磁盘,故障转移集群自动识别。这个步骤不在这里写了。always on 可以加域也可以不加域,这里我用了域服务器。配置步骤也不在这里写了。

安装故障转移集群

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 表格

AI 生成的内容可能不正确。

图形用户界面

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

安装MSSQL

在每个windows服务器安装MS SQL 2022

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

配置always on

配置数据库支持always on功能

开始菜单->Micosoft SQL Server 2022->SQL Server 2022 配置管理器

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

然后重启MS SQL服务。

以上步骤在所有MS SQL 服务器上都要执行

创建数据库

图形用户界面, 应用程序

AI 生成的内容可能不正确。

形状, 矩形

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

点击确定,用同样的方法创建test2

创建登录名

背景图案

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

背景图案

AI 生成的内容可能不正确。

创建架构

在test1和test2数据库创建ogg架构,并将它和ogg登录名管理起来。

背景图案

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

修改ogg登录名的在各个数据库的默认架构

备份数据库

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

采用同样的方法备份test2

创建高可用组

背景图案

AI 生成的内容可能不正确。

图形用户界面

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序, Word

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本

AI 生成的内容可能不正确。

辅助库创建用户

其他节点虽然有数据库,但是没有登录账号,需要手动创建一下。

在主库查询sid

select [sid] from sys.syslogins where name='ogg';

0xE977071547381B4F9715D3D7080EAD22
复制

在其他辅助库创建用户

CREATE LOGIN ogg WITH password = '*****',
SID = 0xE977071547381B4F9715D3D7080EAD22,
default_database = test1,
check_expiration = OFF,
check_policy = OFF;
复制

然后还要验证以下权限

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

数据库启用cdc

为了启用SQL Server数据库抽取,需要启用cdc功能,这里对test1数据库启用抽取。

选择test1数据库,执行下面语句启用cdc

EXECUTE sys.sp_cdc_enable_db
复制

图形用户界面, 应用程序

AI 生成的内容可能不正确。

对表启用cdc

exec sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'T1',
@role_name = NULL,
@filegroup_name =null,
@capture_instance = N'loc';
复制

图形用户界面, 应用程序

AI 生成的内容可能不正确。

删除清理cdc日志job

需要删除清理cdc日志的任务,使用ogg创建的任务来清理

图形用户界面, 应用程序

AI 生成的内容可能不正确。

到此always on的配置结束。

安装OGG

OGG for Oracle和OGG for MSSQL安装过程是一样的,这里以MSSQL为例。

配置环境变量

修改oracle用户环境变量

cat>>~/.bash_profile<<EOF
export OGG_HOME=/ogg/oggma
export OGG_ETC_HOME=/ogg/ogginst/sm/etc
export OGG_VAR_HOME=/ogg/ogginst/sm/var
EOF
复制

解压缩安装文件

unzip ggs_Linux_x64_MSSQL_services_shiphome.zip
复制

安装OGG

cd ggs_Linux_x64_MSSQL_services_shiphome/Disk1/

./runInstaller
复制


图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

OGG 23ai for MSSQl安装odbc

ogg 21c还需要配置DSN,23不用配置,用ip地址就可以。但是需要配置odbc驱动。用微软驱动或者系统自带皆可。这里用的是微软驱动

# Download the package to configure the Microsoft repo

curl -sSL -O https://packages.microsoft.com/config/rhel/$(grep VERSION_ID /etc/os-release | cut -d '"' -f 2 | cut -d '.' -f 1)/packages-microsoft-prod.rpm

# Install the package

sudo yum install packages-microsoft-prod.rpm

# Delete the file

rm packages-microsoft-prod.rpm

sudo yum remove unixODBC-utf16 unixODBC-utf16-devel

sudo ACCEPT_EULA=Y yum install -y msodbcsql18
复制

驱动文件的路径:

[root@ogg-mssql04 ~]# cd /opt/microsoft/msodbcsql18/lib64/
[root@ogg-mssql04 lib64]# ls
libmsodbcsql-18.5.so.1.1
复制

修改OGG odbc驱动

[oracle@ogg-mssql04 msodbc]$ pwd
/ogg/oggma/msodbc
[oracle@ogg-mssql04 msodbc]$ vi odbcinst.ini
[Microsoft ODBC Driver for SQL Server]
Description=Microsoft ODBC Driver for SQL Server
Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.5.so.1.1
复制


部署OGG

使用oggca来部署OGG。其中ogg 23ai for MSSQl需要在安装完ODBC驱动后再执行。

/ogg/oggma/bin/oggca.sh
复制

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

配置OGG

配置数据库连接

创建连接

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

添加trandata

选择需要抽取数据库前面的箭头,点击登录

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

添加checkpointtable

点击目标端的连接

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 应用程序, 电子邮件

AI 生成的内容可能不正确。

配置MSSQL到oracle的同步

添加抽取

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

添加分发路径

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序, Word

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

添加复制

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

配置Oracle到MySQL同步

添加抽取

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

EXTRACT E_ORCL
useridalias oggpdb1 domain OracleGoldenGate
SETENV (NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8")
EXTTRAIL ORCL/lt
TRANLOGOPTIONS INTEGRATEDPARAMS(parallelism 2)
DBOPTIONS ALLOWUNUSEDCOLUMN
TABLEEXCLUDE test.SYS_EXPORT_SCHEMA*;
--GETUPDATEBEFORES
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
FETCHOPTIONS NOUSESNAPSHOT
FETCHOPTIONS FETCHPKUPDATECOLS
BR BROFF
TABLE test.*;
复制

插入1万条测试数据

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

添加分发路径

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序, Word

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序, Word

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

添加复制

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 应用程序

AI 生成的内容可能不正确。

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论