小智 6
从监视角度(不打算查找以前的更改),您有几个选项,包括但不限于触发器,流和默认值为sysdate的列.触发器允许您在记录更改(插入,更新,删除)时执行一些编程逻辑(直接存储在触发器或外部数据库对象中).Streams可用于通过监视重做日志来跟踪更改.其中一个最简单的方法是添加一个默认值为sysdate的日期列.
您是在交易中还是在交易之外谈论?
在我们的程序中,我们可以使用SQL%ROWCOUNT之类的东西来查看我们的DML是否成功...
SQL> set serveroutput on size unlimited
SQL> begin
2 update emp
3 set job = 'SALESMAN', COMM=10
4 where empno = 8083;
5 dbms_output.put_line('Number of records updated = '||sql%rowcount);
6 end;
7 /
Number of records updated = 1
PL/SQL procedure successfully completed.
SQL>
Run Code Online (Sandbox Code Playgroud)
或者,我们可以测试SQL%FOUND(或SQL%NOTFOUND).
从事务外部我们可以监视ORA_ROWSCN以查看记录是否已更改.
SQL> select ora_rowscn from emp
2 where empno = 8083
3 /
ORA_ROWSCN
----------
83828715
SQL> update emp
2 set comm = 25
3 where empno = 8083
4 /
1 row updated.
SQL> commit
2 /
Commit complete.
SQL> select ora_rowscn from emp
2 where empno = 8083
3 /
ORA_ROWSCN
----------
83828780
SQL>
Run Code Online (Sandbox Code Playgroud)
默认情况下,ORA_ROWSCN设置为块级别.如果要在较低级别跟踪它,则需要使用ROWDEPENCIES关键字创建表.
这些是临时解决方案.如果要进行主动监控,则需要实施某种形式的日志记录.使用触发器写入日志记录是一种常见的解决方案.如果你有企业版,你应该考虑使用细粒度审计:Dan Morgan的库有一个如何使用FGA跟踪变化的有用演示.
归档时间: |
|
查看次数: |
6164 次 |
最近记录: |