
作者简介
石云华,Exadata中国用户组联合创始人,ORACLE ACE。毕业后一直从事Oracle数据库第三方运维服务工作,拥有十余年电信运营商、保险、税务、电力行业核心系统数据库运维经验。现就职于北京海天起点技术服务股份有限公司,oracle数据库专家组成员,Exadata部门负责人。个人著作有《Exadata实施运维指南》,《Oracle Exadata性能优化》
GoldenGate这款数据同步工具,无论是在安装部署,还是在数据抽取及复制的过程中,都需要与数据库进行交互,在一些极端情况下,GoldenGate出现故障时,GoldenGate自身的日志信息可能仍然无法定位故障原因。此时,就需要借助于数据库的诊断工具,进一步获取更多的日志信息来帮助诊断故障。
以下这个案例,就是巧用数据库工具来帮助分析GoldenGate故障的一个精典案例。
案例概要:
在配置GoldenGate的过程中,运行REGISTER EXTRACT命令来注册某个Extract进程时报错,错误信息如下所示。
ERROR OGG-01755 Cannot register or unregister EXTRACT EXTA1 because of the following SQL error: OCI Error 26,723. See Extract user privileges in the Oracle GoldenGate for Oracle Installation and Setup Guide. GGSCI (yun) 5> |
案例分析及处理:
(1)、从错误日志来看,错误描述非常简单,只是提及SQL error: OCI Error 26,723. 但不清楚这个错误的含义,让参考GoldenGate的安装手册,权限不够,但完全按照手册中的权限,仍然出现该问题.
(2)、这时,我们应该怎么办?首先,我们要知道,GoldenGate发出的命令,最终都会解析成数据库相应的命令,在数据库中运行,所以我们需要知道这个REGISTER EXTRACT命令,在数据库底层到底做了哪些事情。
尝试跟踪发出该命令的数据库底层会话的详细信息,发出REGISTER EXTRACT命令前,查看关于GoldenGate软件的数据库会话,如下所示。
SQL> select sid, prev_sql_id, sql_id, event, blocking_session, state 2 from v$session 3 where username = 'GGATE' 4 and osuser = 'ggate'; SID PREV_SQL_ID SQL_ID EVENT BLOCKING_SESSION STATE —– ————- ————- —————————– —————- ——— 27 4vscyf0q31wht SQL*Net message from client WAITING 28 4vscyf0q31wht SQL*Net message from client WAITING 29 4tn714x3k3mqy SQL*Net message from client WAITING 30 7c788jjtrpfbt SQL*Net message from client WAITING SQL> |
(3)、在GGSCI命令行中,运行dblogin登录数据库,如下所示。
GGSCI (yun) 5> dblogin userid ggate, password ggate_5678 Successfully logged into database. GGSCI (yun) 6> |
(4)、再次查看GoldenGate软件相关的数据库会话,如下所示。
SQL> / SID PREV_SQL_ID SQL_ID EVENT BLOCKING_SESSION STATE —– ————- ————- —————————– —————- ——— 27 4vscyf0q31wht SQL*Net message from client WAITING 28 4vscyf0q31wht SQL*Net message from client WAITING 29 4tn714x3k3mqy SQL*Net message from client WAITING 30 7c788jjtrpfbt SQL*Net message from client WAITING 41 4vscyf0q31wht SQL*Net message from client WAITING SQL> |
可见,在GGSCI命令行中运行dblogin登录后,生成的新的数据库会话的SID为41。
(5)、下面来跟踪SID为41的会话,在数据库后台开启10046事件,命令如下所示。
SQL> select kill -9 ||c.spid 2 from v$session b, v$process c 3 where b.paddr=c.addr 4 and b.sid=&1; Enter value for 1: 41 old 4: and b.sid=&1 new 4: and b.sid=41 KILL-9||C.SPID ——————————– kill -9 2322 SQL> SQL> conn / as sysdba Connected. SQL> SQL> oradebug setospid 2322 Oracle pid: 34, Unix process pid: 2322, image: oracle@yun SQL> SQL> oradebug unlimit Statement processed. SQL> SQL> oradebug tracefile_name /u01/app/oracle/diag/rdbms/db11g/db11g/trace/db11g_ora_2322.trc SQL> SQL> oradebug event 10046 trace name context forever,level 12 Statement processed. SQL> |
(6)、在GGSCI刚才dblogin登录后的命令行中再次运行REGISTER EXTRACT命令,如下所示。
GGSCI (yun) 8> register extract EXTA1 database 2013-02-16 20:33:48 ERROR OGG-01755 Cannot register or unregister EXTRACT EXTA1 because of the following SQL error: OCI Error 26,723. See Extract user privileges in the Oracle GoldenGate for Oracle Installation and Setup Guide. GGSCI (yun) 9> |
(7)、分析刚生成的10046事件的日志文件,有价值的信息不多,只提及一个err 26723错误。
(8)、再次分析该数据库会话的ERRORSTACK信息,命令如下所示。
SQL> oradebug dump errorstack 3; Statement processed. SQL> SQL> oradebug dump errorstack 3; Statement processed. SQL> |
(9)、分析生成的ERRORSTACK信息,发现报错时,该数据库会话正在执行一个内部的存储过程。
于是,连接到数据库,手工执行该存储过程,发现同样报错了,报错信息如下所示。
ORA-26723: 用户 “GGATE” 要求角色 “DV_STREAMS_ADMIN/DV_XSTREAM_ADMIN/DV_GOLDENGATE_ADMIN” ORA-06512: 在 “SYS.DBMS_LOGREP_UTIL”, line 182 ORA-06512: 在 “SYS.DBMS_LOGREP_UTIL”, line 225 ORA-06512: 在 “SYS.DBMS_CAPTURE_ADM_INTERNAL”, line 295 ORA-06512: 在 “SYS.DBMS_CAPTURE_ADM”, line 409 ORA-06512: 在 line 27 SQL> |
可见,GoldenGate的数据库用户需要以上权限,而这些权限说明该系统中配置过database vault。
(10)、验证当前的数据库环境是否配置过DV,命令如下所示。
[oracle@yun ~]$ cd $ORACLE_HOME/rdbms/lib [oracle@yun lib]$ ar -t libknlopt.a | grep -c kzvidv.o 1 [oracle@yun lib]$ |
输出结果为1,说明该数据库已经配置了DV。这是我的一个测试环境,突然想起来以前我在测试数据安全相关的产品时,在这个环境上部署过DV。
案例方案:
可以将DV功能关闭,关掉DV功能后,再次尝试注册命令,这次成功执行。
[oracle@yun ~]$ cd $ORACLE_HOME/rdbms/lib [oracle@yun lib]$ make -f ins_rdbms.mk dv_off [oracle@yun lib]$ make -f ins_rdbms.mk ioracle GGSCI (yun) 4> dblogin userid ggate@source, password ggate Successfully logged into database. GGSCI (yun) 7> register extract EXTA1 database 2013-02-16 21:20:19 INFO OGG-02003 Extract EXTA1 successfully registered with database at SCN 901914. GGSCI (yun) 8> |