通過這段時間廢寢忘食的對Oracle數(shù)據(jù)庫的學習,感覺還有小有所成,Oracle確實很龐大,不計其數(shù)的參數(shù)和術(shù)語,當然其能夠?qū)崿F(xiàn)的細膩操作也不是其他數(shù)據(jù)庫系統(tǒng)所能夠相提并論的,這里對這段時間所學作一下總結(jié),也能夠讓初學者有所參考,當然本人技術(shù)水平和表達能力都有限,文中難免有錯誤之處,望指出改正。
1. oracle的基本概念
(1)全局數(shù)據(jù)庫名(global_name)
主要用于在分布式數(shù)據(jù)庫系統(tǒng)中區(qū)分不同的數(shù)據(jù)庫,它是由數(shù)據(jù)庫名和數(shù)據(jù)庫域名組成,格式為“數(shù)據(jù)庫名.數(shù)據(jù)庫域名”,數(shù)據(jù)庫域名允許為空,即只寫數(shù)據(jù)庫名。
全局數(shù)據(jù)庫名(global_name)=數(shù)據(jù)庫名(db_name)+數(shù)據(jù)庫域名(db_domain)。
如數(shù)據(jù)庫名為myOracle ,數(shù)據(jù)庫宿主機的域為mydomain,則數(shù)據(jù)庫的全局數(shù)據(jù)庫名為myOracle.mydomain,呵呵 又出來個數(shù)據(jù)庫名和數(shù)據(jù)庫域名。 查詢當前全局數(shù)據(jù)庫名 方法一: select * from global_name;
(2)數(shù)據(jù)庫名(db_name)
oracle可以在一臺電腦上可以創(chuàng)建多個數(shù)據(jù)庫,數(shù)據(jù)庫名(db_name)就是一個數(shù)據(jù)庫的標識。db_name會保持在數(shù)據(jù)文件頭里。
查詢當前數(shù)據(jù)庫名
方法一: select name from v$database;
方法二:show parameter db_name
方法三:查看參數(shù)文件
(3)數(shù)據(jù)庫域名(db_domain)
定義一個數(shù)據(jù)庫所在的域,該域的命名同互聯(lián)網(wǎng)的’域’沒有任何關(guān)系,只是數(shù)據(jù)庫管理員為了更好的管理分布式數(shù)據(jù)庫而根據(jù)實際情況決定的。當然為了管理方便,可以將其等于互聯(lián)網(wǎng)的域。
查詢數(shù)據(jù)庫域名
方法一:select value from v$parameter where name = 'db_domain';
方法二:show parameter db_domain
方法三:在參數(shù)文件中查詢
使用數(shù)據(jù)庫名(da_name)對一個數(shù)據(jù)庫進行唯一標識,這種表示對于單個數(shù)據(jù)庫是足夠的,但是隨著由多個數(shù)據(jù)庫構(gòu)成的分布式數(shù)據(jù)庫的普及,這種命令數(shù)據(jù)庫的方法給數(shù)據(jù)庫的管理造成一定的負擔,因為各個數(shù)據(jù)庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了db_domain參數(shù),這樣在數(shù)據(jù)庫的標識是由db_name和db_domain兩個參數(shù)共同決定的,避免了因為數(shù)據(jù)庫重名而造成管理上的混亂。這類似于互連網(wǎng)上的機器名的管理。我們將db_name和db_domain兩個參數(shù)用‘.’連接起來,表示一個數(shù)據(jù)庫,并將該數(shù)據(jù)庫的名稱稱為global_name,即它擴展了db_name。db_name參數(shù)只能由字母、數(shù)字、’_’、’#’、’$’組成,而且最多8個字符。
一個完整的Oracle數(shù)據(jù)庫包括兩個部分:數(shù)據(jù)庫和數(shù)據(jù)庫實例。
(4)數(shù)據(jù)庫
數(shù)據(jù)庫是存儲數(shù)據(jù)的多個物理文件的集合,如控制文件,數(shù)據(jù)文件,參數(shù)文件,日志文件,臨時文件等 ,它是靜態(tài)的、永久的,只要文件存在它就存在。數(shù)據(jù)庫名(db_name)就是對數(shù)據(jù)庫的標識。
(5)數(shù)據(jù)庫實例
oarcle數(shù)據(jù)庫服務(wù)器主要有兩部分組成:物理數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)
數(shù)據(jù)庫管理系統(tǒng)是用戶和物理數(shù)據(jù)庫之間的一個中間層,是軟件層。這個軟件層具有一定的結(jié)構(gòu),這個結(jié)構(gòu)又被稱為實例結(jié)構(gòu)。
在啟動數(shù)據(jù)庫時,oracle首先要在內(nèi)存中獲取、劃分、保留各種用途的區(qū)域,運行各種用途的后臺進程,即創(chuàng)建一個實例(instance),然后由該實例裝載、打開數(shù)據(jù)庫,最后由這個實例來訪問和控制數(shù)據(jù)庫的各種物理結(jié)構(gòu)。 數(shù)據(jù)庫至少由一個oracle實例引用,該實例由oracle系統(tǒng)標識符(system identity)唯一標識,用于區(qū)別此計算機上的任何其他實例。
在啟動數(shù)據(jù)庫并使用數(shù)據(jù)庫的時候,實際上是連接到該數(shù)據(jù)庫的實例,通過實例來連接、使用數(shù)據(jù)庫。所以實例是用戶和數(shù)據(jù)庫之間的一個中間層。
實例是由操作系統(tǒng)的內(nèi)存結(jié)構(gòu)和一系列進程所組成的,可以啟動和關(guān)閉。
一臺計算機上可以創(chuàng)建多個oracle數(shù)據(jù)庫,當同時要使用這些數(shù)據(jù)庫時,就要創(chuàng)建多個實例。為了不使這些實例相互混淆,每個實例都要用稱為SID的符號來區(qū)分,即創(chuàng)建這些數(shù)據(jù)庫時填寫的數(shù)據(jù)庫SID。
數(shù)據(jù)庫實例是用戶訪問數(shù)據(jù)庫的中間層,是使用數(shù)據(jù)庫的手段,它為用戶訪問數(shù)據(jù)庫提供了必要的內(nèi)存空間和多個工作進程,它是動態(tài)的、臨時的,簡單的說,Oracle實例就是由內(nèi)存空間和工作進程兩部分組成。 我們只能通過實例操作數(shù)據(jù)庫,同一時間,一個實例只能打開一個數(shù)據(jù)庫,也就是一個實例只能操作或管理一個數(shù)據(jù)庫,但一個數(shù)據(jù)庫可以被多個是實例打開。實例可以在沒有數(shù)據(jù)文件的情況下單獨啟動,(startup nomount)但這通常是沒有意義的,一個實例在生成期內(nèi)只能裝載(alter database mount)和打開(alter database open)數(shù)據(jù)庫。
ORACLE實例有兩種類型:單進程實例 和 多進程實例。
單進程ORACLE(又稱單用ORACLE)是一種數(shù)據(jù)庫系統(tǒng),一個進程執(zhí)行全部ORACLE代碼。由于ORACLE部分和客戶應(yīng)用程序不能分別以進程執(zhí)行,所以O(shè)RACLE的代碼和用戶的數(shù)據(jù)庫應(yīng)用是單個進程執(zhí)行。在單進程環(huán)境下的ORACLE 實例,僅允許一個用戶可存取。例如在MS-DOS上運行ORACLE 。
多進程ORACLE實例(又稱多用戶ORACLE)使用多個進程來執(zhí)行ORACLE的不同部分 ,對于每一個連接的用戶都有一個進程。
在多進程系統(tǒng)中,進程分為兩類:用戶進程 和ORACLE進程。當一用戶運行一應(yīng)用程序,如PRO*C程序或一個ORACLE工具(如SQL*PLUS),為用戶運行的應(yīng)用建立一個用戶進程。
進程是操作系統(tǒng)的基本執(zhí)行單元,它是具有獨立數(shù)據(jù)處理功能的正在執(zhí)行的程序。Oracle系統(tǒng)的進程包括三種類型:
①用戶進程
用戶在客戶端運行一個應(yīng)用程序(例如 Pro*C 程序)或 Oracle 工具(如OEM或 SQL*Plus)時,系統(tǒng)將為該用戶創(chuàng)建一個用戶進程。
用戶進程負責與Oracle服務(wù)器建立連接和會話并向服務(wù)器發(fā)出數(shù)據(jù)處理請求,得到處理結(jié)果后再輸出給用戶。
Oracle允許為一個用戶同時創(chuàng)建多個會話 。
②服務(wù)進程
Oracle為用戶進程創(chuàng)建一個服務(wù)進程或分配一個空閑的服務(wù)進程。
服務(wù)進程負責在用戶進程和Oracle實例之間調(diào)度請求和響應(yīng),主要完成:
解析與運行應(yīng)用程序提交的SQL語句;
數(shù)據(jù)處理時用到的數(shù)據(jù)如果不在SGA 中,負責將所需的數(shù)據(jù)塊從磁盤上的數(shù)據(jù)文件讀入SGA 的數(shù)據(jù)緩存區(qū);
以用戶進程能理解的形式返回SQL 語句的執(zhí)行結(jié)果。
用戶進程和服務(wù)進程之間的對應(yīng)關(guān)系是由Oracle數(shù)據(jù)庫的工作模式?jīng)Q定的。數(shù)據(jù)庫通常有兩種工作模式:
專用服務(wù)器模式
共享服務(wù)器模式
③后臺進程
Oracle實例啟動時,為了保證該實例的正常使用,系統(tǒng)將為該實例啟動一些后臺進程。
這些進程是操作數(shù)據(jù)庫的基礎(chǔ),不管有沒有用戶連接數(shù)據(jù)庫,這些進程都會被啟動。
后臺進程包括:
DBWR(Database Write) : 數(shù)據(jù)庫寫入程序
LGWR(Log Write) : 日志寫入程序
CKPT(Checkpoint) : 檢查點
SMON (System Monitor): 系統(tǒng)監(jiān)控
PMON(Process Monitor) : 進程監(jiān)控
ARCH(Archive) : 歸檔
RECO : 恢復
LCKn : 封鎖;
(6)實例名(instance_name)
數(shù)據(jù)庫實例名(instance_name)用于對外部連接。在操作系統(tǒng)中要取得與數(shù)據(jù)庫的聯(lián)系,必須使用數(shù)據(jù)庫實例名。例如,要去連接一個數(shù)據(jù)庫服務(wù)器,就必須知道其數(shù)據(jù)庫實例名。
查詢當前數(shù)據(jù)庫實例名
方法一:select instance_name from v$instance;
方法二:show parameter instance_name
方法三:在參數(shù)文件中查詢。
(7)服務(wù)名(Service_name)
該參數(shù)是oracle8i新引進的。在8i以前,我們用SID來表示標識數(shù)據(jù)庫的一個實例,但是在Oracle的并行環(huán)境中,一個數(shù)據(jù)庫對應(yīng)多個實例,這樣就需要多個網(wǎng)絡(luò)服務(wù)名,設(shè)置繁瑣。為了方便并行環(huán)境中的設(shè)置,引進了Service_name參數(shù),該參數(shù)對應(yīng)一個數(shù)據(jù)庫,而不是一個實例,而且該參數(shù)有許多其它的好處。該參數(shù)的缺省值為Db_name. Db_domain,即等于Global_name。一個數(shù)據(jù)庫可以對應(yīng)多Service_name,以便實現(xiàn)更靈活的配置。該參數(shù)與SID沒有直接關(guān)系,即不必Service name 必須與SID一樣。如果數(shù)據(jù)庫有域名,則數(shù)據(jù)庫服務(wù)名就是全局數(shù)據(jù)庫名,否則,數(shù)據(jù)庫服務(wù)名與數(shù)據(jù)庫名相同。
查詢當前數(shù)據(jù)庫服務(wù)名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
方法三:select instance_namefrom v$instance;
方法四:在參數(shù)文件中查詢。
注意:方法三:select instance_namefrom v$instance; 的值是來自操作系統(tǒng)的oracle_sid,oracle_sid是操作系統(tǒng)的環(huán)境變量。
以上這些概念非常容易混淆,且不容易理解,有的可能在使用過程中才能理解的比較透徹。