Instance是操作系統中一系列的進程以及為這些進程所分配的內存塊。
數據庫中實例
和數據庫區別
什么是數據庫,其實很簡單,數據庫就是存儲數據的一種媒介。比如常用的文件就是一種,在Oracle10G中,數據的存儲有好幾種。第一種是文件形式,也就是在你的磁盤中創建一批文件,然后在這些文件中存儲信息。第二種就是磁盤陣列形式,這個是什么意思呢,這個就是說明數據庫不是存放為某個文件,而是把一個或者多個磁盤格式化成Oracle數據庫的一種格式了,等于整個磁盤就是存放Oracle數據庫的,不能作為別的用途。這樣的優點是存儲性能高,因為不再借助別的文件格式了,而是把整個磁盤都成為Oracle最適應的文件系統格式。當然還可能有別的形式,比如網絡什么的。不過我們最常用的還是文件格式的,在文件格式中,數據庫指的就是那些數據文件,控制文件以及REDO文件等等一系列文件。而什么是Instance呢,Instance其實就是指的操作系統中一系列的進程以及為這些進程所分配的內存塊。在Oracle數據庫中,我們可以新建一個Oracle的Instance,這個時候雖然有了進程還有SGA等一系列的內存塊,但是這個時候并沒有把數據庫文件讀取進來。所以只是一個實例,在后來,你可以通過命令手動或者自動地把數據庫文件加載進我們的數據庫Instance中,這個時候的數據庫才可以讓我們真正的開始訪問操作。
所以說,數據庫的應用如果想實現,數據庫和數據庫Instance是缺一不可的,如果只有數據庫的那些文件,那么,只能代表數據在這個文件中,但是我們無法直接進行操作。而如果只有數據庫Instance,那么我們雖然可以急性操作,但是也不知道操作哪些數據,操作生成的數據也無法保存等等。所以,當一個Oracle數據庫 Instance真正Load了一個Oracle Database了以后,數據庫才可以被我們使用。
在這里要注意一點的是,Oracle的實例在啟動以后,只能load一次數據庫,如果想把數據庫與Instance斷開,然后再重新掛在一個數據庫Instance,那么就需要你首先把數據庫Instance進程結束,然后重新建立這個instance的一個進程,再load另外一個數據庫。否則肯定要拋除ORA-16169錯誤,說數據庫已經被打開。因為一個數據庫Instance在其生存期中最多只能load和打開一個instance。
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能支持高度可用的系統,可用于構建可擴縮性極好的解決方案。
參考資料 >