从远程服务器完全备份数据库,并还原到另一台远程服务器

我目前有三个我的网站(Live,Staging和Development),每个数据库在三台独立的服务器上。 更常见的情况是,一个错误会出现,需要一个最新的数据库,所以我将RDP放入Live DB,进入SQL Server Management Studio并备份数据库。 从那里,我将使用RDP将.bak文件复制到暂存数据库和开发数据库服务器,并将手动覆盖每个数据库。

它工作,但这是一个非常手动的过程。 很明显,我使用的UI可以使用如下的命令来完成:

BACKUP DATABASE MySiteDB TO DISK = 'c:\MySiteDB.bak' WITH FORMAT, MEDIANAME = 'MySiteDB', NAME = 'Live backup' GO 

我也可以使用像这样的命令来恢复它:

 RESTORE DATABASE MySiteDB FROM DISK = 'X:\MySiteDB.bak' WITH REPLACE, STATS = 10, -- Show progress (every 10%) MOVE 'MySiteDB_Data' TO 'C:\MSSQL\DATA\MySiteDB.mdf', MOVE 'MySiteDB_Log' TO 'C:\MSSQL\DATA\MySiteDB.ldf' GO 

但是,这仍然需要我login到每个服务器,并手动复制文件。

理想情况下,我希望能够在我的开发服务器上运行一个batch file,该文件将在我的实时数据库服务器上创build一个备份,并将其复制到暂存数据库服务器上的networking驱动器(我们称之为X:\ )完整备份并在分段上覆盖现有的MySiteDB数据库(然后可能还原到dev服务器)。 这样一来,将暂存数据库同步到现场是一个一步的过程。

我试图研究如何做到这一点,我能find的最接近的东西是创build数据库之间的链接。 不过,我也find了EXEC AT命令。 根据这篇文章 ,我不确定他们是否一样,但看起来我也可以在这里做我想做的事情。

这就是说,我仍然不明白如何将所有这些查询合并成一个可以从一台服务器运行的查询。 这只是使用EXEC AT将这些命令链接在一起的问题吗? 另外,如何连接服务器的工作? 我可以用命令创build一个临时链接吗?

任何帮助,将不胜感激。

你应该可以用batch和sqlcmd来做到这一点。 假设您有备份和还原脚本写入服务器上的共享:

 @ECHO ON set backupscript=c:\path\backup.sql set restorescript=c:\path\restore.sql set livestore=\\server\share set stagestore=\\server\share set devstore=\\server\share set liveserver=server\inst set stageserver=server\inst set devserver=server\inst sqlcmd -E -S%liveserver% -i "%backupscript%" copy "%livestore%\*" %stagestore% copy "%livestore%\*" %devstore% sqlcmd -E -S%stageserver% -i "%restorescript%" sqlcmd -E -S%devserver% -i "%restorescript%"