【问题标题】:SQLCMD Restore works in Management Studio but not from DOS promptSQLCMD 还原在 Management Studio 中有效,但在 DOS 提示符下无效
【发布时间】:2010-04-24 20:43:06
【问题描述】:

知道为什么我的恢复命令在 Management Studio 2008 中运行时可以正常工作,但在 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.

但是,如果我直接在 Management 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

没有锁定或安全问题,服务器上不存在数据库。

我想不通。

有什么想法吗?

【问题讨论】:

    标签: sql-server restore sqlcmd


    【解决方案1】:

    我发现了我的问题。我使用的是错误的命令行:

     SQLCMD -s local\SQL2008 ...
    

    是-s。这不是服务器名称的开关,而是 colseparator 的开关

    正确的方法是(注意大写的 S 以及 localhost):

     SQLCMD -S localhost\SQL2008 ...
    

    问题已解决,感谢您抽出宝贵时间查看。 :)

    【讨论】:

      【解决方案2】:

      您能否尝试在 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。

      【讨论】:

        【解决方案3】:

        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,但我认为这不是问题。一定要出事了。

        【讨论】:

          【解决方案4】:

          在黑暗中拍摄,但您是否以管理员身份运行 CMD 提示符?如果没有,你可以试试吗?

          【讨论】:

          • 我使用的是 Windows XP,而且我是本地管理员,所以我很确定这种权限级别不是问题。我可以执行其他命令(例如“SELECT * FROM blah”)
          猜你喜欢
          • 1970-01-01
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          • 2020-06-06
          • 1970-01-01
          • 2018-04-01
          • 2015-09-16
          • 1970-01-01
          相关资源
          最近更新 更多