我正在尝试从SQL 2012 DB恢复* .bak文件并且遇到了很多麻烦。似乎有类似的问题没有答案,所以我希望下面详细说明这个问题。
使用以下内容获取数据库的逻辑名称并记录
RESTORE FILELISTONLY
FROM disk = 'C:\Users\jonathan\Desktop\mydb_Full.bak'
运行以下内容以恢复
RESTORE DATABASE mydb
FROM disk = 'C:\Users\jonathan\Desktop\mydb_Full.bak'
WITH RECOVERY,
MOVE 'mydb' TO
'C:\Users\jonathan\mydb.mdf',
MOVE 'mydb_log'
TO 'C:\Users\jonathan\mydb_log.ldf'
获取错误:
Processed 448 pages for database 'mydb', file 'mydb' on file 1.
Processed 2 pages for database 'mydb', file 'mydb_log' on file 1.
Msg 1853, Level 16, State 1, Line 5
The logical database file 'mydb_log' cannot be found. Specify the full path for the file.
Msg 3167, Level 16, State 1, Line 5
RESTORE could not start database 'mydb'.
Msg 3013, Level 16, State 1, Line 5
RESTORE DATABASE is terminating abnormally.
来自SO / Google的建议是尝试分离然后附加,附加可以启动某种升级过程。
exec sp_detach_db mydb, 'true'
错误:
Msg 3707, Level 16, State 2, Line 17
Cannot detach a suspect or recovery pending database. It must be repaired or dropped.
博客建议将其设置为紧急模式:
ALTER DATABASE smsr4000 SET EMERGENCY;
这导致
Msg 823, Level 24, State 1, Line 20
The operating system returned error 5(Access is denied.) to SQL Server during a read at offset 0x00000000012000 in file 'C:\Users\jonathanchannon\mydb.mdf'. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
所以现在我迷路了。如何将此SQL备份转换为LocalDB?
由于
更新:有一个开放的MS问题here on connect和this blog post也看起来很有希望但是当使用sqlcmd连接到一个实例时我得到并且错误:
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2].
更新2:最后放弃并安装了SQL Express和Management Studio,第一次工作。
答案 0 :(得分:1)
我在尝试编写使用LocalDB的脚本时遇到了同样的问题。然而,一个小细节让我脱离了这个车辙。
首先,您应该尝试恢复数据库并提供新文件名(使用命令 RESTORE DATABASE mydb ... )。在此之后,正确的MDF 和 LDF在适当的位置神秘可用,尽管有错误。
在此之后,你有几个选择。第一个问题是SQL将显示数据库停留在"恢复..."州。这可以通过几种方式解决。在我的解决方案中,我使用 SqlLocalDb 实用程序删除并重新创建了我的LocalDB实例。如果这太苛刻了,你可以复制MDF和LDF文件,然后删除数据库。此命令行停止,删除并重新创建名为" v11.0"的LocalDB实例:
sqllocaldb p v11.0 && sqllocaldb d v11.0 && sqllocaldb c v11.0 -s
那时,我有一个可以使用的MDF和LDF。所以,我用这个来强行穿越终点线:
CREATE DATABASE X ON (Name=X, Filename=X) LOG ON (Name=X, Filename=X) FOR ATTACH;