1. 程式人生 > >Oracle知識點總結(一)

Oracle知識點總結(一)

體系結構:

資料庫的體系結構是指資料庫的組成、工作過程與原理,以及資料在資料庫中的組織與管理機制。

體系結構包括:例項(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 areaSGA)--當資料庫例項啟動時會首先分配

– 程式全域性區域(program global areaPGA)

– 使用者全域性區域(user global areaUGA)

SGA記憶體結構包括共享池(Shared Pool),資料緩衝區(Database Buffer Cache),重做日誌緩衝區(Redo Log Buffer Cache)。共享池的作用:共享池由庫快取和資料字典快取組成。快取和共享SQLPL/SQL程式碼;資料緩衝區的作用:

儲存從資料檔案中讀入的資料,提高查詢速度;重做日誌緩衝區的作用:變化前和變化後的資料在寫入資料緩衝區前都會先寫入重做日誌緩衝區,這樣在資料恢復時,Oracle就知道哪些需要回滾。日誌資料首先產生於重做日誌緩衝區,當重做日誌緩衝區的日誌資料達到一定數量時,由日誌寫程序LGWR將日誌資料寫入重做日誌檔案中。

PGA是為單獨的伺服器程序儲存私有資料的記憶體區域,只為各個伺服器程序提供一個PGAPGA只能由他們的伺服器程序訪問。

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。

1、%TYPE將某種資料型別的變數或列提供給其他變數。

其語法格式為:var1 table_name.column_name%TYPE;其中聲明瞭變數var1,它的資料型別與table_name表中的column_name欄位的資料型別相同。

2、%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.建立序列:

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操作