是否有可能看到正在运行的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