中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle中怎么建立系統事件觸發器

發布時間:2021-12-07 11:30:50 來源:億速云 閱讀:230 作者:iii 欄目:建站服務器

本篇內容介紹了“Oracle中怎么建立系統事件觸發器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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

觸發器

建立

用于

事件

例程

分類: 工作

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

 

1.常用事件屬性函數

建立系統觸發器要用到的:

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

  • ora_database_name:用于返回當前數據庫名

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

  • ora_dict_obj_name:用于返回DDL操作所對應的數據庫對象名

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

  • ora_dict_obj_owner:用于返回DDL操作所對應的對象的所有者名。

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

  • ora_dict_obj_type:用于返回DDL操作所對應的數據庫對象的類型。

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

  • 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 :用于返回觸發 觸發器的系統時間名。

 

 

2.建立例程啟動和關閉觸發器:

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

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

 

 

conn sys/oracle as sysdba

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

 

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

例程啟動觸發器和關閉觸發器只有特權用戶才能建立例程啟動觸發器只能使用AFTER關鍵字,而例程關閉觸發器只能使用BEFORE關鍵字

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觸發器之后,當打開數據庫之后會執行該觸發器相應代碼,在建立觸發器tr_shutdown之后,在關閉例程之前,會執行觸發器的相應代碼,但SHUTDOWN ABORT(關閉數據庫)不會觸發該觸發器。

 

 

 

3.建立登錄和退出觸發器

為了記載用戶登錄和退出事件,可以分別建立登錄和退出觸發器。為了記載登錄用戶和退出用戶的名稱。時間和IP地址,應該首先建立專門存檔登錄和退出的信息表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表之后,就可以在觸發器中引用該表了。

要用特權身份用戶來建立登錄和退出觸發器,并且登錄觸發器只能使用AFTER關鍵字,而退出觸發器用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;

/

在建立了觸發器tr_logon之后,當用戶登錄到數據庫之后,會執行其觸發器代碼;在建立了觸發器tr__logoff之后,當用戶斷開數據庫連接之前,會執行其觸發器代碼。

 

4.建立DDL觸發器

 

為了記載系統所發生的DDL事件(CREATE,ALTER,DROP),可以建立DDL觸發器,為了記載DDL時間信息,應該建立專門的表,以便存放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之后,就可以在觸發器中引用該表,為了記載DDL事件,應該建立DDL觸發器,注意,當建立DDL觸發器時,必須使用AFTER關鍵字。

 

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;

/

 

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

“Oracle中怎么建立系統事件觸發器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹江口市| 松原市| 读书| 锦屏县| 类乌齐县| 高密市| 广元市| 准格尔旗| 甘孜县| 穆棱市| 谢通门县| 沂源县| 东辽县| 汝城县| 时尚| 邳州市| 颍上县| 昌乐县| 玉林市| 铜川市| 汉中市| 南宁市| 醴陵市| 乐平市| 忻州市| 成安县| 白银市| 三台县| 灌南县| 墨竹工卡县| 漳平市| 麟游县| 滁州市| 简阳市| 岢岚县| 金沙县| 公主岭市| 扶风县| 兴安盟| 沁水县| 桦南县|