无法将SQL Server数据库还原到另一台服务器

时间:2017-06-06 12:01:17

标签: sql sql-server powershell

我正在尝试将数据库从旧的垂死服务器迁移到新服务器。

在整个互联网上,我发现安德鲁·摩根有两个方便的scripts用于保存和恢复数据库。备份部分运行良好;我通过网络共享文件夹并让脚本将db备份到unc路径,从而在我的本地PC上获得db.bak

不幸的是,恢复部分不起作用,我不知道为什么(我的高级DEV也不知道,而且他是知道SQL aorund的人)。

我这样称呼它:

Restore-SQLdatabase -SQLServer "NEWSERVER\MSSQLSERVER" -SQLDatabase "DBToMigrate" -Path "C:\Backup\DBToMigrate.bak" -SQLusername "sa" -SQLpassword "IMAPLAINTEXTPASSWORD"

sa对数据库拥有完全的权力。

它失败并显示以下消息:

  

尝试连接到指定的SQL服务器:成功
  WARNUNG:恢复数据库时发现异常!
  WARNUNG:Ausnahme beim Aufrufen von“ExecuteNonQuery”mit 0 Argument(en):“'''附近的语法不正确。
  关键字'with'附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号结束前一个语句。“
  WARNUNG:试图恢复数据库

有问题的部分是:

ALTER DATABASE $SQLDatabase
SET SINGLE_USER WITH ROLLBACK IMMEDIATE

RESTORE DATABASE $SQLDatabase
FROM DISK = '$path'
WITH REPLACE

当它被执行时,scipt会获得异常。

我尝试在CREATE DATABASE $SQLDatabase部分前放置一个ALTER,但在创建该数据库之后,它会说“数据库名称已经存在”。

此外,省略更改部分并将该部分更改为

RESTORE DATABASE $SQLDatabase FROM DISK = '$path' WITH REPLACE

它说了一些关于数据库文件的东西,给了我旧服务器上的路径(我想完全不相关,但似乎可能是我的下一个问题),找不到(当然,因为我我现在在我的本地机器上,没有那些。)

我正在使用脚本,因为我们需要迁移大约15个数据库,还因为我想学习如何在不使用SSMS向导的情况下完成这些工作。

更新:我将撇号更改为正常,,这确实是错误。现在我只需要获取db文件的文件名,这样我就可以MOVE将它们发送到新服务器。

1 个答案:

答案 0 :(得分:0)

您只需要为文件写一个新目的地,您可以在此处查看RESTORE的语法:RESTORE Statements (Transact-SQL)

您的代码将是这样的:

RESTORE DATABASE AdventureWorks2012  
   FROM AdventureWorksBackups  
   WITH MOVE 'AdventureWorks2012_Data' TO   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf',   
      MOVE 'AdventureWorks2012_Log'   
TO 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf';