有没有选择查看Oracle数据库中现有的表/记录是否已更新?知道Oracle中是否更新记录?
回答
从监视的角度(不打算查找以前的更改),您有几个选项,包括但不限于触发器,流和具有默认值sysdate的列。只要记录发生变化(插入,更新,删除),触发器将允许您执行一些编程逻辑(直接存储在触发器中或外部数据库对象中)。通过监视重做日志,可以使用流来跟踪更改。最简单的一种可能是添加一个默认值为sysdate的日期列。
您可以通过查询user_objects视图中的last_ddl_time来查看表定义是否已更改。
没有使用触发器或物化日志(这可能是一个彻头彻尾的黑客),我无法知道在表中的任何特定行何时被更新。
你是在谈论交易还是外部?
在我们的计划,我们可以使用的东西像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>
另外,我们可能会测试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>
默认情况下ORA_ROWSCN设置在块级别。如果您想在较低级别跟踪它,则需要使用ROWDEPENCIES关键字创建表。
这些是临时解决方案。如果你想主动监控,那么你需要实现某种形式的日志记录。使用触发器编写日志记录是一种常见的解决方案。如果你有企业版,你应该考虑使用细粒度审计:丹摩根的图书馆有一个useful demo of how to use FGA to track changes。
嗨APC,感谢您的网址:) – 2010-01-28 14:48:04
- 1. 更新记录是否存在;否则在Oracle中插入
- 2. 如何知道记录是否最后
- 3. 如何知道在Oracle中更新,删除或插入了哪些记录
- 4. 如何知道某个记录是否不存在于Oracle的表格中
- 5. 如何知道行是否已更新
- 6. 轨道更新记录
- 7. 如何知道使用LDAP在AD中更新的记录数
- 8. 如何知道数据库中是否存在特定记录?
- 9. 更新记录是否存在; else INSERT
- 10. 在Oracle中,是否可以通过视图插入或更新记录?
- 11. SQL UPDATE命令 - 如何知道有多少记录已更新?
- 12. 如何知道记录已成功更新php
- 13. 更新Oracle表记录时区值
- 14. 的Oracle PL/SQL包不更新记录
- 15. 多个记录的更新Oracle表
- 16. 在oracle中记录plsql表中记录的新记录
- 17. 知道一条记录是否刚刚通过C#4.0插入?
- 18. 如何知道一条记录是否被删除使用c#
- 19. 是否有可能从parse.com检索记录而不知道objectId
- 20. Python如何知道记录插入是否成功
- 21. 我的java如何知道数据库中是否有更新?
- 22. 是否插入/更新/删除记录自动更新索引?
- 23. 是否可以知道用户是否更新了Facebook中的状态
- 24. 如何检查记录是否是Laravel中的新记录?
- 25. 如何知道TStringList是否被刷新
- 26. 通知更新记录的问题
- 27. 我如何知道Oracle中的表是否被分割?
- 28. 是否存在一些更好的方式来记录更新历史记录?
- 29. 是否可以记录Growl 1.2.2通知?
- 30. Oracle更新查询以按顺序更新记录
嗨,我已经使用最后一个选项,添加一个默认值为sysdate的日期列。想知道还有其他的选择,谢谢! – 2010-01-28 14:36:31