Oracle GoldenGate为用户提供了以下操作方式:
- GGSCI(Oracle GoldenGate 软件命令接口)
- 批处理和shell脚本
- 参数文件
GGSCI以命令行的方式,配置、控制,和监控OGG。执行GGSCI最好是在安装OGG的目录下。例如/u01/app/oracle/goldengate
GGSCI提供了通配符*来简化我们的操作,*号是IT词汇中的万能替代者,在Oracle GoldenGate中也不列外。当我们要启动多个进程时,可以简单的输入
GGSCI > START *
或者我们要选择启动多个提取进程,并且名称中包含字母X的,可以输入
GGSCI > START EXTRACT *X*
同Linux操作系统一样,OGG也可以查看之前输入过的命令,输入:
GGSCI > HISTORY
如果想重复执行刚刚输入过的命令可以输入!,感叹号。如同sqlplus中输入/可以再次执行刚刚的那条SQL语句一样
GGSCI > !
在GGSCI命令行输入很长的参数后发现错误了,可以输入FC命令进入编辑状态,调整好该命令重新执行。就像sqlplus中使用预先设定好的ed来修改sql语句一样。
如果我们需要按照规定的顺序输入一些命令的时候,就像RMAN备份中的run块结构那样分配通道,备份数据文件,备份归档文件,删除归档文件...顺序执行一系列预先编写好的指令呢?OGG想到了这一点,为用户提供了一个叫做OBEY的方式来输入命令。所谓OBEY,就是将命令行输入到一个文本文件中,一行输入一个命令,顺序输入。在GGSCI命令接口调用该文件,就可以完成一系列的操作了。下面给出一个OBEY的示例文件
ADD EXTRACT myext, TRANLOG, BEGIN now
START EXTRACT myext
ADD REPLICAT myrep, EXTTRAIL /ggs/dirdat/aa
START REPLICAT myrep
INFO EXTRACT myext, DETAIL
INFO REPLICAT myrep, DETAIL
该文件要完成添加提取进程myext,添加复制进程myrep,启动提起进程,启动复制进程,监控提起进程状态,监控复制进程状态一共6个独立的命令。在OBEY中事先写好命令,以脚本的方式执行是不是很方便。
在GGSCI中调用OBEY输入下面的命令
GGSCI > OBEY /dirdat/myObey
使用Oracle GoldenGate参数文件
大多数的OGG功能都是通过配置文件来实现的,配置文件是纯文本文件。可以直接使用vi来编辑。了解OGG的功能要从配置文件的参数开始。OGG的进程从配置文件中读取参数。参数文件分为两种,一种是全局参数文件,另一种是运行中参数文件。
GLOBALS参数文件在ogginstance整个生命周期都有效。该参数为活动参数,可以在运行状态中修改,不需要重新启动。该参数文件适用于所有的OGG实例,但是优先级较低。可以被其它进程的配置参数“覆盖”,执行自己单独的配置。就像国家制定的最低工资标准,各个地区会根据经济条件作出相应的调整。
GLOBALS参数文件不是OGG软甲所依赖的。使用不适用都可以。如果使用的话,需要注意的是该文件需要在OGG进程启动之前配置好。
使用GLOBALS配置文件有什么好处呢?可以看两个例子
GGSCHEMA oggadmin
CHECKPOINTTABLE oggadmin.checkpointtable
第一参数表示OGG的进程与oracle数据库交互的那个用户名。通过该用户名可以login到数据库,细节我们以后再说。
第二个参数是在复制端,灾备端,或target端,怎么称呼都可以,独有的设置。目的是告诉OGG检查点的表叫什么名字。现在只是提一笔,以后再说
这些配置在全局都有效,是共通的,基本上不会改变,适合写在这里。
由于是全局配置文件,所以它应当是第一个被创建出来的配置文件。在所有进程都没创建之初,最先被创建出来的。
创建一个GLOBALS文件很简单。确保当前目录为OGG安装目录,然后在命令行接口输入以下命令
GGSCI > EDIT PARMAS ./GLOBALS
GLOBALS文件创建好后,在编辑状态可以输入我们所需的参数。每个命令单独占用一行。编辑后退出该文件,在退出GGSCI命令行接口,重新进入GGSCI接口使GLOBALS被当前session所加载。
例如刚才示例中的GGSCHEMA oggadmin
运行时参数
运行时参数为你提供了从各个方面来控制OGG同步工作的有力工具,比如:
- 挑选数据,映射,转换和复制
- 挑选DDL和sequence,映射,转换盒复制
- 错误解析
- 记录日志
- 状态报表和错误报表
- 系统资源使用情况
- 启动和运行的行为
EXTRACT参数文件
-- 提取组名称
EXTRACT capt
-- 提取进程的数据库用户名,和密码加密方式
USERID ogg, PASSWORD AACAAAAAAAAAAAJAUEUGODSCVGJEEIUGKJDJTFNDKEJFFFTC &
AES128, ENCRYPTKEY securekey1
-- Discard file
DISCARDFILE /ggs/capt.dsc, PURGE
-- 复制端数据库的通信地址及端口号, 数据加密格式:
RMTHOST sysb, MGRPORT 7809, ENCRYPT AES192 KEYNAME mykey
-- trail 数据的加密方式
ENCRYPTTRAIL AES192 KEYNAME mykey1
-- 复制端trail所在位置
RMTTRAIL /ggs/dirdat/aa
-- 被捕获的表对象,FIN用户下所有表和SALES用户下所有表
TABLE FIN.*;
TABLE SALES.*;
再来看看复制参数文件
-- 复制组名称
REPLICAT deliv
-- 复制端数据库用户id和口令加密方式
USERID ogg, PASSWORD AACAAAAAAAAAAAJAUEUGODSCVGJEEIUGKJDJTFNDKEJFFFTC &
AES128, ENCRYPTKEY securekey1
-- 文件包含生产端(源端)的对象的定义
SOURCEDEFS /ggs/dirdef/defs
-- Discard file
DISCARDFILE /ggs/deliv.dsc, PURGE
-- trail 加密方式
DECRYPTTRAIL AES192 KEYNAME mykey1
-- 错误处理规则
REPERROR DEFAULT, ABEND
-- 忽略插入语句操作
IGNOREINSERTS
-- 将生产端映射到复制端
MAP “fin”.“accTAB”, TARGET “fin”.“accTAB”,
COLMAP ("Account" = “Acct”,
"Balance" = “Bal”,
"Branch" = “Branch”);
-- 取得插入(insert)操作
GETINSERTS
-- 生产端映射到复制端,过滤条件为branch=’NY’
MAP “fin”.”teller”, TARGET “fin”."tellTAB",
WHERE ("Branch" = 'NY');
注意,配置文件中如果有区分大小写的地方需要加入“”,否则默认情况是不区分大小写的。
创建一个参数文件
创建一个参数文件可以使用GGSCI命令行接口,也可以使用vi直接编辑参数文件。
下面的语句创建一个Manager参数文件
GGSCI > EDIT PARMAS MGR
下面的语句创建一个提取参数文件
GGSCI > EDIT PARAMS extora
除了使用GGSCI命令接口,也可以使用vi等编辑工具来创建参数文件。文件后缀规定为.prm。例如mgr.prm,extfin.prm分别为Manager参数文件和Extract参数文件。
查看已经编辑好的参数文件,可以EDIT PARAMS GMR,也可以使用命令VIEW PARAMS GMR,如果参数文件没有创建在ogg默认的安装路径下,需要制定该文件的绝对路径。例如
VIEW PARAMS /home/oracle/replp.rmp
更改参数文件
当我们需要修改参数文件时候,要特别注意一点是该进程是不是正在运行。如果正在运行,需要先停止该进程再修改参数,修改完毕再重新启动该进程。
STOP EXTRACT EX1
EDIT PARMAS EX1
START EXTRACT EX1
对象命名的限制(Non-supported special characters)
关于对象命名的支持,也就是什么样的命名可以识别,什么样的命名不可以识别。其实我们需要关注的是不支持的内容,也就是不能识别的内容。因为ogg不是万能的,它的不支持列表,就是一张传输黑名单。在创建对象名称时一定要避免使用这些字符,否者该对象无法被复制,传输。
Character Description
{ } Begin and end curly brackets (braces)
[ ] Begin and end brackets
= Equal symbol + Plus sign
! Exclamation point
~ Tilde |Pipe &Ampersand : Colon
; Semi-colon , Comma
‘ ’ Single quotes
“ ” Double quotes
' Accent mark (Diacritical mark)
. Period
< Less-than symbol
> Greater-than symbol
在参数文件中输入传输对象还需要注意的方面:
- 对象名的长度不限(这个不限也是相对的吧?),只要符合支持标准就可以。
- 如果一个对象名称没有schema限制,比如只写入了一个表名EMP,而不是SCOTT.EMP这种方式,那么OGG默认登录的会话的schema。好绕嘴,举个例子吧。如果登录的用户是FIN,那么OGG默认配置文件中的EMP为FIN.EMP;登录用户是SCOTT,那么默认配置就是SCOTT.EMP
- 如果对象名中包含了特殊字符,比如空格等需要使用“”双引号。
- 如果对象名是区分大小写的,需要对schema和对象名分别使用“”双引号:
错误的: TABLE “Sales.ACCOUNT”
对象名也可以配合通配符一起使用
- ?通配符:该通配符可以表示任何单一的字母。比如一个schema下的表明都是TABn,n是0-9的数字。使用HQ.TAB?,就可以包含从TAB0,TAB1一直到TAB9的所有范围。
- *通配符前面提到过了。HQ.*就是代表schemaHQ下所有对象,包括HQ.TOTAL, HQ.T123, and
- 在生产端(源端)在映射表的时候可以使用*,?通配符省去很多繁琐的输入。
- 例如:
- TABLE HQ.*;
- MAP HQ.T_*;
- MAP HQ.T_*, TARGET HQ.*;
我们可以使用“”双引号来约束对象名的写法,强制它为敏感类型。下面来看一些例子:
下面的结果是相同的:
TABLE *;
TABLE “*”;
使用?通配符也会是相同的结果,因为?只比配一个字母
TABLE ?;
TABLE “?”;
关于通配符就说这么多吧,实际上生产环境很少使用这种灵活的配置。都是把对象名写死在配置文件中,好处是可以随时注释掉出问题的对象名,不影响OGG传输。