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