第一次机考的时候还是大意了,随随便便写了个txt文件就当作业交上去了,对达梦本来也不熟悉,光靠平时管oracle的老本儿,挂了也是情理之中。
继续学习一周准备补考,意外发现了审计功能一个疑似bug的地方。
开审计
sp_set_enable_audit(2);
sp_audit_object('UPDATE', 'DMTEST', 'DMTEST', 'PROD', 'ALL');
验证
update DMTEST.PROD set "Code"='Database' where "ProdID"=1001;
select username, objname operation, succ_flag, sql_text from v$auditrecords order by optime;
----结果是38条,ok
输入一条错误的update语句
update DMTEST.PROD set "Code"='Database' where "ID"=1001;
----执行报错
select username, objname operation, succ_flag, sql_text from v$auditrecords order by optime;
----结果还是38条,错误的语句并没有被审计记录
再执行一条正确的update语句
update DMTEST.PROD set "Code"='Database' where "ProdID"=1001;
-----执行成功
select username, objname operation, succ_flag, sql_text from v$auditrecords order by optime;
----结果是40条,那条错误的语句也被记录了,只是延迟了。
得出一个小小的结论:如果一直输入错误的语句,那么审计记录中不会存在。直到执行一次正确的语句,那么之前所有语句都会进入审计记录。
哈~有点延迟,算bug不
2024.7.4补充一下
1.执行一条错误的update语句,不提交,audit不到这条语句
2.执行一条正确的update语句,不提交,可以audit这条语句
3.执行一条错误的update语句,提交,可以audit这条语句
4.执行一条错误的语句,随后执行一条正确的语句,不提交,可以audit以上两条语句。
文章
阅读量
获赞