如何在不丢失未删除数据的情况下拍摄数据库快照?
How can I Snapshot a database without losing undeleted data?
我们有一个车间数据库 OPERATION,它将选定的数据复制到用于报告的数据库 BUSINESS。 OPERATION 中的数据每天都会被第三方车间应用程序删除,因此为了保留 BUSINESS 中的数据,我将 DELETE delivery format 的 Article 属性 设置为是 不复制 DELETE 语句。
这很好用,但偶尔有人想要复制某些东西 extra/different。根据出版物更改的性质,它可能会提示重新初始化快照,这当然会破坏业务数据库(正如我有一天不幸所做的那样)。
最好的解决方法是什么?
我建议您实施 ETL 过程而不是复制。
您可以使用 SSIS 从 OPERATION 数据库中提取数据并将其复制到 BUSINESS 数据库。在 SSIS 包中,您可以完全控制逻辑。例如,您可以将数据附加到 BUSINESS 中的现有数据。您可以使用 MERGE 来插入新记录并修改现有记录(这样重复 运行 它是安全的,因为未更改的数据不会被覆盖)。
如果有人请求额外的数据,您只需编写一个新的 SSIS 包来传输额外的数据,而不会影响您的主进程。
SSIS 可以从 SQL 代理作业(例如使用 dtexec)安排到 运行。
我们有一个车间数据库 OPERATION,它将选定的数据复制到用于报告的数据库 BUSINESS。 OPERATION 中的数据每天都会被第三方车间应用程序删除,因此为了保留 BUSINESS 中的数据,我将 DELETE delivery format 的 Article 属性 设置为是 不复制 DELETE 语句。
这很好用,但偶尔有人想要复制某些东西 extra/different。根据出版物更改的性质,它可能会提示重新初始化快照,这当然会破坏业务数据库(正如我有一天不幸所做的那样)。
最好的解决方法是什么?
我建议您实施 ETL 过程而不是复制。
您可以使用 SSIS 从 OPERATION 数据库中提取数据并将其复制到 BUSINESS 数据库。在 SSIS 包中,您可以完全控制逻辑。例如,您可以将数据附加到 BUSINESS 中的现有数据。您可以使用 MERGE 来插入新记录并修改现有记录(这样重复 运行 它是安全的,因为未更改的数据不会被覆盖)。
如果有人请求额外的数据,您只需编写一个新的 SSIS 包来传输额外的数据,而不会影响您的主进程。
SSIS 可以从 SQL 代理作业(例如使用 dtexec)安排到 运行。