Oracle RAC环境实时数据迁移

Oracle RAC环境实时数据迁移

———————————————————————————————————————

系统要求及安装前的说明

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 = <path to Oracle home location>) 及 SETENV (ORACLE_SID = <SID>) 还需要将GoldenGate安装目录添加到共享库的环境变量中,如: export LD_LIBRARY_PATH=/ggs/10.0:$LD_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 <schema>;

3. 为这些对象选择一个表空间,并且该表空间的剩余空间要能承担GGS_DDL_HISTGGS_MARKER表的数据增长,特别是GGS_DDL_HIST,它会根据DDL操作的频繁程度按比例增长。如果没有足够的表空间,数据库中的DDL操作将不能完成,业务应用会被挂起。

4. 在这个GoldenGate实例的主目录中打开GLOBALS文件,并将上述schema配置到参数中:GGSCHEMA <schema_name>

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_user>  该脚本会将该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_LANG: VIEW REPORT <group>


需要在操作系统中配置NLS_LANG环境变量,该变量的格式应该是<NLS_LANGUAGE>_<NLS_TERRITORY>.<NLS_CHARACTERSET>

要应用新的环境变量,需要重启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 space> = <UNDO_RETENTION> * <UPS> + <overhead>

<UPS>是每秒产生的undo块数, <overhead>是元数据的最小开销。这两个数值可以通过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 <db_user>; 或 GRANT FLASHBACK ON <owner.table> TO <db_user>;


GoldenGatefetch选项中,它提供了一些参数来进行管理:

1. 使用带REPORTFETCH选项的STATS EXTRACT命令来查看fetch统计信息。

2. ExtractSTATOPTIONS参数中设置REPORTFETCH选项来使得STAT

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值