不同PC中不同SQL Server实例中具有相同数据的相同表

时间:2019-02-11 05:27:23

标签: sql-server database-backups

我有一台PC作为主数据库服务器,所有客户端都将其记录到主表中。我还有另外两台电脑,我想将它们用作备份服务器。这些备份服务器将从主数据库服务器中的主表中获取数据。我不确定如何实现这样的过程,并且真的感谢您的帮助。我的数据库服务器是microsoft sql express版本,传入数据来自aspnet核心中的api。通常,我将使用Microsoft SQL Management Studio从表中提取数据层,并在另一台具有相同表名的PC中导入数据层。

  

主数据库(主PC)->第二备份数据库(第二PC)和第三备份数据库(第三PC)

我以前从未做过,而且找不到解决方案。我想在另外两台PC中从主PC复制表。不要在另一台PC中复制整个数据库。 May be this is the way.

  

我发现Express Edition中没有复制功能。此备份过程有什么可能的方法?

3 个答案:

答案 0 :(得分:0)

  • SQL Server在Express Edition中也不允许SQL Server代理。

  • 在目标数据库上创建链接服务器以连接主数据库。

  • 安排一个操作系统计划程序来执行数据库脚本。在数据库脚本中,您需要使用基于“在最近n分钟内插入或更新了哪个”的链接服务器从源数据库中获取新记录。

  • 使用LEFT JOIN检查表中的那些数据。如果不存在,则插入到表中。

为了获得更好的性能,请将获取的数据插入到临时表中,然后使用以下查询。

INSERT INTO your_table()
SELECT t.*
FROM #temp t
LEFT JOIN your_table y ON t.id = y.id
WHERE y.id IS NULL

答案 1 :(得分:0)

我测试了此解决方案,可以用最少的步骤满足我的要求。
我从此link复制了powershell脚本。 我还从Microsoft安装了sqlpackage。

.\SqlPackage.exe /a:Export /ssn:ServerName /sdn:TableName/tf:path-to-backup-folder\mybackup$(get-date -f dd-MM-yyyy-HH-mm-s).bacpac

,我在备份PC中创建了任务计划程序,每6小时执行一次此脚本。我还有另一个脚本,每12小时将这些数据导入备份计算机内的数据库,并在导入后删除这些bacpac。
考虑使用此方法的一件事是您的数据库有多大,因为我每六个小时导出一次每个数据,如果您的数据库很大,这将导致性能问题,并且我不知道新行会发生什么执行此操作时插入或更新。

我真的不确定从长远来看会发生什么样的错误。

答案 2 :(得分:0)

正如我在评论中所说,您的方向错误。

首先您说

  

我还有另外两台电脑,我想用它们作为备份   服务器。

Backup server并不意味着“要在另一台两台PC中从主PC复制表。不能在另一台PC中复制整个数据库。”,如果主服务器出了什么事,该如何复制1表? ?

Backup server应该包含数据库的事务上一致的副本,只有这样,您才能将应用程序重定向到backup server,并且在主服务器发生灾难的情况下,它们将能够使用它。服务器。这意味着您应该backup在主服务器上restore在备份服务器上,backup / restore将为您提供{{1 }},而database不会。

当您在bacpac上并且无法使用Express Edition时,可以向SQL Server Agentbackup编写2个脚本,然后使用restore启动它们。要安排它,您可以使用sqlcmd

您的Windows scheduler脚本如下所示:

backup

您的还原脚本如下所示:

backup database MyDB to disk = 'path-to-backup-file' with init;

您的cmd命令如下:

restore database MyDB from disk = 'path-to-backup-file'
with move 'MyDB' to 'db-copy-path\MyDB.mdf',
move 'MyDB_log' to 'db-copy-path\MyDB_log.ldf',
replace;

此处您在文件sqlcmd -S myServer\instanceName -i C:\myScript.sql –U login_name –P password 中传递了backuprestore命令

  

我的源地址是10.11.20.181,端口是5001

这意味着要执行myScript.sql脚本,应使用以下命令:

backup