oracle監聽服務的動態注冊和靜態注冊


oracle監聽服務的使用有兩種模式:動態注冊和靜態注冊

動態注冊

8i以后版本的數據庫實例在mount時,會根據參數文件中的service_names以及instance_name參數動態地將實例和服務動態注冊到listerer中
(實際操作中發現,12c版本即使不在參數文件中指定兩個參數,動態注冊功能依然生效)

執行過程

  1. 在參數文件中指定service_names、instance_name參數
  2. 啟動監聽服務
  3. 啟動oracle實例

說明

  • 動態注冊只會在PMON進程啟動時才會自動將服務注冊到監聽器(一般在啟動一分鍾內完成注冊),因此,需要先啟動監聽服務,再啟動oracle實例;如果沒有啟動監聽服務而是直接啟動實例,因為監聽服務並未處於運行中,所以則PMON的動態注冊會失敗,此時再啟動監聽后,PMON並不會再次執行自動注冊,而是需要人工執行手動注冊alter system register;
  • 數據庫正常使用過程中,重啟監聽服務后,動態注冊結果會失效,需要再次人工執行手動注冊alter system register;
    實際操作中發現,12c版本中直接啟動實例、重啟監聽后PMON會在大約20秒后自動動態注冊,不需要手動注冊
  • 動態注冊默認只注冊到默認的監聽器(名稱LISTENER,端口1521,協議TCP)
  • 動態注冊由數據庫發起,這時候監聽肯定對應數據庫,所以監聽狀態為READY

靜態注冊

oracle實例在啟動時會讀取文件$ORACLE_HOME/network/admin/listener.ora的配置,將實例和服務注冊到監聽程序

參考代碼

SID_LIST_LISTENER=
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME=orcl01)
            (ORACLE_HOME=/oracle/app/oracle/product/12.1.0.2/db_1)
            (SID_NAME=orcl01)
        )
    )
LISTENER=
   (description_list=
      (description=
         (address=(protocol=tcp)(host=192.168.1.120)(port=1521))

       )
    )

其中,GLOBAL_DBNAME、ORACLE_HOME、SID_NAME、host四個參數的值需要根據實際情況設定

說明

  • 靜態注冊與實例是否啟動無關,啟動監聽服務時會讀取listener.ora文件進行靜態注冊,此時即便數據庫未啟動,監聽狀態中依然能看到靜態注冊的信息
  • 重啟監聽服務后,靜態注冊依然生效
  • 靜態注冊可以更改一些自定義配置信息,例如自定義端口號
  • 靜態注冊由監聽程序發起,監聽器並不知道關於該實例的任何信息,只有當客戶發出連接請求時,它才檢查該實例是否存在,所以監聽狀態為UNKNOWN

參考資料:
https://developer.aliyun.com/article/415296
https://www.cnblogs.com/guilingyang/p/6074867.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM