ORACLE中的DB_NAME,SERVICE_NAME,INSTANCE_NAME,ORACLE_SID,GLOBAL_DBNAME介紹

bitifi發表於2015-09-22

最近查過一些資料,準備把oracle裡紛亂的引數整理一下,這裡主要討論以下引數,及其用法的總結,如有不對的地方,望高人指點!
在init.ora中有db_name,instance_name,service_name
在作業系統中需要配置oracle_sid
在listener.ora中有SID_NAME,GLOBAL_DBNAME,
在tnsname.ora中有SERVICE_NAME,SID
 
init.ora中
Db_name:對一個資料庫(Oracle database)的唯一標識,該資料庫為第一章講到的Oracle database。這種表示對於單個資料庫是足夠的,但是隨著由多個資料庫構成的分散式資料庫的普及,這種命令資料庫的方法給資料庫的管理造成一定的負擔,因為各個資料庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了Db_domain引數,這樣在資料庫的標識是由Db_name和Db_domain兩個引數共同決定的,避免了因為資料庫重名而造成管理上的混亂。這類似於互連網上的機器名的管理。我們將Db_name和Db_domain兩個引數用’.’連線起來,表示一個資料庫,並將該資料庫的名稱稱為Global_name,即它擴充套件了Db_name。Db_name引數只能由字母、數字、’_’、’#’、’$’組成,而且最多8個字元。

Db_domain:定義一個資料庫所在的域,該域的命名同網際網路的’域’沒有任何關係,只是資料庫管理員為了更好的管理分散式資料庫而根據實際情況決定的。當然為了管理方便,可以將其等於網際網路的域。

Global_name:對一個資料庫(Oracle database)的唯一標識,oracle建議用此種方法命令資料庫。該值是在建立資料庫是決定的,預設值為Db_name. Db_domain。在以後對引數檔案中Db_name與Db_domain引數的任何修改不影響Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO 命令進行修改,然後修改相應引數。

Service_name:該引數是oracle8i新引進的。在8i以前,我們用SID來表示標識資料庫的一個例項,但是在Oracle的並行環境中,一個資料庫對應多個例項,這樣就需要多個網路服務名,設定繁瑣。為了方便並行環境中的設定,引進了Service_name引數,該引數對應一個資料庫,而不是一個例項,而且該引數有許多其它的好處。該引數的預設值為Db_name. Db_domain,即等於Global_name。一個資料庫可以對應多個Service_name,以便實現更靈活的配置。該引數與SID沒有直接關係,即不必Service name 必須與SID一樣。

Net service name:網路服務名,又可以稱為資料庫別名(database alias)。是客戶端程式訪問資料庫時所需要,遮蔽了客戶端如何連線到伺服器端的細節,實現了資料庫的位置透明的特性。
 
例項 就是管理相關庫的記憶體結構的名字(由SGA、PGA、伺服器程式、使用者程式、後臺程式等組成)
資料庫 就是實際的磁碟上的檔案(資料檔案、日誌檔案、控制檔案等),負責儲存資料,但由對應的例項來操作它的資料
服務名 就是對外公佈的名稱,為網路監聽服務
其實,在我們傳統的概念裡,資料庫是一個統稱的名字,在Oracle中,你可以把“資料庫”理解成一個大概念,也要把它理解成一個小概念
1、一個Oracle資料庫系統中可以同時安裝幾個資料庫,每一個資料庫對應一個唯
一的例項,但是OPS系統除外,可以多個例項同時對一個資料庫操作,稱為並行服務
2、只是一個名字,SID即是INSTANCE_NAME,SERVICE_NAMES主要用在監聽器中。
在listener.ora中有SID_NAME,GLOBAL_DBNAME
這裡SID_NAME指資料庫的執行的例項名,應該是和instance_name一致
而對於GLOBAL_DBNAME是listener配置的對外網路連線名稱,我們在配置tnsname.ora時會考慮這個引數。這個引數可以任意的設定。
另外有一點需要注意,一般我們會在listener.ora手工配置資料庫例項的監聽配置。但oracle可以透過pmon程式支援自動註冊,這時自動註冊的對外網路連線名稱就會用到init.ora檔案中service_name,有多個值的話就會註冊多個,對於上面的例子,在這裡就會註冊serv1和serv2兩個監聽服務。如果你還手工配置了一個GLOBAL_DBNAME=serv3的監聽服務的話,那麼對於例項instance_name=aking就會有三個監聽服務。
 
在tnsname.ora中有SERVICE_NAME,SID
下面配置客戶端的tnsname.ora
對於這裡的配置主要要給出要連線的資料庫的IP及其連線的例項或服務
在監聽配置中我們提到了對外網路連線名稱,在這裡如果我們用SERVICE_NAME的話,就需要SERVICE_NAME=(GLOBAL_DBNAME或者service_name這裡要求oracle已經自動註冊到了監聽器中),對於SID=(instance_name)即可,譬如:
SERVICE_NAME=serv1,serv2,serv3都可以,或者
SID=aking
 
最後一個是ORACLE_SID引數,這個引數是作業系統中用到的,它是描述我們要預設連線的資料庫例項.
instance_name是oracle資料庫引數。而ORACLE_SID是作業系統的環境變數,ORACLE_SID必須與instance_name的值一致.對於一個機器上有多個例項的情況下,要修改後才能透過 conn / as sysdba連線,因為這裡用到了預設的例項名。
 
1.ORACLE_SID:(ORACLE SYSTEM IDENTIFIER)
     以環境變數的形式出現的。
     Oracle例項是由SGA和一組後臺程式組成的,例項的建立和啟動需要一個引數檔案,而引數檔案的名稱就是由ORACLE_SID決定的。對於init檔案,預設的檔名稱是init.ora,對於spfile檔案,預設的檔名稱是spfile.ora
     設定不同的ORACLE_SID值,就可以預設使用不同的引數檔案啟動不同的資料庫例項。
     另外,ORACLE_SID的作用遠遠不是作為一個例項入口這麼簡單的,在例項啟動後,例項名稱INSTANCE_NAME也是從ORACLE_SID得到的。
2.INSTANCE_NAME:
     例項名稱,這是Oracle例項的名字,用來區分不通的例項。在Oracle9i之前,該名字儲存在兩個地方:引數檔案和資料庫的內部試圖(V$INSTANCE).
     而在Oracle10g之後的版本中,該名字不再出現在引數檔案中,而是動態從系統中獲得,預設是取自ORACLE_SID。
     INSTANCE_NAME的作用除了區別不同例項之外,在監聽器動態註冊時,還會用於向監聽器註冊。比如instance_name=kanon,監聽中將動態註冊Instance "kanon",status READY資訊。
3.DB_NAME:    
     DB_NAME概念相比於INSTANCE_NAME要重要的多,它決定例項將掛在的資料檔案。它出現在資料檔案,控制檔案,日誌檔案中。在引數檔案中也出現,且必須出現。這個引數涉及到系統的物理檔案。
4.SERVICE_NAME和GLOBAL_DBNAME:
     這兩個引數之所以放在一起講,是因為他們往往是成對出現的。SERVICE_NAME出現在Tnsnames.ora檔案中,是客戶端要請求的服務名。
     GLOBAL_DBNAME出現在Listener.ora檔案中,是伺服器提供的服務名,可以透過show paramerer service_names檢視,並可以透過alter system set service_name='servicename' scope=both來修改。
     二者對應,實現了Listerner.ora/Tnsnames.ora的重要功能----監聽、請求與驗證。
總結:一條startup命令,究竟是如何啟動龐大的oracle資料庫的呢?下面我們來貫穿起來整個啟動流程,一探究竟:
      首先,系統接收到startup命令,立刻採取行動,取得環境變數ORACLE_SID的值,啟動第一階段--例項建立。系統根據找到的引數檔案啟動ORACLE資料庫例項,例項啟動後,一切由例項接管:註冊INSTANCE_NAME,往往INSTANCE_NAME就是來自ORACLE_SID,接著向監聽器動態註冊例項自己,並將INSTANCE_NAME寫入系統資料字典表,
      接下來,例項進一步讀取引數檔案,取得DB_NAME、控制檔案、檢查點等資訊,進入第二階段--掛載資料庫。例項從控制檔案中取得DB_NAME,並取得資料檔案、日誌檔案等資訊,進行DB_NAME的一致性檢驗、檔案的存在性

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

相關文章