GoldenGate:error while loading shared libraries: libnnz11.so
环境说明:
RHEL 5 + GoldenGate 112101 + Oracle Database 10g
在执行ggsci的时候,出现如题所示的错误。
具体过程如下:
1 2 3 4 |
[root@ogg-source ~]# su - oracle [oracle@ogg-source ~]$ /u01/app/goldengate/ggsci /u01/app/goldengate/ggsci: error while loading shared libraries: libnnz11.so: cannot open shared object file: No such file or directory [oracle@ogg-source ~]$ |
从命令反馈可以看到是由于缺少类库导致的这个问题。
先看看ggsci这个命令需要调用的类库的详情:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[oracle@ogg-source ~]$ ldd /u01/app/goldengate/ggsci linux-vdso.so.1 => (0x00007fff93bfd000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003ae0800000) libgglog.so => /u01/app/goldengate/libgglog.so (0x00002adcf4f84000) libggrepo.so => /u01/app/goldengate/libggrepo.so (0x00002adcf51ba000) libdb-5.2.so => /u01/app/goldengate/libdb-5.2.so (0x00002adcf530e000) libicui18n.so.38 => /u01/app/goldengate/libicui18n.so.38 (0x00002adcf55af000) libicuuc.so.38 => /u01/app/goldengate/libicuuc.so.38 (0x00002adcf5910000) libicudata.so.38 => /u01/app/goldengate/libicudata.so.38 (0x00002adcf5c49000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003ae0c00000) libxerces-c.so.28 => /u01/app/goldengate/libxerces-c.so.28 (0x00002adcf6c26000) libantlr3c.so => /u01/app/goldengate/libantlr3c.so (0x00002adcf713d000) libnnz11.so => not found libclntsh.so.11.1 => not found libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003af2200000) libm.so.6 => /lib64/libm.so.6 (0x0000003ae0000000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003aef600000) libc.so.6 => /lib64/libc.so.6 (0x0000003adfc00000) /lib64/ld-linux-x86-64.so.2 (0x0000003adf800000) [oracle@ogg-source ~]$ |
可以看到,其中“libnnz11.so”和“libclntsh.so.11.1”确实找不到。
解决方法:
1. 确认LD_LIBRARY_PATH的设置是否正确:
它应该是包含$ORACLE_HOME/lib这条路径的。
1 2 3 4 5 6 |
[oracle@ogg-source ~]$ echo $ORACLE_HOME /u01/app/oracle/product/10.0.2/dbhome_1 [oracle@ogg-source ~]$ [oracle@ogg-source ~]$ echo $LD_LIBRARY_PATH /u01/app/oracle/product/10.0.2/dbhome_1/lib:/u01/app/oracle/product/10.0.2/dbhome_1/oracm/lib:/lib:/usr/lib:/usr/local/lib [oracle@ogg-source ~]$ |
2. 确认$ORACLE_HOME/lib中是否拥有上面缺少的两个类库文件:
1 2 3 4 5 6 7 8 |
[oracle@ogg-source ~]$ ls -ltr $ORACLE_HOME/lib | grep --color libnnz -rw-r----- 1 oracle oinstall 7815540 2005-10-17 libnnz10.a -rw-r----- 1 oracle oinstall 3803097 2005-10-20 libnnz10.so [oracle@ogg-source ~]$ [oracle@ogg-source ~]$ ls -ltr $ORACLE_HOME/lib | grep --color libclntsh -rwxr-x--- 1 oracle oinstall 20706597 03-23 20:25 libclntsh.so.10.1 lrwxrwxrwx 1 oracle oinstall 61 03-23 20:25 libclntsh.so -> /u01/app/oracle/product/10.0.2/dbhome_1/lib/libclntsh.so.10.1 [oracle@ogg-source ~]$ |
可以看到,虽然存在那两个缺少的文件,但是版本却不一样,ggsci需要的版本是11,但是我们当前环境拥有的版本是10。
3. 制作ggsci当前需要的版本的软链接,以“骗过”ggsci:
1 2 3 4 |
[oracle@ogg-source ~]$ ln -s $ORACLE_HOME/lib/libnnz10.so $ORACLE_HOME/lib/libnnz11.so [oracle@ogg-source ~]$ [oracle@ogg-source ~]$ ln -s $ORACLE_HOME/lib/libclntsh.so.10.1 $ORACLE_HOME/lib/libclntsh.so.11.1 [oracle@ogg-source ~]$ |
4. 这样,再次使用ggsci就没问题了:
1 2 3 4 5 6 7 8 9 10 11 12 |
[oracle@ogg-source ~]$ /u01/app/goldengate/ggsci Oracle GoldenGate Command Interpreter for Oracle Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14 Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved. GGSCI (ogg-source) 1> exit [oracle@ogg-source ~]$ |
——————————————————————
Done。