對于剛接觸oracle,尤其是以前有MS SQL server經(jīng)驗(yàn)的的人來說,最迷惑的恐怕就是database和instance這兩個詞了。
對于剛接觸Oracle,尤其是以前有MS SQL server經(jīng)驗(yàn)的的人來說,最迷惑的恐怕就是database和instance這兩個詞了。
其實(shí)這兩個概念理解起來相當(dāng)簡單。讓我們舉個例子:
notepad記事本,相信大家都很熟悉。那么,位于windows目錄下的notepad.exe,是一個軟件,對吧。我們雙擊notepad.exe(或者從命令行啟動,這都不是問題),然后內(nèi)存中就有notepad的一個執(zhí)行實(shí)例了,這個實(shí)例只存在于內(nèi)存中,一旦計(jì)算機(jī)關(guān)機(jī)重啟,實(shí)例就不再存在了。
再假設(shè)我們硬盤上有一個文本文件test.txt,這個文件是在硬盤上物理存在的,不管計(jì)算機(jī)是否關(guān)閉,他都存在。然后我們用執(zhí)行的notepad開打這個test.txt,,我們就將一個notepad實(shí)例和一個物理的文本文件關(guān)聯(lián)起來了,test.txt被讀入內(nèi)存(緩存),在notepad實(shí)例中對這個test.txt文件進(jìn)行編輯操作。
oracle雖然比notepad龐大復(fù)雜許多,但是基本原理也是一樣的。我們安裝完oracle服務(wù)器軟件,就在硬盤上有了一個oracle的可執(zhí)行程序,就像notepad.exe。我們啟動oracle的一個instance,就好像啟動一個notepad的實(shí)例,這個實(shí)例完全存在于內(nèi)存中(當(dāng)然,也可以由于內(nèi)存不夠而被swap到硬盤的pagafile上),notepad的實(shí)例只有一個進(jìn)程(線程),而復(fù)雜的oracle就有很多的進(jìn)程(線程),這些進(jìn)程(線程)就叫做background process,同時oracle由于要操作比較多的數(shù)據(jù),所以就要劃出一塊比較大的內(nèi)存給他用,這塊內(nèi)存的名字叫做SGA。然后oracle的instance打開一組文件,就像notepad實(shí)例打開test.txt,oracle給這組文件起了一個專門的名字:database
其實(shí),軟件也好,實(shí)例也好,文件也好,出現(xiàn)這些概念和區(qū)別,我想,最主要還是因?yàn)橛?jì)算機(jī)的結(jié)構(gòu)特性:內(nèi)存速度快,但是掉電后丟失內(nèi)容;硬盤速度慢,但是內(nèi)容永久存在。這個特性決定了所有的計(jì)算機(jī)軟件的行為:為了盡可能的快,程序要在內(nèi)存中運(yùn)行,數(shù)據(jù)要在內(nèi)存中緩存;為了永久保存,程序和數(shù)據(jù)要保存在硬盤中。
在內(nèi)存中運(yùn)行的程序和保存該程序的數(shù)據(jù)的緩存,我們稱之為instance;在硬盤上保留的程序,我們稱之為軟件,在硬盤上保留的數(shù)據(jù),我們稱之為文件。對于oracle,需要一組文件,別且要保持一定的一致性和完整性,這組文件統(tǒng)一有個名字叫database。
相關(guān)數(shù)據(jù)字典:v$instance v$database
注意到
v$instance.instance_name varchar2(16)
v$database.name varchar2(9)
所以instance和database的名字長度都有限制的。使用DBCA的時候,不輸入數(shù)據(jù)庫和SID名的話,提示:數(shù)據(jù)庫名必須1到8個字符,SID必須1到64個字母數(shù)字字符。但我在xp上試驗(yàn)10gR2,手工建立名字超過15個字符的instance,可以成功并且能夠startup,但是查詢v$instance里面的instance_name字段為空,15個字符之內(nèi)(包括15個)則正常。建議是:instance名不超過15個字符,database名不超過8個字符。一般情況下,最好保持instance名和database名一致。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com