2012-10-29 60 views
21

我正在寻找将SQL Server 2012标准数据库复制到我的localdb实例。我试过了向导,它抱怨localdb不是SQL Server 2005或更高版本表示实例。我还做了备份/恢复,但在我的LocalDB恢复我碰到下面的错误...如何将SQL Server 2012数据库复制到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 

错误消息我得到...

加工8752页为数据库 'CSODev',文件 'CSOdev_Data' 在文件1.
加工5页为数据库 'CSODev',文件 'CSOdev_Log' 在文件1.

中号SG 1853年,级别16,状态1,行1
逻辑数据库文件 'CSOdev_Log' 无法找到。指定文件的完整路径。
Msg 3167,Level 16,State 1,Line 1
RESTORE无法启动数据库'CSODev'。
Msg 3013,Level 16,State 1,Line 1
RESTORE DATABASE正在异常终止。

数据库中的“恢复挂起”模式结束。看起来它有日志文件的问题。我已经尝试了2种不同的备份,以防止其中一个被损坏。

+0

也许尝试将您的文件放在您的配置文件夹以外的其他地方。例如,如果将数据/日志文件移动到C:\ Data \会发生什么情况? –

+0

我试过这样做,仍然得到相同的错误信息。 –

+0

我能够成功地完成这项工作 - 我在一个普通实例上创建了一个数据库,并将其备份并在localdb实例上恢复它,好吧:http://i.stack.imgur.com/rOOhq.png我是不确定你的问题缺少哪些信息,但显然你做的是不同的事情。我不知道该怎么提出这个问题。这是否发生在任何数据库或只是这个特定的数据库? –

回答

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', 

UPDATE:这并没有完全工作!

虽然上面的语句不产生任何错误,并成功完成,则数据库仍处于“待定恢复”状态,不能以任何方式访问。当我尝试'恢复恢复'将数据库联机时,我得到了与上述问题相同的错误。

因此,在我的情况下,我最终将备份恢复到我使用MSSQL 2008 R2运行的DEV服务器,然后选择:Tasks - > Generate Scripts - >选择对象到脚本& Next - >单击“Advanced”按钮 - >选择“脚本数据类型”:Schema &数据。 现在针对本地数据库运行生成的脚本。

3

尝试脚本您的数据库架构和数据,然后在本地运行的脚本。

+0

提示任何人来这里,看看[MEMark的答案](http://stackoverflow.com/a/18792126)。 – Benjol

+0

我认为编写数据库脚本是我们中的一些人走的路。我认为我的问题可能是SQL Server实例不同(比如2005年和2008年)。 – vbullinger

4

我有同样的问题,做我的对面巧妙的方法来有点在线研究后,得到它的工作(尽管相当哈克)。基本上,你:

  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"创建新实例数据库

并希望它应该工作了原来的想法见here

编辑:。新增Jason Brady的的创建修正命令

+2

这对我有用。虽然,创建数据库语法是错误的。它的字面意思是2个额外的字符,堆栈溢出告诉我,除非它至少是6,否则不能进行编辑。它需要'Create Database On(Filename =')对于附件' – Jason

2
RESTORE FILELISTONLY 
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK' 


ALTER DATABASE yourdatabasename 
SET SINGLE_USER WITH 
ROLLBACK IMMEDIATE 

RESTORE DATABASE yourdatabasename 
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK' 
with replace, 
move 'logical name from file stream' to 
'C:\yourdatabase.mdf', 
move 'logical name from file stream' to 'C:\Yourdatabase.ldf' 
ALTER DATABASE Qatar_DB SET MULTI_USER 
+1

谢谢,效果很好! – ssabbattini

+0

此解决方案也适用于我。请注意,请确保先创建数据库为空,然后执行上面的查询,调整LocalDB中的适当情况以使其工作。来自不同版本的模式似乎可以向后兼容兼容(2012 - > 2010) – Truesky

5

我有同样的问题最终做了什么工作是这样的:

  1. 试图恢复数据库(凑了OP的错误)
  2. 分离数据库
  3. 重新连接数据库

在最后一步实际情况是,SSDT进行的升级数据文件,显然是旧格式。当完成后,数据库开始工作没有任何问题!

+0

您,先生,您应该拥有绿色的勾号! – Benjol

-1
  1. 您可以手动完成。这可以通过使用dot net并打开两种连接并将数据从其中一个转发到另一个来完成。但是这需要在本地创建相同类型的列。
  2. 您可以检查的MS Access 2007年
14

known limitation(一个真正的错误,其实)为的LocalDB进口选项。只要您的数据库文件位于不同的文件夹中,它就会使任何带MOVE的RESTORE失败。

您必须在原始文件夹中恢复(无MOVE)。如果您需要伪造驱动器:/路径,请使用cmd工具(如SUBST)。

+0

谢谢!这节省了我的一天。 – nrodic

1

同样的问题,谢谢你的帮助。 我的本地数据库是MS SQL 2014年 打开的 “SQL Server 2014 Management Studio中”

  1. 右击数据库,进入 “任务”,单击 “脱机”
  2. 分离数据库
  3. 附加数据库

它适合我。 备份数据库后,可以无错地恢复数据库。 谢谢。

相关问题