背景
本篇文章是基于OGG软件安装完成,源端抽取进程和dump进程都配置完成,目标端复制进程也配置完成,目标端对接的是oracle数据库,但是目标端使用的数据库用户的权限不是授权的DBA权限。
目标端使用的数据库用户的权限角色配置有:CONNECT、RESOURCE。
问题
启动复制(Replicat)进程时报错,显示进程ABENDED,使用命令(view report 进程名)查看报错报告的时候,显示是报错:ERROR OGG-00662 OCI Error allocating error handle (status = -2)
解决过程
1、开始的时候怀疑复制(Replicat)进程配置文件中数据库的连接地址写的不对,但是使用dblogin能登录成功,所以排除了错误的可能性;
2、如果给目标端数据库用户授予DBA的权限,复制进程启动就没问题,所以确定是数据库用户权限问题。
接下来,我们采用分组给数据库用户增加权限的方式,逐步缩小影响报错的是哪个具体权限,最终找出了这个具体的权限,授权语句如下:exec DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE(数据库用户名称);
总结
1、关于用户权限的说明:
一般为了在使用OGG同步数据时可以顺利进行,需要给予用户以下权限:
Onsource database (extract):
GRANT CREATE SESSION, ALTER SESSION,RESOURCE, CONNECT,SELECT ANY dictionary,SELECT ANY TRANSACTION TO 数据库用户;
GRANT flashback ANY TABLE, SELECTANY TABLE TO 数据库用户;
GRANT EXECUTE ON dbms_flashback TO 数据库用户;
Ontarget (Replicat) database:
GRANT CREATE SESSION, ALTER SESSION,RESOURCE, CONNECT,SELECT ANY dictionary TO 数据库用户;
GRANT SELECT ANY TABLE, INSERT ANYTABLE, UPDATE ANY TABLE, DELETE ANY TABLE TO 数据库用户;
GRANT CREATE TABLE, ALTER ANY TABLE,LOCK ANY TABLE TO 数据库用户;
GRANT ALTER ANY TABLE TO 数据库用户;
也可以直接给予用户DBA权限,但是这样做是有一定安全隐患的,实际企业中一般不会将DBA权限直接授予其他用户,可能还会涉及到数据库有专门的运维人员维护,这种权限把控的会更加严格。(我们不涉及DDL的同步,所以我们只要授权CONNECT和RESOURCE权限角色即可)。
2、OGG工作模式以及权限的说明
从Oracle Goldengate 11g版本开始,oracle引入了一种新的capture mode,称为Integrated Capture Mode。传统的capture mode被称为classic capture mode。
在classic capture mode中,goldengate extract进程直接读取oracle redo log,捕获数据变化,存为Goldengate的trail file格式,然后利用pump进程将这些trail file传输到目标数据库,目标数据库上的replicat进程读取这些trail file,再利用sql将这些变化apply到目标数据库里。而在新的integrated capture mode中,goldengate extract进程不再直接读取oracle redo log,而是通过与数据库log mining server整合来捕获数据变化:log mining server负责以LCR的格式从数据库日志中捕获数据变化,然后extract进程再将这些抓取的数据存成trail file的格式。
与classic capture mode相比,这种integrated capture mode的主要差别就是extract不再直接读取oracle redo log,而交由数据库内部的log mining工具来完成。由于extract进程是由操作系统来管理的,身处数据库系统之外,integrated capture mode的这种改变所带来的主要好处体现在兼容性方面:支持更多的数据类型和存储类型,以及由于与数据库更紧密的整合,不再需要为Oracle RAC,ASM和TDE作更多额外的配置工作。
integrated capture mode带来的另一个重要变化就是:开始支持local和downstream两种配置选项。而在classic capture mode中,我们只有local这一种选择,也就是extract进程必须配置在源数据库服务器上。
我们使用的是Integrated Capture Mode,但是这种模式不同的版本,权限的授权方式有所区别,请根据OGG的版本需要特别注意:
11.1 and 11.2.0.1
exec DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(数据库用户);
11.2.0.2 and later
exec DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE(数据库用户);