【DBA】Relinking Oracle Home 常見問題 (Doc ID 2048232.1)

xysoul_雲龍發表於2022-04-25

文件內容


用途

問題和答案

1)  什麼是 relinking?

2)  什麼是對 Oracle Home 庫的 relinking?

3)  為什麼需要 Oracle Home relinking?

4)   什麼時候需要手動的 relinking?

5)  在 OS 升級,降級,打補丁或者解除安裝補丁之後,是否需要 relinking?

6)  如何 relink Oracle Home?

7)  Relinking 日誌在哪裡?

8)   手動 relinking 有哪些已知問題?

9)   如何診斷 relinking 問題?

10)  診斷 relinking 問題的工具有哪些?

11)  Windows 上是否發生 relinking?

已知問題

1) AIX 作業系統

2) Solaris 作業系統

參考

適用於:

Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Gen 1 Exadata Cloud at Customer (Oracle Exadata Database Cloud Machine) - 版本 N/A 和更高版本
Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本
Oracle Database Backup Service - 版本 N/A 和更高版本
Oracle Database Cloud Exadata Service - 版本 N/A 和更高版本
Generic UNIX

用途

 這篇文件闡述了在 Oracle Home 上執行 relinking 的常見問題,文件中的概念適用於 RDBMS Home。

提問,獲得幫助,並分享您對於這篇文件的經驗。

您是否希望與其他 Oracle 客戶、Oracle 員工和業內專家進一步探討此主題?

請點選這裡進入Oracle 社群(中文)。
請點選 進入My Oracle Support 社群的資料庫安裝/升級(英文)主頁發現更多的話題和討論。

問題和答案

1)  什麼是 relinking?

任何語言所預定義的函式都被定義在那種語言的庫檔案中,必須編譯程式碼來建立一個二進位制格式的檔案(物件檔案)。這個物件檔案然後被連線到 OS 的庫檔案來建立一個可執行檔案。成功的連結應使得所有的函式定義都能被找到,連結從它的元件中生成一個可執行檔案。在這個語境中連結(linking)和 relinking 意義相同,可以互換。可執行檔案都會從預編譯元件中建立起來。

 

Relinking 過程中涉及的檔案型別有:

  • * .c   (原始碼)
  • * .o   (物件檔案)
  • * .a   (歸檔檔案)
  • * .so 或 .sl on HP/UX (PA-RISC) (庫檔案)




2)  什麼是對 Oracle Home 庫的 relinking?

Oracle 軟體是以物件檔案(.o檔案),歸檔檔案(.a檔案)形式釋出的,最後以壓縮的 jar 格式提供。然後在安裝過程中,這些物件檔案被在作業系統級別“relink”,建立可執行檔案。這使得 Oracle 可以與 OS 系統庫提供的函式形成可靠的整合。通常,relinking 過程中,當前的可執行檔案被重新命名和儲存,而新的可執行檔案被生成。一旦新的可執行檔案出現,並且你成功的測試過這些新的可執行檔案工作正常,就可以刪除 ORACLE_HOME/bin 目錄下的舊的可執行檔案。每個舊的可執行檔案的檔名上都會附加一個‘O’,例如,’exp’重新命名為’expO’。

提供物件檔案的優點是它減小了補丁和包的大小;不提供完整的庫檔案和程式,而是隻釋出物件檔案,之後與 OS 庫檔案連結來生成可執行檔案。

 

 如下是各種物件檔案和歸檔檔案在 Oracle Home 中所處的目錄:

- /lib

- /usr/lib

- $ORACLE_HOME/lib

- $ORACLE_HOME/rdbms/lib

- $ORACLE_HOME/<product>/lib

在 $ORACLE_HOME/rdbms/lib 或者 $ORACLE_HOME/lib 目錄中有一個檔案叫做 sysliblist,它列出了其它需要包括的庫檔案的列表。

 

 


3)  為什麼需要 Oracle Home relinking?

為了將 Oracle 提供的物件檔案與 OS 系統庫檔案連結,需要執行 Oracle Home relinking.Relinking 確保了與 OS 系統庫檔案提供的函式的可靠整合。

 

在如下情況下 relinking 會自動發生:

  • 使用 Oracle Universal Installer ( OUI ) 安裝 Oracle Database
  • 透過 Oracle Universal Installer ( OUI ) 安裝 Oracle Database Patchset
  • 使用“opatch 工具”安裝 Oracle Database Patch

Relinking 也可以手動執行。

 

 


4)   什麼時候需要手動的 relinking?

在如下情況下需要手動 relinking:

A)  在 OS 升級之後,通常 OS 供應商會保證作業系統庫檔案完整性,因此,除非有特殊說明,不需要重新安裝或者 relink Oracle 軟體。

“然而,Oracle 推薦在 OS 升級後對 Oracle Home 的庫執行手動的 relinking”。硬體的改變不需要 relinking。

B)   在作業系統安裝了補丁之後(推薦)。

C)   Oracle Home 的安裝過程的 relinking 階段出現錯誤或者警告。

D)   安裝一個 RDBMS 補丁在 relinking 階段失敗。

E)   應用報錯說 RDBMS home 缺失庫檔案。

F)   診斷 RDBMS Home 二進位制可執行程式(binary)的問題。

G)  在手動修改 RDBMS home 的二進位制可執行程式的許可權之後。

H)  驗證 Oracle Home 二進位制可執行程式的完整性。

I)  重置 Oracle Home 二進位制可執行程式的許可權。

J)  重新建立 Oracle Home 二進位制可執行程式。

 


 

5)  在 OS 升級,降級,打補丁或者解除安裝補丁之後,是否需要 relinking?

是的。Oracle 推薦在在 OS 升級,降級,打補丁或者解除安裝補丁,或者任何影響 OS 庫行為的改變之後,對 Oracle Home 二進位制可執行程式執行手動的 relinking。成功的 relinking 代表 Oracle 可執行程式被妥當的連結到 OS 庫。

 


6)  如何 relink Oracle Home?

下面是 relink Oracle Home 二進位制執行程式的步驟:

A) 設定環境變數

在連結時需要設定如下環境變數:

  • ORACLE_HOME
  • PATH 中包含 $ORACLE_HOME/bin
  • LD_LIBRARY_PATH $ORACLE_HOME/lib:/usr/lib
  • SHLIB_PATH $ORACLE_HOME/lib:/usr/lib (只適用於HP-UX)

B) 驗證 umask 值是否為 022,如果 umask 值不正確,設定 umask 為 022(執行命令“umask 022”)

C) 停止所有訪問這個 Oracle Home 的 Oracle 例項,監聽和 sqlplus。若是 AIX OS,以 root 使用者執行 slibclean,等待5分鐘後再次執行 slibclean。

即使有其它資料庫啟動和執行中,執行 slibclean 也是安全的。如下文件提供了更多細節:

Note 435071.1 Can Slibclean command be Executed when the Database is up and running?

D) 以 Oracle 使用者執行如下命令:

$ORACLE_HOME/bin/relink

可以新增的引數有:

"all ", " oracle " , " network",  "client" , "client_sharedlib" , "interMedia" , "precomp" , "utilities ", "oemagent",  "ldap"。

可以像如下這樣使用 unix 的重定向特性收集手動 relinking 日誌:

$  $ORACLE_HOME/bin/relink all

 輸出會被寫在 $ORACLE_HOME/install/relink.log 檔案中。

雖然 12.1 和 12.2 “Client” 選項已經刪除,但是您可以使用下面的選項:
$ relink as_installed

 

E)  11GR2 上可用的其它選項。

11.2.0.1 以上版本的資料庫有另一個選項是使用“ Oracle Universal Installer  “來執行 relinking,如下所示:

Runinstaller 可以使用如下選項:

  -relink:在 oracle home 上執行 relink 動作。

使用:-relink -maketargetsxml <location of maketargetsxml> [-makedepsxml <location of makedepsxml>] [name=value]

例子:

$ORACLE_HOME/oui/bin/runInstaller -relink -waitForCompletion -maketargetsxml  $ORACLE_HOME/inventory/make/makeorder.xml  -logLocation $ORACLE_HOME/install ORACLE_HOME=$ORACLE_HOME > $ORACLE_HOME/install/relink.log 2>&1

參考

Note 883299.1   Oracle 11gR2 Relink New Feature


F) Relinking 獨立的元件

你可以隨時使用‘MAKE’檔案並提供一個合適的 link_option 來手動的 relink 任何一個可執行程式或者所有的可執行程式:

            

make -f <makefile> <link_option>

要 relink 一個可執行程式,需使用軟體的所有者登陸到系統來執行上述命令。這個命令在<makefile> 所在的 LIB 目錄中執行,即,

         

$ORACLE_HOME/<product_name>/lib

其中<product_name>可以是 oracle,forms45 或 reports30 等等。


G ) 除錯 relinking 日誌

Relinking 指令碼是一個 shell 指令碼,可以像其它普通指令碼一樣除錯。如下所示:

$ sh -x relink all >relink_all.out 2>&1

輸出會被寫到 relink_all.out 檔案。

 

 


7)  Relinking 日誌在哪裡?


在 Oracle Home 安裝或者 Patchset 安裝的連結操作時

Oracle Home 二進位制可執行程式的安裝的 relinking 日誌在如下檔案:

$ORACLE_HOME/install/make.log

同樣你可以在資料庫安裝中的 OUI 日誌中找到 relinking 日誌。如下文件描述了 OUI 安裝日誌檔案的細節:

Note 403212.1 "Location Of Logs For Opatch And OUI

 

使用 opatch 安裝 Oracle 補丁的連結操作時

在使用 opatch 進行補丁 ( PSU 或 One off patch ) 安裝中會發生 relinking,日誌可以在 opatch 日誌中找到。如下文件描述了 OUI 安裝日誌檔案的細節:

Note 403212.1 "Location Of Logs For Opatch And OUI

 

手動 relinking

手動 relinking 日誌可以使用 unix 重定向特性收集:

$  $ORACLE_HOME/bin/relink all >> relink.out

日誌會被寫在 relink.out 檔案。

11GR2 中的額外特性

 

選項1

如果 relink 是使用 OUI 執行的,那麼預設並不會生成"$ORACLE_HOME/install/relink.log"日誌。

要將 relink 輸出傳送到$ORACLE_HOME/install/relink.log,我們需要顯示的重定向輸出。

 

$ORACLE_HOME/oui/bin/runInstaller -relink -waitForCompletion -maketargetsxml

$ORACLE_HOME/inventory/make/makeorder.xml -logDir $ORACLE_HOME/install ORACLE_HOME=$ORACLE_HOME > $ORACLE_HOME/install/relink.log 2>&1

 

 

選項2

在使用“relink all”命令時,它總是建立一個新的日誌叫做"relink.log",並且它不會將日誌資訊附加在已經存在的 relink 日誌中。之前的日誌會被另存為一個帶有時間戳的名字( 例如: relinkActions2009-09-14_09-01-10-PM.log )。

 

 


8)   手動 relinking 有哪些已知問題?

A) Relink all 是一個通用指令碼,它會嘗試 relink 所有的元件,不論這些元件安裝了與否,並且會報錯。你需要驗證元件安裝與否(使用“opatch lsinventory –details”命令來列出安裝的元件)。

 對於 Oracle Client 來說,並非所有的元件都安裝,“relink all”很可能會報出很多錯誤。因此,relink 一個客戶端的更好的方法是使用如下命令:

$ relink client

B) 執行“relink all”會重置 root 擁有的檔案的所有權和許可權。在“relink all”之後,推薦將所有權和許可權改回。

更多細節,可參考 Note. 1555453.1 - Executing "relink all" resets permission of extjob, jssu, oradism, externaljob.ora

 


 

9)   如何診斷 relinking 問題?

Oracle Home 安裝或者應用 Patchset 時的 relinking 錯誤。

A) 請檢查你嘗試安裝的資料庫版本在你的 OS 版本上是否認證。參考如下文件,在"  Certification (or compatibility) Information "部分檢視認證細節:

B) 驗證下載的軟體沒有損壞,請參考如下文件中的更多細節:

Note 549617.1 How To Verify The Integrity Of A Patch/Software Download? [Video]

C) 確認你是否已經驗證瞭如下文件中描述的所有 OS 前置要求:

Note 169706.1 Oracle Database on Unix AIX,HP-UX,Linux,Mac OS X,Solaris,Tru64 Unix Operating Systems Installation and Configuration Requirements Quick Reference (8.0.5 to 11.2).

或者

使用如下文件提供的安裝驗證工具來驗證系統要求:

Note 250262.1 "RDA 4 - Health Check / Validation Engine Guide"

 使用如下命令執行 Health Check

 ./rda.sh -dT hcve

結果寫在 RDA 輸出目錄中的一個 HTML 檔案中。這個 HTML 檔案可以使用任何網路瀏覽器開啟,它提供了在這臺伺服器上缺失的 OS 前置要求的詳細報告。確認 OS 是否滿足安裝指定資料庫版本的全部 OS 前置要求。

D) 確認 PATH 中是否包含如下命令:

which ar

which ld

which cc

which gcc

which make

如果上述任何一條命令沒有返回命令的 PATH, 這意味著命令 PATH 沒有設定,你需要手動設定它。同樣嘗試手動執行這些命令,檢查這個命令是否在 OS 級別執行正常。


E) 檢查 /tmp 目錄和 ORACLE_HOME 所在的檔案系統是否有足夠空間。

F) 安裝時的 relinking 錯誤記錄在如下日誌檔案中:

$ORACLE_HOME/install/make.log and OUI log file

G) 找到第一次發生的“ warning” , “fatal” , “ error” , "stop” , "exception” , "severe ", "Exit Code 1" 訊息,這些訊息會幫助你找到 relinking 失敗的根本原因。本文的“ known issues”描述了已知的問題,或者在 MOS 上查詢這些訊息看是否有已知問題。如果你仍然遇到這個問題,請向 OracleSupport 提交 SR,並且上傳上述細節到 SR 來調查。

 

在使用 opatch 給 Oracle Home 安裝補丁時的 relinking 錯誤

A)    檢查如下點

1) 下載的 patch 版本是正確的。(根據你的資料庫版本和作業系統版本)

2) 下載的補丁 .zip 檔名與下載頁面上顯示的名字相同。

3) 下載 zip 檔案大小與下載頁面上顯示的相同。

4) 若下載到另外一臺機器上,又傳輸到此機器上,確保補丁以“BINARY”模式下載和傳輸。

5) 補丁在需要安裝的伺服器上解壓縮。

6 ) 根據如下文件確認下載的補丁沒有損壞:

Note: 549617.1 - How To Verify The Integrity Of A Patch/Software Download? [Video].


B)    是否補丁已經安裝上了,而安裝過程中出現失敗?

1) 從備份還原,或者,如果備份不可用,按照如下文件回滾失敗的補丁:

Note.312767.1 How to rollback a failed Interim patch installation.

2) 執行手動的資料庫 relinking。如果你仍然遇到同樣的錯誤,那麼問題不在於安裝補丁,如果錯誤消失,那麼問題出在安裝補丁過程中。

3) 檢查在 /tmp 目錄和 ORACLE_HOME 所在的檔案系統是否有足夠空間。

3) 檢查opatch日誌,找到錯誤第一次發生的地方,如下文件描述了 opatch 日誌的細節:

Note 403212.1 "Location Of Logs For Opatch And OUI"

5) 到第一次發生的“ warning” , “fatal” , “ error” , "stop” , "exception” , "severe ", "Exit Code 1" 訊息,這些訊息會幫助你找到 relinking 失敗的根本原因。本文的“ known issues”描述了已知的問題,或者在 MOS 上查詢這些訊息看是否有已知問題。如果你仍然遇到這個問題,請向 OracleSupport 提交 SR,並且上傳上述細節到 SR 來調查。

 

 


10)  診斷 relinking 問題的工具有哪些?

A ) nm

用來列出在一個 .o、.a 和二進位制檔案中的所有符號。常用於找出符號是在哪裡定義的。常用命令是:

            

    nm <file> | grep <symbol>

其中<file>是你要檢查的庫的名字,<symbol>是你實際搜尋的符號的名字。

 

  B) ar

建立和維護庫和 .o 檔案的歸檔。使用這個命令你可以將 .o 檔案分組到一個單獨的歸檔,用來建立可執行程式。它被用來從一個單獨的歸檔庫中插入,刪除和取代物件。

 

C) Symfind

如下位置有一個指令碼可用:

$ORACLE_HOME/bin/symfind <symbol>:

在 Oracle 的共享物件中找到一個符號。這個指令碼基本上執行了上面2個命令。

 


11)  Windows 上是否發生 relinking?

Relinking 概念僅適用於 UNIX 平臺,Windows OS 上沒有 relinking。

 

已知問題

1) AIX 作業系統

i) AIX 平臺上在 relinking 階段你會看到如下警告(當資料庫在安裝,打補丁,或者手動 relinking 時),這是期望的行為:


ld: 0711-773 WARNING:
ld: 0711-783 WARNING:
ld: 0711-319 WARNING:
ld: 0711-415 WARNING:
ld: 0711-224 WARNING:
ld: 0711-324 WARNING:
ld: 0711-301 WARNING:
ld: 0711-345 WARNING:

 

參考如下文件獲得更多的細節:
Note 402945.1  While installing one-off Patch on AIX systems, getting several WARNING messages: OUI-67215 - TOC overflow and/or xlC: not found / xlC: Execute permission denied

 

II) 如果你在 relinking 階段看到" ld: 0711-780 SEVERE ERROR",這不是一個可以忽略的錯誤,你需要參照如下文件中的方案:

Note 1379753.1 AIX: ORA-07445 [ksmpclrpga] OR ORA-07445 [ksupop] ORA-07445 [lxhlinfo] OR Link/Relink/Make Fails With: ld: 0711-780 SEVERE ERROR: Symbol .ksmpfpva (entry 58964) in object libserver11.a[ksmp.o]


 

2) Solaris 作業系統

Solaris 作業系統上 relinking 階段若有如下訊息,是可以忽略的(當 11gR2 資料庫在安裝,打補丁,或者手動 relinking 時):

ld: warning: symbol `_start' has differing types:
(file /home03/oracle/product/11.2.0/dbhome_1/lib/prod/lib/v9/crt1.o type=FUNC; file /home03/oracle/product/11.2.0/dbhome_1/lib//libserver11.a(skds.o) type=OBJT);


參考如下文件獲得更多的細節:
Note 1446945.1  "ld: warning: symbol `_start' has differing types:"  While Installing Or Patching 11gR2 On Oracle Solaris Platform

參考


NOTE:123074.1  - Linking and resolving external symbols in unix
NOTE:435071.1  - Can Slibclean Command be Executed When the Database is up and Running?
NOTE:312767.1  - How to Rollback a Failed Interim Patch Installation

NOTE:1555453.1  - Executing "relink all" resets permission of extjob, jssu, oradism, externaljob.ora
NOTE:883299.1  - Oracle 11gR2 Relink New Feature

NOTE:61628.1  - 8i: Building Makefiles and Libraries for Oracle Precompilers
NOTE:549617.1  - How to Verify the Integrity of a Patch/Software Download?


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2888656/,如需轉載,請註明出處,否則將追究法律責任。

相關文章