Oracle12c中多宿主环境(CDB&PDB)的数据库触发器(Database Trigger)

Oracle12c中可插拔数据库(PDBs)上的多宿主数据库触发器数据库

随着多宿主选项的引入,数据库事件触发器能够在CDB和PDB范围内建立。安全

1.   触发器范围服务器

为了在CDB中建立数据库事件触发器,须要以通用用户登陆到数据库,且该用户须要被授予ADMINISTER DATABASETRIGGER系统权限。事件

CONN sys@cdb1 AS SYSDBA事务

 

CREATE OR REPLACE TRIGGER cdb1_aftr_strtup_trgtest

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中触发,且随后该触发器被删除。若是触发器失败,去插拔操做也将失败。

相关文章
相关标签/搜索