體系結(jié)構(gòu):
數(shù)據(jù)庫的體系結(jié)構(gòu)是指數(shù)據(jù)庫的組成、工作過程與原理,以及數(shù)據(jù)在數(shù)據(jù)庫中的組織與管理機制。
體系結(jié)構(gòu)包括:實例( instence ),數(shù)據(jù)庫文件( database ),用戶進程( user?process )
,服務(wù)器進程( server?process ),以及其他文件(如參數(shù)文件( parameter?file ),密碼文件( password?file ),歸檔日志文件( archive?log?file )等)。
Oracle 服務(wù)器由數(shù)據(jù)庫文件和數(shù)據(jù)庫實例組成。
其中數(shù)據(jù)庫實例包括 SGA (即內(nèi)存結(jié)構(gòu)的集合)和管理數(shù)據(jù)庫的后臺進程。
數(shù)據(jù)庫文件包括三種:數(shù)據(jù)文件( data?files ),控制文件( control?files )和重做日志文件( redo?log?files )。
?
Oracle 中的 3 個主要內(nèi)存區(qū)域是:
–?系統(tǒng)全局區(qū)域 (system?global?area , SGA)-- 當(dāng)數(shù)據(jù)庫實例啟動時會首先分配
–?程序全局區(qū)域 (program?global?area , PGA)
–?用戶全局區(qū)域 (user?global?area , UGA)
SGA 內(nèi)存結(jié)構(gòu)包括 :? 共享池( Shared?Pool ),數(shù)據(jù)緩沖區(qū)( Database?Buffer?Cache ),重做日志緩沖區(qū)( Redo?Log?Buffer?Cache )。共享池的作用:共享池由庫緩存和數(shù)據(jù)字典緩存組成。緩存和共享 SQL 或 PL/SQL 代碼;數(shù)據(jù)緩沖區(qū)的作用: 存儲從數(shù)據(jù)文件中讀入的數(shù)據(jù),提高查詢速度;重做日志緩沖區(qū)的作用:變化前和變化后的數(shù)據(jù)在寫入數(shù)據(jù)緩沖區(qū)前都會先寫入重做日志緩沖區(qū),這樣在數(shù)據(jù)恢復(fù)時, Oracle 就知道哪些需要回滾。 日志數(shù)據(jù)首先產(chǎn)生于重做日志緩沖區(qū),當(dāng)重做日志緩沖區(qū)的日志數(shù)據(jù)達到一定數(shù)量時,由日志寫進程LGWR將日志數(shù)據(jù)寫入重做日志文件中。
PGA 是為單獨的服務(wù)器進程存儲私有數(shù)據(jù)的內(nèi)存區(qū)域,只為各個服務(wù)器進程提供一個 PGA 。 PGA 只能由他們的服務(wù)器進程訪問。
UGA 是用于存儲會話狀態(tài)的內(nèi)存區(qū)域。 UGA 的位置依賴于服務(wù)器是運行在共享服務(wù)器模式中,還是專用服務(wù)器模式中。在專用服務(wù)器模式中, UGA 會在 PGA 中分配,只能夠由服務(wù)器進程訪問。
?
Oracle進程主要有用戶進程、服務(wù)器進程和后臺進程。
用戶進程是一個需要與Oracle服務(wù)器進行交互的程序。
服務(wù)器進程猶如一個中介,完成用戶的各種數(shù)據(jù)服務(wù)請求,而把數(shù)據(jù)庫服務(wù)器返回的數(shù)據(jù)發(fā)給客戶端。
后臺進程主要作用是協(xié)調(diào)好系統(tǒng)的性能。其主要包括進程監(jiān)控進程(PMON,服務(wù)器進程的管理和維護)、系統(tǒng)監(jiān)控進程(SMON,在數(shù)據(jù)庫出現(xiàn)故障時進行實例恢復(fù))、數(shù)據(jù)庫寫進程(DBWR,主要負責(zé)將數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)寫到數(shù)據(jù)文件)、重做日志寫進程(LGWR,主要負責(zé)將重做日志緩沖區(qū)內(nèi)的數(shù)據(jù)寫到重做日志文件)及檢查點進程(CKPT,其作用是保證所有修改過的數(shù)據(jù)庫緩沖區(qū)都被寫入數(shù)據(jù)庫文件)。以上5個進程也是數(shù)據(jù)庫啟動過程中必須啟動的。
?
數(shù)據(jù)庫啟動和關(guān)閉
數(shù)據(jù)庫的啟動3個狀態(tài):
1:NOMOUNT?只打開數(shù)據(jù)庫實例?
2:MOUNT?打開實例并讀取控制文件?
3:OPEN?打開數(shù)據(jù)庫
按123順序啟動
數(shù)據(jù)庫的關(guān)閉3個狀態(tài):
1:CLOSE?關(guān)閉數(shù)據(jù)庫
2:DISMOUNT?
3:SHUTDOWN?關(guān)閉數(shù)據(jù)庫實例
?
?
事務(wù)
事務(wù)的概念:事務(wù)是一組邏輯工作單元,它由一條或多條SQL語句組成。
事務(wù)的4個特性:原子性,一致性,隔離性和持久性
事務(wù)控制:commit,rollback
?
?
SQL語言
SQL語言分為數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操縱語言(DML)和數(shù)據(jù)控制語言(DCL)。
DDL用于定義SQL模式、基本表、視圖和索引的創(chuàng)建和撤消操作。常用命令有:CREATE、ALTER、DROP。
DML用于數(shù)據(jù)的插入、修改、刪除和查詢。常用命令有:INSERT、UPDATE、DELETE、SELECT。
DCL用于對基本表的授權(quán)、完整性規(guī)則的描述和事務(wù)的控制等。常用的命令有:GRANT、REVOKE、COMMIT、SAVEPOINT、ROLLBACK。
?
Char和varchar2兩種數(shù)據(jù)類型的區(qū)別:
在數(shù)據(jù)庫中char(n)表示固定長度n的字符串,當(dāng)實際數(shù)據(jù)不足定義長度時,將使用空格補全右邊不足位,當(dāng)實際數(shù)據(jù)的長度大于其固定長度時,Oracle將不允許數(shù)據(jù)存儲于對應(yīng)列或者變量中,并拋出異常;
而varchar2(n)是可變長的字符串,意味著該列或變量的最大長度不大于n,但當(dāng)實際數(shù)據(jù)小于n時,并不在其右端補齊空格。
?
delete和truncate的區(qū)別。
Delete是DML語句,在刪除數(shù)據(jù)時要記錄重做信息,且刪除數(shù)據(jù)后不釋放表空間,速度慢。Truncate是數(shù)據(jù)定義語言,執(zhí)行后數(shù)據(jù)直接刪除且釋放表空間,不記錄日志信息,速度快。
?
?
?
?
PL/SQL語言
PL/SQL語言的敘述:
PL/SQL是一種塊結(jié)構(gòu)的語言,它將一組語句放在一個塊中。構(gòu)成PL/SQL程序的基本單元是邏輯塊(如過程、函數(shù)或匿名塊),每個邏輯塊對應(yīng)要解決的問題或子問題。PL/SQL塊共分為3個部分,分別為聲明部分、可執(zhí)行部分和異常處理部分。
?
屬性數(shù)據(jù)類型包括兩種,分別是%TYPE和%ROWTYPE。
1、%TYPE將某種數(shù)據(jù)類型的變量或列提供給其他變量。
其語法格式為:var1?table_name.column_name%TYPE;其中聲明了變量var1,它的數(shù)據(jù)類型與table_name表中的column_name字段的數(shù)據(jù)類型相同。
2、%ROWTYPE提供一種表示表中的某行的記錄類型。
???其語法格式為:var1?table_name%ROWTYPE;其中聲明了變量var1,可以用來存儲從table_name表中提取的一個記錄。
?
?
過程、函數(shù)、程序包
過程和函數(shù)的區(qū)別:過程沒返回值,而函數(shù)有返回值。
程序包是對相關(guān)過程、函數(shù)、變量、游標(biāo)和異常等對象的封裝。
程序包由規(guī)范和主體兩部分組成。規(guī)范可以在沒有程序包主體的情況下存在,主體不能在沒有程序包規(guī)格說明的情況下存在。
?
?
游標(biāo)和觸發(fā)器
游標(biāo)的4種屬性:%Isopen?、%found、%notfound、%rowcount。
使用游標(biāo)的 4 個步驟: 定義游標(biāo)(declare)、打開游標(biāo)(open)、循環(huán)取數(shù)據(jù)(fetch)、關(guān)閉游標(biāo)(close)。
顯式游標(biāo)和隱式游標(biāo)在使用過程中的區(qū)別:顯示游標(biāo)使用時要定義、隱式游標(biāo)不需要定義,在上下文中的 dml 語句默認使用隱式游標(biāo)。
?
觸發(fā)器定義:觸發(fā)器是當(dāng)特定事件出現(xiàn)時自動執(zhí)行的代碼塊。
觸發(fā)器與過程的區(qū)別:過程是由用戶或應(yīng)用程序甚至是觸發(fā)器顯式調(diào)用的,而觸發(fā)器是由Oracle根據(jù)發(fā)生的事件而隱式激活的,它不能被直接調(diào)用執(zhí)行。
觸發(fā)器的類型及其運行時機:
Oracle觸發(fā)器分為DML觸發(fā)器、模式(DDL或用戶事件)觸發(fā)器和數(shù)據(jù)庫級觸發(fā)器。
1:DML觸發(fā)器:當(dāng)DML語句在表中發(fā)生時執(zhí)行。DML語句包括以下3種類型:
a.語句級觸發(fā)器:無論受觸發(fā)語句影響的行數(shù)是多少,都只激活一次。
b.行級觸發(fā)器:每當(dāng)觸發(fā)器語句影響表時就會激活行級觸發(fā)器,行級觸發(fā)器在被修改的每一行上執(zhí)行一次。
c.INSTEAD?OF觸發(fā)器:允許用戶修改不能使用DML語句修改的視圖。INSTEAD?OF觸發(fā)器只可用于視圖,不可用于表。
2:模式(DDL或用戶事件)觸發(fā)器:在數(shù)據(jù)庫模式中執(zhí)行DDL語句時激活。
3:數(shù)據(jù)庫(系統(tǒng)事件)觸發(fā)器:在發(fā)生LOGOFF(退出)、LOGON(登錄)、STARTUP(打開)、SHUTDOWN(關(guān)閉)數(shù)據(jù)庫和SERVERERROR(生成錯誤消息)等系統(tǒng)事件時執(zhí)行。
?
?
數(shù)據(jù)庫對象(同義詞,序列,視圖,索引)
同義詞的定義:是現(xiàn)有對象的一個別名。
同義詞的作用:
1 :簡化 SQL 語句。 2 :隱藏對象的名稱和所有者。 3 :提供對對象的公共訪問。
同義詞的兩種類型:
1 :公有同義詞。 CREATE?public?synonym?emp_syn?FOR?SCOTT.emp;
2 :私有同義詞。 CREATE?synonym?emp?FOR?SCOTT.emp;
公有的同義詞只能建立在超級用戶下定義。
?
序列是用來生成唯一、連續(xù)的整數(shù)的數(shù)據(jù)庫對象。
在表中使用序列:
1.創(chuàng)建序列:
CREATE?SEQUENCE?sequence_name?[START?WITH?startnum]?[INCREMENT?BY?step];
2.創(chuàng)建表時使用序列:
CREATE?TABLE?table_name?(?uid?smallint?not?null,?...);
3.插入數(shù)據(jù)時使用序列:
INSERT?INTO?table_name?VALUES(sequence_name.NEXTVAL,?...);
?
?
視圖是從若干基本表和(或)其他視圖構(gòu)造出來的虛表。
視圖和表的區(qū)別是:創(chuàng)建一個視圖時,只是把其視圖的定義存放在數(shù)據(jù)字典中,而不存儲視圖對應(yīng)的數(shù)據(jù),而表會存儲對應(yīng)的數(shù)據(jù)。
視圖的目的和作用:篩選表中數(shù)據(jù),簡化查詢語句,對表起到保護作用。
注:加 WITH?READ?ONLY? 選項可使視圖不允許 DML 操作?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
