我有一台PC作为主数据库服务器,所有客户端都将其记录到主表中。我还有另外两台电脑,我想将它们用作备份服务器。这些备份服务器将从主数据库服务器中的主表中获取数据。我不确定如何实现这样的过程,并且真的感谢您的帮助。我的数据库服务器是microsoft sql express版本,传入数据来自aspnet核心中的api。通常,我将使用Microsoft SQL Management Studio从表中提取数据层,并在另一台具有相同表名的PC中导入数据层。
主数据库(主PC)->第二备份数据库(第二PC)和第三备份数据库(第三PC)
我以前从未做过,而且找不到解决方案。我想在另外两台PC中从主PC复制表。不要在另一台PC中复制整个数据库。
我发现Express Edition中没有复制功能。此备份过程有什么可能的方法?
答案 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 Agent
和backup
编写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
中传递了backup
或restore
命令
我的源地址是10.11.20.181,端口是5001
这意味着要执行myScript.sql
脚本,应使用以下命令:
backup