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. entity reference在views中的运用

    一个views block可以获取从url过来的nid,某个node的有entity reference字段, 填入一点数据,然后在views里关联一下这个entity reference field ...

  2. perl 语法速查

    同时学perl.python和shell脚本会很容易将它们的语法搞混,本文主要是一个个人的总结,方便要用时的查询. perl基本语法.安装.帮助文档 文件头格式: #!/usr/bin/perl us ...

  3. The Daligner Overlap Library

    /************************************************************************************\ * * * Copyrig ...

  4. Unity3D 5.1烘培 操作

    http://blog.csdn.net/asd237241291/article/details/48056575 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 Unity3D引擎技 ...

  5. 用dx实现半透遮挡效果

    四种技术方案: 1.两次绘制role实现半透遮挡2.背景中已经包含building, 则额外绘制一次半透的building即可实现半透遮挡3.利用building的遮罩实现半透遮挡, 利用rtt技术4 ...

  6. PHP 启动 cURL模块以及启动失败的解决方案

    配置方法: php_curl.dll libeay32.dll ssleay32.dll php5ts.dll 复制到 %windir%/system32 以及php 目录的ext目录 下 并且找到p ...

  7. python与unicode

    Unicode是一种在计算机上使用的字符编码,是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言.跨平台进行文本转换.处理的要求. Uni ...

  8. javaSE之如何将一个文件复制到另一个文件

    /* * (1). 文件字符输入,输出流 * 文件字节输入,输出流的read和write方法使用 * 字节数组读写数据,即以字节为单位处理数据,因此,字节流不能很好的操作Unicode字符 * ,比如 ...

  9. 初学java之(盒子分布)

    import javax.swing.*; import java.awt.*; class WinGrid extends JFrame { Box basebox , boxv1,boxv2; p ...

  10. 《JavaScript权威指南》读书笔记(二)

    日期:2015-12-04 js 的原型::闭包:闭包这是个相当复杂的东西...现在初步理解:    http://segmentfault.com/a/1190000000652891    闭包有 ...