徹底理解初始化引數SERVICE_NAMES和客戶端TNS中SERVICE_NAME(1)

husthxd發表於2004-10-14

1.SERVICE_NAMESLISTENER


本文可以任意轉載,轉載時請務必以超連結形式標明文章原始出處和作者資訊及本宣告

http://blog.itpub.net/post/11/3085

徹底理解初始化引數SERVICE_NAMES和客戶端TNSSERVICE_NAME

 Authorhusthxd

msnhusthxd@hotmail.com

 

     1.       SERVICE_NAMESLISTENER

初始化引數SERVICE_NAMES預設為INSTANCE_NAME,後臺程式PMON自動在伺服器監聽器中註冊該SERVICE_NAMES。實驗如下:

sidb@GDSI-HYQL> show parameter service_

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

service_names                        string      simis

 

sidb@GDSI-HYQL> show parameter instance_name

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      simis

首先監聽器配置檔案手工配置了資料庫服務,listener.ora的配置資訊為:

# LISTENER.ORA Network Configuration File: D:oracleora90networkadminlistener.ora

# Generated by Oracle configuration tools.

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

      )

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = TCP)(HOST = sb-hyk)(PORT = 1521))

      )

    )

  )

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = D:oracleora90)

      (PROGRAM = extproc)

    )

    (SID_DESC =

      (GLOBAL_DBNAME = simis)

      (ORACLE_HOME = D:oracleora90)

      (SID_NAME = simis)

    )

  )

 

lsnrctl service顯示的資訊如下:

LSNRCTL for 32-bit Windows: Version 9.0.1.1.1 - Production on 14-10-2004 10:32

:18

 

Copyright (c) 1991, 2001, Oracle Corporation.  All rights reserved.

 

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))

服務摘要..

服務 "PLSExtProc" 包含 1 個例程。

  例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...

    處理程式:

      "DEDICATED" 已建立:0 已被拒絕:0

         LOCAL SERVER

服務 "simis" 包含 2 個例程。

  例程 "simis", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...

    處理程式:

      "DEDICATED" 已建立:0 已被拒絕:0

         LOCAL SERVER

  例程 "simis", 狀態 READY, 包含此服務的 1 個處理程式...

    處理程式:

      "DEDICATED" 已建立:4 已拒絕:0 狀態:ready

         LOCAL SERVER

命令執行成功

 

透過如下實驗可以證明服務狀態為READY表示PMON自動註冊的服務名,而UNKNOWN則表示該服務是手工在LISTENER.ORA中配置的資料庫服務。

 

listener.ora配置檔案中的資料庫服務資訊去掉,更改為:

# LISTENER.ORA Network Configuration File: D:oracleora90networkadminlistener.ora

# Generated by Oracle configuration tools.

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

      )

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = TCP)(HOST = sb-hyk)(PORT = 1521))

      )

    )

  )

下面再看看lsnrctl service的顯示資訊:

LSNRCTL> reload

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))

命令執行成功

LSNRCTL> service

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))

服務摘要..

服務 "simis" 包含 1 個例程。

  例程 "simis", 狀態 READY, 包含此服務的 1 個處理程式...

    處理程式:

      "DEDICATED" 已建立:0 已拒絕:0 狀態:ready

         LOCAL SERVER

命令執行成功

 

這裡顯示的simis就是初始化引數中SERVICE_NAMES設定的引數值,由PMON自動註冊到監聽器上。下面不妨修改初始化引數SERVICE_NAMES來證明這一觀點:

alter system set service_names='simis,hyk,hyb' scope=memory

/

 

在當前例項上修改sevice_names對監聽器不起作用:

LSNRCTL> reload

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))

命令執行成功

LSNRCTL> service

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))

監聽器不支援服務

命令執行成功

 

修改引數,關閉資料庫

SQL> alter system set service_names='simis,hyk,hyb' scope=both

  2  /

 

系統已更改。

 

-- 平臺是windows,901,這裡不得不提一下的是901真的非常垃圾,還會出現如下的bug

SQL> shutdown immediate;

ORA-03113: 通訊通道的檔案結束

SQL>

SQL>

SQL> conn / as sysdba

已連線到空閒例程。

 

SQL> startup

ORACLE 例程已經啟動。

 

Total System Global Area  114061244 bytes

Fixed Size                   282556 bytes

Variable Size              79691776 bytes

Database Buffers           33554432 bytes

Redo Buffers                 532480 bytes

資料庫裝載完畢。

資料庫已經開啟。

SQL>

SQL> show parameter service_

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

service_names                        string      simis,hyk,hyb

下面看看lsnrctl service的輸出:

 

LSNRCTL> service

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))

服務摘要..

服務 "hyb" 包含 1 個例程。

  例程 "simis", 狀態 READY, 包含此服務的 1 個處理程式...

    處理程式:

      "DEDICATED" 已建立:0 已拒絕:0 狀態:ready

         LOCAL SERVER

服務 "hyk" 包含 1 個例程。

  例程 "simis", 狀態 READY, 包含此服務的 1 個處理程式...

    處理程式:

      "DEDICATED" 已建立:0 已拒絕:0 狀態:ready

         LOCAL SERVER

服務 "simis" 包含 1 個例程。

  例程 "simis", 狀態 READY, 包含此服務的 1 個處理程式...

    處理程式:

      "DEDICATED" 已建立:0 已拒絕:0 狀態:ready

         LOCAL SERVER

命令執行成功

我們看到SERVICE_NAMES設定的服務引數simishykhyb均在監聽器中自動註冊。

謝謝biti_rainy的指正:

parameter 中 service_name 預設是 db_name.db_dimain

SQL> show parameter db_name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string ocn
SQL> show parameter instance_name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string ocn1
SQL> show parameter db_domain

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string db.alibaba.com
SQL>
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string ocn1
SQL> show parameter service_name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string ocn.db.alibaba.com
SQL> 
 

2.   

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

相關文章