oracle sid,instance_name,db_name,oracle_sid之間的關係__oracle

來源:互聯網
上載者:User
 

【一】對ORACLE_SID的理解


--------------------------------------------------------------------------------
Oracle中SID的作用類似於一個“開關變數”---引導Oracle在執行個體啟動時如何去預設位置下讀取適當的參數檔案並載入,以正確啟動執行個體。

我們知道執行個體的啟動需要指定pfile/spfile(Oracle9i之前是使用pfile--即init檔案,從9i開始就預設使用spfile--即伺服器端參數檔案這兩個檔案的存放位置為:

A.pfile:名字為init<ORACLE_SID>.ora
B.spfile:名字為spfile<ORACLE_SID>.ora

我們看到init檔案和spfile檔案都帶有ORACLE_SID的標識,這就是SID的作用了:

【1】當我們要啟動一個執行個體時,我們首先通過:set ORACLE_SID = XXX 或者export ORACLE_SID = XXX 的方式告訴Oracle接下來要啟動的執行個體

【2】當我們執行startup nomount時,由於已經指定了SID,那麼Oracle知道了如何去預設的目錄下尋找該執行個體對應的參數檔案--就是靠SID去匹配每個init/spfile檔案

【3】當Oracle找到該檔案後(init/spfile),就會讀取該檔案的內容,將一系列參數用於分配記憶體空間,構建後台進程等執行個體的啟動過程

【4】當這個執行個體成功啟動後,我們又可以重新執行 set ORACLE_SID = XXX 或 export ORACLE_SID = XXX 命令再次將“開關撥向”另一個SID,然後重複以上步驟

從上面的過程我們看到Oracle SID的作用是一個明顯的“開關變數”,它拔向那一邊,那麼Oracle就會去找和它對應的參數檔案來啟動執行個體。其次SID也起到進程隔離的作用--即SID會在執行個體的一系列後台進程中得到體現,如ora_dbw0_paullin,ora_dbw0_boblin。通過SID來命名後台進程。

作業系統也必須通過SID來和Oracle執行個體打交道,作業系統並不知道什麼INSTANCE_NAME,只知道ORACLE_SID,在Oracle內部由Oracle自己根據這個SID去識別不同的執行個體。所以ORACLE_SID更多的是“Oracle和外部作業系統溝通的一個視窗”。


【二】對INSTANCE_NAME的理解
--------------------------------------------------------------------------------
相比於ORACLE_SID這樣的“開關變數”,INSTANCE_NAME則是一個實實在在的參數。它是在init/pfile檔案中配置的(db_name)。用於標識資料庫執行個體的名稱,其預設值就是ORACLE_SID。

INSTANCE_NAME就像一個人的名稱一樣,而SID則是這個人的社會安全號碼碼。通過SID我們找到對應的init/spfile檔案,而init/spfile檔案中又通過instance_name這個參數告訴我們對應的執行個體叫什麼名字。這樣就把ORACLE_SID、參數檔案、INSTANCE_NAME聯絡起來了。

造成ORACLE_SID不同,但INSTANCE_NAME相同的原因通常是因為複製了原有的參數檔案,但忘記了修改其中的INSTANCE_NAME參數的值。不過在10G之後INSTANCE_NAME這個參數以及從init/spfile中消失了,以免引起混亂。


【三】對DB_NAME的理解
--------------------------------------------------------------------------------
我們已經知道了ORACLE_SID是一個“開關變數”,INSTANCE_NAME是用來描述執行個體的。那麼DB_NAME則是描述執行個體掛載的資料庫名稱,通過這個DB_NAME我們可以知道對應的磁碟上的控制檔案、記錄檔、資料檔案的位置。

DB_NAME在建立資料庫時被指定,預設情況下和ORACLE_SID的名字一樣。但和INSTANCE_NAME一樣。DB_NAME一旦被確定下來就不能修改了,因為它會同時儲存在init/spfie,控制檔案,記錄檔,資料檔案。你只能修改init/spfile檔案中DB_NAME參數的值,但是不能手工修改其它檔案的值。所以一旦修改後引起幾個檔案的值不匹配那麼資料庫的啟動就會失敗。

A.一個執行個體可以MOUNT並開啟任何資料庫(通過init/spfile中配置DB_NAME參數),但是同一時間一個執行個體只能開啟一個資料庫。
B.一個資料庫可以被一個或多個執行個體所MOUNT並開啟(只能是在RAC環境下,普通環境下一個資料庫只能同時被一個執行個體MOUNT並開啟)。

那麼如何知道執行個體應該掛載到那個資料庫並開啟呢。就是靠init/spfile中的“control_files”參數來告訴Oracle去那裡讀取控制檔案,而控制檔案中又記錄了資料檔案的位置。所以最終形成一個完整的鏈條:

ORACLE_SID --> init/spfile檔案 --> instance_name、db_name、control_files --> 執行個體名、資料庫名、控制檔案 --> 資料檔案 --> 完成掛載並開啟


【四】ORACLE_SID、INSTANCE_NAME、DB_NAME對應關係
--------------------------------------------------------------------------------
我們已經知道ORACLE_SID是用來隔離同一個ORACLE_HOME下不同的執行個體的。但對於不同的ORACLE_HOME呢。能否有相同名稱的SID呢。

實際上這就和檔案系統的規則是一樣的:在同一個目錄下不允許有同名的檔案存在,但不同的目錄下可以有同名的檔案。同樣的在同一個ORACLE_HOME下不能有相同的SID存在,而不同的ORACLE_HOME下可以有重名的SID(即便是同一台機,只要ORACLE_HOME不同就可以)。

那麼對於INSTANCE_NAME呢。預設情況下INSTANCE_NAME和ORACLE_SID是相同的,也可以是不同的;而且不同的執行個體可以具有相同的執行個體名。這聽起來有點混亂是不。其實我們可以用一個簡單的生活化例子來解析:

在一個班級Class_1裡面,有兩個學生,他們的名稱都叫張三,但他們的學號肯定不同。在這裡“張三”就是INSTANCE_NAME,而學號就是SID。所以INSTANCE_NAME重複沒關係,只要SID不同就可以區分開來。

但是在另外一個班級Class_2裡面,也有學號相同的學生,這時候就出現了我們說的SID相同的問題,那麼如何區分呢。別忘了我們還有班級這個概念啊。對應於ORACLE就是ORACLE_HOME了。

至於INSTANCE_NAME和DB_NAME的對應關係,這個很好理解了,不同的執行個體可以掛載到不同的DB,也可以掛載到相同的DB嘛。可以把這理解為“多個進程同時對同一份磁碟檔案的競爭性訪問”。

A. 相同ORACLE_HOME下,INSTANCE_NAME可以相同,但ORACLE_SID必須唯一。通過ORACLE_SID來區分不同的執行個體
B. 不同ORACLE_HOME下,ORACLE_SID可以相同,通過ORACLE_HOME來區分不同的SID
C.不同INSTANCE_NAME可以對應不同的DB_NAME,也可以對應相同的DB_NAME。但是如果不是在RAC環境下,只能同時啟動執行個體而不能同時掛載

 

 


【五】Oracle執行個體啟動過程的相關參數檔案
--------------------------------------------------------------------------------
前面說到Oracle執行個體啟動時,需要指定pfile/spfile參數,對應的就是init檔案和spfile檔案。那麼當這兩個檔案同時存在時Oracle如何決定讀取那個呢。

以Oracle 9i為例,由於預設採用了spfile來啟動執行個體,所以尋找的順序是:

spfile<ORACLE_SID>.ora ---> spfile.ora ---> init<ORACLE_SID>.ora

即預設載入和SID對應的參數檔案,如果找不到則採用預設的參數檔案,再找不到就用舊的init檔案,如果還是找不到則執行個體無法啟動。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.