1. 程式人生 > >oracle資料庫與例項的區別與聯絡

oracle資料庫與例項的區別與聯絡

本文參考相關部落格與文件,對oracle資料庫和例項做一個總結。

oracle資料庫與例項是兩個截然不同的概念,這一點與其他關係型資料庫區別很大。

簡單來講,例項是資料庫的一個快照;

打個比喻,資料庫就是一個相片底片,例項就是相紙,一個底片可以衝多個相紙,但一張相紙最多衝一個底片。

1  名詞解釋:

資料庫(database):

Oracle中的資料庫包含了一組作業系統檔案。Oracle資料庫表示包含多個存在於磁碟上的用來儲存資料的檔案的一個單個的集合名詞。 組成Oracle資料庫的檔案可以分成三個型別:資料檔案(data file)、重做日誌檔案(redo log file)和控制檔案(control file)。資料檔案儲存資料,Oracle中可以存在任意數量的資料檔案;重做日誌檔案用來儲存對資料更改的記錄,在系統恢復階段需要用到;控制檔案是一些特別的小檔案,用來儲存一些至關重要的關於資料庫的資訊,沒有這個檔案的話,例項就無法開啟資料庫。除了資料檔案、重做日誌檔案、控制檔案之外,資料庫還包含引數檔案(parameter file)、密碼檔案(password file)和可選的歸檔日誌檔案(archive log files)。

例項(instance):

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

2 關係:

在單例項資料庫中,一個數據庫對應一個例項,在叢集RAC情況下,共享資料庫檔案時,一個數據庫是可以被多個例項同時使用的。也就是說一個數據庫可以被一個或多個例項使用,但是一個例項最多隻能裝載和開啟一個數據庫。

安裝oracle時,選擇單例項資料庫時通常會安裝一個例項——資料庫對(當然可以裝多對),而且他們的名字預設相同(也就是例項和資料庫名字相同),當然也可以被設定為不相同,但不管相不相同,他們的聯絡是通過xxx/pfile/init.ora初始化檔案(引數檔案)聯絡的。因為xxx就是例項的名字,而init.ora中的db_name,則記錄相應資料庫的名字。

在oracle中檢視資料庫和例項的語句:

例項:

SELECT INSTANCE_NAME, HOST_NAME, VERSION,STARTUP_TIME, DATABASE_STATUS FROM V$INSTANCE;

資料庫:

SELECT NAME, DATABASE_ROLE, CREATED FROM V$DATABASE;

3 例項的作用:

例項是我們向資料庫讀寫資料或讀資料的媒介,在Oracle單例項資料庫中,只有一個例項,只能通過當前例項訪問資料庫,但是在RAC資料庫中,一個數據庫可以產生多個例項,當前資料庫就能被所有的當前的例項所開啟,並且當一個例項掛掉,其他例項也能正常的執行,從而保證了資料庫的穩定。

4 資料庫啟動過程介紹:

Oracle系統啟動時,首先在記憶體中建立資料庫例項,然後由例項找到儲存在磁碟中的資料庫,最後開啟資料庫讓使用者操作。當系統關閉時,例項會從記憶體中清除掉:整個記憶體結構和後臺程序都會消失,但是資料庫依然存在於磁碟上,只是處於關閉的狀態。之前也說過,Oracle例項可以在不開啟資料庫的情況下執行——這是與SQL Server資料庫最大的不同,SQL Server例項是不能夠離開系統資料庫而執行的。不過和SQL Server一樣Oracle資料庫在例項沒有啟動的情況下也是不能訪問的。

sysdba,是管理Oracle例項的,它的存在不依賴於整個資料庫完全啟動,只要例項啟動了,他就已經存在,以sysdba身份登入,裝載資料庫、開啟資料庫。只有資料庫打開了,或者說整個資料庫完全啟動後,DBA角色才有了存在的基礎!

下面演示啟動xxx例項,掛接資料庫,開啟資料庫,關閉資料庫、解除安裝資料庫、關閉例項的過程。

1、保持所有oracle相關服務關閉,監聽關閉。

2、啟動監聽。

命令列:lsnrctl start

注意:使用管理員執行cmd,否則會沒有許可權啟動。

3、啟動oracle服務

命令列:net start oracleservicexxx

其中xxx是資料庫例項的名字。

這裡假定只是啟動了oracle服務,即oracle DBMS,沒有啟動相關例項。

啟動oracle服務時也可以同時啟動例項,可以通過設定進行修改。

4、設定需要啟動的例項名。

命令列:set oracle_sid=xxx

注:根據當前例項名,啟動該例項。

5、登入sys,管理例項及資料庫。 

命令列:connect sys/pwd as sysdba

pwd是sys使用者的密碼,這時以sysdba的角色連線到oracle的空閒例項。

此時說明了在不啟動例項的時候即可連線oracle,sys使用者是用於管理例項和資料庫的。

7、啟動例項(不載入資料庫)

命令列: startup nomount 

此時則啟動了xxx例項,由 set oracle_sid=xxx設定的例項。

例項在資料庫載入前啟動,即先有例項,再載入資料庫(先開闢記憶體,再載入磁碟檔案)。

 8、載入資料庫

命令列:alter database mount 

將相應的資料庫掛接到xxx例項。

注:其中7、8可以合併為直接載入資料庫,命令:startup mount

9、開啟資料庫

命令列:alter database open 回車,則打開了相應資料庫。

注:其中7、8、9可以合併為直接開啟資料庫,命令:startup

10、關閉資料庫

命令列: shutdown

關閉資料庫、解除安裝資料庫、關閉例項。