馮 驥 盧振生
(綏化學(xué)院 黑龍江 綏化 152000)
ORACLE實(shí)例和數(shù)據(jù)庫之間的關(guān)系
1.臨時(shí)性和永久性
2.實(shí)例可以在沒有數(shù)據(jù)文件的情況下單獨(dú)啟動(dòng)startup nomount,通常沒什么意義
3.一個(gè)實(shí)例在其生存期內(nèi)只能裝載(alter database mount)和打開(alter database open)一個(gè)數(shù)據(jù)庫
4.一個(gè)數(shù)據(jù)庫可被許多實(shí)例同時(shí)裝載和打開(即RAC),RAC環(huán)境中實(shí)例的作用能夠得到充分的體現(xiàn)!
在Oracle領(lǐng)域中有兩個(gè)詞很容易混淆,這就是“實(shí)例”(instance)和“數(shù)據(jù)庫”(database)。
作為Oracle術(shù)語,這兩個(gè)詞的定義如下:
數(shù)據(jù)庫(database):物理操作系統(tǒng)文件或磁盤(disk)的集合。使用Oracle 10g的自動(dòng)存儲(chǔ)管理(Automatic Storage Management,ASM)或RAW分區(qū)時(shí),數(shù)據(jù)庫可能不作為操作系統(tǒng)中單獨(dú)的文件,但定義仍然不變。
這兩個(gè)詞有時(shí)可互換使用,不過二者的概念完全不同。實(shí)例和數(shù)據(jù)庫之間的關(guān)系是:數(shù)據(jù)庫可以由多個(gè)實(shí)例裝載和打開,而實(shí)例可以在任何時(shí)間點(diǎn)裝載和打開一個(gè)數(shù)據(jù)庫。一組操作系統(tǒng)進(jìn)程(或者是一個(gè)多線程的進(jìn)程)以及一些內(nèi)存;這些進(jìn)程可以操作數(shù)據(jù)庫。
而數(shù)據(jù)庫只是一個(gè)文件集合(包括數(shù)據(jù)文件、臨時(shí)文件、重做日志文件和控制文件)。
在任何時(shí)刻,一個(gè)實(shí)例只能有一組相關(guān)的文件(與一個(gè)數(shù)據(jù)庫關(guān)聯(lián))。大多數(shù)情況下,反過來也成立:一個(gè)數(shù)據(jù)庫上只有一個(gè)實(shí)例對其進(jìn)行操作。不過,Oracle的真正應(yīng)用集群 (Real Application Clusters,RAC)是一個(gè)例外,這是Oracle提供的一個(gè)選項(xiàng),允許在集群環(huán)境中的多臺(tái)計(jì)算機(jī)上操作,這樣就可以有多臺(tái)實(shí)例同時(shí)裝載并打開一個(gè)數(shù)據(jù)庫(位于一組共享物理磁盤上)。數(shù)據(jù)字典(Data Dictionary)是Oracle數(shù)據(jù)庫的一個(gè)重要組成部分,是元數(shù)據(jù)(Metadata)的存儲(chǔ)地點(diǎn)。
數(shù)據(jù)字典記錄了一下內(nèi)容:
◎所有數(shù)據(jù)庫Schema對象的定義(表、視圖、索引、簇、同義詞、序列、過程、函數(shù)、包、觸發(fā)器等)
◎數(shù)據(jù)庫的空間分配和使用情況;
◎字段的缺省值;
◎完整性約束信息;
◎Oracle用戶名稱、角色、權(quán)限等;
◎?qū)徲?jì)信息;
◎其他數(shù)據(jù)庫信息。
通常所說的數(shù)據(jù)字典由4個(gè)部分組成:
◎內(nèi)部RDBMS(X$)表
◎數(shù)據(jù)字典表
◎動(dòng)態(tài)性能視圖(V$)
◎數(shù)據(jù)字典視圖
內(nèi)部 RDBMS(X$)表:
X$表示加密命名的,Oracle不做文檔說明,Oracle通過X$表建立起大量視圖提供用戶查詢管理數(shù)據(jù)庫之用;
X$表是在數(shù)據(jù)庫啟動(dòng)時(shí)由Oracle應(yīng)用程序動(dòng)態(tài)創(chuàng)建,并且不允許sysdba之外的用戶直接訪問。
SYS@orclnew>set autotrace traceonly;
SYS@orclnew>select*from v$parameter;
可以看到所有的東西來自兩個(gè)內(nèi)部表:X$KSPPI&X$KSPPCV
另外一個(gè)有意思的X$表:X$KVIT
靜態(tài)數(shù)據(jù)字典視圖:
由于X$表和數(shù)據(jù)字典表通常不能直接訪問,Oracle創(chuàng)建了靜態(tài)數(shù)據(jù)字典視圖來提供用戶對于數(shù)據(jù)字典信息的訪問。這些信息通常相對穩(wěn)定、不能直接就該,所以稱之為靜態(tài)數(shù)據(jù)字典視圖
靜態(tài)數(shù)據(jù)字典視圖在創(chuàng)建數(shù)據(jù)庫時(shí)由 catalog.sql腳本創(chuàng)建,該腳本的位置:
$ORACLE_HOME/rdbms/admin/catalog.sql
靜態(tài)數(shù)據(jù)字典視圖的分類:
◎USER_ 類視圖包含了用戶所擁有的相關(guān)對象信息,用戶可以通過這個(gè)視圖查詢自己擁有的對象信息;
◎ALL_ 類視圖包含了用戶擁有權(quán)限訪問的所有對象的信息;
◎DBA_類視圖包含了數(shù)據(jù)庫所有相關(guān)對象的信息,用戶需要SELECTANY TABLE權(quán)限才能訪問。
動(dòng)態(tài)性能視圖:
動(dòng)態(tài)性能 V$視圖 (Dynamic Performance View)記錄了數(shù)據(jù)庫運(yùn)行時(shí)信息和統(tǒng)計(jì)數(shù)據(jù)。
數(shù)據(jù)庫啟動(dòng)時(shí),Oracle動(dòng)態(tài)創(chuàng)建了 X$表,在此基礎(chǔ)上,Oracle創(chuàng)建了 GV$和V$ 視圖。從Oracle 8i開始,GV$視圖被引入,含義:Global V$?;旧?,每個(gè)V$視圖都有一個(gè)對應(yīng)的GV$視圖存在。
通常大部分用戶訪問的 V$視圖,并不是視圖,而是指向V_$視圖的同義詞;
而V_$視圖是基于真正的V$視圖(這個(gè)視圖是基于X$表建立的)創(chuàng)建的。
SQL語句中對于對象名的解析順序:
1.Oracle首先查看在發(fā)出命令的用戶模式中是否存在表或者視圖;
2.如果表或者視圖不存在,Oracle檢查私有同義詞是否存在;
3.如果私有同義詞存在,將使用這個(gè)同義詞所引用的對象;
4.如果私有同義詞不存在,檢查同名的公有同義詞是否存在;
5.如果公有同義詞存在,使用這個(gè)同義詞所引用的對象;
6.如果公有同義詞不存在,那么返回錯(cuò)誤
“ORA-00942 table or view does not exist.”