SID、ORACLE_SID、INSTANCE_NAME、DB_NAME、SERVER_NAMES、GLOBAL_DBNAME等區別

lusklusklusk發表於2015-11-26

監聽中態註冊時的服務名(即lsnrctl status顯示的的service對應的名稱):
優先順序別service_names.db_domain=db_unique_name.db_domain>db_name.db_domain
如果有引數值service_names\db_unique_name,
則拼接service_names、db_unique_name引數值和db_domain引數值註冊到監聽,即兩個值
如果只有引數值service_names,且值和db_name值不一樣
則拼接service_names、db_name引數值和db_domain引數值註冊到監聽,即兩個值
如果只有引數值db_unique_name,且值和db_name值不一樣
則拼接db_unique_name引數值和db_domain引數值註冊到監聽,即一個值

datagard環境:所以編輯tnsname.ora時,tns中standby的service_name=db_unique_name.db_domain即可(primary庫一般不設定db_unique_name,這樣primary庫的db_unique_name就預設為db_name)


監聽中態註冊時的服務名(即lsnrctl status顯示的的service對應的名稱):
使用listener.ora中的GLOBAL_DBNAME,如果listener.ora中沒有GLOBAL_DBNAME,則使用listener.ora中的SID_NAME


 

SID:非引數,字面意思就是System Identifier,存放在tnsname.ora中匹配伺服器listener.ora中的sid_name

 

SID_NAME:非引數,存在在listener.ora中的靜態監聽配置中區分大小寫,來自Instance_name而非ORACLE_SID,因為lsntctl時顯示的SID_NAME就是Instance(如果沒service_name、db_unique_name引數則lsnrctl 顯示的Service也是SID_NAME)
listener.ora File Parameter(SID_NAME)
The Oracle system identifier (SID) of the instance. You can obtain the SID value from the INSTANCE_NAME parameter in the initialization parameter file.
listener.ora檔案引數(SID_NAME)
例項的Oracle系統識別符號(SID)。 您可以從初始化引數檔案中的INSTANCE_NAME引數獲取SID值。
如果沒有區分大小寫Service、Instance都是orcl,但是實際
INSTANCE_NAME是ORCL,rman使用tns配置SERVICE_NAME為orcl或ORCL登入時,不會報tns或lsn的錯誤(因為SERVICE_NAME不區分大小寫),但是會報錯ORA-01017: invalid username/password; logon denied
例子1:
listener.ora配置SID_NAME=prod2_std,但是引數instance_name是PROD2_STD,啟動例項到nomount狀態,則重啟監聽,資訊為
Service "prod2_std" has 2 instance(s).
  Instance "PROD2_STD", status BLOCKED, has 1 handler(s) for this service...
  Instance "prod2_std", status UNKNOWN, has 1 handler(s) for this service...
這時rman使用tns中SERVICE_NAME = prod2_std或SERVICE_NAME =PROD2_STD的別名登入都會報錯ORA-01017: invalid username/password; logon denied(直接sqlplus而不使用as sysdba時是無法使用tns登入nomount的資料庫的,但是rman是可以的,在duplicate時極其容易有這個錯誤,一旦出現這個錯誤還以為密碼有問題,繞來繞去搞密碼永遠都解決不了)
子2:
listener.ora配置SID_NAME = DW
(SID_DESC =(ORACLE_HOME= /iso/db/11.2.0)(SID_NAME = DW))
service_names引數為PROD1,instance_name引數值為PROD1
lsnectl start顯示資訊如下
Service "DW" has 1 instance(s).
  Instance "DW", status UNKNOWN, has 1 handler(s) for this service...
Service "PROD1" has 2 instance(s).
  Instance "PROD1", status READY, has 1 handler(s) for this service...
例子3:
listener.ora配置SID_NAME=PRODSTD88,GLOBAL_DBNAME=PRODSTD77
(SID_DESC=(GLOBAL_DBNAME=PRODSTD77)(ORACLE_HOME=/u01/app/oracle)(SID_NAME=PRODSTD88))
service_names為PRODSTD,instance_name引數為PRODSTD
lsnrctl start顯示資訊如下
Service "PRODSTD" has 1 instance(s).
  Instance "PRODSTD", status READY, has 1 handler(s) for this service...
Service "PRODSTD77" has 1 instance(s).
  Instance "PRODSTD88", status UNKNOWN, has 1 handler(s) for this service...

 

GLOBAL_DBNAME:非引數,存在在listener.ora中的靜態監聽配置中,可以隨便定義
listener.ora File Parameter(GLOBAL_DBNAME)
While processing a client connection request, the listener tries to match the value of this parameter with the value of the SERVICE_NAME parameter in the client connect descriptor. If the client connect descriptor uses the SID parameter, then the listener does not attempt to map the values. This parameter is primarily intended for configurations with Oracle8 databases (where dynamic service registration is not supported for dedicated servers). This parameter may also be required for use with Oracle8i and later database services by some configurations.
The value for this parameter is typically obtained from the combination of the DB_NAME and DB_DOMAIN parameters (DB_NAME.DB_DOMAIN) in the initialization parameter file, but the value can also contain any valid name used by clients to identify the service.
listener.ora檔案引數(GLOBAL_DBNAME)
在處理客戶端連線請求時,監聽器嘗試將此引數的值與客戶端連線描述符中的SERVICE_NAME引數值相匹配。 如果客戶端連線描述符使用SID引數,那麼偵聽器不會嘗試對映這些值。 此引數主要用於Oracle8資料庫的配置(專用伺服器不支援動態服務註冊)。 透過某些配置,此引數對於Oracle8i及更高版本的資料庫服務也可能是必需的。
此引數的值通常是從初始化引數檔案中DB_NAME和DB_DOMAIN引數(DB_NAME.DB_DOMAIN)的組合中獲得的,但該值也可以包含客戶端用來標識服務的任何有效名稱。
比如靜態監聽LISTENER中(GLOBAL_DBNAME=PRODSTD222),而引數service_names值是PRODSTD,則lsnrctl status結果如下
Service "PRODSTD" has 1 instance(s).
  Instance "PRODSTD", status READY, has 1 handler(s) for this service...
Service "PRODSTD222" has 1 instance(s).
  Instance "PRODSTD", status UNKNOWN, has 1 handler(s) for this service...

GLOBAL_NAMES:引數,和dblink相關,specifies whether a database link is required to have the same name as the database to which it connects

SERVICE_NAME:非引數,存在tnsname.ora中,標明監聽器的服務名稱,匹配引數service_names或listener.oraglobal_name的值(如listener中沒有global_name則匹配listener中的SID_NAME),資料庫直連就是IP:port/Service_name對應lsnrctl status顯示的service對應的名稱
比如靜態監聽LISTENER中(GLOBAL_DBNAME=PRODSTD222),而引數service_names值是PRODSTD,則lsnrctl status結果如下

Service "PRODSTD" has 1 instance(s).
  Instance "PRODSTD", status READY, has 1 handler(s) for this service...
Service "PRODSTD222" has 1 instance(s).
  Instance "PRODSTD", status UNKNOWN, has 1 handler(s) for this service...

 

SERVICE_NAMES:引數,specifies one or more names by which clients can connect to the instance,

 

DB_NAME:引數,資料庫名,安裝資料庫時建立的,安裝好後儘量不要去修改,可以單獨更改,也可以和Db_id一起更改

 

Db_id:非引數,資料庫id,在dataguarddb_name一致則db_id也一致,安裝好後儘量不要去修改,可以單獨更改,也可以和Db_name一起更改

 

INSTANCE_NAME:引數,資料庫例項名

 

Db_unique_name:引數,只在dataguard中有效,區別具有相同db_nameinstance_name的資料庫,可以隨便命名

 

ORACLE_SID: 非引數,ORACLE_SID就是ORACLE System Identifier,用於oracleos進行聯絡的,以環境變數形式出現,當ORACLE啟動時OSfork的程式必須透過ORACLE_SID將例項與其他例項區分開來,oracle的後臺程式的名稱就是透過ORACLE_SID決定的,ORACLE啟動需要引數檔案,而這預設引數檔案的名稱就是由ORACLE_SID決定的,如init.oraspfile.ora

一臺伺服器上有多個例項時,登陸選擇某個例項的方法如下:

Linuxexport ORACLE_SID=XX或直接ORACLE_SID=XX

Windowsset ORACLE_SID=XX

 

ORACLE_SIDInstance_name區別:不同的ORACLE_SID(例項)可以有相同的Instance_name(例項名),透過簡單的引數檔案複製即可實現(如複製一個檔案init.orainitnew.ora,再ORACLE_SID=ORACLE_SIDnewsqlplus / as sysdba 進行startup,可以在伺服器上發現兩個例項,一個為ORACLE_SID,一個為ORACLE_SIDnew,但是兩者的instance_name都是一樣的)

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

相關文章