如何为指定SCHEMA设置PLSQL_CCFLAGS参数区分开发与生产环境?
方案结论
Oracle原生的PLSQL_CCFLAGS参数不直接支持SCHEMA级别的默认配置,仅支持数据库级别、会话级别两个生效维度,但可以通过替代方案完全实现按SCHEMA区分条件编译标记的需求。
可行实现方案
方案1:SCHEMA级登录触发器自动配置(推荐)
给所有需要标记为DEV的SCHEMA分别创建登录后触发器,只要该SCHEMA的用户发起登录,触发器会自动修改当前会话的PLSQL_CCFLAGS参数,该SCHEMA下所有编译的PL/SQL对象都会自动继承对应标记:
-- 给指定DEV SCHEMA创建触发器,替换下方DEV_USER为实际SCHEMA名 CREATE OR REPLACE TRIGGER dev_user_set_ccflags AFTER LOGON ON DEV_USER.SCHEMA BEGIN EXECUTE IMMEDIATE q'[ALTER SESSION SET PLSQL_CCFLAGS = 'is_debug:true']'; END; /
生产环境SCHEMA不需要创建该触发器,默认继承数据库级的PLSQL_CCFLAGS配置即可。
方案2:编译前手动指定会话参数
如果需要用高权限用户(如SYS、SYSTEM)跨SCHEMA编译DEV环境的对象,可以在编译前手动修改当前会话参数,再执行编译操作:
-- 切换到目标DEV SCHEMA ALTER SESSION SET CURRENT_SCHEMA = DEV_USER; -- 配置条件编译标记 ALTER SESSION SET PLSQL_CCFLAGS = 'is_debug:true'; -- 批量编译该SCHEMA下所有PL/SQL对象 EXEC DBMS_UTILITY.COMPILE_SCHEMA(schema => 'DEV_USER', compile_all => FALSE);
注意事项
如果使用高权限用户跨SCHEMA编译DEV对象,方案1的登录触发器不会生效,需要手动执行ALTER SESSION SET PLSQL_CCFLAGS命令配置参数后再编译。
内容的提问来源于stack exchange,提问作者Si7ius
相关产品推荐
相关产品推荐

