ogg 在连接数据库的时候,报如下错误:
[oracle@app-agent ~]$ cd /home/oracle/ogg19
[oracle@app-agent ogg19]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Oct 17 2019 23:13:12
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
GGSCI (app-agent) 1> dblogin userid ogg@NHX_15,password ogg
Source Context :
SourceModule : [ggdb.ora.ocicpp.oraconn]
SourceID : [ggdbora/ocicpp/ORAConnection.cpp]
SourceMethod : [initConn]
SourceLine : [297]
ThreadBacktrace : [16] elements
: [/home/oracle/ogg19/libgglog.so(CMessageContext::AddThreadContext())]
: [/home/oracle/ogg19/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...))]
: [/home/oracle/ogg19/libgglog.so(_MSG_(CSourceContext*, int, CMessageFactory::MessageDisposition))]
: [./ggsci(ggs::gglib::ggocicpp::ORAConnection::initConn(ggs::gglib::ggdbconnection::DBConnectionParams const&, ULibCharSet, ULibCharSet))]
: [./ggsci(ggs::gglib::ggocicpp::ORAConnection::createConnection(ggs::gglib::ggdbconnection::DBConnectionParams const&, ULibCharSet, ULibCharSet))]
: [./ggsci(gl_db_login(char const*, char const*, ggs::gglib::ggapp::CDBObjName<(DBObjType)11>&, ggs::gglib::ggapp::CDBObjName<(DBObjType)12>&, short, char (&) [2048]))]
: [./ggsci()]
: [./ggsci(GGSCIDB_get_command(char const*, char const*, char const*, short, char (&) [2048]))]
: [./ggsci(do_cmd(char*, unsigned long, char*, unsigned long))]
: [./ggsci()]
: [./ggsci(ggs::gglib::MultiThreading::MainThread::ExecMain())]
: [./ggsci(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*))]
: [./ggsci(ggs::gglib::MultiThreading::MainThread::Run(int, char**))]
: [./ggsci(main)]
: [/lib64/libc.so.6(__libc_start_main)]
: [./ggsci()]
2024-08-02 16:46:28 ERROR OGG-01112 Unexpected condition in initConn at line 297.
2024-08-02 16:46:28 ERROR OGG-01668 PROCESS ABENDING.
[oracle@app-agent ogg19]$
OGG 官方网站上对这两个报错的解释如下:
OGG-01112: Unexpected condition in function {0} at line {1,number,0}.
An internal error occurred.
Action:
Contact Oracle Support.
OGG-01668: PROCESS ABENDING
An unrecoverable error occurred and processing cannot continue.
Examine previously issued error messages for possible causes and actions.
我们将ogg直接安装在数据库服务器上,不走TNS,仍然报错,这样就排除了驱动和TNS的问题。
看到报错信息中有 char 字样,考虑是否是字符集的问题。
将 xshell, LANG, NLS_LANG 均设置成 GBK 后,问题依旧。
考虑到连接其它11g或者19c的数据库服务器是正常的。于是将连接正常的数据库服务器和连接报错的数据库服务器的参数进行对比(v$parameter 和 database_properties),发现两都的 NLS_CHARACTERSET 不一致。正常的值是ZHS16GBK,报错的值是ZHS32GB18030。
我们再次以 dbca 静默安装的方式用上面的两个字符集创建了两个实例,仅让字符集不一致,其它参数都一致,发现仍然是
ZHS16GBK登录正常,ZHS32GB18030报同样的错误。
再次尝试将xshell, LANG, NLS_LANG 均设置成 GB18030 后,问题依旧。
至此,问题定位。看来是这个版本的OGG不支持GB18030的字符集。
注:这台数据库于2016年创建,我们其它的数据库字符集都使用的 ZHS16GBK,只有这个实例使用的是 ZHS32GB18030,应该是当时的DBA错误设置导致。