ORACLE執行個體與資料庫的區別

來源:互聯網
上載者:User
剛接觸ORACLE的人肯定會對執行個體和資料庫感到困惑,執行個體到底代表些什嗎?為什麼會有這個概念的出現?ORACLE執行個體 = 進程 + 進程所使用的記憶體(SGA)
執行個體是一個臨時性的東西,你也可以認為它代表了資料庫某一時刻的狀態!
資料庫 = 重做檔案 + 控制檔案 + 資料檔案 + 臨時檔案
資料庫是永久的,是一個檔案的集合。
ORACLE執行個體和資料庫之間的關係
1.
臨時性和永久性
2.
執行個體可以在沒有資料檔案的情況下單獨啟動 startup nomount , 通常沒什麼意義
3.
一個執行個體在其生存期內只能裝載(alter database mount)和開啟(alter database open)一個資料庫
4.
一個資料庫可被許多執行個體同時裝載和開啟(即RAC),RAC環境中執行個體的作用能夠得到充分的體現!

下面對執行個體和資料庫做詳細的詮釋:
在Oracle領域中有兩個詞很容易混淆,這就是“執行個體”(instance)和“資料庫”(database)。作為Oracle術語,這兩個詞的定義如下:
q
資料庫(database):物理作業系統檔案或磁碟(disk)的集合。使用Oracle 10g的自動儲存管理(Automatic Storage Management,ASM)或RAW分區時,資料庫可能不作為作業系統中單獨的檔案,但定義仍然不變。
q
執行個體(instance):一組Oracle後台進程/線程以及一個共用記憶體區,這些記憶體由同一個電腦上啟動並執行線程/進程所共用。這裡可以維護易失的、非持久性內容(有些可以重新整理輸出到磁碟)。就算沒有磁碟儲存,資料庫執行個體也能存在。也許執行個體不能算是世界上最有用的事物,不過你完全可以把它想成是最有用的事物,這有助於對執行個體和資料庫劃清界線。
這兩個詞有時可互換使用,不過二者的概念完全不同。執行個體和資料庫之間的關係是:資料庫可以由多個執行個體裝載和開啟,而執行個體可以在任何時間點裝載和開啟一個資料庫。實際上,準確地講,執行個體在其整個生存期中最多能裝載和開啟一個資料庫!稍後就會介紹這樣的一個例子。
是不是更糊塗了?我們還會做進一步的解釋,應該能協助你搞清楚這些概念。執行個體就是一組作業系統進程(或者是一個多線程的進程)以及一些記憶體。這些進程可以操作資料庫;而資料庫只是一個檔案集合(包括資料檔案、臨時檔案、重做記錄檔和控制檔案)。在任何時刻,一個執行個體只能有一組相關的檔案(與一個資料庫關聯)。大多數情況下,反過來也成立:一個資料庫上只有一個執行個體對其進行操作。不過,Oracle的真正應用叢集(Real Application Clusters,RAC)是一個例外,這是Oracle提供的一個選項,允許在叢集環境中的多台電腦上操作,這樣就可以有多台執行個體同時裝載並開啟一個資料庫(位於一組共用物理磁碟上)。由此,我們可以同時從多台不同的電腦訪問這個資料庫。Oracle RAC能支援高度可用的系統,可用於構建可擴縮性極好的解決方案。
下面來看一個簡單的例子。假設我們剛安裝了Oracle 10g10.1.0.3。我們執行一個純軟體安裝,不包括初始的“啟動”資料庫,除了軟體以外什麼都沒有。
通過pwd命令可以知道當前的工作目錄(這個例子使用一個Linux平台的電腦)。我們的目前的目錄是dbs(如果在Windows平台上,則是database目錄)。執行ls–l命令顯示出這個目錄為“空”。其中沒有init.ora 檔案,也沒有任何儲存參數檔案(stored parameter file,SPFILE);儲存參數檔案將在第3章詳細討論。

使用ps(進程狀態)命令,可以看到使用者ora10g啟動並執行所有進程,這裡假設ora10g是Oracle軟體的所有者。此時還沒有任何Oracle資料庫進程。

然後使用ipcs命令,這個UNIX命令可用於顯示進程間的通訊裝置,如共用記憶體、訊號量等。目前系統中沒有使用任何通訊裝置。

然後啟動SQL*Plus(Oracle的命令列介面),並作為SYSDBA串連(SYSDBA賬戶可以在資料庫中做任何事情)。串連成功後,SQL*Plus報告稱我們連上了一個閒置執行個體:

我們的“執行個體”現在只包括一個Oracle伺服器處理序,見以下輸出中粗體顯示的部分。此時還沒有分配共用記憶體,也沒有其他進程。


現在來啟動執行個體:

這裡提示的檔案就是啟動執行個體時必須要有的一個檔案,我們需要有一個參數檔案(一種簡單的一般檔案,後面還會詳細說明),或者要有一個儲存參數檔案。現在就來建立參數檔案,並放入啟動資料庫執行個體所需的最少資訊(通常還會指定更多的參數,如資料庫塊大小、控制檔案位置,等等)。

然後再回到SQL*Plus:

這裡對startup命令加了nomount選項,因為我們現在還不想真正“裝載”資料庫(要瞭解啟動和關閉的所有選項,請參見SQL*Plus文檔)。
注意
在Windows上運行startup命令之前,還需要使用oradim.exe公用程式執行一條服務建立語句。

現在就有了所謂的“執行個體”。運行資料庫所需的後台進程都有了,如進程監視器(process monitor,PMON)、日誌寫入器(log writer,LGWR)等,這些進程將在第5章詳細介紹。

再使用ipcs命令,它會首次報告指出使用了共用記憶體和訊號量,這是UNIX上的兩個重要的處理序間通訊裝置:

注意,我們還沒有“資料庫”呢!此時,只有資料庫之名(在所建立的參數檔案中),而沒有資料庫之實。如果試圖“裝載”這個資料庫,就會失敗,因為資料庫根本就不存在。下面就來建立資料庫。有人說建立一個Oracle資料庫步驟很繁瑣,真是這樣嗎?我們來看看:

這裡建立資料庫就是這麼簡單。但在實際中,也許要使用一個稍有些複雜的CREATE DATABASE命令,因為可能需要告訴Oracle把記錄檔、資料檔案、控制檔案等放在哪裡。不過,我們現在已經有了一個完全可操作的資料庫了。可能還需要運行$ORACLE_HOME/rdbms/admin/ catalog.sql指令碼和其他編錄指令碼(catalog script)來建立我們每天使用的資料字典(這個資料庫中還沒有我們使用的某些視圖,如ALL_OBJECTS),但不管怎麼說,資料庫已經有了。可以簡單地查詢一些Oracle V$視圖(具體就是V$DATAFILE、V$LOGFILE和V$CONTROLFILE),列出構成這個資料庫的檔案:

Oracle使用預設設定,把所有內容都放在一起,並把資料庫建立為一組持久的檔案。如果關閉這個資料庫,再試圖開啟,就會探索資料庫無法開啟:


一個執行個體在其生存期中最多隻能裝載和開啟一個資料庫。要想再開啟這個(或其他)資料庫,必須先丟棄這個執行個體,並建立一個新的執行個體。
重申一遍:
q
執行個體是一組後台進程和共用記憶體。
q
資料庫是磁碟上儲存的資料集合。
q
執行個體“一生”只能裝載並開啟一個資料庫。
q
資料庫可以由一個或多個執行個體(使用RAC)裝載和開啟。
前面提到過,大多數情況下,執行個體和資料庫之間存在一種一對一的關係。可能正因如此,才導致人們很容易將二者混淆。從大多數人的經驗看來,資料庫就是執行個體,執行個體就是資料庫。
不過,在許多測試環境中,情況並非如此。在我的磁碟上,可以有5個不同的資料庫。測試主機上任意時間點只會運行一個Oracle執行個體,但是它訪問的資料庫每天都可能不同(甚至每小時都不同),這取決於我的需求。只需有不同的設定檔,我就能裝載並開啟其中任意一個資料庫。在這種情況下,任何時刻我都只有一個“執行個體”,但有多個資料庫,在任意時間點上只能訪問其中的一個資料庫。
所以,你現在應該知道,如果有人談到執行個體,他指的就是Oracle的進程和記憶體。提到資料庫時,則是說儲存資料的物理檔案。可以從多個執行個體訪問一個資料庫,但是一個執行個體一次只能訪問一個資料庫。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.