如何从应用程序监视数据库更新
How to monitor database updates from application?
我使用ODBC、C++处理SQL Server数据库。我想检测数据库的某些表中的修改:另一个应用程序插入或更新行,我必须检测所有这些修改。它不一定是即时触发器,可以使用轮询定期检查数据库表是否有修改。
以下是我认为可以做到这一点的方法,需要你的意见,无论这是标准/正确的方法,还是存在任何更好的方法。
我想到的是:我在SQL Server中添加触发器,在任何修改时,它都会将修改/添加的行的标识符插入到特殊的表中,我会定期从应用程序中检查该表。假设有3个表:客户、产品、服务。我将制作三个额外的表:Change_Customers、Change_Products、Change_Services,并插入相应表的修改行的标识符。然后,我将定期从应用程序中读取这些Change_*表,并删除已处理的记录。
现在,如果您同意上述解决方案是正确的,我还有另一个问题:对于我希望监视的每个表,是最好有单独的Change_*表,还是最好有一个包含所有表的更改的胖Changes表。
Query Notifications是一项旨在实现所描述内容的技术。您可以通过众所周知的SqlDependency类利用来自托管客户端的查询通知,但也有本机Ole DB和ODBC方法。请参阅使用查询通知,有关SSPROP_QP_NOTIFICATION_MSGTEXT
(OleDB)和SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT
(ODBC)的段落。请参阅神秘通知以了解查询通知的工作原理。
这是唯一一个可以与任何类型的更新一起使用的无轮询解决方案。触发器和更改轮询存在严重的可扩展性和性能问题。变更数据捕获和变更跟踪实际上涵盖了另一个主题(为偶尔连接的设备同步数据集,例如同步框架)。
变更数据捕获(CDC)--http://msdn.microsoft.com/en-us/library/cc645937.aspx
首先,您需要在数据库中启用CDC::使用数据库名称去EXEC sys.sp_cdc_enable_db转到
在表上启用CDC::sys.sp_cdc_enable_table
然后您可以查询更改
- 如果Sql Server的版本是2005,则可以使用Notification Services
- 如果您的Sql Server是2008+,那么最可取的方法是使用触发器并将更改记录到日志表中,并定期从应用程序中轮询这些表以查看更改
- 通过libpqxx提高PostgreSQL数据库的更新速度
- 如果存在 QSQLITE 数据库,则根据 qt 中的行值插入或更新
- 仅在等待 20 秒后更新数据库记录,以便可以接收最大记录
- 如何自动更新表格数据或数据库
- C QT中的SQL数据库更新未前进到下一个ID
- 将图像字段作为斑点类型更新为QT C 中的数据库
- 选择在 Sqlite 数据库中有效,但插入和更新语句不起作用
- 数据库不连接或更新
- 单击以从可编辑的 QAbstractTableModel 更新数据库
- 当mysql数据库发生更新或更改时,我如何通知我的C或C++应用程序
- 在QT C++中更新数据库中的一组数据
- 如何从应用程序监视数据库更新
- 如何更新QSqlTableModel后,数据库连接已更改更改
- 更新数据库mfcc++ ODBC CRecordset
- 在c++中更新SQLite数据库
- 设计问题:从低延迟的c++应用程序更新数据库
- 如何使用tntdb类来更新Sqlite数据库中的字符串值
- 如何更新QTableView时,它的数据库被改变
- 可视化如何更新在C++中使用ATL OLE数据库从简单SQL server表中提取的行数据
- 在app更新时更新部分数据库