SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用于大容量数据库快速同步。
安装包下载地址:https://www.syncnavigator.cn/Setup.zip
帮助文档地址:https://www.syncnavigator.cn/Help_zh-CN.chm
Web文档地址:https://www.syncnavigator.cn/chm/index.htm
使用 HKROnline SyncNavigator 创建一个数据库同步项目。只需要通过简单的配置,创建完成后您可以随时执行数据库同步任务。
通常,需要创建SQL Server数据库的副本副本。例如,出于分离分析任务和操作任务的目的,可能需要这样做。第一个导致数据库上的高负载,并且为了减少负载,创建了主数据库的副本以执行分析性预期查询。
通常,可以使用内置DBMS工具创建以下重复副本:
但是,如果您不需要的整个数据库,而只需要其中的几个表怎么办?在这种情况下,您可以自己创建复制。只要数据采样是主要目标,那么在一个方向(主到从)的数据库复制就足够了。可以使用包括SSIS和.NET内部的几种方法来执行这种复制。
在这里中,我们将使用JobEmpl招聘服务数据库来演示如何使用T-SQL在主从方向上创建数据库复制。
首先,让我们描述此复制的主要原理和算法。在多次中断期间,我们需要比较源数据库和目标数据库之间替换表中的数据。这意味着我们需要输入唯一的代理键来比较表。为了加快比较过程,我们还需要在该键上创建一个索引。并且还需要为每个复制表添加一个计算片段,闸为每一行计算CHECKSUM。
同样重要的是选择数据的固定部分,例如一次(多次重复)一次特定数量的行。
因此,我们需要执行以下步骤:
现在,让我们使用为雇用员工而创建的JobEmpl数据库详细查看每个步骤。
图1求职者数据库的架构
我们只需要复制Employee和JobHistory表。
然后,可以在以下脚本的帮助下执行上述算法的第一步。
USE JobEmpl
GO
SET QUOTED_IDENTIFIER ON;
DECLARE @src NVARCHAR(255) = N‘JobEmpl‘;
DECLARE @sch NVARCHAR(255) = N‘dbo‘;
DECLARE @sql NVARCHAR(MAX);
DECLARE @name NVARCHAR(255);
DECLARE @listcols NVARCHAR(MAX);
CREATE TABLE #cols (
[Name] NVARCHAR(255)
);
SELECT
[Name] INTO #tbl
FROM sys.tables
WHERE [Name] IN (
N‘Employee‘,
N‘JobHistory‘
);
DECLARE sql_cursor CURSOR LOCAL FOR SELECT
[Name]
FROM #tbl;
OPEN sql_cursor;
FETCH NEXT FROM sql_cursor
INTO @name;
WHILE (@@fetch_status = 0)
BEGIN
DELETE FROM #cols;
SET @sql = N‘SET QUOTED_IDENTIFIER ON; select N‘‘COALESCE(CAST([‘‘+col.[name]+N‘‘] AS NVARCHAR(MAX)), N‘‘‘‘‘‘‘‘)‘‘ ‘ +
N‘from [‘ + @src + N‘].sys.columns as col ‘ +
N‘inner join [‘ + @src + N‘].sys.tables as tbl on col.[object_id]=tbl.[object_id] ‘ +
N‘where tbl.[name]=‘‘‘ + @name + ‘‘‘ and col.[is_identity]=0‘;
INSERT INTO #cols ([Name])
EXEC sys.sp_executesql @sql;
SET @listcols = N‘‘;
SELECT
@listcols = @listcols + CAST([Name] AS NVARCHAR(MAX)) + N‘+ ‘
FROM #cols;
SET @listcols = SUBSTRING(@listcols, 1, LEN(@listcols) - 1);
SET @sql=N‘SET QUOTED_IDENTIFIER ON; ALTER TABLE [‘+@sch+N‘].[‘+@name+N‘] ADD [CheckSumVal] AS CHECKSUM(‘+@listcols+N‘);‘
--PRINT @sql;
EXEC sys.sp_executesql @sql;
SET @sql=N‘SET QUOTED_IDENTIFIER ON; ALTER TABLE [dbo].[‘+@name+N‘] ADD [REPL_GUID] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [‘+@name+N‘_DEF_REPL_GUID] DEFAULT (NEWSEQUENTIALID());‘;