Monthly Archives: August 2024
搞懂英语的五大基本句型
在句子结构分析中,看过太多不同说法,今天先聊下最核心的五大基本句型(简单句),打好英语句子结构的地基。 五大基本句型简写如下: S + V S + V + C S + V + O S + V + O + O S + V + O + C S、V、O、C 这些字母是常用的缩写,用来表示句子中的不同成分,这些缩写帮助我们更清楚地理解句子的结构和功能。 但是一旦翻译起来,各种流派就会出现分歧,甚至给初学者造成困惑。 本文具体讨论: 1.S、V、O、C的含义 2.五大句型的结构解释 1. S、V、O、C的含义 我们先来单独看这些概念都代表啥? S – … Continue reading
使用触发器来审计表的DML、DDL操作
最近帮客户排查某问题时,因为怀疑应用对某张配置表有变更,所以需要对这张表的所有操作进行审计。 原本Oracle对某张表的审计是非常方便的,一条命令就可以实现,也不需要费心自定义审计表。 — 启用对表DEPT的插入、更新和删除操作的审计 AUDIT INSERT, UPDATE, DELETE ON DEPT BY ACCESS; — 查看对DEPT表的所有审计记录 SELECT * FROM DBA_AUDIT_TRAIL WHERE OBJ_NAME = ‘DEPT’; — 停用对表DEPT的审计 NOAUDIT INSERT, UPDATE, DELETE ON DEPT; 但不幸的是,因为客户当前环境已经把默认开启的audit_trail给关闭了。(默认开启,默认值是DB,关闭就是NONE) 笔者已经在实验环境验证过: – 1.audit_trail必须开的情况下,对表进行审计才会有记录; – 2.audit_trail是静态参数,如果修改,需要重启数据库才可以生效。 尤其注意要检查这个参数的设置情况,因为这里比较坑的一点是,上述审计命令,即便你关了这个参数,开启表审计的命令执行也并不会报错,只是实际上无法记录。 相信大家都知道,生产环境的重启申请流程非常麻烦,因此只能用手工的方式,比如自定义触发器的方式来监控这张表的DML操作。 还好因为这个配置表正常情况下,并不会被频繁修改,所以使用触发器也不会带来什么性能问题。 下面就进入到hands-on环节,我们模拟下这个客户的需求,假设dept这张表: … Continue reading