如何从 .NET 应用程序跟踪许多 SQL Server 数据库中的更改?

2024-01-30

Problem:

有很多不同的数据库,由许多不同的应用程序直接填充(没有任何通用的应用程序层)。数据只能通过SP访问(根据策略)

Task:

应用程序需要跟踪这些数据库中的更改并在最短的时间内做出反应。

可能的解决方案:

1)为每个数据库中的每个表创建触发器,这将用事件填充一个表。应用程序将通过 SqlDependency 监视该表。

2)通过SqlDependency监视每个数据库中的每个表。

3)为每个数据库中的每个表创建触发器,这将使用托管扩展通知应用程序。

哪个是最好的方法?


这可能是一个广泛的话题。首先:使用的SQL Server版本是什么?

如果您使用的是 SQL 2008变更数据捕获是首选工具 这项新功能使您能够监控EVERYSQL 2008 中对数据库所做的更改。这包括DDL 更改数据更改。 检查介绍here http://www.databasejournal.com/features/mssql/article.php/3720361/Microsoft-SQL-Server-2008----Change-Data-Capture--Part-I.htm.

如果您使用的是旧版本的 SQL 2008 并且您可以修改DDL数据库的option 3将是您所描述的选择之一。但我不推荐它,因为还有其他事情需要考虑,比如当事务回滚或当批量插入时触发器被停用例如?

让您的解决方案在所有这些情况下正常工作将是一个安静的挑战。

您可以采取的另一种方式是观看交易日志文件。这种方式是迄今为止最好的,但也是最复杂的方式这样做,因为几乎没有关于专有日志格式的文档。它还绑定到特定版本的 SQL Server。这将导致没有影响监控所选数据库。

另一种方法是创建一个数据副本应进行监控并定期检查是否存在差异。 这样做的好处是没有对源数据库进行任何更改必须做出。以及摆脱事务或批量插入问题。最迟在下一次监控运行时您将能够发现变化。

对性能的影响相当小,因为它只需要对要监视的表进行主索引连续读取。这是迄今为止与数据库交互的最优化的方式。 然而,这种方法需要相当大的开发工作。我必须知道,因为这是我近年来的主要关注点。查看here http://www.enyosoft.com/en-US/Home/Products/EnyoMirror#HowItWorks ;)

(我希望链接没问题,在这种情况下,因为它是主题,否则我将其删除)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 .NET 应用程序跟踪许多 SQL Server 数据库中的更改? 的相关文章

  • 当两个表非常相似时,什么时候应该将它们合并?

    我有事件和照片 然后对两者进行评论 现在 我有两个评论表 一个用于与事件相关的评论 另一个用于照片评论 架构与此类似 CREATE TABLE EventComments CommentId int EventId int Comment
  • .net 4.5 可以与 .net 4.0 并行工作吗?

    我有兴趣安装 NET 4 5 但我听说这是就地升级 由于我公司的用户使用的是Windows XP 我无法发布任何使用 NET 4 5 的客户端应用程序 http visualstudio uservoice com forums 12157
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • 在 SQL Server 中获取帐户“锁定”状态

    我想解锁 SQL Server 中的一个帐户 在解锁之前 我必须检查该帐户是否被锁定 我只想在帐户被锁定时解锁 是否有任何 SQL 查询或存储过程来获取 SQL 用户的 锁定 状态 代表 Alex K 发布答案 SELECT LOGINPR
  • 重新启动后无法远程或本地连接到 SQL Server

    上周末进行一些网络维护后 我们的开发服务器出现了一些问题 导致我们重新启动它 重新启动期间安装了一些更新 这可能是也可能不是一个因素 从那时起 我们就无法连接到 SQL Server 2005 即使是通过 Management Studio
  • 从头开始构建 OLAP 解决方案时应该注意什么?

    我在一家运行基于 MS SQL 数据库服务器的软件产品的公司工作 多年来我已经用 PHP 开发了 20 30 个相当高级的报告 直接从数据库获取数据 这非常成功 人们对此感到高兴 但它有一些缺点 对于新的变化 它可能是相当开发密集型的 用户
  • Microsoft.Bcl.Async 中是否有 ExceptionDispatchInfo 的类似物?

    有没有类似的ExceptionDispatchInfo http msdn microsoft com en us library system runtime exceptionservices exceptiondispatchinfo
  • 什么是多维 OLAP CUBE 并给出超过 3 维的多维数据集示例

    由于我是 SSAS 的新手 一直在阅读有关多维 OLAP 多维数据集的文章 并努力理解多维数据集的概念 据说虽然术语 多维数据集 表示三个维度 但多维数据集最多可以有 64 个维度 你能解释一下这在立方体上怎么可能吗 除了 3 Dim 示例
  • .NET 正则表达式可匹配任何语言的任何类型的字母

    我可以使用哪种正则表达式来匹配 允许 任何语言的任何类型的字母 我需要匹配任何字母 包括任何变音符号 例如 并排除任何类型的符号 数学符号 货币符号 装饰符号 方框图字符等 和标点符号 我正在使用 ASP NET MVC 2 和 NET 4
  • 如何选择列值不不同的每一行

    我需要运行一个 select 语句 返回列值不不同的所有行 例如 EmailAddress 例如 如果表格如下所示 CustomerName EmailAddress Aaron email protected cdn cgi l emai
  • where 子句中的双 %% ?

    我有一个 where 子句 如下例所示 WHERE subject LIKE chef AND dep LIKE psy 使用 1 或 2 符号有什么区别 我知道其中一个的含义 通配符 但不知道第二个添加的功能是什么 该查询可能是一个拼写错
  • 将数据表传递到存储过程。有没有更好的办法?

    数据表可以以某种方式传递到 SQL Server 2005 或 2008 中吗 我知道标准方法似乎是将 XML 传递给 SP 并且可以通过某种方式轻松地将数据表转换为 XML 来实现这一点 将 NET 对象传递到 SP 怎么样 那可能吗 我
  • 缺少嵌入互操作类型属性

    在一个 C 项目中 我收到以下警告 警告 CS1762 创建了对嵌入式互操作程序集 Interop SomeLibrary dll 的引用 因为间接引用了程序集 ALibraryOfMine dll 创建的该程序集 考虑更改任一程序集的 嵌
  • 从 WCF REST 获取错误详细信息

    我有一个由 Net WCF 客户端使用的 REST 服务 遇到错误时 REST 服务会返回 HTTP 400 错误请求 响应正文包含 JSON 序列化详细信息 如果我使用 Fiddler Javascript 或直接从 C 执行请求 我可以
  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 如何安全地使用保留的 SQL 名称?

    我正在使用 Cakephp 3 使用 sqlserver 作为数据源服务器 我确信我的数据库连接没有问题 因为 home ctp 提示我已连接到我的数据库 并且我还使用迁移插件来创建我的表 似乎使用它没有问题这些工具 但是在我烘焙 MVC
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数
  • 在 SQL Server 中获取一周的第一天

    我试图按周对记录进行分组 将聚合日期存储为一周的第一天 然而 我用于四舍五入日期的标准技术似乎无法在几周内正常工作 尽管它可以在天 月 年 季度和我应用的任何其他时间范围内正常工作 这是 SQL select start of week d
  • 如何在sql server 2008R2中将单个单元格拆分为多个列?

    我想将每个名称拆分为各个列 create table split test value integer Allnames varchar 40 insert into split test values 1 Vinoth Kumar Raj
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie

随机推荐