ORACLE例項與資料庫的區別

2021-09-02 15:44:31 字數 4894 閱讀 4423

剛接觸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後台程序/執行緒以及乙個共享記憶體區,這些記憶體由同乙個計算機上執行的執行緒/程序所共享。這裡可以維護易失的、非永續性內容(有些可以重新整理輸出到磁碟)。就算沒有磁碟儲存,資料庫例項也能存在。也許例項不能算是世界上最有用的事物,不過你完全可以把它想成是最有用的事物,這有助於對例項和資料庫劃清界線。

這兩個詞有時可互換使用,不過二者的概念完全不同。例項和資料庫之間的關係是:資料庫可以由多個例項裝載和開啟,而例項可以在任何時間點裝載和開啟乙個資料庫。實際上,準確地講,例項在其整個生存期中最多能裝載和開啟乙個資料庫!稍後就會介紹這樣的乙個例子。

乙個例項在其生存期中最多只能裝載和開啟乙個資料庫。要想再開啟這個(或其他)資料庫,必須先丟棄這個例項,並建立乙個新的例項。

重申一遍:

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

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

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

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

前面提到過,大多數情況下,例項和資料庫之間存在一種一對一的關係。可能正因如此,才導致人們很容易將二者混淆。從大多數人的經驗看來,資料庫就是例項,例項就是資料庫。

不過,在許多測試環境中,情況並非如此。在我的磁碟上,可以有5個不同的資料庫。測試主機上任意時間點只會執行乙個oracle例項,但是它訪問的資料庫每天都可能不同(甚至每小時都不同),這取決於我的需求。只需有不同的配置檔案,我就能裝載並開啟其中任意乙個資料庫。在這種情況下,任何時刻我都只有乙個「例項」,但有多個資料庫,在任意時間點上只能訪問其中的乙個資料庫。

所以,你現在應該知道,如果有人談到例項,他指的就是oracle的程序和記憶體。提到資料庫時,則是說儲存資料的物理檔案。可以從多個例項訪問乙個資料庫,但是乙個例項一次只能訪問乙個資料庫。

1.oracle資料庫系統中,dbms可以管理多個資料庫例項嗎?還是需要乙個oracle服務管理乙個例項?

oracle裡面乙個資料庫系統可以又多個例項。你可以執行dbca,在介面裡面你可以看到可以建立新的例項,但是大多數情況下,oracle都只是建立乙個例項。

2需要建立教務資料庫,財務資料庫兩個db,

是可以的,不過通常的做法是建再2個使用者放在不同的tablespaces上面。乙個使用者儲存教務資料庫表資料,乙個存放財務資料庫表資料。

3.oracle中的schema屬於哪個層次?

schema簡單來講,你可以理解成乙個使用者以及使用者所擁有的所有物件。其實就相當於sqlserver的庫。

4.oracle中這樣做。

create user test;

grant [connect,……]to test;

create table……

建立屬於此使用者的表及其他物件,那麼這個使用者數否可以代表為乙個應用db?

同3一樣,你可以這樣理解成乙個使用者以及使用者下面所有的物件其實就是sqlserver中的db了,實際生產環境中,為了減少成本和充分利用oracle資料庫的資源,我們都是乙個專案乙個使用者,乙個應用乙個使用者,然後在不同的使用者下面建立相應的表、檢視、儲存過程、儲存函式、序列等等。

下面來看乙個簡單的例子。假設我們剛安裝了oracle 10g10.1.0.3。我們執行乙個純軟體安裝,不包括初始的「啟動」資料庫,除了軟體以外什麼都沒有。

通過pwd命令可以知道當前的工作目錄(這個例子使用乙個linux平台的計算機)。我們的當前目錄是dbs(如果在windows平台上,則是database目錄)。執行ls–l命令顯示出這個目錄為「空」。其中沒有init.ora 檔案,也沒有任何儲存引數檔案(stored parameter file,spfile);儲存引數檔案將在第3章詳細討論。

oracle例項與資料庫的區別 - ly - ly的部落格

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

oracle例項與資料庫的區別 - ly - ly的部落格

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

oracle例項與資料庫的區別 - ly - ly的部落格

然後啟動sql*plus(oracle的命令列介面),並作為sysdba連線(sysdba賬戶可以在資料庫中做任何事情)。連線成功後,sql*plus報告稱我們連上了乙個空閒的例項:

oracle例項與資料庫的區別 - ly - ly的部落格

我們的「例項」現在只包括乙個oracle伺服器程序,見以下輸出中粗體顯示的部分。此時還沒有分配共享記憶體,也沒有其他程序。

oracle例項與資料庫的區別 - ly - ly的部落格

oracle例項與資料庫的區別 - ly - ly的部落格

現在來啟動例項:

oracle例項與資料庫的區別 - ly - ly的部落格

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

oracle例項與資料庫的區別 - ly - ly的部落格

然後再回到sql*plus:

oracle例項與資料庫的區別 - ly - ly的部落格

oracle例項與資料庫的區別 - ly - ly的部落格這裡對startup命令加了nomount選項,因為我們現在還不想真正「裝載」資料庫(要了解啟動和關閉的所有選項,請參見sql*plus文件)。

注意在windows上執行startup命令之前,還需要使用oradim.exe實用程式執行一條服務建立語句。

現在就有了所謂的「例項」。執行資料庫所需的後台程序都有了,如程序監視器(process monitor,pmon)、日誌寫入器(log writer,lgwr)等,這些程序將在第5章詳細介紹。

oracle例項與資料庫的區別 - ly - ly的部落格

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

oracle例項與資料庫的區別 - ly - ly的部落格

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

oracle例項與資料庫的區別 - ly - ly的部落格

這裡建立資料庫就是這麼簡單。但在實際中,也許要使用乙個稍有些複雜的create database命令,因為可能需要告訴oracle把日誌檔案、資料檔案、控制檔案等放在**。不過,我們現在已經有了乙個完全可操作的資料庫了。可能還需要執行$oracle_home/rdbms/admin/ catalog.sql指令碼和其他編錄指令碼(catalog script)來建立我們每天使用的資料字典(這個資料庫中還沒有我們使用的某些檢視,如all_objects),但不管怎麼說,資料庫已經有了。可以簡單地查詢一些oracle v$檢視(具體就是v$datafile、v$logfile和v$controlfile),列出構成這個資料庫的檔案:

oracle例項與資料庫的區別 - ly - ly的部落格

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

oracle例項與資料庫的區別 - ly - ly的部落格

oracle例項與資料庫的區別 - ly - ly的部落格

乙個例項在其生存期中最多只能裝載和開啟乙個資料庫。要想再開啟這個(或其他)資料庫,必須先丟棄這個例項,並建立乙個新的例項。

重申一遍:

1.例項是一組後台程序和共享記憶體。

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

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

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

前面提到過,大多數情況下,例項和資料庫之間存在一種一對一的關係。可能正因如此,才導致人們很容易將二者混淆。從大多數人的經驗看來,資料庫就是例項,例項就是資料庫。

不過,在許多測試環境中,情況並非如此。在我的磁碟上,可以有5個不同的資料庫。測試主機上任意時間點只會執行乙個oracle例項,但是它訪問的資料庫每天都可能不同(甚至每小時都不同),這取決於我的需求。只需有不同的配置檔案,我就能裝載並開啟其中任意乙個資料庫。在這種情況下,任何時刻我都只有乙個「例項」,但有多個資料庫,在任意時間點上只能訪問其中的乙個資料庫。

所以,你現在應該知道,如果有人談到例項,他指的就是oracle的程序和記憶體。提到資料庫時,則是說儲存資料的物理檔案。可以從多個例項訪問乙個資料庫,但是乙個例項一次只能訪問乙個資料庫。

Oracle 資料庫 與 例項的區別

剛接觸oracle的人肯定會對例項和資料庫感到困惑,例項到底代表些什麼?為什麼會有這個概念的出現?oracle例項 程序 程序所使用的記憶體 sga 例項是乙個臨時性的東西,你也可以認為它代表了資料庫某一時刻的狀態!資料庫 重做檔案 控制檔案 資料檔案 臨時檔案 資料庫是永久的,是乙個檔案的集合。o...

ORACLE例項與資料庫的區別

剛接觸oracle的人肯定會對例項和資料庫感到困惑,例項到底代表些什麼?為什麼會有這個概念的出現?oracle例項 程序 程序所使用的記憶體 sga 例項是乙個臨時性的東西,你也可以認為它代表了資料庫某一時刻的狀態!資料庫 重做檔案 控制檔案 資料檔案 臨時檔案 資料庫是永久的,是乙個檔案的集合。o...

資料庫與資料庫例項的區別

資料庫與資料庫例項的區別 一 資料庫 資料庫 database 是乙個資料集合.無論資料庫是採用關係結構還是物件導向結構,oracle資料庫都將 其資料存放在資料檔案中.在其內部,資料庫結構資料對檔案的邏輯 對映,使不同的資料分開儲存,這些邏輯劃分稱為表空間.表空間和檔案介紹 1 表空間 表空間 t...