oracle例項和資料庫的區別

2021-06-16 08:30:32 字數 3988 閱讀 9161

剛接觸oracle的人肯定會對例項和

資料庫感到困惑,例項到底代表些什麼?|

為什麼會有這個概念的出現?

oracle例項 = 程序 + 程序所使用的記憶體(sga)

例項是乙個臨時性的東西,你也可以認為它

代表了資料庫某一時刻的狀態!

資料庫 = 重做檔案 + 控制檔案 + 資料檔案 + 臨時檔案

資料庫是永久的,是乙個檔案的集合。

oracle例項和資料庫之間的關係

1.臨時性和永久性

2.例項可以在沒有資料檔案的情況下單獨啟動 startup nomount , 通常沒什麼意義

3.乙個例項在其生存期內只能裝載(alter database mount)和開啟(alter database open)乙個數

據庫4.乙個資料庫可被許多例項同時裝載和開啟(即

rac),rac環境中例項的作用能夠得到充分

的體現!

下面對例項和資料庫做詳細的詮釋:

在oracle領域中有兩個詞很容易混淆,這就是「例項」(instance)和「資料庫」(database)。

作為oracle術語,這兩個詞的定義如下:

資料庫(database):物理作業系統檔案或磁碟(disk)的集合。使用oracle

10g的自動儲存

管理(automatic storage management,asm)或raw分割槽時,資料庫可能不作為作業系統

中單獨的檔案,但定義仍然不變。

例項(instance):一組oracle後台程序/執行緒以及乙個共享記憶體區,這些記憶體由同乙個計算

機上執行的執行緒/程序所共享。這裡可以維護易失的、非永續性內容(有些可以重新整理輸出到

磁碟)。就算沒有磁碟儲存,資料庫例項也能存在。也許例項不能算是世界上最有用的事物,

不過你完全可以把它想成是最有用的事物,這有助於對例項和資料庫劃清界線。

這兩個詞有時可互換使用,不過二者的概念完全不同。例項和資料庫之間的關係是:資料庫

可以由多個例項裝載和開啟,而例項可以在任何時間點裝載和開啟乙個資料庫。實際上,準

確地講,例項在其整個生存期中最多能裝載和開啟乙個資料庫!稍後就會介紹這樣的乙個例

子。是不是更糊塗了?我們還會做進一步的解釋,應該能幫助你搞清楚這些概念。例項就是

一組作業系統程序(或者是乙個多執行緒的程序)以及一些記憶體。這些程序可以運算元據庫;

而資料庫只是乙個檔案集合(包括資料檔案、臨時檔案、重做日誌檔案和控制檔案)。在任

何時刻,乙個例項只能有一組相關的檔案(與乙個資料庫關聯)。大多數情況下,反過來也

成立:乙個資料庫上只有乙個例項對其進行操作。不過,oracle的真正應用集群(real

多台計算機上操作,這樣就可以有多台例項同時裝載並開啟乙個資料庫(位於一組共享物理

磁碟上)。由此,我們可以同時從多台不同的計算機訪問這個資料庫。oracle rac能支援高

度可用的系統,可用於構建可擴縮性極好的解決方案。

下面來看乙個簡單的例子。假設我們剛

安裝了oracle 10g10.1.0.3。我們執行乙個純

軟體安裝,

不包括初始的「啟動」資料庫,除了軟體以外什麼都沒有。

通過pwd命令可以知道當前的工作目錄(這個例子使用乙個linux平台的計算機)。我們的

當前目錄是dbs(如果在windows平台上,則是database目錄)。執行ls–l 命令顯示出這個

目錄為「空」。其中沒有init.ora 檔案,也沒有任何儲存引數檔案(stored parameter file,spfile);

儲存引數檔案將在以後討論。

使用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)等,這些程序將在以後詳細介紹。

再使用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使用預設設定,把所有內容都放在一起,並把資料庫建立為一組持久的檔案。如果關

閉這個資料庫,再試圖開啟,就會發現資料庫無法開啟:

乙個例項在其生存期中最多只能裝載和開啟乙個資料庫。要想再開啟這個(或其他)資料庫,

必須先丟棄這個例項,並建立乙個新的例項。

重申一遍:例項是一組後台程序和共享記憶體。

資料庫是磁碟上儲存的資料集合。

例項「一生」只能裝載並開啟乙個資料庫。

資料庫可以由乙個或多個例項(使用rac)裝載和開啟。

前面提到過,大多數情況下,例項和資料庫之間存在一種一對一的關係。可能正因如此,才

導致人們很容易將二者混淆。從大多數人的經驗看來,資料庫就是例項,例項就是資料庫。

不過,在許多測試環境中,情況並非如此。在我的磁碟上,可以有5個不同的資料庫。測試

主機上任意時間點只會執行乙個oracle例項,但是它訪問的資料庫每天都可能不同(甚至

每小時都不同),這取決於我的需求。只需有不同的配置檔案,我就能裝載並開啟其中任意

乙個資料庫。在這種情況下,任何時刻我都只有乙個「例項」,但有多個資料庫,在任意時

間點上只能訪問其中的乙個資料庫。所以,你現在應該知道,如果有人談到例項,他指的就

是oracle的程序和記憶體。提到資料庫時,則是說儲存資料的物理檔案。可以從多個例項訪

問乙個資料庫,但是乙個例項一次只能訪問乙個資料庫。

oracle資料庫和資料庫例項

oracle中的資料庫和資料庫例項 oracle的體系結構簡單來分的話,分成2部分 資料庫 database 和資料庫例項 database instance 這是個容易搞糊塗的概念,在sql server裡面,你在你的機器上安裝一次sql server,那麼你就等於安裝了一次資料庫例項,在這個例項...

oracle概念 例項和資料庫

資料庫程式,一般都要使用計算機的記憶體和持久儲存裝置 例如磁碟 進行操作。磁碟提供了持久儲存和儲存大量資訊的空間。但是,從磁碟中獲得資訊要比從記憶體中獲取資訊的速度慢很多,因此,很多資料庫引擎利用記憶體來快取資訊,從而加快資料的訪問速度。資訊如何儲存和從什麼地方獲取對於終端查詢使用者來說是透明的,但...

資料庫和資料庫例項

以前一直把資料庫和資料庫例項弄混淆,最近讀 mysql 技術內幕 innodb 儲存引擎 得到了答案。資料庫 物理作業系統檔案或其他形式檔案型別的集合。在mysql資料庫中,資料庫檔案可以是frm myd myi ibd結尾的檔案。例項 mysql資料庫和後台執行緒以及乙個共享記憶體區組成。共享記憶...