Oracle12c中多宿主環境(CDB&PDB)的資料庫觸發器(Database Trigger)

sqysl發表於2016-06-25

Oracle12c中可插拔資料庫(PDBs)上的多宿主資料庫觸發器

隨著多宿主選項的引入,資料庫事件觸發器可以在CDB和PDB範圍內建立。

1.   觸發器範圍

為了在CDB中建立資料庫事件觸發器,需要以通用使用者登入到資料庫,且該使用者需要被授予ADMINISTER DATABASETRIGGER系統許可權。

CONN sys@cdb1 AS SYSDBA

 

CREATE OR REPLACE TRIGGER cdb1_aftr_strtup_trg

AFTER STARTUP ON DATABASE

BEGIN

  --觸發器操作程式碼

  NULL;

END;

/

為了在PDB中建立一個資料庫觸發器,需要以通用使用者或本地使用者連線該資料庫,且該使用者需要被授予該資料庫範圍內的ADMINISTER DATABASETRIGGER系統許可權。ON DATABASE 和ON PLUGGABLE DATABASE子句在PDB內作用是一樣的,但有些事件要求顯式的ON PLUGGABLE DATABASE子句。

CONN sys@pdb1 AS SYSDBA

 

CREATE OR REPLACE TRIGGER pdb1_aftr_strtup_trg

AFTER STARTUP ON PLUGGABLE DATABASE

BEGIN

  -- 觸發器操作程式碼

  NULL;

END;

/

 

CREATE OR REPLACE TRIGGER pdb1_aftr_strtup_trg

AFTER STARTUP ON DATABASE

BEGIN

  -- 觸發器操作程式碼

  NULL;

END;

/

有些事件觸發器也可以用於CDB和PDB的模式層面。功能並未因多宿主選項而改變。

CONN sys@cdb1 AS SYSDBA

 

CREATE OR REPLACE TRIGGER cdb1_aftr_lgn_trg

AFTER LOGON ON test.SCHEMA

BEGIN

  -- 觸發器操作程式碼

  NULL;

END;

/

 

CONN sys@pdb1 AS SYSDBA

 

CREATE OR REPLACE TRIGGER pdb1_aftr_lgn_trg

AFTER LOGON ON test.SCHEMA

BEGIN

  -- 觸發器操作程式碼

  NULL;

END;

/

2.   可用事件

1)    下列資料庫時間均可用於CDB和PDB層面。

ü  AFTER STARTUP :CDB或PDB開啟後觸發器觸發。

ü  BEFORE SHUTDOWN :CDB或PDB關閉前觸發器觸發。

ü  AFTER SERVERERROR。可用於PDB當伺服器錯誤資訊被記錄且觸發錯誤觸發器安全時觸發器將被觸發,可用於資料庫或模式層面。

ü  AFTER LOGON :當客戶端登入到CDB或PDB時觸發器觸發,可用於資料庫或模式層面。

ü  BEFORE LOGOFF:客戶端退出CDB或PDB時觸發,可用於資料庫或模式層面。

ü  AFTER SUSPEND :當伺服器錯誤引起事務暫停時觸發器觸發,可用於資料庫或模式層面。

ü  BEFORE SET CONTAINER:SET CONTAINER命令執行前觸發器觸發,可用於資料庫或模式層面。

ü  AFTER SET CONTAINER:SET CONTAINER命令執行後觸發器觸發,可用於資料庫或模式層面。

2)    下列資料庫事件僅用於CDB層面。

ü  AFTER DB_ROLE_CHANGE:在DG配置環境中,當資料庫角色從主庫切換為備庫或從備庫切換為主庫時觸發。

3)    下列資料庫事件只能用於PDB層面,且要求顯式的ON PLUGGABLEDATABASE子句,使用ON DATABASE子句會導致報錯。

ü  AFTER CLONE :克隆操作完成後,觸發器就在新PDB中觸發,且隨後該觸發器被刪除。如果觸發器失敗,克隆操作也會失敗。

ü  BEFORE UNPLUG :在去插拔操作前,觸發器在PDB中觸發,且隨後該觸發器被刪除。如果觸發器失敗,去插拔操作也將失敗。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-2120967/,如需轉載,請註明出處,否則將追究法律責任。

相關文章