[英]How do I connect to an older sql database using LocalDb in VS 2012?
[英]How do I copy SQL Server 2012 database to localdb instance?
我想将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
错误消息我得到...
为数据库'CSODev'处理8752页,在文件1上处理'CSOdev_Data'文件。
处理了数据库'CSODev'的5页,文件1上的'CSOdev_Log'文件。消息1853,第16级,状态1,第1行
无法找到逻辑数据库文件“CSOdev_Log”。 指定文件的完整路径。
消息3167,第16级,状态1,第1行
RESTORE无法启动数据库'CSODev'。
Msg 3013,Level 16,State 1,Line 1
RESTORE DATABASE异常终止。
数据库最终处于“恢复待定”模式。 它似乎与日志文件有问题。 我已经尝试了2个不同的备份,以防一个被破坏。
对于localDB存在已知的限制 (实际上是一个真正的错误)。 每当数据库文件位于不同的文件夹中时,它将无法使用MOVE进行任何RESTORE。
您必须在原始文件夹中恢复(无MOVE)。 如果需要假冒驱动器:/ path,请使用cmd工具,例如SUBST。
我有同样的问题。 最终起作用的是:
最后一步发生的事情是SSDT执行了数据文件的升级,显然是旧格式的。 完成后,数据库开始工作没有任何问题!
我有同样的问题,经过一些在线研究之后,我遇到了一种巧妙的方式来让它发挥作用(尽管非常hacky)。 基本上,你:
SqlLocalDb c tmp -s
)。 SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ..."
)。 SqlLocalDb p tmp
)。 SqlLocalDb d tmp
)。 SqlLocalDb c persistent -s
)。 SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach"
。 希望它应该工作。 看到这里的原始想法。
编辑:添加了杰森布拉迪对创建命令的更正。
尝试将数据库编写为模式和数据,然后在本地运行脚本。
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
我有同样的问题。 尝试以管理员身份运行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',
更新:这不起作用!
虽然上述语句不会产生任何错误并成功完成,但数据库仍处于“PENDING RECOVERY”状态,无法以任何方式访问。 当我尝试'RESTORE WITH RECOVER'将数据库联机时,我得到的错误与上面的问题相同。
所以在我的情况下,我最终将备份恢复到我已运行MSSQL 2008 R2的DEV服务器,然后选择:任务 - >生成脚本 - >选择对象到脚本和下一步 - >单击“高级”按钮 - >选择“脚本的数据类型“:架构和数据。 现在针对本地db运行生成的脚本。
同样的问题,谢谢你的帮助。 我的本地数据库是MS SQL 2014.打开“SQL Server 2014 Management Studio”
它对我有用。 备份数据库后,可以无错误地还原数据库。 谢谢。
试试这些脚本(我个人测试过的冒险工具的例子):
RESTORE FILELISTONLY
FROM DISK = 'c:\temp\adv2012.bak'
这会将文件名显示为:
AdventureWorks2012 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012RTM\MSSQL\DATA\AdventureWorks2012.mdf
AdventureWorks2012_log C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012RTM\MSSQL\DATA\AdventureWorks2012_log.ldf
使用这些文件名来构建最终脚本,如下所示:
RESTORE DATABASE AdventureWorks2012
FROM DISK = 'C:\temp\adv2012.bak'
WITH MOVE 'AdventureWorks2012' TO 'C:\cnom_WS\Local-Databases\AdventureWorks\AdventureWorks2012.mdf',
MOVE 'AdventureWorks2012_log' TO 'C:\cnom_WS\Local-Databases\AdventureWorks\AdventureWorks2012_log.ldf',
REPLACE;
顺便说一句,我通过Visual Studio(SQL Server对象资源管理器)运行这些,但我强烈怀疑这可以在SSMS上轻松运行;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.