SQL 服务器中临时表之间的数据同步

Data sync between temporal tables in SQL Server

我想在两个具有系统版本(临时)table的数据库之间同步数据。 Azure 中的数据同步选项不支持时间 tables,我需要找到另一种在数据库之间进行同步的方法。

我想使用 Azure 数据将数据从一个时间 table 复制到另一个数据库的另一个时间 table factory.Will Azure 数据工厂支持时间 [=18] 之间的数据同步=]s?

在具有相同 tables 的两个数据库之间同步数据的最佳方式是什么?

我在我的 Azure SQL 数据库中创建了一个 system-versioned(temporal) table 遵循此文档 Creating a temporal table:

CREATE TABLE Department   
(    
     DeptID int NOT NULL PRIMARY KEY CLUSTERED  
   , DeptName varchar(50) NOT NULL  
   , ManagerID INT  NULL  
   , ParentDeptID int NULL  
   , SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL  
   , SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL  
   , PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)     
)   
WITH    
   (   
      SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DepartmentHistory)   
   )   
;

我在不同的 Azure SQL 服务器中创建了两个临时的 tables Department 和 Department2。

我在数据工厂复制活动中测试,选择部门作为源数据集,我们可以从设置中看到时间table:

选择 Department2 作为 link 数据集,Table 映射::

列映射:

活动运行成功:

这意味着 Azure 数据工厂支持将数据从一个时间 table 复制到另一个数据库的另一个时间 table。

更新:

请参考此文档:Temporal Tables in SQL Server 2016 – Part III

现在,从 INSERT 开始,请记住在时间 table 中有两个 datetime2 特殊列声明为 GENERATED ALWAYS AS ROW START / END。 这些是 PERIOD 列,它们是强制性的,但您不能将显式值插入 GENERATED ALWAYS 列。它的值将自动填充。 当您在 table 中插入新行时,“ROW START”列的值为 SYSUTCDATETIME()(是的,不要忘记它是 UTC 时间!),“ROW END”列的值为值:'9999-12-31 23:59:59.9999999' 基本上在时间 table 中插入新行时,对于这两列,您可以使用以下选项: 1.使用列列表,省略这两列; 2. 在不省略这两列的情况下使用列列表,并在每个列的值列表中指定 DEFAULT。 3. 不要使用列列表并在每个列的值列表中指定 DEFAULT。

恭喜,错误已自行解决:

  1. Loading the tables after switching off the versioning on the destination table and it worked.

ALTER TABLE [dbo].[Department] SET(SYSTEM_VERSIONING = OFF); ALTER TABLE [dbo].[Department] DROP PERIOD FOR SYSTEM_TIME;

  1. Then after the copy active done, switch it back.
ALTER TABLE [dbo].[Department] ADD PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime); ALTER TABLE [dbo].[Department] SET(SYSTEM_VERSIONING = ON);

希望对您有所帮助。

听起来这个线程得到了它需要的答案,但对于未来的搜索...... Azure SQL Azure SQL 数据库中的数据同步 确实 支持同步临时表。

您只需要记住不要同步系统生成的日期列(因为您不能显式插入到这些列中,数据同步会尝试:-))

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-sync-data#sync-req-lim

HTH