OGG配置sqlserver2005到oracle单向复制

一、概述

实现SQLServer库到Oracle库的数据实时同步功能;
源端数据库类型:sqlserver 2005
目标端数据库类型:oracle 11gR2

二、OGG实现原理图

OGG配置sqlserver2005到oracle单向复制_第1张图片

三、源端配置

1、环境准备

操作系统管理权限用户登录,安装vcredist_x64_2013,如果提示缺失msvcr之类的dll文件,就安装对应版本的vcredist程序。
准备数据库环境,确认如下配置:

1.1、数据库版本SQL SERVER 2005 企业版SP4

-- 检查数据库版本
use testdb
go 
SELECT SERVERPROPERTY('productversion') as '产品版本'
, SERVERPROPERTY ('productlevel') as '产品级别' 
, SERVERPROPERTY ('edition') as '版本'
, @@version
Go

1.2、数据库日志模式:FULL模式

-- 检查数据库日志模式
USE master ;
go
SELECT name, recovery_model_desc
FROM sys.databases
WHERE name in( 'model' ,'testdb');
Go
--	数据库须为完整回复(FULL)模式
ALTER DATABASE testdb SET RECOVERY FULL ;
GO

1.3、全量备份;

通过sqlserver管理工具备份,如果his库已配置每天定时备份,此步骤可以忽略;

1.4、创建ogg数据库与ogg用户

-- 创建数据库
create database ogg
go

-- 创建登录
use master 
go 
create login ogg 
with password = 'test1234',
CHECK_POLICY=OFF,default_database=ogg; 
go 
exec sp_addsrvrolemember 'ogg','sysadmin'; 
go 

-- 创建用户
use ogg
go 
create user ogg 
for login ogg 
go 
exec sp_addrolemember 'db_owner',ogg; 
go

2、准备ogg安装文件

解压sqlserver版本ogg到目录:D:\ogg,假设此命令的变量名称为OGG_HOME
清理原有目录下的文件:
数据目录:$OGG_HOME/dirdat
表定义目录:$OGG_HOME/dirdef
采集报告目录:$OGG_HOME/dirrpt

3、注册windows服务

包括源端和目标端,将 Manager 进程添加为 Windows 服务(名称默认为: GGSMGR)
此命令需要在cmd命令下执行:

$OGG_HOME>install addservice
Service 'GGSMGR' created.
Install program terminated normally.

4、创建ogg子目录

因ogg目录已完成初始化,此步可不做。
进入ggsci命令模式:

$OGG_HOME>ggsci
create subdirs

5、创建ODBC连接

控制面板中的数据源管理,目标端oracle数据库不需要此操作;
系统DSN名称,以DSN开头,以数字结尾,即“DSN+[0,1,…,9]…[0,1,…,9]”形式;
SQL Server 2005 ODBC/OLE DB驱动选择: SQL Native Client driver;
SQL Server 2008 ODBC/OLE DB驱动选择: SQL Server Native Client 10.0 driver;
OGG配置sqlserver2005到oracle单向复制_第2张图片

6、添加表级事务日志

通过dblogin登陆到数据库,添加表级事务日志 add trandata;经验证,仅对需要同步的数据表添加事物日志即可,不需要全部添加;
dblogin sourcedb dsndsn001 userid ogg password test1234
查看表名列表:
LIST TABLES dbo.*
查看表级事务状态:
Info trandata dbo.*
添加表级事务:

ADD TRANDATA dbo.tab1

-- ogg 批量添加表级事务
SELECT 'add trandata dbo.'+NAME 
FROM SYSOBJECTS WHERE TYPE='U'
order by 1

将查询出的结果放在ggsci命令行中执行。

7、准备参数文件

编辑文件文件:defgen001.prm,defgen001.prm,mgr.prm,pmp001.prm
保存到目录:$OGG_HOME/dirprm

各配置文件含义如下:

7.1、参数文件命名规范

问题:dirdat下的文件命名方式,目前都命名为hs,需要保证全区唯一,从三间房开始从a1开始设置,配置如下所示:
文件:extdsn001.prm
exttrail ./dirdat/a1
文件:pmpdsn001.prm
rmttrail ./dirdat/a1

7.2、管理进程配置文件

mgr.prm
文件内容:

port 7839
dynamicportlist 7840-7939
autorestart extract *,waitminutes 3,retries 8
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

7.3、源端表结构定义配置文件

defgen001.prm
文件内容如下:

defsfile ./dirdef/t001.def
sourcedb dsn001 userid ogg password test1234
table dbo.tab_1;
table dbo.tab_2;

7.4、抽取进程配置文件

extract001.prm:
文件内容:

extract ext001
sourcedb dsn001,userid ogg password test1234

reportcount every 30 minutes,rate
DISCARDFILE ./dirrpt/ext001.dsc,APPEND,MEGABYTES 1024
tranlogoptions managesecondarytruncationpoint
dynamicresolution

exttrail  ./dirdat/a1

table dbo.tab_1;
table dbo.tab_2;

7.5、投递进程配置文件

pmp001.prm:
文件内容:

extract pmpdsn001
sourcedb dsndsn001,userid ogg password test1234
--passthru

rmthost 192.18.1.44,mgrport 7839
numfiles 5000
dynamicresolution
rmttrail ./dirdat/a1

--table dbo.*;
table dbo.tab_1;
table dbo.tab_2;

8、生成源端表结构定义文件

在cmd下执行如下命令:

$OGG_HOME>defgen paramfile ./dirprm/defgen001.prm

并拷贝到目标端dirdef,如果新增字段,此步骤要重新操作,同时要所有的相关进程重启。

9、定义进程

定义管理进程、抽取进程、投递进程和复制进程,进程名要和参数名保持一致。

9.1、抽取进程

定义从某个时间点开始抽取数据,如果业务数据已经采集过,建议从当前时间点采集

--add extract extdsn001, tranlog,begin 2018-06-06 10:00:00
从当前时间点开始抽取数据
add extract extdsn001, tranlog, begin now
add exttrail ./dirdat/a1, extract extdsn001, megabytes 100

9.2、投递进程

add extract pmpdsn001,exttrailsource ./dirdat/a1
add rmttrail ./dirdat/a1, EXTRACT pmpdsn001

10、启动进程

启动管理进程:
Start mgr
启动抽取进程:
Start extdsn001
启动投递进程:
Start pmpdsn001

四、目标端配置

1、创建ogg用户

目标端需要创建OGG用户,并赋予管理员权限。

Sqlplus / as sysdba
create user ogg identified by test1234;
grant dba to ogg;

2、全局配置

目标端需要添加检查点表,edit params ./GLOBALS

GGSCHEMA ogg   #配置ogg服务名称为ogg
CHECKPOINTTABLE ogg.checkpoint	  

3、防火墙配置

开放TCP端口:7839-7939

4、添加检查点

dblogin登录,然后执行

Ggsci>
dblogin userid ogg password test1234
add checkpointtable ogg.checkpoint 

5、配置参数文件

编辑文件文件:rep001.prm,mgr.prm
保存到目录:$OGG_HOME/dirprm

5.1、管理进程配置文件

文件名:mgr.rpm
文件内容:

port 7839
dynamicportlist 7840-7939
autorestart extract *,waitminutes 3,retries 8
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

5.2、复制进程配置文件

文件名称:rep001.prm
文件内容:

replicat repdsn001
SETENV(NLS_LANG=AMERICAN_AMERICA.zhs16gbk)
userid ogg,password test1234
--assumetargetdefs
sourcedefs ./dirdef/tdsn001.def
discardfile ./dirrpt/repdsn001.dsc,purge
ALLOWNOOPUPDATES
DYNAMICRESOLUTION
GETUPDATEBEFORES
NOCOMPRESSDELETES
HANDLECOLLISIONS

map dbo.tab_1,target sa.tab_1,colmap(usedefaults, ext_code="sjf", jg_name="三间房", cy_jgdm="12345678"),keycols(cfsb,kettle_code);
map dbo.tab_2,target sa.tab_2,colmap(usedefaults, ext_code="sjf", jg_name="三间房", cy_jgdm="12345678"),keycols(sbxh,kettle_code);

6、定义进程

复制进程

add replicat repdsn001, exttrail ./dirdat/a1, checkpointtable ogg.checkpoint

7、启动进程

启动管理进程:
Start mgr
启动复制进程:
Start repdsn001

五、附录

1、ogg命令参考

Stats 进程名:查看进程抽取数据情况,用于检测数据丢失问题。
info :用于检测进程读取文件情况信息。
info all:查看所有增量抽取进程以及增量推送进程
info all,task:用于查看全量抽取进程
stop :停止进程
stop !:强行停止进程
kill:杀掉无法停止的进程
start :启动进程 ( extract 、 replicat )
start/stop mgr:开启/停止 mgr进程
delete 进程名 --删除进程,如果做了检查点操作的话,则需要通过dblogin登录进来,然后才能执行成功
view params :查看进程所需的配置信息
edit params :编辑进程所需的配置信息
info exittrail :查看进程创建时的信息
view report :查看进程运行时log信息
info credentialstore: 查看配置用户信息,用于用户名、存储密码,为了安全。注意:CredentialSore是 ogg 12c 新特性
add credentialstore:添加配置用户信息文件。
delete credentialstore:删除用户配置文件。
alter credentialstore add user xx
password xx
alias xx
:分别为 用户名 、密码 、别名
alter credentialstore delete user xx
: 删除一个用户信息
dblogin userid xx
,password xx
:数据库登陆,明文
dblogin useridalias xx
:数据库登陆,使用用户的别名alias登陆
alter * ,extseqno 0, extrba 0:extseqno 设置读取文件的位置,extrba 设置读取文件内容位置
add extract e
, tranlog, begin now:创建增量进程—>配置相应的配置文件
add exttrail ./dirdat/xx*,extract e_gessdb,megabytes 100:配置进程
add extract p*,exttrailsource ./dirdat/xx*:创建推送进程—>配置相应的配置文件
add extract i*, sourceistable:创建全量进程—>配置相应的配置文件

2、数据缺失处理

缺失的数据补全,建议通过ETL抽取实现

3、目标库中文乱码处理

如果目标端复制进程参数文件:repdsn001.prm中包含中文,需要确认文件编码格式为utf-8;
并且包含如下配置项:
SETENV(NLS_LANG=AMERICAN_AMERICA.zhs16gbk)
然后重新启动目标端复制进程,步骤如下:
停止复制进程:
stop repdsn001
重新设置数据采集时间点:
alter replicat repdsn001,extseqno 0 extrba 0
启动复制进程:
start repdsn001

4、SQLServer版本

如果sqlserver版本非企业版sp4,安装ogg时可能报错,如下:
ODBC error: SQLSTATE 37000 native database error 20028. [Microsoft][SQL Native Client][SQL Server]分发服务器未正确安装,所以无法使数据库可以发布。

5、演示数据库删除

删除演示用数据库时,提示:无法对数据库’testdb’执行删除,因为它正用于复制
解决办法:执行脚本:
sp_removedbreplication testdb

6、数据同步

Ogg同步功能,支持对插入,更新,删除命令的同步功能,但是不支持命令:truncate 。例如:当对业务表:tab_test 启用ogg复制,如果执行命令:truncate table tab_test 删除表中全部数据时,则提示:
无法截断表 'tab_test,因为该表已为复制而发布。 Severity 16
表示不允许使用该命令删除数据。某些etl脚本,可能需要截断表再写入数据,截断时使用的命令是truncate,所以可能导致脚本执行失败的情况。

7、Ogg监控软件

Management Pack for Oracle GoldenGate
https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html

你可能感兴趣的:(oracle,ogg,sqlserver,oracle)