如何将SQL Server 2012数据库复制到localdb实例?

Cor*_*air 24 sql sql-server sql-server-2012 localdb

我想将SQL Server 2012 Standard数据库复制到我的localdb实例.我试过向导抱怨localdb不是SQL Server 2005或更高版本的实例.我也进行了备份/恢复,但在我的localdb中恢复时出现以下错误...

运行这个......

RESTORE DATABASE CSODev
FROM DISK = 'C:\MyBckDir\CSODev.bak'
WITH MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf',
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf',
REPLACE
Run Code Online (Sandbox Code Playgroud)

错误消息我得到...

为数据库'CSODev'处理了8752页,在文件1上
处理了'CSOdev_Data'文件.为数据库'CSODev'处理了5页,在文件1上处理了文件'CSOdev_Log'.

消息1853,级别16,状态1,行1
无法找到逻辑数据库文件"CSOdev_Log".指定文件的完整路径.
消息3167,级别16,状态1,行1
RESTORE无法启动数据库'CSODev'.
消息3013,级别16,状态1,行1
RESTORE DATABASE异常终止.

数据库最终处于"恢复待定"模式.它似乎与日志文件有问题.我已经尝试了2个不同的备份,以防一个被破坏.

Ber*_*rdV 15

对于localDB 存在已知的限制(实际上是一个真正的错误).每当数据库文件位于不同的文件夹中时,它将无法使用MOVE进行任何RESTORE.

您必须在原始文件夹中恢复(无MOVE).如果需要假冒驱动器:/ path,请使用cmd工具,例如SUBST.


ktr*_*ktr 5

我也遇到了同样的问题,在做了一些在线研究后,我发现了一种巧妙的方法来让它发挥作用(尽管很hacky)。基本上,你:

  1. 创建一个 SqlLocalDb 实例 ( SqlLocalDb c tmp -s)。
  2. 按照上面的操作恢复数据库(例如,SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ...")。
  3. 停止 SqlLocalDb 实例 ( SqlLocalDb p tmp)。
  4. 删除 SqlLocalDb 实例 ( SqlLocalDb d tmp)。
  5. 创建一个新的 SqlLocalDb 实例 ( SqlLocalDb c persistent -s)。
  6. 通过附加数据库 ( SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach".

希望它能起作用。请参阅此处了解原始想法。

编辑:添加了Jason Brady对创建命令的更正。

  • 这对我有用。虽然,创建数据库语法是错误的。它实际上是 2 个额外字符,Stack Overflow 告诉我,除非至少有 6 个字符,否则我无法进行编辑。它需要是 `Create Database &lt;dbname&gt; On (Filename = '&lt;Mdf file location'), (Filename = ' &lt;Ldf 文件名'&gt;) 用于附加` (2认同)

MEM*_*ark 5

我有同样的问题.最终起作用的是:

  1. 尝试恢复数据库(在OP中获取错误)
  2. 分离数据库
  3. 重新连接数据库

最后一步发生的事情是SSDT执行了数据文件的升级,显然是旧格式的.完成后,数据库开始工作没有任何问题!


cle*_*ris 1

我有同样的问题。尝试以管理员身份运行 Visual Studio 并尝试以下命令

RESTORE DATABASE CSODev
FROM DISK = 'C:\MyBckDir\CSODev.bak'
WITH NORECOVERY, MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf',
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf',
Run Code Online (Sandbox Code Playgroud)

更新:这并不完全有效!

尽管上述语句不会产生任何错误并成功完成,但数据库仍处于“PENDING RECOVERY”状态并且无法以任何方式访问。当我尝试“RESTORE WITH RECOVER”以使数据库联机时,我遇到了与上述问题相同的错误。

因此,就我而言,我最终将备份恢复到使用 MSSQL 2008 R2 运行的 DEV 服务器,然后选择:任务 -> 生成脚本 -> 选择要编写脚本的对象 & 下一步 -> 单击“高级”按钮 -> 选择“要编写脚本的数据类型”:架构和数据。现在针对本地数据库运行生成的脚本。