none
sql server08恢复数据库报错: 读取错误:38(已到文件结尾) RRS feed

  • 问题

  • 刚用从服务器备份下来的备份文件恢复到自己的电脑,

    提示

    执行T-sql语句或批处理时发生了异常
    其他信息:
    在X:/xx/backup.bak上读取失败:38(已到文件结尾)
    

    备注:在服务器上恢复不会报错,在自己电脑恢复就报错,也换过公司其他电脑试过,一样报错,只有在服务器上恢复才不会报错。

     

    请教各位解决办法。


    我的是sql server08
    • 已编辑 DAVID'DENG 2011年8月3日 2:08 补充版本号
    2011年8月3日 1:57

答案

  • 搜了一下,在一篇博客上找到原因,大概是由于路径问题导致的.

    原文如下: The Cause of the Problem is that the Drive in which your Source Data base files are located is not present in your server where you want to restore the database. Please use the SQLCMD Promt and use the Manula RESTORE command with REPLACE and MOVE option .But before using the Restore command get the logical file name of your source database

     

    syntax :

    RESTORE DATABASE [TestServer28Sep2010] FROM DISK = 'C:\BackUp\TestServer28Sep2010.bak' WITH REPLACE , MOVE 'SourceLogicalFileName_Data' TO 'D:\JapanTestServerDB\TestServer28Sep2010.mdf', MOVE SourceLogicalFileName_log' TO 'D:\JapanTestServerDB\Server28Sep2010.ldf' 


    因此,请使用如下方法还原:

    1. 从 cmd 进入 sqlcmd .

     2. 输入 以下语句,再输入 go 即可执行:

     RESTORE DATABASE 还原后的数据库名 FROM DISK = 'D:\yjdb\pms_yj_20110722.bak(备份文件)' WITH REPLACE , MOVE 'pms_yujia(曾经的mdf逻辑名)' TO 'D:\yjdb\pms_yujia.mdf(mdf还原后的路径)', MOVE 'pms_yujia_log(曾经的ldf逻辑名)' TO 'D:\yjdb\pms_yujia_log.ldf(ldf还原后的路径)'

     

     PS:如果go之后,提示你 逻辑文件XX不数据库XX的一部分,请使用XX来查询XX。 那就说明你曾经的mdf和ldf逻辑名输入错了,用“restore filelistonly FROM DISK = 'X:\XXX.bak'”查询你曾经的正确名字

    2011年8月3日 2:49

全部回复

  • What's size of backup file? What's os of your pc? What's sql edition on your pc?
    2011年8月3日 2:47
  • 搜了一下,在一篇博客上找到原因,大概是由于路径问题导致的.

    原文如下: The Cause of the Problem is that the Drive in which your Source Data base files are located is not present in your server where you want to restore the database. Please use the SQLCMD Promt and use the Manula RESTORE command with REPLACE and MOVE option .But before using the Restore command get the logical file name of your source database

     

    syntax :

    RESTORE DATABASE [TestServer28Sep2010] FROM DISK = 'C:\BackUp\TestServer28Sep2010.bak' WITH REPLACE , MOVE 'SourceLogicalFileName_Data' TO 'D:\JapanTestServerDB\TestServer28Sep2010.mdf', MOVE SourceLogicalFileName_log' TO 'D:\JapanTestServerDB\Server28Sep2010.ldf' 


    因此,请使用如下方法还原:

    1. 从 cmd 进入 sqlcmd .

     2. 输入 以下语句,再输入 go 即可执行:

     RESTORE DATABASE 还原后的数据库名 FROM DISK = 'D:\yjdb\pms_yj_20110722.bak(备份文件)' WITH REPLACE , MOVE 'pms_yujia(曾经的mdf逻辑名)' TO 'D:\yjdb\pms_yujia.mdf(mdf还原后的路径)', MOVE 'pms_yujia_log(曾经的ldf逻辑名)' TO 'D:\yjdb\pms_yujia_log.ldf(ldf还原后的路径)'

     

     PS:如果go之后,提示你 逻辑文件XX不数据库XX的一部分,请使用XX来查询XX。 那就说明你曾经的mdf和ldf逻辑名输入错了,用“restore filelistonly FROM DISK = 'X:\XXX.bak'”查询你曾经的正确名字

    2011年8月3日 2:49
  • thx,This problem has been solved。

     

    2011年8月3日 2:53
  • You'll get different error if there's db file path issue.
    2011年8月3日 2:54