我正在编写一些测试,我想在这些特定的测试期间验证我的数据库没有被修改。是否有一种简单的方法可以做到这一点,而不需要我为每个表编写单独的查询?基本上,我想要这样写:
public Map<String,ResultSet> getDbSnapShot(List<String> tableNames)
{
//get rows for specified tables to check from tableNames parameter
//returns a map where the key is the table name and the value is the result set
}
public void verifySnapShotsAreEqual(Map<String,ResultSet> snapShot1, Map<String,ResultSet> snapshot2)
{
//compare snapshot1 and snapshot 2, verify no rows have been modified
}
然后在测试前后调用getDbSnapShot并比较结果。
查询 all_tab_modification 或 user_tab_modification 表,获取所需信息。
表有以下列:
- TABLE_OWNER修改表的所有者。
- TABLE_NAME修改表名
- PARTITION_NAME修改后的分区名称
- SUBPARTITION_NAME修改后的子分区名称
- INSERTS自上次收集统计信息以来的插入的大致数量
- UPDATES自上次统计数据收集以来的大概更新数
- DELETES自上次收集统计数据以来的大约删除次数
- TIMESTAMP表上次被修改的时间
- DROP_SEGMENTS自上次分析以来丢失的分区和子分区段数
在查询表之前,必须通过运行GATHER_TABLE_STATS过程收集统计数据。
源来源为了获得数据库中所有表中的所有记录,这取决于您正在使用的数据库,以及您需要的代码。
请注意,比较表中的数据可能不是您想要的,比较上次修改的时间戳可能更好。
在您的数据库上实现一个触发器,当您的表被修改时更新日志表。
然后在运行测试后检查日志表