不同 sql 服务器实例中不同 pc 中具有相同数据的相同表
Same tables with same data in different sql server instance in different pc
我有一台电脑作为主数据库服务器,所有客户端都登录到主服务器 table。我还有另外两台电脑,我想将它们用作备份服务器。这些备份服务器将在主数据库服务器中拥有来自主 table 的数据。我不确定如何实现这样的过程,非常感谢您的帮助。我的数据库服务器是 Microsoft sql Express Edition,传入的数据来自 Aspnet Core 中的 API。通常,我会使用 Microsoft SQL Management Studio 并从 table 中提取数据层,然后在另一台具有相同 table 名称的电脑中导入数据层。
Main Database (Main PC) -> Second Backup Database (Second PC) and Third Backup Database (Third PC)
我以前从来没有这样做过,我还找不到解决办法。我想在另外两台电脑上从主电脑复制 table。不要在另一台电脑上复制整个数据库。
I found that there is no replication feature in express edition. Any possible approach for this backup process?
SQL 服务器不允许 SQL 服务器代理也在 Express 版本中。
在目标数据库上创建链接服务器以连接主数据库。
安排一个操作系统调度程序来执行数据库脚本。在您的数据库脚本中,您需要使用基于 "Which are inserted or updated in last n minutes".
的链接服务器从源数据库中获取新记录
使用 LEFT JOIN 检查 table 中的那些数据。如果不存在则插入 table.
为了获得更好的性能,将获取的数据插入临时文件 table,然后使用下面的查询。
INSERT INTO your_table()
SELECT t.*
FROM #temp t
LEFT JOIN your_table y ON t.id = y.id
WHERE y.id IS NULL
我测试了这个解决方案,它可以用最少的步骤满足我的要求。
我从这个 link 复制 powershell 脚本。
我还从微软安装了 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
我在备用电脑中创建了任务计划程序,每 6 小时执行一次此脚本。我还有另一个脚本,每 12 小时将这些数据导入回备份电脑中的数据库,并在导入后删除那些 bacpac。
使用这种方法要考虑的一件事是你的数据库有多大,因为我每六个小时导出一次数据,如果你的数据库很大,这会导致性能问题,我不知道会发生什么新的执行此操作时插入或更新行。
真不知道这么长的运行会出现什么样的错误。
正如我在评论中所说,你走错了方向。
首先你说
I have another two pcs lying around and I want to use them as backup
servers.
Backup server
不等于"to replicate table from Main PC in another two pc. Not replicate whole database in another pc.",万一你的主服出事了,1table的副本怎么办?
Backup server
应包含数据库的事务一致副本,只有这样您才能将应用程序重定向到 backup server
,并且它们将能够在发生灾难时使用它你的主服务器。这意味着您应该 backup
主服务器上的数据库和 restore
备份服务器上的数据库,backup
/restore
将为您提供 [=21] 的事务一致副本=],而 bacpac
不会。
由于您在 Express Edition
并且无法使用 SQL Server Agent
,您可以将 2 个脚本写入 backup
和 restore
并使用 sqlcmd
启动它们。要安排它,您可以使用 Windows scheduler
.
您的 backup
脚本可能如下所示:
backup database MyDB to disk = 'path-to-backup-file' with init;
您的还原脚本如下所示:
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;
您的 cmd 命令如下所示:
sqlcmd -S myServer\instanceName -i C:\myScript.sql –U login_name –P password
在这里,您在文件 myScript.sql
中传递 backup
或 restore
命令
my source address is 10.11.20.181 and port is 5001
这意味着要执行您的 backup
脚本,您应该使用以下内容:
sqlcmd -S 10.11.20.181,5001 -i C:\myBackupScript.sql –U login_name –P password
我有一台电脑作为主数据库服务器,所有客户端都登录到主服务器 table。我还有另外两台电脑,我想将它们用作备份服务器。这些备份服务器将在主数据库服务器中拥有来自主 table 的数据。我不确定如何实现这样的过程,非常感谢您的帮助。我的数据库服务器是 Microsoft sql Express Edition,传入的数据来自 Aspnet Core 中的 API。通常,我会使用 Microsoft SQL Management Studio 并从 table 中提取数据层,然后在另一台具有相同 table 名称的电脑中导入数据层。
Main Database (Main PC) -> Second Backup Database (Second PC) and Third Backup Database (Third PC)
我以前从来没有这样做过,我还找不到解决办法。我想在另外两台电脑上从主电脑复制 table。不要在另一台电脑上复制整个数据库。
I found that there is no replication feature in express edition. Any possible approach for this backup process?
SQL 服务器不允许 SQL 服务器代理也在 Express 版本中。
在目标数据库上创建链接服务器以连接主数据库。
安排一个操作系统调度程序来执行数据库脚本。在您的数据库脚本中,您需要使用基于 "Which are inserted or updated in last n minutes".
的链接服务器从源数据库中获取新记录
使用 LEFT JOIN 检查 table 中的那些数据。如果不存在则插入 table.
为了获得更好的性能,将获取的数据插入临时文件 table,然后使用下面的查询。
INSERT INTO your_table()
SELECT t.*
FROM #temp t
LEFT JOIN your_table y ON t.id = y.id
WHERE y.id IS NULL
我测试了这个解决方案,它可以用最少的步骤满足我的要求。
我从这个 link 复制 powershell 脚本。
我还从微软安装了 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
我在备用电脑中创建了任务计划程序,每 6 小时执行一次此脚本。我还有另一个脚本,每 12 小时将这些数据导入回备份电脑中的数据库,并在导入后删除那些 bacpac。
使用这种方法要考虑的一件事是你的数据库有多大,因为我每六个小时导出一次数据,如果你的数据库很大,这会导致性能问题,我不知道会发生什么新的执行此操作时插入或更新行。
真不知道这么长的运行会出现什么样的错误。
正如我在评论中所说,你走错了方向。
首先你说
I have another two pcs lying around and I want to use them as backup servers.
Backup server
不等于"to replicate table from Main PC in another two pc. Not replicate whole database in another pc.",万一你的主服出事了,1table的副本怎么办?
Backup server
应包含数据库的事务一致副本,只有这样您才能将应用程序重定向到 backup server
,并且它们将能够在发生灾难时使用它你的主服务器。这意味着您应该 backup
主服务器上的数据库和 restore
备份服务器上的数据库,backup
/restore
将为您提供 [=21] 的事务一致副本=],而 bacpac
不会。
由于您在 Express Edition
并且无法使用 SQL Server Agent
,您可以将 2 个脚本写入 backup
和 restore
并使用 sqlcmd
启动它们。要安排它,您可以使用 Windows scheduler
.
您的 backup
脚本可能如下所示:
backup database MyDB to disk = 'path-to-backup-file' with init;
您的还原脚本如下所示:
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;
您的 cmd 命令如下所示:
sqlcmd -S myServer\instanceName -i C:\myScript.sql –U login_name –P password
在这里,您在文件 myScript.sql
backup
或 restore
命令
my source address is 10.11.20.181 and port is 5001
这意味着要执行您的 backup
脚本,您应该使用以下内容:
sqlcmd -S 10.11.20.181,5001 -i C:\myBackupScript.sql –U login_name –P password