Oracle數(shù)據(jù)庫中的觸發(fā)器詳解
一、什么是觸發(fā)器?
觸發(fā)器:trigger,是一種特殊的數(shù)據(jù)庫對象,它可以在特定的事件發(fā)生時自動執(zhí)行一些操作,可以用于實現(xiàn)復(fù)雜的數(shù)據(jù)約束、數(shù)據(jù)驗證、數(shù)據(jù)審計等功能。
二、觸發(fā)器的基本原理
觸發(fā)器類似于過程、函數(shù),其包括聲明部分、異常處理部分,并且都有名稱、都被存儲在數(shù)據(jù)庫中。但與普通的過程、函數(shù)不同的是,函數(shù)需要用戶顯式地調(diào)用才執(zhí)行,而觸發(fā)器則是當(dāng)某些事件發(fā)生時,由Oracle自動執(zhí)行,觸發(fā)器的執(zhí)行對用戶來說是透明的。對其總結(jié)有如下幾點:
2.1.觸發(fā)器與表相關(guān)聯(lián):
每個觸發(fā)器都與一個特定的表相關(guān)聯(lián),并且只有在該表上發(fā)生的特定事件(如INSERT、UPDATE、DELETE)時才會觸發(fā)。
2.2.觸發(fā)器定義:
觸發(fā)器定義包括觸發(fā)事件、觸發(fā)時間和觸發(fā)操作(例如,執(zhí)行一個存儲過程或更新一個表)。
2.3.觸發(fā)器存儲在數(shù)據(jù)庫中:
觸發(fā)器是存儲在數(shù)據(jù)庫中的對象,它們與其他數(shù)據(jù)庫對象一樣可以被管理和維護。
2.4.觸發(fā)器是自動執(zhí)行的:
當(dāng)與其相關(guān)聯(lián)的表上發(fā)生特定事件時,觸發(fā)器會自動執(zhí)行,而不需要手動干預(yù)。
2.5.觸發(fā)器可以在事務(wù)中使用:
觸發(fā)器可以在事務(wù)中使用,以確保數(shù)據(jù)的一致性和完整性。
三、觸發(fā)器的類型
Oracle中的觸發(fā)器類型有如下四種:
3.1DML觸發(fā)器:
對表或視圖執(zhí)行DML操作時觸發(fā)。其中包括:
3.1.1. 行級觸發(fā)器(Row-Level Triggers):
當(dāng)對表中的一行數(shù)據(jù)進行INSERT、UPDATE或DELETE操作時,會觸發(fā)行級觸發(fā)器執(zhí)行。行級觸發(fā)器可以在每行數(shù)據(jù)發(fā)生變化時,對該行數(shù)據(jù)進行操作。
3.1.2. 語句級觸發(fā)器(Statement-Level Triggers):
當(dāng)對表進行INSERT、UPDATE或DELETE操作時,會觸發(fā)語句級觸發(fā)器執(zhí)行。語句級觸發(fā)器可以在整個語句執(zhí)行之前或之后對數(shù)據(jù)進行操作。
3.2. 觸發(fā)器的BEFORE類型和AFTER類型:
BEFORE類型的觸發(fā)器在數(shù)據(jù)插入、更新或刪除之前觸發(fā),可以用來驗證數(shù)據(jù)的正確性、設(shè)置默認值等;AFTER類型的觸發(fā)器在數(shù)據(jù)插入、更新或刪除之后觸發(fā),可以用來記錄數(shù)據(jù)變化、更新其他表等。
3.3. INSTEAD OF觸發(fā)器:
INSTEAD OF觸發(fā)器是一種特殊的觸發(fā)器,它可以用來替代INSERT、UPDATE或DELETE操作,當(dāng)對視圖進行INSERT、UPDATE或DELETE操作時,可以通過INSTEAD OF觸發(fā)器對其進行操作。它只定義在視圖上,用來替換實際的操作語句。
3.4系統(tǒng)觸發(fā)器(數(shù)據(jù)庫觸發(fā)器):
每當(dāng)一個用戶或數(shù)據(jù)庫中一個數(shù)據(jù)事件發(fā)生時或系統(tǒng)事件(如登錄或關(guān)閉系統(tǒng))發(fā)生時觸發(fā),即對數(shù)據(jù)庫系統(tǒng)進行操作(如DDL語句、啟動或關(guān)閉數(shù)據(jù)庫等系統(tǒng)事件)時觸發(fā)。
在Oracle11g和Oracle12c中可以定義和使用的觸發(fā)器類型總結(jié)有以下幾種:
- Ⅰ、簡單DML觸發(fā)器:包括BEFORE、AFTER和INSERT OF觸發(fā)器;
- Ⅱ、組合(復(fù)合)觸發(fā)器;
- Ⅲ、非DML觸發(fā)器,包括DDL事件觸發(fā)器和數(shù)據(jù)庫事件觸發(fā)器。
四、觸發(fā)器的作用
主要作用包括:
4.1. 數(shù)據(jù)完整性控制:
觸發(fā)器可以用于控制數(shù)據(jù)庫中數(shù)據(jù)的完整性,例如在插入、更新或刪除數(shù)據(jù)時驗證數(shù)據(jù)的有效性,確保數(shù)據(jù)滿足特定的業(yè)務(wù)規(guī)則和約束條件。
4.2. 數(shù)據(jù)庫自動化:
觸發(fā)器可以自動化一些常見的數(shù)據(jù)庫操作,例如在插入數(shù)據(jù)時自動更新其他表的數(shù)據(jù)、在刪除數(shù)據(jù)時自動刪除相關(guān)的數(shù)據(jù)等。
4.3. 數(shù)據(jù)審計:
觸發(fā)器可以用于跟蹤數(shù)據(jù)庫中的數(shù)據(jù)變化,例如記錄數(shù)據(jù)的修改時間、修改人、修改前后的值等,以及在發(fā)生異常情況時自動發(fā)送警報。
4.4. 數(shù)據(jù)復(fù)制:
觸發(fā)器可以用于實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)復(fù)制,例如將一個數(shù)據(jù)庫中的數(shù)據(jù)自動復(fù)制到另一個數(shù)據(jù)庫中,以實現(xiàn)數(shù)據(jù)同步和備份。
4.5. 業(yè)務(wù)流程自動化:
觸發(fā)器可以用于自動化業(yè)務(wù)流程,例如在訂單提交后自動發(fā)送郵件通知客戶、在庫存不足時自動向供應(yīng)商下訂單等。
五、觸發(fā)器使用場景
在以下情況下可以使用觸發(fā)器:
- Ⅰ、對一個特定的操作要確保所有相關(guān)的操作都被執(zhí)行;
- Ⅱ、執(zhí)行集中的全局的操作,并且觸發(fā)器的語句的觸發(fā)器獨立于用戶,也獨立于發(fā)出語句的應(yīng)用程序。
在以下情況不必設(shè)計觸發(fā)器:
- Ⅰ、其功能已經(jīng)嵌入Oracle服務(wù)器,如實現(xiàn)完整性規(guī)則應(yīng)該聲明Oracle約束,而不是定義觸發(fā)器;
- Ⅱ、重復(fù)其他觸發(fā)器的功能。
六、觸發(fā)器的語法格式
創(chuàng)建觸發(fā)器的語句是CREATE TRIGGER,其語法格式如下:
--整體組成部分包括: CREATE OR REPLACE TRIGGER<觸發(fā)器名> 觸發(fā)條件 觸發(fā)體 --------------------------------------------------- CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name [FOR EACH ROW] [WHEN (condition)] DECLARE -- declarations BEGIN -- trigger body END; --理解如下: create or replace trigger tri_name before|after --before是事前觸發(fā)器,after是事后觸發(fā)器 dml操作 [of 列] on 表 | dml操作 or dml操作 or.... --insert on update on delete 如果是插入則..刪除則..更新則.. 前者鎖定某個操作針對表,后者針對不同的dml操作 [for each row]--默認語句級,寫上是行級 [declare 聲明] begin 要執(zhí)行的語句; end;
舉例:
創(chuàng)建emp1和emp2表,其中emp1有emp的20部門的數(shù)據(jù),emp2是空表,表格式同emp;
create table emp1 as select * from emp where deptno=20; create table emp2 as select * from emp where 1=2;
此時emp1表的數(shù)據(jù)如下:
emp2表如下:
對emp1創(chuàng)建觸發(fā)器,要求是當(dāng)它被插入數(shù)據(jù)時,向emp2的empno插入一個1;
create or replace trigger tri_insert before insert on emp1 for each row begin insert into emp2(empno) values (1); --commit; end;
測試: 假如向emp1表插入10部門的員工信息:
insert into emp1 select * from emp where deptno=10;
執(zhí)行后,看emp1表:
查看emp2表:
發(fā)現(xiàn)表中插入了三個1,即emp1表每插入一條數(shù)據(jù),emp2表就插入一個1。
那么再創(chuàng)建一個觸發(fā)器,要求是當(dāng)emp1表被刪除數(shù)據(jù)時,向emp2表的ename列插入" delete" 向hiredate列插入"刪除時間",則語句如下:
create or replace trigger t1 before delete on emp1 for each row begin insert into emp2(ename,hiredate) values('delete',sysdate); end;
測試:假如刪除emp1表20部門的員工信息 :
delete from emp1 where deptno=20;
執(zhí)行后,查看emp1表:
查看emp2表:
此時發(fā)現(xiàn)emp2中已經(jīng)多了5條數(shù)據(jù)。
七、觸發(fā)器發(fā)生的相關(guān)概念
(1)觸發(fā)事件
引起觸發(fā)器被觸發(fā)的事件。如DML語句(如INSERT、UPDATE、DELETE語句對表或視圖執(zhí)行數(shù)據(jù)處理操作)、DDL語句(如CREATE、ALTER、DROP語句在數(shù)據(jù)庫中創(chuàng)建、修改、刪除模式對象)、數(shù)據(jù)庫系統(tǒng)事件(如系統(tǒng)啟動或退出、異常錯誤)、用戶事件(如登錄或退出數(shù)據(jù)庫)。
其中:
- 1. INSERT:當(dāng)有新記錄插入到表中時觸發(fā)觸發(fā)器。
- 2. UPDATE:當(dāng)表中的記錄被修改時觸發(fā)觸發(fā)器。
- 3. DELETE:當(dāng)表中的記錄被刪除時觸發(fā)觸發(fā)器。
(2)觸發(fā)條件
觸發(fā)條件是由WHEN子句指定的一個邏輯表達式。只有當(dāng)該表達式的值為TRUE時,遇到觸發(fā)事件才會自動執(zhí)行觸發(fā)器,使其執(zhí)行觸發(fā)操作,否則即便遇到觸發(fā)事件也不會執(zhí)行觸發(fā)器。
(3)觸發(fā)對象
觸發(fā)對象包括表、視圖、模式、數(shù)據(jù)庫。只有在這些對象上發(fā)生了符合觸發(fā)條件的觸發(fā)事件,才會執(zhí)行觸發(fā)操作。
(4)觸發(fā)操作
觸發(fā)器所要執(zhí)行的PL/SQL程序,即執(zhí)行部分。
(5)觸發(fā)時機
觸發(fā)時機指定觸發(fā)器的觸發(fā)時間。如果指定為BEFORE,則表示在執(zhí)行DML操作之前觸發(fā),以便防止某些錯誤操作發(fā)生或?qū)崿F(xiàn)某些業(yè)務(wù)規(guī)則:如果指定為AFTER,則表示在DML操作之后觸發(fā),以便記錄該操作或做某些事后處理
(6)條件謂詞
當(dāng)在觸發(fā)器中包含了多個觸發(fā)事件(NSERT、UPDATE、DELETE)的組合時,為了分別針對不同的事件進行不同的處理,需要使用Oracle提供的如下條件謂詞。
- INSERTING:當(dāng)觸發(fā)事件是INSERT時,取值為TRUE,否則為FALSE。
- UPDATING[(column_1,column_2,,column_n)]:當(dāng)觸發(fā)事件是UPDATE時,如果修改了column_x列,則取值為TRUE,否則為FALSE,其中column_x是可選的。
- DELETING:當(dāng)觸發(fā)事件是DELETE時,取值為TRUE,否則為FALSE。
(7)觸發(fā)子類型觸發(fā)子類型分別為行觸發(fā)(row)和語句觸發(fā)(statement),行觸發(fā)即對每一行操作時都要觸發(fā),而語句觸發(fā)只對這種操作觸發(fā)一次(即行級別觸發(fā)器可以在每個受影響的行上執(zhí)行操作,而語句級別觸發(fā)器則只在整個語句執(zhí)行完成后執(zhí)行一次。)。一般進行SQL語句操作時都應(yīng)是行觸發(fā),只有對整個表作安全檢查(即防止非法操作)時才用語句觸發(fā)。如果省略此項,默認為語句觸發(fā)。
對比語句級觸發(fā)器和行級觸發(fā)器:
語句級觸發(fā)器 | 行級觸發(fā)器 |
是創(chuàng)建觸發(fā)器時的默認類型 | 創(chuàng)建觸發(fā)器時使用FOR EACH ROW子句 |
對于觸發(fā)的事件只觸發(fā)一次 | 對受觸發(fā)事件影響的每行觸發(fā)一次 |
沒有受影響的行時也要觸發(fā)一次 | 觸發(fā)事件未影響任何數(shù)據(jù)行就不觸發(fā) |
此外,觸發(fā)器中還有兩個相關(guān)值,分別對應(yīng)被觸發(fā)的行中的舊表值和新表值,用old和new來表示,可以在觸發(fā)器中訪問NEW和OLD偽記錄。
:old.列--之前的,老的數(shù)據(jù) :new.列--之后的,新的數(shù)據(jù)
注意:
insert | update | delete | |
:old.列 | null | 修改之前的值 | 刪除之前的值 |
:new.列 | 插入的值 | 修改之后的值 | null |
在使用OLD和NEW限定詞時,還需要注意:
- 只在行觸發(fā)器中有OLD和NEW限定詞;
- 在每個SQL和PL/SQL語句中,這兩個限定詞前必須冠以冒號(:);
- 如果這兩個限定詞是在WHEN所在條件中引用就不必冠以冒號;
- 如果在較大的表上執(zhí)行許多修改,行級觸發(fā)器可能降低系統(tǒng)的效率。
把上面例子中emp2表的hiredate列的類型改成timestamp;
alter table emp2 modify hiredate timestamp;
注意:
要修改列的類型時該列一定要為空null;
原來hiredate的類型是varchar,如圖:
更改后如圖:
按照下面要求完成:
向emp1創(chuàng)建觸發(fā)器,當(dāng)emp1的ename被更新時,向emp2的ename插入更新前和更新后的名字,job列插入更新前/更新后,hiredate插入更新時的系統(tǒng)時間戳。則語句如下:
create or replace trigger tri_update before update of ename on emp1 for each row begin insert into emp2(ename,job,hiredate) values(:old.ename,'更新前',systimestamp); insert into emp2(ename,job,hiredate) values(:new.ename,'更新后',systimestamp); --commit; end;
測試:假如將emp1表的ename列改為小寫:
update emp1 set ename=lower(ename);
那么執(zhí)行后,查看emp1表:
查看emp2表:
通過表結(jié)果可以看出emp1更新三條記錄,emp2就會插入對應(yīng)的3條更新前/后的數(shù)據(jù)記錄。
八、觸發(fā)器和異常的聯(lián)動應(yīng)用
比如:
向emp1表插入數(shù)據(jù)時的當(dāng)前時間小時數(shù)為12和24之間時,拋出異常,錯誤代碼為-20000,錯誤描述為“時間不符”,那么語句如下:
create or replace trigger tri_1 before insert on emp1 begin if to_char(sysdate,'hh24') between 12 and 24 then raise_application_error(-20000,'時間不符'); end if; end;
測試:假如此時向emp1表插入emp表的全部數(shù)據(jù) :
--查看當(dāng)前時間: select sysdate from dual;
結(jié)果如下:
開始插入數(shù)據(jù):
insert into emp1 select * from emp;
執(zhí)行后,頁面出現(xiàn)彈窗如圖所示:
使用觸發(fā)器也能實現(xiàn)一表多插的情況 :
比如:對emp1創(chuàng)建一個觸發(fā)器,當(dāng)向emp1插入數(shù)據(jù)時,
--如果部門是10部門,同時插入到emp2表
--如果部門是20部門,打印部門編號和姓名
--如果部門是30部門,插入后工資增加10000;
create or replace trigger tri_2 before insert on emp1 for each row begin if :new.deptno= 10 then insert into emp2 values(:new.empno, :new.ename, :new.job, :new.mgr, :new.hiredate, :new.sal, :new.comm, :new.deptno); elsif :new.deptno=20 then dbms_output.put_line(:new.deptno||' '||:new.ename); elsif :new.deptno=30 then :new.sal:=:new.sal+10000; end if; end;
測試:表emp1和emp2是空表,假如向emp1插入emp表的數(shù)據(jù):
insert into emp1 select * from emp;
那么執(zhí)行后查看表emp1,如圖所示:
為了方便對比,查詢下emp表30部門的薪資:
select * from emp where deptno=30;
查看emp2如圖所示:
從表中可以看出10部門數(shù)據(jù)已經(jīng)插入到emp2表中。
九、觸發(fā)器的刪除
觸發(fā)器可以通過DROP TRIGGER語句刪除,語法如下:
DROP TRIGGER trigger_name;
十、觸發(fā)器的兩種狀態(tài)
在Oracle中,觸發(fā)器有兩種狀態(tài):啟用狀態(tài)和禁用狀態(tài)。
10.1. 啟用狀態(tài):
當(dāng)觸發(fā)器處于啟用狀態(tài)時,它會自動執(zhí)行預(yù)定義的操作,以響應(yīng)與其相關(guān)聯(lián)的事件??梢允褂?strong>ALTER TRIGGER語句來啟用觸發(fā)器,例如:
ALTER TRIGGER trigger_name ENABLE;
10.2. 禁用狀態(tài):
當(dāng)觸發(fā)器處于禁用狀態(tài)時,它不會響應(yīng)與其相關(guān)聯(lián)的事件,也不會自動執(zhí)行預(yù)定義的操作??梢允褂?strong>ALTER TRIGGER語句來禁用觸發(fā)器,例如:
ALTER TRIGGER trigger_name DISABLE;
可以使用以下語句來查看觸發(fā)器的狀態(tài):
SELECT trigger_name, status FROM user_triggers;
觸發(fā)器的啟用狀態(tài)和禁用狀態(tài)可以根據(jù)具體的業(yè)務(wù)需求來靈活切換。例如,在開發(fā)和測試階段,可以禁用某些觸發(fā)器來方便調(diào)試和測試,而在生產(chǎn)環(huán)境中,應(yīng)該保證觸發(fā)器處于啟用狀態(tài),以確保數(shù)據(jù)的完整性和一致性。
為什么要引入兩種狀態(tài)?
Oracle引入觸發(fā)器的兩種狀態(tài)(激活狀態(tài)和禁用狀態(tài))是為了方便管理和控制觸發(fā)器的執(zhí)行。觸發(fā)器的激活狀態(tài)表示觸發(fā)器可以被自動觸發(fā)執(zhí)行,而禁用狀態(tài)表示觸發(fā)器不會被自動觸發(fā)執(zhí)行。通過將觸發(fā)器設(shè)置為禁用狀態(tài),可以臨時停止觸發(fā)器的執(zhí)行,以便進行維護或調(diào)試。同時,禁用狀態(tài)還可以用來控制觸發(fā)器的執(zhí)行順序,以便在需要的時候先執(zhí)行某些觸發(fā)器。觸發(fā)器的狀態(tài)可以通過ALTER TRIGGER語句來進行修改。
十一、觸發(fā)器信息獲取及理解
已經(jīng)會創(chuàng)建和使用觸發(fā)器,那么應(yīng)該如何獲取當(dāng)前用戶中有關(guān)觸發(fā)器的信息以及如何理解這些信息?
其實可以使用Oracle系統(tǒng)視圖來獲取當(dāng)前用戶中有關(guān)觸發(fā)器的信息,其中包括以下幾個常用視圖:
- 1. ALL_TRIGGERS:顯示當(dāng)前用戶下的所有觸發(fā)器信息,包括觸發(fā)器名稱、所屬表名、觸發(fā)器類型、觸發(fā)事件、觸發(fā)器狀態(tài)等。
- 2. USER_TRIGGERS:與ALL_TRIGGERS類似,但只顯示當(dāng)前用戶下的觸發(fā)器信息。
- 3. ALL_TRIGGER_COLS:顯示當(dāng)前用戶下所有觸發(fā)器相關(guān)的列信息,包括列名、數(shù)據(jù)類型、長度等。
- 4. USER_TRIGGER_COLS:與ALL_TRIGGER_COLS類似,但只顯示當(dāng)前用戶下的觸發(fā)器相關(guān)的列信息。
這些視圖提供了觸發(fā)器的相關(guān)信息,可以通過查詢這些視圖來獲取需要的信息。例如,可以使用以下SQL語句查詢當(dāng)前用戶下的所有觸發(fā)器信息:
SELECT trigger_name, table_name, trigger_type, triggering_event, status FROM user_triggers;
其中,trigger_name表示觸發(fā)器名稱,table_name表示觸發(fā)器所屬表名,trigger_type表示觸發(fā)器類型(BEFORE或AFTER),triggering_event表示觸發(fā)事件(INSERT、UPDATE或DELETE),status表示觸發(fā)器狀態(tài)(ENABLED或DISABLED)。
理解這些信息可以幫助我們更好地管理和控制觸發(fā)器的執(zhí)行,例如,通過查看觸發(fā)器狀態(tài)來判斷是否需要禁用該觸發(fā)器,或者通過查看觸發(fā)器相關(guān)的列信息來確定觸發(fā)器的執(zhí)行邏輯。
十二、觸發(fā)器的危害
12.1.性能問題:
如果觸發(fā)器邏輯復(fù)雜,執(zhí)行時間長,會影響整個數(shù)據(jù)庫的性能,尤其是在高并發(fā)環(huán)境下。
12.2.數(shù)據(jù)不一致:
如果觸發(fā)器邏輯有誤或觸發(fā)器與其他數(shù)據(jù)庫對象之間的關(guān)系不正確,可能會導(dǎo)致數(shù)據(jù)不一致的問題。
12.3.難以維護:
觸發(fā)器可以在多個表之間進行數(shù)據(jù)同步或其他操作,但觸發(fā)器的復(fù)雜性和維護難度也會隨之增加。
12.4.安全問題:
如果觸發(fā)器沒有正確限制訪問權(quán)限,可能會被惡意用戶利用,造成安全漏洞。
總結(jié):
觸發(fā)器的執(zhí)行會增加數(shù)據(jù)庫的負載,從而影響數(shù)據(jù)庫的性能。
觸發(fā)器的設(shè)計和維護需要較高的技能水平和經(jīng)驗,否則可能會引起數(shù)據(jù)不一致等問題。
觸發(fā)器的執(zhí)行順序可能會影響業(yè)務(wù)邏輯,需要進行合理的設(shè)計和管理。
觸發(fā)器的使用可能會增加數(shù)據(jù)庫的復(fù)雜性,從而增加了數(shù)據(jù)庫管理的難度。
遺留問題(待解決):
怎樣利用觸發(fā)器來實現(xiàn)完整性約束?
INSTEAD OF觸發(fā)器的創(chuàng)建和測試如何實現(xiàn)?
目前還未理解這兩個問題,后續(xù)會花時間再學(xué)習(xí)和總結(jié)一下?。。?/p>
總結(jié)
到此這篇關(guān)于Oracle數(shù)據(jù)庫中的觸發(fā)器詳解的文章就介紹到這了,更多相關(guān)Oracle觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle數(shù)據(jù)庫更新大批量數(shù)據(jù)案例
今天小編就為大家分享一篇關(guān)于Oracle數(shù)據(jù)庫更新大批量數(shù)據(jù)案例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10Oracle中dbms_output.put_line的用法實例
最近寫了oracle過程,有個ORACLE中dbms_output.put_line的相關(guān)問題,所以下面這篇文章主要給大家介紹了關(guān)于Oracle中dbms_output.put_line的用法實例,需要的朋友可以參考下2022-06-06Oracle 8x監(jiān)控sysdba角色用戶登陸情況
Oracle 8x監(jiān)控sysdba角色用戶登陸情況...2007-03-03oracle 會話 死鎖 執(zhí)行sql 執(zhí)行job的方法
這篇文章主要介紹了oracle 會話 死鎖 執(zhí)行sql 執(zhí)行job的方法,需要的朋友可以參考下2015-12-12Oracle Arraysize設(shè)置對于邏輯讀的影響實例分析
這篇文章主要介紹了Oracle Arraysize設(shè)置對于邏輯讀的影響實例分析,通過設(shè)置Arraysize大幅減少了邏輯讀的次數(shù)和網(wǎng)絡(luò)往返次數(shù),需要的朋友可以參考下2014-07-07