是否有可能看到正在运行的DML(SQL语句)导致触发器被执行?

例如,在INSERT触发器中,我想得到这个:

“插入到myTable(名称)值('Fred')中”

我在诸如this之类的文章中了解了有关ora_sql_txt(sql_text)的信息,但无法使其正常运行-不知道这是否能使我走上正确的道路?

我们正在使用Oracle 10。

先感谢您。

========================

[编辑]更多详细信息:我们需要将现有数据库(DB1)复制到而不是可通过网络访问的分类数据库(DB2)中。我需要使这些数据库保持同步。这是从(DB1)到(DB2)的单向同步,因为(DB2)将包含(DB1)系统中不包含的其他表和数据。

我必须确定一种同步这些数据库而不关闭它们的方法(例如,用于备份和还原),因为它需要保持 Activity 状态。因此,我认为,如果可以存储正在运行的实际DML(数据更改时),则可以在新数据库上“播放” DML以进行更新,就像有人手动将其重新输入一样。

由于数据量太大,我无法提供所有数据,并且由于FK约束和插入/更新记录的顺序,我不能仅复制更改的记录。我认为,如果可以使用更改主数据库的确切SQL来“回放”发生的日志,则可以使数据库保持同步。

我当前的攻击计划是保留所有已更改,插入和删除的记录的日志,当我想要同步时,系统会生成DML来插入/更新/删除这些记录。然后,我将.SQL文件带到分类系统并运行脚本。我遇到的问题是FK。 (因为生成DML时,我只知道数据的当前状态是什么,而不是到达那里的路径-因此语句的排序是一个问题)。我想我可以禁用所有FK,进行合并,然后重新启用所有FK ...

所以-我存储实际DML的方法是否会吸收污水,还是有更好的解决方案???

最佳答案

该功能仅适用于here讨论的“事件”触发器。
您应该研究Fine-Grained Auditing作为此机制。详细信息here

09-07 14:57