定位amdu無法使用的根因並解決

2021-09-07 20:41:58 字數 3703 閱讀 7999

環境:oel 5.7 + oracle 10g + amdu_x86-64

現象:我的兩套實驗環境,一套單例項,一套rac,作業系統都是oel 5.7,資料庫都是oracle 10g,上傳同樣的amdu介質。乙個正常,乙個報錯:

--報錯環境:

[oracle@rac1-server lib]$ amdu

amdu: symbol lookup error: amdu: undefined symbol: hac_kpuhh

--正常環境:

[oracle@db10 ~]$ amdu

amdu_2018_12_10_22_24_52/

直接去網上或是mos搜尋,都沒有相關匹配的文章。

從報錯本身來看就是hac_kpuhh這個沒有被定義,那麼同樣的os和oracle版本,為何會有差異呢?

回顧amdu的配置步驟都是相同的,如下:

unzip /tmp/amdu_x86-64.zip 

export ld_library_path=$ld_library_path:`pwd`

export path=$path:`pwd`

此時想到ldd這個命令可以用於列印程式或者庫檔案所依賴的共享庫列表,就用來比對下有無差異:

--報錯環境:

[oracle@rac1-server enmo]$ ldd amdu

linux-vdso.so.1 => (0x00007fff987ff000)

libskgxp11.so => /home/oracle/enmo/libskgxp11.so (0x00007f06c48ca000)

libclntsh.so.11.1 => /s01/oracle/product/10.2.0/db_1/lib/libclntsh.so.11.1 (0x00007f06c338f000)

libnnz11.so => /s01/oracle/product/10.2.0/db_1/lib/libnnz11.so (0x00007f06c2eee000)

libdl.so.2 => /lib64/libdl.so.2 (0x00000031f8200000)

libm.so.6 => /lib64/libm.so.6 (0x00000031f7e00000)

libpthread.so.0 => /lib64/libpthread.so.0 (0x00000031f8600000)

libnsl.so.1 => /lib64/libnsl.so.1 (0x00000031fb200000)

libc.so.6 => /lib64/libc.so.6 (0x00000031f7a00000)

libaio.so.1 => /usr/lib64/libaio.so.1 (0x00007f06c2cda000)

/lib64/ld-linux-x86-64.so.2 (0x00000031f7600000)

[oracle@rac1-server enmo]$

--正常環境:

[oracle@db10 enmo]$ ldd amdu

linux-vdso.so.1 => (0x00007fff34288000)

libskgxp11.so => /home/oracle/enmo/libskgxp11.so (0x00007f97d6b97000)

libclntsh.so.11.1 => /home/oracle/enmo/libclntsh.so.11.1 (0x00007f97d482c000)

libnnz11.so => /home/oracle/enmo/libnnz11.so (0x00007f97d43cf000)

libdl.so.2 => /lib64/libdl.so.2 (0x0000003668e00000)

libm.so.6 => /lib64/libm.so.6 (0x0000003668a00000)

libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003669200000)

libnsl.so.1 => /lib64/libnsl.so.1 (0x000000366ce00000)

libc.so.6 => /lib64/libc.so.6 (0x0000003668600000)

libaio.so.1 => /usr/lib64/libaio.so.1 (0x00007f97d41bb000)

/lib64/ld-linux-x86-64.so.2 (0x0000003668200000)

[oracle@db10 enmo]$

通過比對看到了差異:對於報錯的環境,libclntsh.so.11.1和libnnz11.so這兩個庫檔案都是指向的10g環境路徑下的;而正常環境是應該會指向解壓amdu的所在路徑下相關檔案。

找到了差異性,解決也就簡單了,去看10g環境下這兩個檔案究竟:

[oracle@rac1-server lib]$ ls -l /s01/oracle/product/10.2.0/db_1/lib/libclntsh*

lrwxrwxrwx 1 oracle oinstall 17 feb 16 2014 /s01/oracle/product/10.2.0/db_1/lib/libclntsh.so -> libclntsh.so.10.1

-rwxr-xr-x 1 oracle oinstall 25433819 feb 16 2014 /s01/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1

lrwxrwxrwx 1 oracle oinstall 17 sep 25 22:30 /s01/oracle/product/10.2.0/db_1/lib/libclntsh.so.11.1 -> libclntsh.so.10.1

[oracle@rac1-server lib]$ ls -l /s01/oracle/product/10.2.0/db_1/lib/libnnz11*

lrwxrwxrwx 1 oracle oinstall 11 sep 25 22:28 /s01/oracle/product/10.2.0/db_1/lib/libnnz11.so -> libnnz10.so

mv /s01/oracle/product/10.2.0/db_1/lib/libclntsh.so.11.1 /s01/oracle/product/10.2.0/db_1/lib/libclntsh.so.11.1.bak1210

mv /s01/oracle/product/10.2.0/db_1/lib/libnnz11.so /s01/oracle/product/10.2.0/db_1/lib/libnnz11.so.bak1210

再次測試amdu命令已經恢復正常使用:

[oracle@rac1-server ~]$ amdu

amdu_2018_12_10_22_35_00/

此時再去對應ldd的結果也恢復正常,不再贅述。

總結:本文最主要的是通過ldd命令對比正常和異常兩個環境的輸出定位出了問題所在。至於為何這個環境會有這個區別,當定位到這個問題時,我也回憶起是因為之前測試安裝新版本ogg時做的特殊處理。而現實中,尤其是乙方服務的角色,這類非普遍的問題碰到的機率也還蠻高的。主要考驗的就是經驗和排錯思路了。

Windows 10無法使用debug的解決方案

在學習組合語言的時候,xp系統或者更早版本的預設在dos命令下敲入debug即可進入彙編指令模式下,而在windows 7及更高版本下,這些功能似乎都被閹割了,所以今天我們講帶大家處理一下如何解決這個問題?首先我們需要給電腦配置debug檔案,以win10為例,預設條件下系統沒有debug相關的檔案...

改壞sudoers後無法使用sudo的解決辦法

ubuntu改壞sudoers後無法使用sudo的解決辦法 練習安裝odoo的時候,建立了乙個odoo使用者,想把它賦予sudo許可權,然而,編輯的時候不留意,改壞了,導致sudo無法使用,無法編輯sudoers檔案修改回來。總提示如下資訊 etc sudoers syntax error near...

sudoers改壞後無法使用sudo的解決辦法

使用ssh新增樹莓派使用者時,想賦予sudo許可權,然而操作chmod 777 sudoers後,sudo不能用了,又無法編輯sudoers檔案。此時我的樹莓派只能ssh遠端操作,沒有其他輸入輸出裝置,找了好久終於找到乙個神器的解決方案。遠端的話開兩個ssh終端,兩個終端,都用ubuntu使用者登入...