Oracle中怎么建立系統(tǒng)事件觸發(fā)器

本篇內(nèi)容介紹了“Oracle中怎么建立系統(tǒng)事件觸發(fā)器”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)是一家網(wǎng)站設(shè)計公司,集創(chuàng)意、互聯(lián)網(wǎng)應(yīng)用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設(shè)服務(wù)商,主營產(chǎn)品:自適應(yīng)網(wǎng)站建設(shè)成都品牌網(wǎng)站建設(shè)、全網(wǎng)整合營銷推廣。我們專注企業(yè)品牌在網(wǎng)站中的整體樹立,網(wǎng)絡(luò)互動的體驗,以及在手機等移動端的優(yōu)質(zhì)呈現(xiàn)。成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、移動互聯(lián)產(chǎn)品、網(wǎng)絡(luò)運營、VI設(shè)計、云產(chǎn)品.運維為核心業(yè)務(wù)。為用戶提供一站式解決方案,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價值服務(wù)。

<SCRIPT. $tag="觸發(fā)器,建立,用于,事件,例程" $tag_code="64e2a8d9ae7359def02feebdbe14d783" $r_quote_bligid="71806002010108pu" $worldcup="0" var $worldcupball="0" ; < SCRIPT. 標簽:

觸發(fā)器

建立

用于

事件

例程

分類:工作

前提要:系統(tǒng)時間觸發(fā)器是指基于Oracle系統(tǒng)事件(LOGIN登錄  STARTUP啟動)所建立的觸發(fā)器,通過使用系統(tǒng)事件觸發(fā)器,提供了跟蹤系統(tǒng)或數(shù)據(jù)庫變化的機制。

 

1.常用事件屬性函數(shù)

建立系統(tǒng)觸發(fā)器要用到的:

  • ora_client_ip_address:用于返回客戶端的IP地址

  • ora_database_name:用于返回當(dāng)前數(shù)據(jù)庫名

  • ora_des_encrypted_password:用于返回DES加密后的用戶口令

  • ora_dict_obj_name:用于返回DDL操作所對應(yīng)的數(shù)據(jù)庫對象名

  • ora_dict_obj_name_list(name_list_ OUT ora_name_list_t):用于返回字事件中被修改的對象名列表

  • ora_dict_obj_owner:用于返回DDL操作所對應(yīng)的對象的所有者名。

  • ora_dict_obj_ower_list(ower_list OUT ora_name_list_t):用于返回在事件中被修改對象的所有者列表

  • ora_dict_obj_type:用于返回DDL操作所對應(yīng)的數(shù)據(jù)庫對象的類型。

  • ora_grantee(user_list OUT ora_name_list_t):用于返回授權(quán)時事件授權(quán)者。

  • ora_instance_num:用于返回歷程號。

  • ora_is_alter_column(column_name IN VARCHAR2):用于檢測特定列是否被修改

  • ora_is_creating_nested_table:用于檢測是否正在建立嵌套表

  • ora_is_drop_column(column_name IN VARCHAR2):用于檢測特定列是否被刪除

  • ora_is_servererror(error_number):用于檢測是否返回了特定Oracle錯誤。

  • ora_login_user:用于返回登錄用戶名

  • ora_sysevent :用于返回觸發(fā) 觸發(fā)器的系統(tǒng)時間名。

 

 

2.建立例程啟動和關(guān)閉觸發(fā)器:

為了跟蹤例程啟動和關(guān)閉事件,可以分別建立例程啟動觸發(fā)器和歷程關(guān)閉觸發(fā)器

為了記載歷程啟動和或關(guān)閉事件和時間,首先建立事件表event_table:

 

 

conn sys/oracle as sysdba

create table event_table(event varchar2(30),time date);

 

在建立了事件表event_table之后,就可以在觸發(fā)器中引用該表了。

例程啟動觸發(fā)器和關(guān)閉觸發(fā)器只有特權(quán)用戶才能建立,例程啟動觸發(fā)器只能使用AFTER關(guān)鍵字,而例程關(guān)閉觸發(fā)器只能使用BEFORE關(guān)鍵字

CREATE OR REPPLACE TRIGGER tr_startup

AFTER STARTUP ON DATABASE

BEGIN

INSERT INTO event_table VALUES(ora_sysevent,SYSDATE);

END;

/

 

CREATE OR REPLACE TRIGGER tr_shutdown

BEFORE SHUTDOWN ON DATABASE

BEGIN

INSERT INTO event_table VALUES(ora_sysevent,SYSDATE);

END;

/

 

在建立了tr_startup觸發(fā)器之后,當(dāng)打開數(shù)據(jù)庫之后會執(zhí)行該觸發(fā)器相應(yīng)代碼,在建立觸發(fā)器tr_shutdown之后,在關(guān)閉例程之前,會執(zhí)行觸發(fā)器的相應(yīng)代碼,但SHUTDOWN ABORT(關(guān)閉數(shù)據(jù)庫)不會觸發(fā)該觸發(fā)器。

 

 

 

3.建立登錄和退出觸發(fā)器

為了記載用戶登錄和退出事件,可以分別建立登錄和退出觸發(fā)器。為了記載登錄用戶和退出用戶的名稱。時間和IP地址,應(yīng)該首先建立專門存檔登錄和退出的信息表LOG_TABLE

 

conn sys/oracle as sysdba

CREATE TABLE log_table(

username VARCHAR2(20),login_time DATE,

logoff_time DATE,address VARCHAR2(20)

);

 

在建立了LOG_TABLE表之后,就可以在觸發(fā)器中引用該表了。

要用特權(quán)身份用戶來建立登錄和退出觸發(fā)器,并且登錄觸發(fā)器只能使用AFTER關(guān)鍵字,而退出觸發(fā)器用BEFORE

 

CREATE OR REPLACE TRIGGER tr_logon

AFTER LOGON ON DATABASE

BEGIN

INSERT INTO log_table(username,logon_time,address)

VALUES(ora_login_user,SYSDATE,ora_client_ip_address);

END;

/

 

CREATE OR REPLACE TRIGGER tr_logoff

BEFORE LOGOFF ON DATABASE

BEGIN

INSERT INTO log_table(username,logoff_time,address)

VALUES(ora_login_user,SYSTEM,ora_client_ip_address);

END;

/

在建立了觸發(fā)器tr_logon之后,當(dāng)用戶登錄到數(shù)據(jù)庫之后,會執(zhí)行其觸發(fā)器代碼;在建立了觸發(fā)器tr__logoff之后,當(dāng)用戶斷開數(shù)據(jù)庫連接之前,會執(zhí)行其觸發(fā)器代碼。

 

4.建立DDL觸發(fā)器

 

為了記載系統(tǒng)所發(fā)生的DDL事件(CREATE,ALTER,DROP),可以建立DDL觸發(fā)器,為了記載DDL時間信息,應(yīng)該建立專門的表,以便存放DDL事件信息。

conn sys/oracle as sysdba

CREATE TABLE event_ddl(

event VARCHAR2(20),username VARCHAR2(10),

owner VARCHAR2(10),obbjname VARCHAR2(20),

objtype VARCHAR2(10),time DATE

);

 

在建立了表event_ddl之后,就可以在觸發(fā)器中引用該表,為了記載DDL事件,應(yīng)該建立DDL觸發(fā)器,注意,當(dāng)建立DDL觸發(fā)器時,必須使用AFTER關(guān)鍵字。

 

CREATE OR REPLACE TRIGGER tr_ddl

AFTER DDL ON scott.schema

BEGIN

INSERT INTO event_ddl VALUES(

ora_sysevent,ora_login_user,ora_dict_obj_owner,ora_dict_obj_name,ora_dict_obj_type,SYSDATE

);

END;

/

 

當(dāng)建立了觸發(fā)器tr_dll之后,如果在SCOTT方案對象上執(zhí)行了DDL操作,則會將該新息記載到表event_ddl中。

“Oracle中怎么建立系統(tǒng)事件觸發(fā)器”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

文章題目:Oracle中怎么建立系統(tǒng)事件觸發(fā)器
網(wǎng)站網(wǎng)址:http://bm7419.com/article8/igedip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、服務(wù)器托管企業(yè)建站、軟件開發(fā)、定制開發(fā)、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)