goldengate在Oracle RAC 环境

RAC环境中安装GoldenGate,建议将其安装在共享存储中,这样你可以在任一节点上启动GoldenGate进程,如果在这个节点上运行失败,你可以在另一个节点上启动,而不用修改参数,因为处理检查点保留在安装目录中。
RAC中的所有需要执行GoldenGate进程的节点必须同步系统时间,因为GoldenGate通过比较本地系统时间和提交时间戳来做出关键决策。

[@more@]

Ref: http://www.dbaaku.com/bbs/thread-729-1-1.html

系统要求及安装前的说明
Oracle GoldenGate可以在Oracle不同版本间移动数据,也可以在Oracle和其它类型数据库之间移动数据。Oracle GoldenGate支持数据的过滤、映射和转换。Oracle还能在相似的Oracle数据库之间复制DDL操作。注意下面一句:当DDL支持被激活的时候,Oracle GoldenGate不支持数据的过滤、映射和转换。
支持的Oracle数据库版本,从9.2开始支持DMLDDL。支持几乎所有的主流操作系统,具体的可以从MOS(My Oracle Support)中查询。内存方面,Oracle Golden Gate需要的内存与同时运行的进程有关。最基本的情况下,需要有一个主提取进程来来捕获源数据、一个副提取数据泵进程来通过网络传输数据、还需要一个复制进程将复制的数据应用到目标端。
GoldenGate通过GGSCI命令接口,每个实例可以支持最多300个并发的抽取和复制进程。一个Oracle GoldenGate进程可以看做一个Manager进程,它是主要的控制进程。每个抽取和复制进程需要大约25-55MB的内存,或更多,取决于事务的大小和并发数。
GoldenGate缓存管理器利用了操作系统的内存管理功能来确保GoldenGate进程以持续和有效的方式来进行工作。在缓存中,使用了现代虚拟内存技术来实现:高效地分配和管理活动的缓冲区;可能的情况下,回收旧缓冲区,而不是分页到磁盘中;在必要的时候,将较少使用的信息分页到磁盘中。
GoldenGate进程实际使用的内存数是由操作系统决定的,而不是GoldenGate程序。
系统需要为GoldenGate抽取或复制进程分配足够的交换空间,可以按以下步骤来求出这个空间:启动一个抽取或复制进程;运行GGSC;查看报告文件,找到这一行PROCESS VM AVAIL FROM OS(min);将得到的值向上凑整到整数GB,比如,把1.76GB凑整到2G;将这个大小乘以需要运行的抽取和复制进程数,就是可能需要的最大交换空间大小。
需要的空闲磁盘空间为50-150MB,和具体数据库与平台有关。工作目录和系统中安装的每个GoldenGate实例的二进制文件需要的空间大概为40MB,比如将GoldenGate安装到两个独立的目录中,就需要分配80MB的空间;在集群环境中,可以将GoldenGate安装在共享文件系统中,就可以让所有节点都能访问。另外需要为GoldenGate追踪(trail)文件分配硬盘空间,和需要处理的数据的容量有关。比较好的起始点是1GB
Oracle GoldenGate追踪文件的存储
为了防止追踪文件的活动干扰业务应用,应该将追踪文件放在一个单独的磁盘或文件系统中。这些文件存放了GoldenGate捕获的所有数据,文件默认大小为10MB,但在配置过程中可能会被更改。追踪文件会逐步累加,但可以通过PURGEOLDEXTRACTS参数指定规则来清空。
对于源端的追踪文件,应该有足够的空间来预防网络连接失败。在典型的配置中,抽取的副进程(称作数据泵)通过网络将本地追踪文件的数据发送到目标端,当网络故障时它也会失败。但是,抽取主进程仍然会继续读取事务日志并写入到本地的追踪文件。因此。必须由足够的磁盘空间来hold住这些累积的数据。
对于目标端的追踪文件,可以根据设置的PURGEOLDEXTRACTS参数来提供足够的磁盘空间。但是即使使用了该参数,在数据传输速度高于应用到目标库中的速度时,仍然有可能会继续累加。
可以按照这个公式来预测需要的追踪文件大小 [log volume in one hour] x [number of hours downtime] x .4 = trail disk space 这里使用了40%,因为GoldenGate只需要事务日志中大约40%的数据。
默认情况下,GoldenGate在按照目录下的dirtmp子目录下的文件来维护数据,你可以使用CACHEMGR参数的CACHEDIRECTORY选项来指定它的路径。
Oracle RAC
RAC环境中安装GoldenGate,建议将其安装在共享存储中,这样你可以在任一节点上启动GoldenGate进程,如果在这个节点上运行失败,你可以在另一个节点上启动,而不用修改参数,因为处理检查点保留在安装目录中。
RAC中的所有需要执行GoldenGate进程的节点必须同步系统时间,因为GoldenGate通过比较本地系统时间和提交时间戳来做出关键决策。
TCP/IP
使用主机名或IP来配置GoldenGate进程所在系统的网络,使用主机名会更易于使用。GoldenGate需要以下非保留且非限制的TCP/IP端口:一个端口用于管理器进程和其他GoldenGate进程间的通讯;一个范围内的端口用于本地GoldenGate通讯,默认由7840端口开始,也可以自定义,最多256个端口。
操作系统权限
Linux/Unix上,GoldenGate进程需要有队安装目录中的文件和子目录有读写删除的权限,管理器进程还需要有控制Oracle GoldenGate进程的权限。如果使用Windows系统,必须使用Administrator用户登录。抽取进程需要一个能够访问日志文件(包含在线和归档日志)的用户。在UNIX系统中,那个用户必须是Oracle实例所在用户组中的成员。
安腾处理器的要求
如果在一个微软安腾系统上安装Oracle GoldenGate,运行库vcredist_IA64.exe必须安装。你可以在微软的网站上下载到这个包,它包含了GoldenGate在安腾平台上操作所需的VisualStudio动态链接库。
另外,在Windows系统上安装GoldenGate以前,安装并配置Microsoft Visual C++ 2005 SP1
数据库方面的要求
必须使用完整的Oracle客户端而不是Oracle Instant Client,这样GoldenGate程序可以访问Oracle XDK库。
而关于GoldenGate支持的数据类型、操作类型、表类型等等,官方有相关的说明,开发人员应该注意一下,因为太长,这里不再引用。简单说下,不支持的数据类型有:ORDDICOM, ANYDATA, ANYDATASET, ANYTYPE, BFILE, MLSLABEL, TIMEZONE_ABBR, TIMEZONE_REGION, URITYPE, UROWID;当一张表只有一个字段,不支持该字段的类型为:LOB, LONG, Nested table, User defined data type, VARRAY, XML。由于一个已知的问题,需要将Oracle的回收站功能关闭,否则将导致GoldenGateDDL触发器失效。
GoldenGate的安装
下载与自己平台对应的版本的GoldenGate软件,官网edelivery提供下载
环境变量
首先要在操作系统中设置相关的环境变量,首先是ORACLE_HOME和ORACLE_SID,如果不能在操作系统中设置环境变量,或者系统中存在使用GoldenGate来传输数据的多个实例,那么在UNIX系统中可以在每个抽取/复制进程组中设置参数,格式为:SETENV (ORACLE_HOME = ) 及 SETENV (ORACLE_SID = ) 还需要将GoldenGate安装目录添加到共享库的环境变量中,如: export LD_LIBRARY_PATH=/ggs/10.0shy.gifLD_LIBRARY_PATH 要注意的一点是,ORACLE_HOME中的lib目录也应该加进去。可以使用ldd命令来检查该环境变量是否设置正确。(共享库环境变量在AIX中是LIBPATH,在SolarisLinux中是LD_LIBRARY_PATH,在HP-UX中是SHLIB_PATH)

安装软件
安装软件其实非常简单,在需要安装的目录中解压压缩包就可以了。然后进入该目录,执行ggsci(一定要在GoldenGate安装目录中执行,因此该Path变量其实可设可不设),在ggsci命令行中执行命令创建工作目录:CREATE SUBDIRS
Windows系统中,可以将Manager进程使用install命令添加到服务中。还有如何将GoldenGate配置到系统级别的集群中来提供failover,这里不再说明,有兴趣的可以查下官方文档。


安装DDL支持

如何配置GoldenGate来捕获和传输ddl,在Oracle GoldenGate Windows and UNIX Administrators Guide中有比较详细的说明。下面列出一个表格,说明下GoldenGate中用于ddl同步的一些对象

对象

用途

默认名称

DDL标记表

存储DDL信息,该表只接收插入

GGS_MARKER

标记表中的序列

用来填充标记表中的一个字段

GGS_DDL_SEQ

DDL历史表

存储对象元数据历史,接收插入、更新、删除

GGS_DDL_HIST

对象ID历史表

包含了配置的对象的对象ID

GGS_DDL_HIST_ALT

DDL触发器

针对DDL操作,将操作的信息写入到标记表盒历史表

GGS_DDL_TRIGGER_BEFORE

DDL schema

包含DDL同步对象的schema

必须在安装过程中在GLOBALS文件中指定

用户角色

创建执行DDL操作所需的角色

GGS_GGSUSER_ROLE

内部安装表

只用于内部使用的表

GGS_SETUP

ddl_pin

固定DDL追踪、DDL包和DDL触发器,用于性能改进

ddl_pin

ddl_cleartrace.sql

删除DDL跟踪文件

ddl_cleartrace.sql

ddl_status.sql

确认GoldenGate DDL对象已经安装

ddl_status.sql

marker_status.sql

确认标记表已经安装

marker_status.sql

ddl_tracelevel.sql

设置DDL跟踪的级别

ddl_tracelevel.sql



下面讲一下安装DDL对象的步骤:

1. DDL对象选择一个schema
2. 为该schema授予以下权限:
GRANT EXECUTE ON UTL_FILE TO ;

3. 为这些对象选择一个表空间,并且该表空间的剩余空间要能承担GGS_DDL_HISTGGS_MARKER表的数据增长,特别是GGS_DDL_HIST,它会根据DDL操作的频繁程度按比例增长。如果没有足够的表空间,数据库中的DDL操作将不能完成,业务应用会被挂起。
4. 在这个GoldenGate实例的主目录中打开GLOBALS文件,并将上述schema配置到参数中:GGSCHEMA
5. 修改DDL对象的名称,这个步骤是可选的,而且Oracle建议使用默认名称。
6. 进入GoldenGate安装目录,断开所有数据库会话,并确保没有新的会话连接。
7. sysdba运行SQL*Plus,安装DDL触发器需要这个权限,触发器会被安装在SYS schema中。
8. 执行marker_setup脚本,该脚本安装了DDL支持需要的GoldenGate marker系统,脚本执行过程中会要求输入GoldenGate schema的名称
9. 执行ddl_setup脚本
10. 执行role_setup脚本。该脚本删除和创建DDL同步需要的角色,它授权DDL对象上的DML操作
11. 将该角色赋给GoldenGate抽取用户。如果这些进程使用了不同的用户,你需要为这些用户分别授权
12. 执行ddl_enable.sql脚本来启用DDL触发器
为了改进DDL触发器的性能,可以在数据库启动时,在GoldenGate安装目录下使用sysdba执行ddl_pin脚本 SQL> @ddl_pin 该脚本会将该DDL触发器使用的PL/SQL包固定到内存中。它依赖于dbms_shared_pool系统包,使用ddl_pin前确认该包已经安装。


数据库方面的准备

确保ASM能够连通
如果使用了ASM,就要保证GoldenGate能够连接到ASM实例。通过以下步骤来确认:
首先确定ASM实例在tnsnames.ora文件中列出;然后检查Oracle监听是否正在监听这个ASM实例的连接,listener.ora文件需要包含类似于下列的字符串(特别是第二个SID_DESC部分)
SID_LIST_LISTENER_DARAN =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /rdbms/oracle/ora1012r/64)
(PROGRAM = extproc)
)
(SID_DESC =
(ORACLE_HOME = /rdbms/oracle/ora1012r/64)
(SID_NAME = +ASM1)
)
)


配置字符集
目标数据库的字符集必须是源数据库字符集的超集;如果你的客户端应用使用了不同的字符集,数据库的字符集应该是客户端应用字符集的一个超集;更多信息可以参阅Oracles Database Globalization Support Guide
通过以下SQL*Plus命令来查询数据库中的国际设置以及它使用的是字节还是字符语义:view plaincopy to clipboardprint?
1 SHOW PARAMETER NLS_LANGUAGE
2 SHOW PARAMETER NLS_TERRITORY
3 SELECT name, value$ from SYS.PROPS$ WHERE name = 'NLS_CHARACTERSET';
4 SHOW PARAMETER NLS_LENGTH_SEMANTICS
也可以通过GGSCI来查看当前的数据库语言和字符集设计,并指明是否设置了NLS_LANGVIEW REPORT

需要在操作系统中配置NLS_LANG环境变量,该变量的格式应该是_.
要应用新的环境变量,需要重启GoldenGateManager进程。

配置Oracle redo日志
正常模式下,GoldenGate默认从在线日志中读取数据,当在线日志不可用时读取归档日志。你也可以手动配置GoldenGate来读取归档日志。为了确保GoldenGate读取在线日志的持续性和完整性,按如下过程来配置日志:
如果源数据库是Oracle 9i,将_LOG_PARALLELISM参数设为1GoldenGate不支持大于1的值。
GoldenGateredo日志中捕获数据时,可能会引起I/O瓶颈,特别在有多个抽取进程同时读取时。为了避免这个瓶颈,尽量使用更快的驱动器和控制器;并且将日志存放在RAID 0+1中,避免使用RAID 5
尽管不是必须,但最好启用归档,并将归档日志保留尽可能久的时间。这样如果在线日志在抽取进程完成之前被回收,抽取进程还能从归档日志中读取。比如发生了进程或系统故障,抽取进程就可能需要去重新捕获事务数据。如果不启用归档,要保证在线日志中能容纳足够的数据。
确保备份和归档操作不会导致旧的归档文件被新的所覆盖,导致GoldenGate抽取进程无法找到需要的日志。在RAC配置中,抽取进程需要能访问到集群中所有节点的在线和归档日志。如果归档日志不在Oracle默认指定的位置,需要在抽取进程的参数文件中的TRANLOGOPTIONS参数中指定ALTARCHIVELOGDEST选项。

GoldenGateALO模式
你可以配置抽取进程来专门从归档日志中读取,这也叫做Archived Log Only(ALO)模式。在这个模式下,抽取进程仅从指定位置中的归档日志里读取。ALO模式允许GoldenGate使用传输到次数据库(比如standby)中的日志来作为数据源。

调整游标
抽取进程为取数据的查询和SQLEXEC操作维护游标。如果没有足够的游标,抽取进程就必须替换掉更多的表达式。抽取进程维护游标的最大数由MAXFETCHSTATEMENTS参数决定的,默认值为100,你可能会发现这个值需要增加。你需要同时调整数据库中支持打开的游标数。

设置fetch选项
为了执行redo日志中的特定的update操作,GoldenGate从源数据库中提取额外的行数据。这些数据包括LOBs(10g以前,新版本中可以直接从redo中捕获)、用户定义类型、嵌套表、还有XMLType。默认情况下,GoldenGate使用闪回查询来从undo(rollback)表空间中获取值,通过这种方式,GoldenGate可以重建特定时间点或SCN下的读一致行镜像来匹配redo中的记录。
为了最好地获取记录,在源端数据库如下配置:
1. 通过设置初始化参数UNDO_MANAGEMENT(AUTO)UNDO_RETENTION(86400)来保证足够的redo保留时间,在存储空间充裕的环境中,后者可以适当调高后者的值
2. 通过这个公式来估计undo表空间需要的大小: = * +
是每秒产生的undo块数, 是元数据的最小开销。这两个数值可以通过V$UNDOSTAT来得出。
3. 对于包含LOBs的表:1) LOB存储子句设为RETENTION,当UNDO_MANAGEMENTAUTO时,创建的表的默认设置就是这个值。 2) 如果用的不是RETENTION而是PCTVERSION时,将PCTVERSION设置为25的初始值。你可以通过STATS EXTRACT命令取得的统计信息来调整它。如果在这些统计信息中的STAT_PER_ROWFETCH CURRENTBYROWIDSTAT_OPER_ROWFETCH_CURRENTBYKEY的值比较高,将PCTVERSION10递增,直到它们的值降到比较低的水平。
4. GoldenGate抽取用户授权: GRANT FLASHBACK ANY TABLE TO ; GRANT FLASHBACK ON TO ;

GoldenGatefetch选项中,它提供了一些参数来进行管理:
1. 使用带REPORTFETCH选项的STATS EXTRACT命令来查看fetch统计信息。
2. ExtractSTATOPTIONS参数中设置REPORTFETCH选项来使得STATS EXTRACT命令总是显示fetch统计信息
3. 通过ExtractMAXFETCHSTATEMENTS参数,可以控制源数据库中Extract维护的,为准备好的查询打开的游标数量
4. Oracle 9i数据库中控制抽取的默认fetch动作,可以使用带USESNAPSHOTNOUSESNAPSHOT选项的FETCHOPTIONS参数。它们决定Extract是执行flashback查询还是从表中读取数据的当前镜像。
5. 使用FETCHOPTIONS参数中的USELATESTVERSIONNOUSELATESTVERSION选项来处理flashback queries失败的情况。如果undo已经过期或是表结构发生了改变,flashback查询是可能会失败的。这两个选项决定Extract是从表中获取当前的数据还是选择忽略。
6. 如果需要控制Replicat处理trail记录时,或在丢失字段情况下的反应,使用Replicat参数REPFETCHDCOLOPTIONS

准备需要处理的表
GoldenGate环境中,表的一些属性需要进行处理
1. 禁用触发器和级联删除约束。你需要对目标表上的触发器和相关的完整性约束做一些修改。GoldenGate会将触发器或级联删除/更新约束上产生的DML也进行复制,如果在目标表上也有相同的触发器或约束在起作用,可能会产生多余的动作,而引发错误。处理方法为:如果Oracle版本为10.2.0.5或在11.2.0.2之后,可以使用Replicat中的参数DBOPTIONS,带SUPPRESSTRIGGERS选项来使得Replicat在它的会话中禁用触发器;若版本为Oracle 9.2.0.7以后,可以使用Replicat参数DBOPTIONS,带DEFERREFCONST选项来将完整性约束的检测和执行推迟到Replicat事务提交以后;如果Oracle版本更老,你必须将触发器和完整性约束禁用,或手动改变它们来忽略Replicat数据库用户。

2. 行的唯一标识。GoldenGate需要在源和目标端的表中有几种形式的行的唯一标识,以正确定位到目标行来进行更新和删除操作。
如果不在TABLEMAP表达式中使用KEYCOLS子句,GoldenGate按如下顺序来选择一个行标识:
1) 主键
2) 不包含虚拟列、UDT(用户定义类型)、函数列、允许空值列的唯一键,按字母顺序选择第一个
3) 不包含虚拟列、UDT、函数列的唯一键,但允许空值,按字母顺序选择第一个
4) 如果上述类型的键都不存在,GoldenGate将使用所有的字段来构建一个虚拟的键(不 包含虚拟列、UDT、函数列等)
你还可以在GolenGateExtractTABLE参数和ReplicatMAP参数里的KEYCOLS子句中定义表中用来唯一标识行的键,它将优先于主键和唯一键。

3. 让数据库记录键值。在GGSCI中使用ADD TRANDATA命令来配置数据库,使其在记录行的变化时也记录下键的值,这样redo中的记录对于GoldenGate是可用的。默认情况下,数据库只记录发生改变的字段值。
ADD TRANDATA会强制记录下主键字段或唯一字段,也有可能是所有字段。它创建一个包含这些需要的字段的追加日志组。如果使用了KEYCOLS子句,则记录子句中指定的字段。ADD TRANDATA必须在启动GoldenGate进程执行执行。步骤如下:
1) 在源端系统中,在GoldenGate安装目录中运行GGSCI
2) GGSCI中,登录数据库: DBLOGIN USERID , PASSWORD (是一个具有启用表级追加日志的权限的数据库用户)
3) 执行ADD TRANDATA命令: ADD TRANDATA

是表所属的用户名和表名,表名可以使用通配符,但用户名不能。
4) SQL*Plus 中用具有 ALTER SYSTEM 权限的用户登录,执行下列的命令来在数据库级别启用最小追加日志: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
5) 切换日志文件,以开始使用追加日志: ALTER SYSTEM SWITCH LOGFILE;
6) 确定追加日志已经启用: SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
Oracle 9i 中,查询结果应该是 YES ,在 10g 中,为 YES IMPLICIT
7) 如果使用了 COLS 选项来记录 KEYCOLS 字段,在目标端为这些字段创建唯一索引,以优化行检索的效率。

4. 限制没有键的表中行的更改。
如果目标表不含有主键或唯一键,就可能存在重复的行, GoldenGate 有可能在目标表上更新或删除太多的行,使得源端和目标段的数据不同步,而且不会有警告信息。为了限制更新的行的数量,可以在 Replicat 参数文件的 DBOPTIONS 参数中使用 LIMITROWS 选项

5. 推迟约束的检测。
在下列情况中,约束可能需要更改:
1) 源和目标端并不都设为 DEFERRED 。如果约束在源端是 DEFERRABLE ,那么它们在目标端也必须是 DEFERRABLE 。或者,你可以在 Replicat 参数文件中在 root 级别上使用这个参数语句,以在复制会话中延迟约束: SQLEXEC ("alter session set constraint deferred") ( commit 以后才检查约束 )
2) 键的更新会影响到多行。如果一个 update 事务可能影响到多行的主键值, Replicat 需要将约束设置为 DEFERRED ,这在 GoldenGate 术语中叫短暂主键更新 (transient primary key update) 。这种类型的操作通常使用了 x+1 方式 ( 比如 update table1 set id=id+1;) 或类似的操作,使得新值可能与其他行的旧值相同。
为了使 Replicat 管理这些更新:在目标表上以 DEFERRABLE 方式创建约束,可以指定为 INITIALLY DEFERRED INITIALLY IMMEDIATE ;使用 Replicat 参数 HANDLETPKUPDATE 来使 Replicat 在它的事务里将约束设置为 INITIALLY DEFERRED ,这些约束会在 Replicat 提交事务以后进行检查。
如果约束不是 DEFERRABLE Replicat 根据 HANDLECOLLISIONS REPERROR 参数来处理这些错误,若没有指定,则出现异常终止。

确保 Oracle 空间对象的正确处理
如果你需要复制包含了 SDO_GEORASTER 对象类型的字段的表,根据以下说明来配置 GoldenGate
1. 表的映射
2. 设置 XML 内存缓冲区的大小。你可能需要修改用以存储 SDO_GEORASTER 数据类型中的 SYS.XMLTYPE 属性的内存缓冲区大小,这个缓冲区通过 DBOPTIONS 参数中的 XMLBUFSIZE 选项控制,默认是 1MB ,最大可以为 10MB 。如果数据超过了缓冲区大小, Extract 会出现异常。如果表中任何一个值的 SDO_GEORASTER METADATA 属性超过了默认的 1MB ,就需要增大缓冲区。
3. 处理 georaster 表上的触发器。每个 georaster 表上都有一个触发器来与它的栅格数据表关联。它必须在源和目标环境中都启用,以保证空间数据的一致性。处理级联重复删除的问题,可以使用 MAP 参数中的 REPERROR 选项。例如 MAP geo.st_rdt, TARGET geo.st_rdt, REPERROR (-1403, DISCARD) ; (更详细的例子可以查看 GoldGate 官方文档中《 Oracle Installation and Setup Guide 》中的第 45 页。)
4. 强化获取。在 Oracle 9i 中, Oracle 在更新一个行以外的 LOB 时,会对同一行生个多个 update ,可以配置 Extract 来将这些操作捆绑成单个操作,可以使用 Extract 参数 FETCHOPTIONS 中的 SUPPRESSDUPLICATES 选项。

管理 LOB 缓存
由于 Replicat 必须往目标数据库中按分段写 LOB 数据,在 Replicat 和数据库中间可能会产生太多 I/O 。为了最小化这个 I/O 对系统的影响, Replicat LOB 分段缓存在一个指定大小的缓冲区中,仅当缓冲区满的时候才会执行写入。默认的大小是 32k 。打个比方,如果这个缓冲区有 25k ,那么 Replicat 以每个块 25k 来写入数据库,处理一个 100k LOB Replicat 只产生 4 I/O
使用 Replicat 参数 DBOPTIONS 参数中的 LOBWRITESIZE 选项来控制 LOB 缓冲区的大小;如果要禁用 LOB 缓存,使用 DBOPTIONS 参数的 DISABLELOBCACHING 选项。

RAC 中的追加说明
总体需求:
RAC 集群中的所有节点必须同步系统时钟。 GoldenGate 通过比较本地系统的时间和事务提交的时间点来做出关键决策。可以通过 NTP 来不同系统时间,另外可以在 Oracle GoldenGate Windows and UNIX Reference Guide 中查看关于 THREADOPTIONS 参数的 IOLATENCY 选项的相关说明。所有节点上的 COMPATIBLE 参数设置也必须相同。

RAC GoldenGate 参数的设置:
1. AIX Solaris 机器上,使用 Extract 中的 THREADOPTIONS 参数和 BINDCPU 选项。这个参数处理被不同的处理器所更新的内存相关的线程安全问题。
2. GoldenGate 在传送数据到目标系统以前,会将数据放在内存里的队列中。 THREADOPTIONS 参数的 INQUEUESIZE OUTQUEUESIZE 决定队列的长度。需要的话,可以通过调整这些参数来提高抽取的性能。
3. GoldenGate 会检测孤儿事务,如果在一个事务过程中发生节点故障,就会出现这种情况, Extract 不能捕获到回滚动作。虽然数据库会在 failover 节点中执行回滚,然而该事务仍然会存在于 Extract 事务列表中,并阻碍了正在处理这个事务的 Extract 线程进一步的检查点。默认情况下, GoldenGate 在确认了孤儿事务后会从列表中清除它们。如果你想进行控制,可以使用 TRANLOGOPTIONS 参数中 PURGEORPHANEDTRANSACTIONS|NOPURGEORPHANEDTRANSACTIONS TRANSCLEANUPFREQUENCY 选项。这个功能可以通过 GGSCI 上的 SEND EXTRACT 命令来控制。

RAC 上的特殊处理:
1. 如果正在运行 GoldenGate 的主数据库实例停止,或发生了其他故障, Extract 将会中断。为了恢复处理,你可以重启实例,或将 GoldenGate 二进制文件重新挂载到另一个节点上,然后重新启动 GoldenGate 进程。在另一个节点上启动 GoldenGate 进程以前,要停止原节点上的 Manager 进程。
2. 一旦 redo 线程数发生了改变,必须删除并重建 Extract 组。
3. 为了将 SQL 操作写入到 trail 中, Extract 必须确定正在读取的 redo 前面没有其他节点的其他操作。打个比方,一个日志包含了 1:00 2:00 执行的操作,同时节点 2 的日志中包含了 1:30 2:30 执行的操作。那么,只有 2:00 以前的操作会被移动到协调 redo 数据的主 Extract 进程所在的服务器上。 Extract 必须确保在 2:00 2:30 之间没有更多的操作需要被捕获 ( 保证不同节点中的事务能按顺序写入到 trail 文件中 )
4. active-passive 环境中,这个先决条件意味着你可能需要在 passive 节点上执行一些操作和归档日志,以确保 active 节点上的操作被传送到 passive 节点。这能解决缓慢的归档进程和失效的网络连接引发的问题,以及从 Oracle 节点中移动归档日志到主 Extract 协调 redo 数据所在的服务器上可能出现的问题。
5. 为了处理 RAC 上的最后一个事务,在关闭 Extract 前往 GoldenGate 正在复制的源表中插入一条伪记录,然后在所有节点上切换日志。这会更新 Extract 检查点并确认所有归档都能被读取。同时可以确认这些归档日志中的所有事务都已被捕获并以正确的顺序写入到了 trail 文件中。


管理 Oracle 复制环境

启用和禁用 DDL 触发器
你可以启用和禁用捕获 DDL 操作的触发器,而不需要修改 GoldenGate 中的任何配置。下面的脚本可以控制 DDL 触发器: ddl_disable ,禁用触发器; ddl_enable ,启用触发器,将从启用开始捕获 DDL 操作。
在运行这些脚本以前,断开执行过 DDL 操作的会话,包括 GoldenGate 进程、 SQL*Plus 、业务应用、和使用 Oracle 的其他软件。否则数据库可能会产生 ORA-04021 错误。

维护 DDL marker
你随时都可以清除 marker 表中的行,它不会保存 DDL 历史记录。使用 Manager 参数 PURGEMARKERHISTORY 来清除 marker (PURGEMARKERHISTORY 指定一行从最后修改日期开始的最大和最小的保留时间 ) Manager 通过以下方式之一来获取 marder 表的名称: GLOBAL 文件中的 MARKERTABLE 参数;默认的名称 GGS_MARKER

删除 DDL marker
不要删除这个表,除非你准备中断 DDL 同步。 DDL 触发器和 marker 表是相互依赖的。如果 DDL 触发器处于启用状态,删除 marker 表的操作将会失败。如果你移除了 marker 表,将会产生错误 ORA-04098: trigger 'SYS.GGS_DDL_TRIGGER_BEFORE' is invalid and failed re-validation

清空 DDL trace 文件
为了防止 trace 文件过度消耗磁盘空间,定期地运行 ddl_cleartrace 脚本。这个脚本会删除文件,但 GoldenGate 将重新创建它。 DDL trace 文件的默认名称是 ggs_ddl_trace.log 。它在 Oracle USER_DUMP_DEST 路径下。 ddl_cleartrace 脚本在 GoldenGate 目录下。

DDL 支持启用时应用数据库补丁和更新
数据库补丁和升级常常会使 GoldenGateDDL 触发器和其他的 GoldenGate DDL 对象失效。在应用数据库补丁之前,执行下面的步骤: 1. 禁用 GoldenGate DDL 触发器 @ddl_disable 2. 应用补丁; 3. 启用 DDL 触发器 @ddl_enable

DDL 支持启用时应用 GoldenGate 补丁和更新
注意:如果在新版本中有升级说明,应该按照该说明来进行升级。对 10.4 版本以前的 GoldenGate ,也不要采用下面的步骤。
1. 运行 GGSCI ,在这个过程中保持该会话的打开状态
2. 停止 Extract 进程来停止捕获 DDL STOP EXTRACT
3. 停止 Replicat 进程来停止复制 DDL STOP REPLICAT
4. 下载或解压补丁或升级文件
5. 进入 GoldenGate 安装目录下
6. 运行 SQL*Plus ,并用具有 SYSDBA 权限的用户登录
7. 断开产生过 DDL 的所有会话,包括 GoldenGate 进程、 SQL*Plus 、业务应用、已经其他任何使用 Oracle 的如阿健。否则数据库可能会出现 ORA-04021 错误
8. 运行 ddl_disable 脚本来禁用 DDL 触发器
9. 执行 ddl_setup 脚本,你可能需要输入 GoldenGate schema 名称、安装模式 (NORMAL/INITIALSETUP)
10. 执行 ddl_enable.sql 脚本启用 DDL 触发器
11. GGSCI 中,启动 Extract 来恢复 DDL 捕获 START EXTRACT
12. 启用 Replicat 进程来启动 DDL 复制 START REPLICAT

安装之后修改 DDL 对象名称
1. 运行 GGSCI ,保持该会话处于启动状态
2. 停止 Extract 进程来停止捕获 DDL STOP EXTRACT
3. 停止 Replicat 进程来停止复制 DDL STOP REPLICAT
4. 进入 GoldenGate 安装目录下
5. 运行 SQL*Plus ,并用具有 SYSDBA 权限的用户登录
6. 断开产生过 DDL 的所有会话,包括 GoldenGate 进程、 SQL*Plus 、业务应用、已经其他任何使用 Oracle 的如阿健。否则数据库可能会出现 ORA-04021 错误
7. 运行 ddl_disable 脚本来禁用 DDL 触发器
8. 如果要修改 DDL schema 的名称,可以在 GLOBALS 文件中指定新的名称: GGSCHEMA
9. 如果需要修改任何其他对象的名称,在 params.sql 脚本中执行新的名称,但不要执行这个脚本;如果要修改标记表的名称,在 GLOBALS 文件中指定参数 MARKERTABLE ;如果要修改历史表的名称,在 GLOBALS 文件中指定参数 DDLTABLE
10. 如果需要使用新的 schema 来储存 DDL 同步对象,现在创建该 schema
11. 进入 GoldenGate 安装目录下
12. 运行 SQL*Plus 并以具有 SYSDBA 权限的用户登录
13. 运行 ddl_setup 脚本
14. 运行 ddl_enable.sql 脚本来启用 DDL 触发器
15. GGSCI 中,启动 Extract 来恢复 DDL 捕获 START EXTRACT
16. 启动 Replicat 进行来开始 DDL 复制 START REPLICAT

重建已经存在的 DDL 环境到一个干净的状态
按照下面步骤来完全移除并重新安装 GoldenGate DDL 对象。由于对象间的相互依赖,所有对象都需要移除并重建
1. 如果你想结合安装新版本的 GoldenGate 来执行这个步骤,下载并安装 Oracle GoldenGate 文件,必要的话创建或升级进程组和参数文件
2. ( 可选 ) 为了保持源和目标结构的连贯性,停止 DDL 活动并确保 Replicat 已经处理完所有的 DDL 并已复制完 trail 中的 DML 数据。执行这个命令,如果 Replicat 已经结束,会看到一条消息提示没有更多的数据需要处理 INFO REPLICAT
3. 运行 GGSCI
4. 停止 Extract 来停止捕获 DDL STOP EXTRACT
5. 停止 Replicat 进程来停止复制 DDL STOP REPLICAT
6. 进入 GoldenGate 安装目录下
7. 运行 SQL*Plus ,并用具有 SYSDBA 权限的用户登录
8. 断开产生过 DDL 的所有会话,包括 GoldenGate 进程、 SQL*Plus 、业务应用、已经其他任何使用 Oracle 的如阿健。否则数据库可能会出现 ORA-04021 错误
9. 运行 ddl_disable 脚本来禁用 DDL 触发器
10. 运行 ddl_remove

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12402/viewspace-1057800/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
user_pic_default.png
请登录后发表评论 登录
全部评论
<%=items[i].createtime%>

<%=items[i].content%>

<%if(items[i].items.items.length) { %>
<%for(var j=0;j
<%=items[i].items.items[j].createtime%> 回复

<%=items[i].items.items[j].username%>   回复   <%=items[i].items.items[j].tousername%><%=items[i].items.items[j].content%>

<%}%> <%if(items[i].items.total > 5) { %>
还有<%=items[i].items.total-5%>条评论 ) data-count=1 data-flag=true>点击查看
<%}%>
<%}%> <%}%>

转载于:http://blog.itpub.net/12402/viewspace-1057800/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值