了解如何为Oracle GoldenGate准备数据库,包括如何配置连接和日志记录,如何在数据库中启用Oracle GoldenGate,如何设置闪回查询以及如何管理服务器资源。
- 为集成进程配置连接
- 配置日志记录属性
- 在数据库中启用Oracle GoldenGate
- 设置闪回查询
- 管理服务器资源
2.1 为集成进程配置连接
如果您将使用集成捕获和集成Replicat,则每个都需要tnsnames.ora文件中的专用服务器连接。当您配置这些进程时,您可以指示进程在Extract and Replicat参数文件中使用这些连接,并使用USERID或USERIDALIAS参数。
以下是集成捕获(Extract)和集成Replicat所需的专用连接示例。
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = test2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
以下是在Extract或Replicat参数文件中指定连接字符串的安全选项。
密码加密方式:
USERID intext@test, PASSWORD mypassword
凭证存储方法:
USERIDALIAS ext
对于USERIDALIAS,别名ext将使用实际的连接字符串存储在Oracle GoldenGate凭证存储中,如下例所示:
GGSCI> INFO CREDENTIALSTORE DOMAIN support
Domain: Support
Alias: ext
Userid: intext@test
有关在参数文件中指定数据库连接信息的更多信息,参阅管理Oracle GoldenGate
2.2 配置日志记录属性
Oracle GoldenGate依靠重做日志来捕获复制源事务所需的数据。在启动Oracle GoldenGate处理之前,必须正确配置源系统上的Oracle重做日志。
由于此次需要的日志记录,重做量增加。您可以等到准备好启动Oracle GoldenGate处理以启用日志记录。
本节介绍适用于Oracle GoldenGate的以下日志记录级别。您使用的日志级别取决于您正在使用的Oracle GoldenGate功能。
- 启用最小数据库级补充日志
- 启用schema级补充日志
- 启用table级补充日志
此表显示了不同日志记录属性的Oracle GoldenGate用例。
Logging option | GGSCI command | What it does | Use case |
Forced logging mode | 无;通过数据库启用 | 强制记录所有事务和负载日志 | 强烈建议所有Oracle GoldenGate使用案例。 |
Minimum database-level supplemental logging | 无;通过数据库启用 | 启用最少的补充日志记录以将行链信息添加到重做日志。 | 所有Oracle GoldenGate用例均需要 |
Schema-level supplemental logging, default setting 参阅启用schema级补充日志 |
ADD SCHEMATRANDATA |
启用主键的无条件补充记录以及模式中所有表的唯一键和外键的有条件补充记录。 所有这些键一起被称为调度列。 |
启用schema中所有当前和将来表的日志记录。 如果源和目标的主键,唯一键和外键列不相同,请使用ALLCOLS。使用DDL支持时需要。 |
schema级补充日志记录对所有支持的列进行无条件日志记录。 (有关不支持的列类型,请参阅启用schema级别补充日志记录) |
ADD SCHEMATRANDATA with ALLCOLS option |
对模式中的所有表启用无条件补充日志记录表中的所有列。 |
用于在尝试执行更新或删除时检查所有列值的双向和主动 - 主动配置,而不仅仅是更改的列。 尽管允许实时数据验证的*别并因此检测冲突,但这需要更多的资源。 当源和目标的主键,唯一键和外键不相同或在源和目标之间不断变化时,也可以使用它。 |
schema级补充日志记录,最小设置 |
ADD SCHEMATRANDATA with NOSCHEDULINGCOLS option |
启用schema中主键和所有表的所有有效唯一索引的无条件补充日志记录。 | 仅用于非集成Replicat。这是所需的最低schema级日志记录。 |
表级补充日志,内置了对集成Replicat的支持 (请参阅启用表级别补充日志) |
ADD TRANDATA |
启用对表的唯一键和外键的主键和条件辅助日志记录的无条件补充记录。 所有这些键一起被称为调度列。 |
除非使用模式级别的补充日志记录,否则所有Oracle GoldenGate用例都需要该用例。 如果源和目标的主键,唯一键和外键列不相同,请使用ALLCOLS。 |
对所有支持的列使用无条件日志记录的表级补充日志记录。 (请参阅启用表级别补充日志记录,查看不支持的列类型) |
ADD TRANDATA with ALLCOLS option |
启用无条件补充日志记录表中的所有列 |
用于在尝试执行更新或删除时检查所有列值的双向和主动 - 主动配置,而不仅仅是更改的列。 尽管允许实时数据验证的*别并因此检测冲突,但这需要更多的资源。 当源和目标的主键,唯一键和外键不相同或在源和目标之间不断变化时,也可以使用它。 |
表级补充日志记录,最小设置 |
ADD TRANDATA with NOSCHEDULINGCOLS option |
启用表的主键和所有有效唯一索引的无条件补充日志记录 | 仅用于非集成Replicat。这是所需的最低表级别日志记录。 |
2.2.1启用最小数据库级补充记录
Oracle强烈建议将Oracle源数据库置于强制日志记录模式。强制日志记录模式强制记录所有事务和负载,相反,覆盖任何用户或存储设置。这确保了Extract配置中的源数据不会被错过。
此外,使用Oracle GoldenGate时,Oracle源数据库还需要最少的补充日志记录(数据库级选项)。这会将行链信息(如果存在)添加到重做日志以进行更新操作。
强烈建议不要使用数据库级主键(PK)和唯一索引(UI)日志记录,因为它会在复制外的表上创建额外的额外开销。除非需要这些日志记录选项才能用于业务目的,否则只需在数据库级别启用最少的补充日志记录和Oracle GoldenGate强制日志记录。
执行以下步骤来验证和启用(如有必要)最小补充日志记录和强制日志记录。
- 以具有ALTER SYSTEM特权的用户身份登录到SQL * Plus。
- 发出以下命令以确定数据库是处于补充日志记录模式以及处于强制记录模式。如果两个查询的结果均为“是”,则数据库符合Oracle GoldenGate要求。
SELECT supplemental_log_data_min, force_logging FROM v$database;
- 如果两个或两个属性的结果为NO,请继续执行以下步骤以根据需要启用它们:
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SQL> ALTER DATABASE FORCE LOGGING; - 发出以下命令以验证现在是否启用了这些属性。
ELECT supplemental_log_data_min, force_logging FROM v$database;
- 切换日志文件。
SQL> ALTER SYSTEM SWITCH LOGFILE;
2.2.2 启用schema级补充记录
Oracle GoldenGate支持schema级补充日志记录。使用Oracle GoldenGate DDL复制功能时,Oracle源数据库需要schema级日志记录。In all other use cases, it is optional, but then you must use table-level logging instead(请参阅启用表级别补充日志记录)。
默认情况下,schema级别日志记录会自动启用主键的无条件补充日志记录以及模式中所有表的唯一键和外键的有条件补充日志记录。选项使您可以根据需要更改日志记录。
Oracle强烈建议使用模式级日志记录而不是表级日志记录,因为它确保添加到模式中的任何新表在满足通配符规范时都会被捕获。
在源系统上执行以下步骤以启用schema级补充日志记录。
- 如果版本早于11.2.0.2,则将Oracle Patch 13794550应用于源Oracle数据库。
- 在源系统上运行GGSCI。
- 使用有权启用schema级补充日志记录的凭证存储区中的用户别名发出DBLOGIN命令。
DBLOGIN USERIDALIAS alias
有关USERIDALIAS和其他选项的更多信息,请参阅Oracle GoldenGate参考中的USERIDALIAS。
- 对每个想要使用Oracle GoldenGate捕获数据更改的模式发出ADD SCHEMATRANDATA命令。
ADD SCHEMATRANDATA schema [ALLCOLS | NOSCHEDULINGCOLS]
Where:
1)如果没有选项,则ADD SCHEMATRANDATA模式允许在主键源系统上进行无条件补充日志记录,并有条件地补充给定模式中所有当前表和未来表的所有唯一键和外键。无条件日志记录强制将主键值写入日志,无论在当前操作中键是否已更改。条件日志记录会记录外键或唯一键的所有列值(如果其中至少有一个在当前操作中已更改)。对于支持非集成Replicat,默认设置是可选的,但是需要默认支持集成Replicat,因为主键,唯一键和外键都必须可用于入站服务器以计算依赖关系。有关集成Replicat的更多信息,请参阅决定使用哪种应用方法。
2)ALLCOLS可用于启用表的所有列的无条件补充日志记录,并适用于给定模式中的所有当前和未来表。当源表和目标表具有不同的调度列时,用于支持集成的Replicat。 (调度列是主键,唯一键和外键。)
3)NOSCHEDULINGCOLS仅记录schema中现有表的主键值和所有有效唯一索引值,以及稍后添加的新表。这是模式级别日志所需的最低级别,仅对非集成模式下的Replicat有效
在以下示例中,该命令启用finance
模式的默认补充日志记录ADD SCHEMATRANDATA finance
在以下示例中,该命令仅对hr模式的主键和有效唯一索引启用补充日志记录。
ADD SCHEMATRANDATA hr NOSCHEDULINGCOLS
2.2.3 启用表级补充日志记录
在以下情况下启用源系统上的表级补充日志记录:
- 在不使用模式级日志记录时启用所需级别的日志记录(请参阅启用模式级别补充日志记录)。无论是schema级还是表级日志都必须使用。默认情况下,表级日志记录自动启用主键的无条件补充日志记录以及表的唯一键和外键的条件补充日志记录。选项使您可以根据需要更改日志记录。
- 防止任何给定表的主键记录。
- 在表级别记录非键列值以支持特定的Oracle GoldenGate功能,例如筛选和冲突检测以及解析逻辑。
在源系统上执行以下步骤以启用表级补充日志记录或使用该命令的可选功能。
1)在源系统上运行GGSCI。
2)使用有权启用表级补充日志记录的凭证存储区中的用户的别名发出DBLOGIN命令。DBLOGIN USERIDALIAS alias
有关DBLOGIN和其他选项的更多信息,请参阅Oracle GoldenGate参考中的USERIDALIAS。
3)发出ADD TRANDATA命令。ADD TRANDATA [container.]schema.table [, COLS (columns)] [, NOKEY] [, ALLCOLS | NOSCHEDULINGCOLS]
Where:
- 如果表位于多租户容器数据库中,则container是根容器或可插拔数据库的名称。
- schema是包含该表的源schema
- table是表的名称。有关指定对象名称的说明,请参阅管理Oracle GoldenGate中的在Oracle GoldenGate输入中指定对象名称
- 在没有其他选项的情况下添加TRANDATA将自动启用主键的无条件补充记录以及表格的唯一键和外键的条件补充记录。无条件日志记录强制将主键值写入日志,无论在当前操作中键是否已更改。条件日志记录会记录外键或唯一键的所有列值(如果其中至少有一个在当前操作中已更改)。对于支持非集成Replicat(请参阅NOSCHEDULINGCOLS),缺省值是可选的,但是由于主键,唯一键和外键必须都可用于入站服务器以计算依赖性,因此需要该缺省值来支持集成Replicat。有关集成Replicat的更多信息,请参阅决定使用哪种应用方法。
- ALLCOLS支持无条件补充记录表中的所有列。当源表和目标表具有不同的调度列时,用于支持集成的Replicat。 (调度列是主键,唯一键和外键。)
- NOSCHEDULINGCOLS仅适用于非集成模式下的Replicat。它使用ADD SUPPLEMENTAL LOG DATA ALWAYS子句发出一个ALTER TABLE命令,该子句适用于为该表定义的唯一约束类型,或者没有唯一约束的所有列。当不使用模式级别日志记录时,此命令满足Oracle GoldenGate的基本表级别日志记录要求。有关Oracle GoldenGate如何选择密钥或索引的信息,请参阅确保源表和目标表中的行唯一性。
- COLS列记录KEYCOLS子句所需的非密钥列或过滤和操作。括号是必需的。除了主键之外,这些列将被记录,除非NOKEY选项也存在。
- NOKEY防止主键或唯一键的记录。需要TABLE和MAP参数中的KEYCOLS子句和ADD TRANDATA命令中的COLS子句来记录替代KEYCOLS列。
4)如果将ADD TRANDATA与COLS选项一起使用,请为目标上的这些列创建唯一索引以优化行检索。如果将这些列作为KEYCOLS子句的替代键记录下来,请记下在配置Oracle GoldenGate进程时将KEYCOLS子句添加到TABLE语句和MAP语句。
2.3 在数据库中启用Oracle GoldenGate
必须为Oracle 11.2.0.4或更高版本的数据库显式启用支持Oracle GoldenGate捕获和应用所需的数据库服务。这对Extract和Replicat的所有模式都是必需的。
要启用Oracle GoldenGate,请设置以下数据库初始化参数。 Oracle RAC中的所有实例必须具有相同的设置。
ENABLE_GOLDENGATE_REPLICATION=true
有关此参数的更多信息,请参阅初始化参数。
2.4 设置闪回查询
为了处理某些更新记录,Extract从源数据库中提取额外的行数据。 Oracle GoldenGate获取以下数据:
- 用户定义的类型
- 嵌套表
- XMLType对象
默认情况下,Oracle GoldenGate使用闪回查询从撤消(回滚)表空间中获取值。这样,Oracle GoldenGate可以在特定时间或SCN中重建读取一致的行映像以匹配重做记录。
为获得最佳提取结果,请按如下所示配置源数据库:
- 通过如下设置Oracle初始化参数UNDO_MANAGEMENT和UNDO_RETENTION来设置足够数量的重做保留(以秒为单位)。
UNDO_MANAGEMENT=AUTO UNDO_RETENTION=86400 UNDO_RETENTION can be adjusted upward in high-volume environments.
- 使用以下公式计算撤消表空间中所需的空间。
undo_space = UNDO_RETENTION * UPS + overhead
Where:
1)ndo_space是撤消块的数量。
2)UNDO_RETENTION是UNDO_RETENTION参数的值(以秒为单位)。
3)UPS是每秒撤销块的数量。
4)开销是元数据(事务表等)的最小开销。使用系统视图V $ UNDOSTAT来估计UPS和开销。
- 对于包含LOB的表,请执行以下操作之一:
1)将LOB存储子句设置为RETENTION。这是在UNDO_MANAGEMENT设置为AUTO时创建的表的默认值。
2)如果使用PCTVERSION而不是RETENTION,请将PCTVERSION设置为初始值25.您可以根据使用STATS EXTRACT命令报告的读取统计信息来调整它(请参阅表2-1)。如果这些统计信息中STAT_OPER_ROWFETCH CURRENTBYROWID或STAT_OPER_ROWFETCH_CURRENTBYKEY字段的值很高,请以10为增量增加PCTVERSION,直到统计信息显示低值。 - 将以下任一权限授予Oracle GoldenGate Extract用户:
GRANT FLASHBACK ANY TABLE TO db_user GRANT FLASHBACK ON schema.table TO db_user
Oracle GoldenGate提供以下参数来管理提取。
Table 2-1 Oracle GoldenGate Parameters and Commands to Manage Fetching
Parameter or Command | Description |
带有REPORTFETCH选项的STATS EXTRACT命令 | Shows Extract fetch statistics on demand. |
带有REPORTFETCH选项的STATOPTIONS参数 | 设置STATS EXTRACT命令,以便始终显示提取统计信息。 |
MAXFETCHSTATEMENTS参数 | 控制Extract在源数据库中维护的准备查询的打开游标数量,以及SQLEXEC操作的数量。 |
MAXFETCHSTATEMENTS参数 | 控制Extract的默认提取行为:Extract是否执行闪回查询或从表中提取当前图像。 |
使用USELATESTVERSION或NOUSELATESTVERSION选项的FETCHOPTIONS参数 | 处理Extract闪回查询的失败,例如,如果撤消保留过期或表的结构发生更改。提取可以从表格中提取当前图像或忽略失败 |
REPFETCHEDCOLOPTIONS参数 | 控制Replicat在处理包含提取数据或列缺失条件的跟踪记录时的响应。 |
2.5 管理服务器资源
在集成模式下,Extract与源数据库中的基础logmining server交互,并且Replicat与目标数据库中的入站服务器交互。本节提供了管理这些服务器使用的共享内存的指导原则。
服务器使用的共享内存来自数据库中系统全局区域(SGA)的Streams池部分。因此,必须将数据库初始化参数STREAMS_POOL_SIZE设置得足够高,以保证足够的内存可用于您希望在集成模式下运行的Extract和Replicat进程的数量。请注意,Streams池也被数据库的其他组件(如Oracle Streams,Advanced Queuing和Datapump导出/导入)使用,因此在确定Oracle GoldenGate的Streams池的大小时请确保考虑到它们。
默认情况下,一个集成捕获提取请求登录服务器以1GB的MAX_SGA_SIZE运行。因此,如果您在同一个数据库实例中以集成捕获模式运行三个提取,则至少需要分配给Streams池的3 GB内存。作为最佳做法,请保留25%的Streams池可用。例如,如果在集成捕获模式下有3个提取,请将数据库的STREAMS_POOL_SIZE设置为以下值:
3 GB * 1.25 = 3.75 GB
参考资料
https://docs.oracle.com/goldengate/c1230/gg-winux/GGODB/preparing-database-oracle-goldengate.htm#GGODB-GUID-E06838BD-0933-4027-8A6C-D4A17BDF4E41