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