在较大的SQL数据库中快速查找更改?

时间:2015-01-12 15:50:02

标签: informix

有一个使用Informix数据库的Java Swing应用程序。我为Swing应用程序授予了用户权限(即没有源代码),并且只读访问数据库的镜像。

有时我需要找到一个数据库列,它支持GUI元素(TextBox,TableField,Label ...)。找出哪个数据库列和表保存显示数据的最佳方法是什么?在TextBox中?

我的一般方法是捕获数据库的状态。使用GUI提交更改,然后再次捕获数据库的状态。然后我需要检查一下差异。我已经尝试过了:

  1. 使用nrows的{​​{1}}字段:无效,因为systables中的数字似乎不是行数的实时表示。

  2. 为所有表创建一个nrows的脚本:由于表太多(> 5000)而无效。还试图通过删除空表进行优化,但仍然有太多左。

  3. 我有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:1)

请查看Change Data Capture API并检查这是否符合您的需求

答案 1 :(得分:0)

可能没有一个简单的解决方案。

您可能需要自己构建数据库地图或数据字典。这听起来似乎可以消除许多表,因为它们是空的 - 至少是初步通过。如果您在文本框中处理信息,则可能是某种字符数据;您可以分析哪些(非空)表包含更长的字符串,并且它们是您搜索的主要目标。如果架构设计错误,有很多VARCHAR(255)列,即使列通常只包含短字符串,生活也会更加困难。随着时间的推移,您可以开始对表和列进行分类,以便最终知道在哪里查找应用程序的各个部分。

要注意的一个问题是:tabid中的informix.systables并不一定像您所希望的那样稳定。您的数据字典需要为其描述的表记录自己的dd_tabid,并且可以存储来自tabid的最后一个informix.systables,但它需要准备好找到新的{{1}偶尔的价值。您可能只应在字典中标记数据以进行逻辑删除。

在某种程度上,这假设您可以创建一个记录此信息的数据库。如果无法创建Informix数据库,则可能必须使用其他东西(可能是MySQL或SQLite)来存储数据字典。或者,转到您的DBA团队并询问他们的相关信息。除非你正在尝试一些不言自明的事情,否则他们可能会有所帮助(但是政治可能会妨碍你 - 我不知道你的团队是多么合情)。