增量发布要求
1、检查sqlserver版本,数据库版本要求2005以上,是否是企业版,是否支持开启cdc功能
查看数据库版本:
SELECT @@VERSION
2、检查恢复模式,需要开启完整模式,简单模式会频繁自动清理日志导致数据丢失,修改完整模式后做一次全量备份
查看恢复模式:
SELECT name, recovery_model_desc FROM sys.databases WHERE name = '库名' ;
GO
3、 同步前必须排除业务上对大字段做WRITETEXT和UPDATETEXT的表,因为开启cdc会影响WRITETEXT和UPDATETEXT的使用,导致生产库业务异常
开启cdc,执行WRITETEXT和UPDATETEXT报错:
7138 因为正在用 Data Transformation Services (DTS)复制该列,或变更数据捕获正在跟踪该列,所以不允许使用 WRITETEXT 语句。
WRITETEXT功能说明:
WRITETEXT对现有列类型为text,ntext,image执行最小日志记录的更新操作,将覆盖列数据。
一般医院的EMR库(电子病历库)业务会用到。
注:
(1)在线模式和辅助库模式,writetext和updatetext功能已支持(zcbus-7.6-12-20211223.tar.gz)
(2)辅助库模式,zcbus_extended_logging存储过程已支持非大字段列级开启cdc,不会影响writetext和updatetext功能使用
(3)在线模式程序和zcbus_extended_logging存储过程打开cdc的时候,先检查是否有pk/uk,如果有pk uk的话,@captured_column_list就填pk uk的列,如果没有pk uk的话,@captured_column_list就填表中不是text next image类型的第一个列
关闭cdc参考下面流程:
http://docs.zbomc.com/docs/zcbus/zcbus-1de7c91elt44a
启动SQLSERVER 代理服务
net start SQLSERVERAGENT
选择日志分析模式
在线模式
创建数据库用户
USE [master]
go
CREATE LOGIN [zcbus] WITH PASSWORD=N'zcbus', DEFAULT_DATABASE=[数据库名]
use 数据库名;
go
create user [zcbus] for login [zcbus]
go
数据库用户赋权
use 数据库名;
go
exec master..sp_addsrvrolemember @loginame = N'zcbus', @rolename = N'sysadmin'
go
离线模式
使用zcbus初始工具配置ftp模式或辅助库模式(AUX DB模式),zcbus初始化工具下载:
zcbus初始化工具
注:两种模式按照需要选择其一
ftp模式配置ftp服务(只有ftp模式需要配置)
参考《centos7配置ftp服务.txt》,详见附件。
配置文件修改
ftp模式:
修改sql目录下的《sqlserver_ftp模式.ini》参数文件
[data]
DATA_BASE_LOGIN_USER=zcbus #登录用户名
DATA_BASE_USER=zcbus #数据库用户名(和登录用户名相同即可)
DATA_BASE_PWD=zcbus #数据库用户密码
FTP_TMP_PATH=c:\zcbus #文件临时目录
ZCBUS_FTP_IP=192.168.1.111 #zcbus配置的ftp服务端IP
ZCBUS_FTP_PORT=21 #zcbus配置的ftp端口
ZCBUS_USER=zcbus #zcbus系统用户名
ZCBUS_PWD=zcbus #zcbus系统用户密码
ZCBUS_FTP_CACHE_PATH=/zcbus/2.0.1/cache/node10001 #zcbus缓存目录(每个nodeid一个目录)
辅助库模式:
修改sql目录下的《sqlserver_辅助库模式.ini》参数文件
[data]
DATA_BASE_LOGIN_USER=zcbus #登录用户名
DATA_BASE_USER=zcbus #数据库用户名(和登录用户名相同即可)
DATA_BASE_PWD=zcbus #数据库用户密码
FILE_PATHE_NAME=c:\zcbus #文件临时目录
zcbus初始化
双击《ZCBUS初始化工具.exe》然后操作以下步骤:
1)输入数据库IP地址—>2)输入用户名(超级用户sa)—>3)输入用户密码—>4)选择模板—>5)点击连接数据库—>6)勾选数据库(可多选)—>7)点击初始化—>8)查看执行结果
权限查询
查询zcbus用户的object权限
exec sp_helprotect NULL, 'zcbus'
go
查询zcbus用户拥有的role
exec sp_helpuser 'zcbus'
go
查询哪些用户拥有指定的系统role
exec sp_helpsrvrolemember 'sysadmin'
go
ZCBUS准备
- 添加发布节点
- 资源管理-发布节点
添加发布节点,选择运行容器位置
配置发布数据库配置信息【SQLSERVER】即可
序号 | 变量名 | 默认值 | 是否隐藏函数 | 描述 |
---|---|---|---|---|
1 | db_type | sqlserver | 不隐藏 | 源数据库类型 |
2 | db_name | zcbus | 不隐藏 | 捕获数据库名 |
3 | host | 172.17.104.185 | 不隐藏 | 数据库IP地址 |
4 | port | 1433 | 不隐藏 | 数据库端口号 |
5 | user | zcbus | 不隐藏 | 捕获数据库用户名 |
6 | password | zcbus | 不隐藏 | 捕获数据库密码 |
7 | full_sync_threads | 4 | 隐藏 | 全量并发线程数 |
8 | proxy_mode | 0 | 隐藏 | 0 在线分析日志的模式 1 SQLSERVER代理模式2 存储过程分析日志【FTP模式】3 辅助数据库模式【AUX模式】 |
9 | proxy_path | 隐藏 | proxy_mode=1时,代理数据库读取日志的路径proxy_mode=2时,指定本地文件分析目录 | |
10 | proxy_host | 隐藏 | 代理模式时,日志共享机器的ip地址,如果不设置,默认为代理数据库所在机器的ip | |
11 | proxy_file_keep_time | 3600 | 隐藏 | proxy_mode=2时,共享存储上分析过的文件的保留时间,单位为秒,默认保存3600秒,0为不保存 |
12 | source_db_type | sqlserver | 隐藏 | 源 类型 |
13 | source_db_name | ds | 隐藏 | 代理模式时,全量发布库名 |
14 | source_host | 172.17.58.145 | 隐藏 | 代理模式时,全量发布库ip |
15 | source_port | 1433 | 隐藏 | 代理模式时,全量发布库端口 |
16 | source_user | zcbus | 隐藏 | 代理模式时,全量发布库密码 |
17 | source_password | zcbus | 隐藏 | 代理模式时,全量发布库用户名 |
30 | event_trigger_table | zcbus.ddl_event_tbl | 隐藏 | 事件触发器对应的表 |
33 | max_packet_len | 5242880 | 隐藏 | 发送到kafka的最大包长度(BYTE) |
33 | full_publish_interval | 0 | 隐藏 | 全量发送每个包的间隔(毫秒),0为不限制 |
35 | land_to_file | 0 | 隐藏 | 是否落地缓存,1:是 0:否 |
36 | land_file_reserve_cont | 0 | 隐藏 | 文件发送到kafka之后,保留暂时不删除的文件个数,默认为0,发送成功之后马上删除文件 |
38 | message_encrypt | 0 | 隐藏 | 发送到kafka的消息是否加密,默认为0不加密,1为加密 |