SQL 服务器 CDC - 处理架构更改的问题
SQL Server CDC - Issue dealing with schema changes
我们的客户需要跟踪数据库中的数据更改,是谁在何时更改的(保存在其他列中)。
之前,我们通过对每个 table 插入镜像审计 table 的触发器实现了这一点。我们永久保留这些数据(并且只会在数据变得非常大时才采取行动进行归档)
SQL 服务器中内置的更改数据捕获功能似乎非常相似,即。 sys.sp_cdc_enable_table。
问题是,在 table 更改(添加新列)之后,我们需要关闭现有的数据跟踪,然后再次打开它指向不同的 CDC table。不幸的是,sys.sp_cdc_disable_table 删除了原始跟踪 table – 有什么简单的方法可以防止这种行为(理想情况下我希望它留在原地)?我似乎无法通过 SQL Server Management Studio 重命名 table。
我很感激我们可以编写脚本等来复制数据,但这比原来的方法更费力。我怀疑我们可能不得不坚持原来的方法。
我明白这并不是 CDC 的设计目的,但如果我们能够让它工作,它将简化我们的系统并节省一些工作。
不幸的是,我认为这是不可能的 - 这不是 CDC 的目的。
CDC 方法优于触发器方法 - 它性能更高且更可靠,因为它直接从事务日志中读取。在正常操作下,CDC 只会保留大约 5 天的历史记录,但清除是由您可以禁用的 SQL 代理作业驱动的。但是,我认为最好的方法是定期从 CDC table 导出到您现有的审计 table(您说您可能不准备这样做)。
我们的客户需要跟踪数据库中的数据更改,是谁在何时更改的(保存在其他列中)。
之前,我们通过对每个 table 插入镜像审计 table 的触发器实现了这一点。我们永久保留这些数据(并且只会在数据变得非常大时才采取行动进行归档)
SQL 服务器中内置的更改数据捕获功能似乎非常相似,即。 sys.sp_cdc_enable_table。
问题是,在 table 更改(添加新列)之后,我们需要关闭现有的数据跟踪,然后再次打开它指向不同的 CDC table。不幸的是,sys.sp_cdc_disable_table 删除了原始跟踪 table – 有什么简单的方法可以防止这种行为(理想情况下我希望它留在原地)?我似乎无法通过 SQL Server Management Studio 重命名 table。
我很感激我们可以编写脚本等来复制数据,但这比原来的方法更费力。我怀疑我们可能不得不坚持原来的方法。
我明白这并不是 CDC 的设计目的,但如果我们能够让它工作,它将简化我们的系统并节省一些工作。
不幸的是,我认为这是不可能的 - 这不是 CDC 的目的。
CDC 方法优于触发器方法 - 它性能更高且更可靠,因为它直接从事务日志中读取。在正常操作下,CDC 只会保留大约 5 天的历史记录,但清除是由您可以禁用的 SQL 代理作业驱动的。但是,我认为最好的方法是定期从 CDC table 导出到您现有的审计 table(您说您可能不准备这样做)。