前言
前两天看一篇文章说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 可以加域也可以不加域,这里我用了域服务器。配置步骤也不在这里写了。
安装故障转移集群
安装MSSQL
在每个windows服务器安装MS SQL 2022
配置always on
配置数据库支持always on功能
开始菜单->Micosoft SQL Server 2022->SQL Server 2022 配置管理器
然后重启MS SQL服务。
以上步骤在所有MS SQL 服务器上都要执行
创建数据库
点击确定,用同样的方法创建test2
创建登录名
创建架构
在test1和test2数据库创建ogg架构,并将它和ogg登录名管理起来。
修改ogg登录名的在各个数据库的默认架构
备份数据库
采用同样的方法备份test2
创建高可用组
辅助库创建用户
其他节点虽然有数据库,但是没有登录账号,需要手动创建一下。
在主库查询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;
复制
然后还要验证以下权限
数据库启用cdc
为了启用SQL Server数据库抽取,需要启用cdc功能,这里对test1数据库启用抽取。
选择test1数据库,执行下面语句启用cdc
EXECUTE sys.sp_cdc_enable_db
复制
对表启用cdc
exec sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'T1',
@role_name = NULL,
@filegroup_name =null,
@capture_instance = N'loc';
复制
删除清理cdc日志job
需要删除清理cdc日志的任务,使用ogg创建的任务来清理
到此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
复制
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
复制
配置OGG
配置数据库连接
创建连接
添加trandata
选择需要抽取数据库前面的箭头,点击登录
添加checkpointtable
点击目标端的连接
配置MSSQL到oracle的同步
添加抽取
添加分发路径
添加复制
配置Oracle到MySQL同步
添加抽取
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万条测试数据