OGG宏与C语言中的宏一样,提供了函数封装的功能,即可以将一些配置参数整理为一个宏,然后在多个参数文件中共用,针对环境复杂或多个复制点的情况尤其有用。下面我们将介绍如何创建一个宏的库,以及在OGG参数文件中如何使用创建的这个宏 library.
一个宏函数库是宏的集合,宏可以是一个库文件中包含多个宏的定义,或多个库文件,包括不同的宏定义。建议将库文件存放在OGG的dirmac目录下,同时,库文件使用.mac为后缀。这样可以在引用时方便的识别。

下面是一个宏的示例,所有内容存放在一个库文件中:“$OGG_BASE/dirmac/macrolib.mac”.

MACRO #dbconnect
BEGIN
userid gguser, password AACAAAAAAAAAAAHAAIFBOIYAMCGIMARE, encryptkey default
END;

MACRO #bpsettings
BEGIN
STATOPTIONS RESETREPORTSTATS

-- Generate a report every day at 1 minute after midnight.
-- This report will contain the number of operations, by operation
-- type, performed on each table.
REPORT AT 00:01

REPORTROLLOVER AT 00:01
REPORTCOUNT EVERY 60 SECONDS, RATE

-- End of "best practices" section
END;

MACRO #funcsmap
PARAMS (#src_table, #target_table)
BEGIN
   MAP #src_table, TARGET #target_table,
    colmap (usedefaults,
            orders_trans_ts = @GETENV ("GGHEADER", "COMMITTIMESTAMP"),
            trans_rec_loc8tr = @STRCAT (@GETENV ("RECORD", "FILESEQNO"),
                                        @GETENV ("RECORD", "FILERBA")),
            extract_lag_ms = @TOKEN ("TKN-EXTLAG-MSEC"),
            replicat_lag_ms = @GETENV ("LAG", "MSEC"),
            src_db_name = @TOKEN ("TKN-SRC-DBNAME"),
            src_db_version = @TOKEN ("TKN-SRC-DBVERSION"),
            src_txn_csn = @TOKEN ("TKN-TXN-CSN")
     );
END;

所有的宏使用关键“Macro”关键字开始定义,后面是宏的名称,以“#name”定义,宏的内容由“begin...end;”关键字包含,上面的三个宏定义分别是#dbconnect, #bpsettings, 和#funcsmap。其中
#dbconnect宏定义了一个DB连接的语句,使用默认的key进行密码加密;
#bpsettings宏定义了OGG中配置时的一些最佳建议,比如按天或按小时报告复制情况;
#funcsmap宏定义了一个map映射,要注意的是它要求带两个参数来使用;

下面是该宏在一个replicat端的使用:

nolist
include ./dirmac/macrolib.mac
list

replicat rfuncb
#dbconnect ()
#bpsettings ()
sourcedefs ./dirdef/mydefs.defs
discardfile ./dirrpt/rfuncb.dsc, purge
#funcsmap (amer.orders, euro.funcs_test)

当rfuncb投递进程启动时,include语句将加载库文件:./dirmac/macrolib.mac。参数nolist的意思是告诉投递进程不要把后面的执行情况写入到日志文件中,而list参数则是要求后续的执行语句都要写日志。
如果本参数文件中没有list语句,则整个投递进程将不会有任何日志输出到文件中。
当投递进程读取这个replicat参数文件时,它会将引用的宏替换为库文件中的语句定义,因此“#dbconnect ()”,“#bpsettings ()” 和 “#funcsmap (amer.orders, euro.funcs_test)”都会被替换为相应的语句。

“#funcsmap”宏使用了两个参数,分别代表源表和目标表。PARAMS关键字是告诉使用人员,这个宏需要有参数才能运行。针对参数的使用,有以下几点注意事项:

  • 参数名不区分大小写;
  • 参数名中不能使用引号;
  • 参数在宏定义中不是必须的;
  • 一个宏最多可以有99个参数,所有参数的长度不能超过9999字节;
  • 所有参数都必须在PARAMS语句中定义,当调用宏时,所有参数都必须赋值。

小结
OGG宏在灵活运用和配置OGG参数时是个不错的技巧,特别是针对多个配置文件和复杂环境时,可以在一个文件中定义常用的一组操作,然后在所有环境中使用,降低运维的复杂性。

Oracle GoldenGate: 使用宏的更多相关文章

  1. 76 道 Oracle Goldengate 面试问题

    基础 12c新特性 性能 Troubleshoot 其它 1. Oracle Goldengate 支持部署到哪些拓扑? GoldenGate supports the following topol ...

  2. Streaming data from Oracle using Oracle GoldenGate and Kafka Connect

    This is a guest blog from Robin Moffatt. Robin Moffatt is Head of R&D (Europe) at Rittman Mead, ...

  3. Oracle Goldengate REPLICAT启动时报正在运行解决办法

    stop replicate时报ERROR: opening port for REPLICAT MYREP (TCP/IP error: Connection refused). start rep ...

  4. Oracle GoldenGate 12c实时捕获SQL Server数据

    在Oracle GoldenGate 12c中,对一些最新的数据库提供了支持,比如SQL Server 2012/2014,当然12c也支持sql server 2008.主要新增特性有: 捕获进程可 ...

  5. Oracle GoldenGate 12c (12.1.2.0.1) for IBM DB2 iSeries

    OGG 12.1.2.0.1 for iSeries 在2014.2.15发布,主要新增如下功能: 本地交付(Native Delivery Replicat):新功能允许用户在IBM i服务器上安装 ...

  6. Oracle GoldenGate 11.2 OGG-01168(转)

    为客户部署的Oracle GoldenGate在测试阶段出现如下的错误: 2012-04-24 10:45:20  ERROR   OGG-01168  Oracle GoldenGate Deliv ...

  7. 使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

    使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务 作者:Nikolay Manchev 分步构建一个跨这些平台的 ...

  8. [转]Oracle GoldenGate安装配置

    ref:http://blog.sina.com.cn/s/blog_5d29418d0101cvyx.html 1 简介 Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软 ...

  9. [置顶] Oracle GoldenGate 系列:使用 Oracle ASM API DBLOGREADER 时遇 ora-01031 错误

    今天在自己新搭建的 Oracle ACFS 文件系统上测试 GoldenGate ,启动 extract 进程报如下错误: 2013-08-27 14:58:39  ERROR   OGG-00446 ...

随机推荐

  1. mysql下sql语句 update 字段=字段+字符串

    mysql下sql语句 update 字段=字段+字符串   mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgr ...

  2. apk瘦身(包大小优化)

    最近太忙好久没有写随笔,放假才有空写写随笔. 最近在项目中一直在做包大小优化 随着业务需求的增加,包大小是忍不住的往上涨 为了提高应用市场下载转化率,一直在优化包大小 首先 分析你的apk中占比的主要 ...

  3. Python 练习 11

    #!/usr/bin/python # -*- coding: UTF-8 -*- import math for i in range(10000): #转化为整型值 x = int(math.sq ...

  4. append appendChild appendTo区别

    1.append和appendChild的区别 append是jquery文档操作用法 ① append() 方法在被选元素的结尾(仍然在内部)插入指定内容. $(selector).append(c ...

  5. java synchronized类锁,对象锁详解(转载)

    觉得还不错 留个记录,转载自http://zhh9106.iteye.com/blog/2151791 在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看 ...

  6. discuz核心函数库function_core的函数注释

    /** * 系统错误处理 * @param <type> $message 错误信息 * @param <type> $show 是否显示信息 * @param <typ ...

  7. hduoj-----(2896)病毒侵袭(ac自动机)

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. struts2配置通用action一个顶N个,你还在写一大堆action吗?

    <!-- 通用action!!!约定优于配置 --> <action name="*_*" class="cn.cnsdhzzl.action.{1}A ...

  9. MATLAB 矩阵转化为灰度图

    A=[ 1.00 0.96 0.98 0.88 0.94 0.61 0.96 0.80 0.98 0.89 0.96 1.00 0.94 0.90 0.95 0.71 0.96 0.83 0.90 0 ...

  10. 再谈HTML

    关于WEB 采用B/S计算模式开发的应用程序我们一般称为Web应用程序. WEB三大层面: 网页的结构部分:结构的定义使用HTML语言(超文本标记语言Hyper Text Mark Up Langua ...