2010-04-24 26 views
2

任何想法爲什麼我的Restore命令在Management Studio 2008中運行時工作正常,但在dos提示符下運行時沒有問題?SQLCMD Restore在管理工作室中工作,但不能從DOS提示符下工作

下面顯示的是從dos提示符運行時的錯誤。

C:\>SQLCMD -s local\SQL2008 -d master -Q "RESTORE DATABASE [Sample.Db] FROM DISK = N'C:\Sample.Db.bak' WITH FILE = 1, MOVE N'Sample.Db' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\Sample.Db.mdf', MOVE N'Sample.Db_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\Sample.Db_log.ldf', NOUNLOAD, REPLACE, STATS = 10" 
Msg 3634, Level 16, State 1, Server GAUTAM, Line 1 
The operating system returned the error '32(The process cannot access the file because it is being used by another process.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\Sample.Db.mdf'. 
Msg 3156, Level 16, State 8, Server GAUTAM, Line 1 
File 'Sample.Db' cannot be restored to 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\Sample.Db.mdf'. Use WITH MOVE to identify a valid location for the file. 
Msg 3634, Level 16, State 1, Server GAUTAM, Line 1 
The operating system returned the error '32(The process cannot access the file because it is being used by another process.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\Sample.Db_log.ldf'. 
Msg 3156, Level 16, State 8, Server GAUTAM, Line 1 
File 'Sample.Db_log' cannot be restored to 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\Sample.Db_log.ldf'. Use WITH MOVE to identify a valid location for the file. 
Msg 3119, Level 16, State 1, Server GAUTAM, Line 1 
Problems were identified while planning for the RESTORE statement. Previous messages provide details. 
Msg 3013, Level 16, State 1, Server GAUTAM, Line 1 
RESTORE DATABASE is terminating abnormally. 

但是如果我直接在管理Studio 2008中執行此,它工作正常:

RESTORE DATABASE [Sample.Db] FROM DISK = N'C:\Sample.Db.bak' WITH FILE = 1, MOVE N'Sample.Db' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\Sample.Db.mdf', MOVE N'Sample.Db_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\Sample.Db_log.ldf', NOUNLOAD, REPLACE, STATS = 10 

沒有鎖或安全問題,數據庫不存在於服務器上。

我無法弄清楚。

任何想法?

回答

2

我發現我的問題。我使用的命令行是錯誤的:

SQLCMD -s local\SQL2008 ... 

這是-s。這不是服務器名稱的開關而是開關colseparator

正確的方法是(注意是大寫字母S以及爲localhost):

SQLCMD -S localhost\SQL2008 ... 

問題解決了,大家好,感謝您抽出時間看。 :)

1

您可以嘗試創建測試數據庫,對其進行備份,刪除並在SQLCMD會話中恢復它。即

SQLCMD 
Create database junk 
go 
Backup database junk to disk='c:\junk.bak' 
go 
Drop database junk 
go 
Restore database junk from disk='c:\junk.bak'.... 

如果這有效,有什麼不同?其他數據庫備份大嗎?你有可以掃描它的防病毒軟件嗎?如果有疑問,在運行SQLCMD恢復時運行Sysinternals Filemon。

0

在黑暗中拍攝,但是您是否以管理員身份運行CMD提示?如果不是,你可以試試嗎?

+0

我使用Windows XP,我是本地管理員,所以我非常確定這個特權級別不是問題。 我可以做其他命令(例如「SELECT * FROM blah」) – Gautam 2010-04-24 22:29:18

1

SQLAcid:這似乎工作:

C:\>SQLCMD -s local\SQL2008 -d master -Q "CREATE DATABASE [junk];" 

C:\>SQLCMD -s local\SQL2008 -d master -Q "BACKUP DATABASE [junk] TO DISK='C:\junk.bak'" 
Processed 152 pages for database 'junk', file 'junk' on file 1. 
Processed 2 pages for database 'junk', file 'junk_log' on file 1. 
BACKUP DATABASE successfully processed 154 pages in 0.182 seconds (6.892 MB/sec). 

C:\>SQLCMD -s local\SQL2008 -d master -Q "RESTORE DATABASE [junk] FROM DISK='C:\junk.bak' WITH FILE = 1, MOVE N'junk' TO N'C:\Pr 
ogram Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\junk.mdf', MOVE N'junk_log' TO N'C:\Program Files\Microsoft SQL Serve 
r\MSSQL10.SQL2008\MSSQL\DATA\junk_log.ldf', NOUNLOAD, REPLACE, STATS = 100" 
100 percent processed. 
Processed 152 pages for database 'junk', file 'junk' on file 1. 
Processed 2 pages for database 'junk', file 'junk_log' on file 1. 
RESTORE DATABASE successfully processed 154 pages in 0.070 seconds (17.920 MB/sec). 

你要知道我的數據庫最初是從SQL2005,但我不認爲這應該是一個問題。有些事情已經到了。

相關問題