为 Oracle GoldenGate 准备数据库
了解如何启用源数据库表中要用于 SQL Server 提取捕获的补充日志记录,以及如何清除较早的 CDC 中转数据。
您可以使用以下方法了解有关 CDC Capture 的更多信息:
使用 Oracle GoldenGate for SQL Server CDC Capture Replication http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/goldengate/12c/sql_cdcrep/sql_cdcrep.html 。
启用 CDC 补充日志记录
使用 CDC 提取时,捕获更改数据的方法是通过 SQL Server 更改数据捕获表,因此必须遵循以下过程和要求,以便提取正确启用、维护和捕获更改数据。
您将使用 ADD TRANDATA 命令启用补充日志记录,以便 Extract 可以捕获重建事务处理所需的信息。
必须为要由 Oracle GoldenGate 捕获的所有表发出 ADD TRANDATA,为此,需要使用有效的方案来创建必要的 Oracle GoldenGate 表和存储过程。
为 CDC 提取启用补充日志记录会执行以下操作:
-
在数据库级别启用 SQL Server 更改数据捕获(如果尚未启用)。
-
通过运行
EXECUTE sys.sp_cdc_enable_table为启用了补充日志记录的每个基表创建更改数据捕获暂存表,并为每个 CDC 表创建触发器。CDC 表作为数据库中的系统表的一部分存在,并且具有类似cdc.OracleGG_basetableobjectid_CT的命名惯例。 -
创建命名约定
ggschema.OracleGGTranTables的跟踪表。此表用于存储 CDC 表的交易指示,并在触发 CDC 表的触发器时填充此表。该表将归GLOBALS文件的GGSCHEMA参数中列出的方案所有。 -
为每个 CDC 表创建唯一的提取存储过程,以及提取功能所需的其他几个存储过程。这些存储过程将归
GLOBALS文件的GGSCHEMA参数中列出的方案所有。 -
此外,在为表启用 CDC 的过程中,SQL Server 会为每个数据库创建两个作业:
cdc.dbname_capturecdc.dbname_cleanup -
CDC Capture 作业是读取 SQL Server 事务处理日志并将数据填充到 CDC 表中的作业,提取将从这些 CDC 表中捕获事务处理。因此,CDC 捕获作业始终处于运行状态是极其重要的。这也要求将 SQL Server Agent 设置为始终运行并在 SQL Server 启动时启用自动运行。
注:如果还为数据库启用了 SQL Server Transactional Replication,则 CDC Capture 作业将不存在,而将只存在 SQL Server 日志读取器代理作业。
-
CDC Capture Method Operational Considerations 中提供了可调优 CDC Capture 作业以提高吞吐量和调优信息。
-
Microsoft 创建的 CDC 清除作业与 Oracle GoldenGate Extract 是否在 CDC 表中捕获了数据没有任何相关性。因此,在启用
TRANDATA后立即禁用或删除 CDC 清除作业以及启用 Oracle GoldenGate 自己的“清除更改数据”任务需要执行额外的步骤。有关详细信息,请参阅清除 CDC 准备数据。
要使用命令行界面启用补充日志记录,请使用以下高级步骤:
-
查看 "Prepare Database Users and Privileges"(准备数据库用户和权限)主题,以确定为更改数据捕获启用数据库所需的权限和步骤(如果尚未设置)。如果没有为 CDC 启用数据库,但如果管理员手动为更改数据捕获启用数据库,则可能需要对 GoldenGate 执行提升权限。
-
对于 Google Cloud SQL for SQL Server ,必须为服务管理员用户手动启用数据库以进行更改数据捕获并执行以下命令:
EXEC msdb.dbo.gcloudsql_cdc_enable_db 'source_database'; -
对于 SQL Server 和 Azure SQL 托管实例,如果用户具有 sysadmin 权限,则添加
TRANDATA将尝试为更改数据捕获设置数据库,否则,数据库管理员可以在添加TRANDATA之前手动为 CDC 启用数据库,方法是对源数据库执行以下命令:EXEC sys.sp_cdc_enable_db; -
对于 Amazon RDS for SQL Server,如果已向用户授予权限,则添加
TRANDATA还将尝试为更改数据捕获设置数据库,否则具有主身份证明的数据库管理员可以在添加TRANDATA之前手动为 CDC 启用数据库,方法是对源数据库执行以下命令:EXEC msdb.dbo.rds_cdc_enable_db 'source_database'
-
-
在源 Oracle GoldenGate 安装中,确保
GLOBALS文件具有参数GGSCHEMA schemaname,并且使用的方案名称已在源数据库中创建 (CREATE SCHEMA schemaname)。此方案将由在数据库中创建的所有后续 Oracle GoldenGate 组件使用,因此建议创建仅由 Oracle GoldenGate 使用的唯一方案,例如“ggschema”,并且不使用 SQL Server 方案dbo或cdc。 -
在源 Oracle GoldenGate 系统上,打开命令行界面 (Admin Client)。
-
使用数据库登录身份证明连接到数据库。
-
对提取要捕获的每个表发出以下命令。可以使用通配符指定多个表名。
ADD TRANDATA owner.tableADD TRANDATA owner.*Optionally, you can designate the filegroup in which the SQL Server Change Data Capture staging tables will be placed, by using the
FILEGROUPoption with an existing filegroup name.ADD TRANDATA owner.table FILEGROUP cdctablesSee ADD TRANDATA
有关更多详细信息,请参见 ADD TRANDATA 。
清除 CDC 中转数据
启用补充日志记录时,提取重建事务处理所需的数据将存储在一系列 SQL Server CDC 系统表中,以及用于跟踪事务处理中的操作顺序的 Oracle GoldenGate 对象中。这些表需要例程清除,以减少数据库中的数据存储。作为使用 TRANDATA 启用补充日志记录的一部分,SQL Server 创建自己的“更改数据捕获清除”作业,但是此作业不知道提取可能仍需要这些 CDC 系统表中的数据,并且可以在提取有机会捕获之前删除该数据。
如果已从 CDC 系统表中删除了“提取”处理期间需要的数据,则可能需要采取以下纠正措施之一:
-
变更提取以从 CDC 数据可用的较晚时间点进行捕获(并接受目标上可能的数据丢失)。
-
重新同步源表和目标表,然后重新启动 Oracle GoldenGate 环境。
为了在提取可以处理 CDC 数据之前补救被删除的情况,Oracle GoldenGate for SQL Server 要求创建“清除更改数据”任务。此任务将清除 CDC 中转数据,同时确保未清除提取尚未处理的数据。
在启用补充日志记录 (TRANDATA) 之后以及启动提取之前,请立即执行以下步骤以创建 Oracle GoldenGate 清除更改数据任务。“清除更改数据”任务在管理服务中运行,在首次创建时将自动删除 SQL Server CDC 清除作业。“清除更改数据”任务没有 SQL Server 代理作业,因为它由管理服务运行。因此,必须运行管理服务才能使清除任务正常运行。
要创建“清除更改数据”任务:
使用 Oracle GoldenGate for Microservices Architecture,在将 TRANDATA 添加到表之后,但在开始提取之前,必须创建清除更改数据任务以对数据库执行 CDC 清除。可通过以下任一方法完成此操作:
-
手动 REST API 请求
-
管理服务器 Web UI
要使用管理服务 Web UI 创建清除更改数据任务,请执行以下操作:1。展开左侧窗格中的任务部分。
-
单击任务页中的清除更改数据。
-
单击加号以显示表单,并填写必填字段以创建新的“清除更改数据”任务。
-
操作名称:要创建的清除任务的名称。
-
已启用:将任务设置为已启用,这是默认值。
-
身份证明域和身份证明别名:为源数据库选择现有身份证明别名。
-
保留规则:此值确定要保留在源数据库中的 CDC 暂存数据量(以小时或天为单位)。根据 Oracle GoldenGate 的版本,默认值为 3 天或 1 小时。较低的 CDC 数据保留期可减少数据库中存储的 CDC 中转数据量,但限制用户将提取重新定位回比中转表中存在的数据更早的时间的能力。
-
清除频率:此值表示任务的运行频率,默认值为每 10 分钟。建议保留默认值,除非清除任务的开销在高用户活动期间影响数据库性能。注:每个源数据库仅创建一个“清除更改数据”任务。
-
CDC Capture Method Operational Considerations 中提供了 Oracle GoldenGate CDC Cleanup 作业的其他信息。
启用双向循环检测
循环检测是 Oracle GoldenGate 双向实施的要求,这样,一个源数据库的提取不会从另一个源数据库重新获取复制发送的事务处理。
默认情况下,使用 CDC Extract 捕获方法,只要为复制传送到的表启用了补充日志记录,复制提交到配置了提取的数据库中的任何事务处理都将从复制中重新获取该事务处理。
要忽略复制应用的重新获取事务处理,必须对 CDC 提取使用 TRANLOGOPTIONS EXCLUDEFILTERTABLE 参数。用作过滤表的表将是必须为复制创建的 Oracle GoldenGate 检查点表。
要创建过滤器表并启用补充日志记录:
下面的步骤需要具有 SQL Server 系统管理员 (sysadmin) 角色的成员的数据库用户。
-
在源系统上,运行管理客户机。
-
从管理客户端连接到部署。
-
发出以下命令以登录到数据库。
DBLOGIN USERIDALIAS alias -
创建 Replicat 用于将数据传送到源数据库的 Oracle GoldenGate 检查点表。
示例:
ADD CHECKPOINTTABLE ogg.ggchkpt建议您使用与
GLOBALS文件的GGSCHEMA参数中使用的相同方案名称。 -
为新创建的检查点表启用补充日志记录。
示例:
ADD TRANDATA ogg.ggchkpt -
使用检查点表信息添加复制。
示例:
ADD REPLICAT repe, EXTTRAIL north/ea,checkpointtable ogg.ggchkpt -
使用 Replicat 用于过滤表的检查点表,使用
EXCLUDEFILTERTABLE参数配置提取。TRANLOGOPTIONS EXCLUDEFILTERTABLE ogg.ggchkpt