【一】對ORACLE_SID的理解
十年的馬龍網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整馬龍建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“馬龍網(wǎng)站設(shè)計(jì)”,“馬龍網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
--------------------------------------------------------------------------------
Oracle
中SID的作用類似于一個“開關(guān)變量”---引導(dǎo)
oracle
在實(shí)例啟動時(shí)如何去默認(rèn)位置下讀取適當(dāng)?shù)膮?shù)文件并加載,以正確啟動實(shí)例。
我們知道實(shí)例的啟動需要指定pfile/spfile(Oracle9i之前是使用pfile--即init文件,從9i開始就默認(rèn)使用spfile--即服務(wù)器端參數(shù)文件這兩個文件的存放位置為:
A.pfile:名字為init<ORACLE_SID>.ora
B.spfile:名字為spfile<ORACLE_SID>.ora
我們看到init文件和spfile文件都帶有ORACLE_SID的標(biāo)識,這就是SID的作用了:
【1】當(dāng)我們要啟動一個實(shí)例時(shí),我們首先通過:set ORACLE_SID = XXX 或者export ORACLE_SID = XXX 的方式告訴Oracle接下來要啟動的實(shí)例
【2】當(dāng)我們執(zhí)行startup nomount時(shí),由于已經(jīng)指定了SID,那么Oracle知道了如何去默認(rèn)的目錄下查找該實(shí)例對應(yīng)的參數(shù)文件--就是靠SID去匹配每個init/spfile文件
【3】當(dāng)Oracle找到該文件后(init/spfile),就會讀取該文件的內(nèi)容,將一系列參數(shù)用于分配內(nèi)存空間,構(gòu)建后臺進(jìn)程等實(shí)例的啟動過程
【4】當(dāng)這個實(shí)例成功啟動后,我們又可以重新執(zhí)行 set ORACLE_SID = XXX 或 export ORACLE_SID = XXX 命令再次將“開關(guān)撥向”另一個SID,然后重復(fù)以上步驟
從上面的過程我們看到Oracle SID的作用是一個明顯的“開關(guān)變量”,它拔向那一邊,那么Oracle就會去找和它對應(yīng)的參數(shù)文件來啟動實(shí)例。其次SID也起到進(jìn)程隔離的作用--即SID會在實(shí)例的一系列后臺進(jìn)程中得到體現(xiàn),如ora_dbw0_paullin,ora_dbw0_boblin。通過SID來命名后臺進(jìn)程。
操作系統(tǒng) 也必須通過SID來和Oracle實(shí)例打交道,操作系統(tǒng)并不知道什么INSTANCE_NAME,只知道ORACLE_SID,在Oracle內(nèi)部由Oracle自己根據(jù)這個SID去識別不同的實(shí)例。所以O(shè)RACLE_SID更多的是“Oracle和外部操作系統(tǒng)溝通的一個窗口”。
【二】對INSTANCE_NAME的理解
--------------------------------------------------------------------------------
相比于ORACLE_SID這樣的“開關(guān)變量”,INSTANCE_NAME則是一個實(shí)實(shí)在在的參數(shù)。它是在init/pfile文件中配置的(db_name)。用于標(biāo)識
數(shù)據(jù)庫
實(shí)例的名稱,其缺省值就是ORACLE_SID。
INSTANCE_NAME就像一個人的名稱一樣,而SID則是這個人的身份證號碼。通過SID我們找到對應(yīng)的init/spfile文件,而init/spfile文件中又通過instance_name這個參數(shù)告訴我們對應(yīng)的實(shí)例叫什么名字。這樣就把ORACLE_SID、參數(shù)文件、INSTANCE_NAME聯(lián)系起來了。
造成ORACLE_SID不同,但I(xiàn)NSTANCE_NAME相同的原因通常是因?yàn)閺?fù)制了原有的參數(shù)文件,但忘記了修改其中的INSTANCE_NAME參數(shù)的值。不過在10G之后INSTANCE_NAME這個參數(shù)以及從init/spfile中消失了,以免引起混亂。
【三】對DB_NAME的理解
--------------------------------------------------------------------------------
我們已經(jīng)知道了ORACLE_SID是一個“開關(guān)變量”,INSTANCE_NAME是用來描述實(shí)例的。那么DB_NAME則是描述實(shí)例掛載的數(shù)據(jù)庫名稱,通過這個DB_NAME我們可以知道對應(yīng)的磁盤上的控制文件、日志文件、數(shù)據(jù)文件的位置。
DB_NAME在創(chuàng)建數(shù)據(jù)庫時(shí)被指定,默認(rèn)情況下和ORACLE_SID的名字一樣。但和INSTANCE_NAME一樣。DB_NAME一旦被確定下來就不能修改了,因?yàn)樗鼤瑫r(shí)存儲在init/spfie,控制文件,日志文件,數(shù)據(jù)文件。你只能修改init/spfile文件中DB_NAME參數(shù)的值,但是不能手工修改其它文件的值。所以一旦修改后引起幾個文件的值不匹配那么數(shù)據(jù)庫的啟動就會失敗。
A.一個實(shí)例可以MOUNT并打開任何數(shù)據(jù)庫(通過init/spfile中配置DB_NAME參數(shù)),但是同一時(shí)間一個實(shí)例只能打開一個數(shù)據(jù)庫。
B.一個數(shù)據(jù)庫可以被一個或多個實(shí)例所MOUNT并打開(只能是在RAC環(huán)境下,普通環(huán)境下一個數(shù)據(jù)庫只能同時(shí)被一個實(shí)例MOUNT并打開)。
那么如何知道實(shí)例應(yīng)該掛載到那個數(shù)據(jù)庫并打開呢?就是靠init/spfile中的“control_files”參數(shù)來告訴Oracle去那里讀取控制文件,而控制文件中又記錄了數(shù)據(jù)文件的位置。所以最終形成一個完整的鏈條:
ORACLE_SID --> init/spfile文件 --> instance_name、db_name、control_files --> 實(shí)例名、數(shù)據(jù)庫名、控制文件 --> 數(shù)據(jù)文件 --> 完成掛載并打開
【四】ORACLE_SID、INSTANCE_NAME、DB_NAME對應(yīng)關(guān)系
--------------------------------------------------------------------------------
我們已經(jīng)知道ORACLE_SID是用來隔離同一個ORACLE_HOME下不同的實(shí)例的。但對于不同的ORACLE_HOME呢?能否有相同名稱的SID呢?
實(shí)際上這就和文件系統(tǒng)的規(guī)則是一樣的:在同一個目錄下不允許有同名的文件存在,但不同的目錄下可以有同名的文件。同樣的在同一個ORACLE_HOME下不能有相同的SID存在,而不同的ORACLE_HOME下可以有重名的SID(即便是同一臺機(jī),只要ORACLE_HOME不同就可以)。
那么對于INSTANCE_NAME呢?默認(rèn)情況下INSTANCE_NAME和ORACLE_SID是相同的,也可以是不同的;而且不同的實(shí)例可以具有相同的實(shí)例名。這聽起來有點(diǎn)混亂是不?其實(shí)我們可以用一個簡單的生活化例子來解析:
在一個班級Class_1里面,有兩個學(xué)生,他們的名稱都叫張三,但他們的學(xué)號肯定不同。在這里“張三”就是INSTANCE_NAME,而學(xué)號就是SID。所以INSTANCE_NAME重復(fù)沒關(guān)系,只要SID不同就可以區(qū)分開來。
但是在另外一個班級Class_2里面,也有學(xué)號相同的學(xué)生,這時(shí)候就出現(xiàn)了我們說的SID相同的問題,那么如何區(qū)分呢?別忘了我們還有班級這個概念??!對應(yīng)于ORACLE就是ORACLE_HOME了。
至于INSTANCE_NAME和DB_NAME的對應(yīng)關(guān)系,這個很好理解了,不同的實(shí)例可以掛載到不同的DB,也可以掛載到相同的DB嘛。可以把這理解為“多個進(jìn)程同時(shí)對同一份磁盤文件的競爭性訪問”。
A. 相同ORACLE_HOME下,INSTANCE_NAME可以相同,但ORACLE_SID必須唯一。通過ORACLE_SID來區(qū)分不同的實(shí)例
B. 不同ORACLE_HOME下,ORACLE_SID可以相同,通過ORACLE_HOME來區(qū)分不同的SID
C.不同INSTANCE_NAME可以對應(yīng)不同的DB_NAME,也可以對應(yīng)相同的DB_NAME。但是如果不是在RAC環(huán)境下,只能同時(shí)啟動實(shí)例而不能同時(shí)掛載
【五】Oracle實(shí)例啟動過程的相關(guān)參數(shù)文件
--------------------------------------------------------------------------------
前面說到Oracle實(shí)例啟動時(shí),需要指定pfile/spfile參數(shù),對應(yīng)的就是init文件和spfile文件。那么當(dāng)這兩個文件同時(shí)存在時(shí)Oracle如何決定讀取那個呢?
以O(shè)racle 9i為例,由于默認(rèn)采用了spfile來啟動實(shí)例,所以查找的順序是:
spfile<ORACLE_SID>.ora ---> spfile.ora ---> init<ORACLE_SID>.ora
即默認(rèn)加載和SID對應(yīng)的參數(shù)文件,如果找不到則采用默認(rèn)的參數(shù)文件,再找不到就用舊的init文件,如果還是找不到則實(shí)例無法啟動。
==================================================
DB_NAME:
①是數(shù)據(jù)庫名,長度不能超過8個字符,記錄在datafile、redolog和control file中
②在DataGuard環(huán)境中DB_NAME相同而DB_UNIQUE_NAME不同
③在RAC環(huán)境中,各個節(jié)點(diǎn)的DB_NAME 都相同,但是INSTANCE_NAME不同
④DB_NAME還在 動態(tài)注冊監(jiān)聽 的時(shí)候起作用,無論是否定義了SERVICE_NAME,PMON進(jìn)程都會使用DB_NAME動態(tài)注冊監(jiān)聽
DBID:
①DBID可以看做是DB_NAME在數(shù)據(jù)庫內(nèi)部的表示,它是在數(shù)據(jù)庫創(chuàng)建的時(shí)候用DB_NAME結(jié)合算法計(jì)算出來的
②它存在于datafile和control file中,用來表示數(shù)據(jù)文件的歸屬,所以 DBID是唯一 的,對于不同的數(shù)據(jù)庫,DB_NAME可以是相同的,但是DBID一定是唯一的,例如在DataGuard中,主備庫的DB_NAME相同,但是DBID一定不同(看過一個很形象的例子,就是可以有同名的人,但是身份證號碼一定不同)
DB_UNIQUE_NAME:
①在DataGuard中,主備庫擁有相同的DB_NAME,為了區(qū)別,就必須有不同的DB_UNIQUE_NAME
②DB_UNIQUE_NAME在DG中會 影響動態(tài)注冊的SERVICE_NAME ,即如果采用的是動態(tài)注冊,則注冊的SERVICE_NAME為DB_UNIQUE_NAME,但是實(shí)例還是INSTANCE_NAME,即SID
INSTANCE_NAME:
①數(shù)據(jù)庫實(shí)例的名稱, INSTANCE_NAME默認(rèn)值是SID ,一般情況下和數(shù)據(jù)庫名稱(DB_NAME)相同,也可不同
②initSID.ora 和orapwSID 文件要與INSTANCE_NAME保持一致
③INSTANCE_NAME會影響進(jìn)程的名稱
SID:
①是操作系統(tǒng)中的環(huán)境變量,和ORACLE_HOME,ORACLE_BASE用法相同
②在操作系統(tǒng)中要想得到實(shí)例名,就必須使用ORACLE_SID。且ORACLE_SID必須與INSTANCE_NAME的值一致
SERVICE_NAME:
①數(shù)據(jù)庫和客戶端相連是使用的服務(wù)名
②在DataGuard中,如果采用動態(tài)注冊,建議在主備庫使用相同的service_names
③在DataGuard中,如果采用靜態(tài)注冊,建議在主備庫上的listener中輸入相同的服務(wù)名(service_name)
④如果采監(jiān)聽采用了靜態(tài)注冊,那么SERVICE_NAME就等于Listener.ora 文件中的GLOBAL_DATABASE_NAME的值
GLOBAL_DATABASE_NAME:
①GLOBAL_DATABASE_NAME 是listener配置的對外網(wǎng)絡(luò)連接名稱,可以是任意值
②在客戶端配置監(jiān)聽的tnsnames.ora 文件中的service_name 與這個GLOBAL_DBNAME 保持一致就可以了
③配置 靜態(tài)監(jiān)聽注冊 時(shí),需要輸入SID和GLOBAL_NAME
當(dāng)前文章:oraclesid,instance_name,db_name,oracle_sid之間的關(guān)系
網(wǎng)址分享:http://aaarwkj.com/article24/igjoje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站改版、網(wǎng)站策劃、網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)