用户有两套机子A和B,分别装了SQL SERVER2000的数据库,如:
在A机器上的数据库名称:D:\server\data\test_data.mdf
在B机器上的数据库名称:c:\program files\pointstar\data\qygl_data.mdf即数据库名称和路径都不相同。问:
  如果现在将A机器中做的数据库备份成文件:test.dat文件,为何在B机器上恢复时出现恢复错误。我的恢复程序如下:
  with q_backup do
  begin
    close;
    sql.Clear;
    sql.Add('RESTORE DATABASE '+数据库名);
    sql.Add('from disk='''+备份文件的完整路径及文件名+''' with replace');
    execsql;
  end;
  myinformation('数据恢复完毕!!!');注:在同台机子上恢复没有问题,但是在不同机子上恢复却出现错误,不知何因?请高手指点、

解决方案 »

  1.   

    你这种恢复方式在恢复时系统加上默认的的还原地址是D:\server\data
    更改还原时的地址即可有关内容参见SQL帮助 RESTORE DATABASE .. MOVE ..
      

  2.   

    大哥太抠了吧,想知道确切的恢复语句,得放点血吧,不是不帮助你的:
            QueryRestore.sql.text := 'Restore DataBase HT01 from disk=' + #39 + FINSTORE + #39
               + ' with replace, '
               + ' move ' + #39 + 'ht01_data' + #39 + ' to ' + #39  + restore_file_path + 'ht01_data.MDF' + #39
               + ', move ' + #39 + 'ht01_log' + #39 + ' to ' + #39 + restore_file_path + 'ht01_log.ldf' + #39;
      

  3.   

    用了RESTORE DATABASE... MOVE ...的格式能说的详细点吗?
    我用过RESTORE DATABASE... MOVE...好像也不行呀,move后面跟的是逻辑数据库名,哪我怎么样才能得到这个名字呢?楼上的是用同名恢复可以,但是不同名的好像不行呀。
      

  4.   

    SQL Server Help
    E. 使用 BACKUP 和 RESTORE 创建数据库的复本
    下例显示使用 BACKUP 和 RESTORE 语句创建 Northwind 数据库的复本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新复本称为 TestDB。有关更多信息,请参见 RESTORE FILELISTONLY。 BACKUP DATABASE Northwind 
       TO DISK = 'c:\Northwind.bak'
    RESTORE FILELISTONLY 
       FROM DISK = 'c:\Northwind.bak'
    RESTORE DATABASE TestDB 
       FROM DISK = 'c:\Northwind.bak'
       WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
       MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
    GO
      

  5.   

    楼上:
    你备份文件:是NORTHWIND.BAK。
    但是我是在另外一台机器上进行恢复的呀,我怎么才能知道在使用以下语句时:
    RESTORE FILELISTONLY 
       FROM DISK = 'c:\Northwind.bak'
    RESTORE DATABASE TestDB 
       FROM DISK = 'c:\Northwind.bak'
       WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
       MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'其中的:with move 'northwind' to 'c:\test\testdb.mdf'中的“northwind”的名称呢?即原数据库的逻辑名呢?
      

  6.   

    BACKUP DATABASE Northwind
    TO DISK = 'c:\Northwind.bak'
    你要分开的,上面一段是让你备份,把Northwind备份到c:\文件名是Northwind.bak
    下面的就是恢复了,
    恢复的数据库名叫testdb,他的数据文件存放在E:\data下,
    Northwind,Northwind_log是逻辑文件名,
    testdb.mdf,testdb.ldf是你将要存放的物理文件名
    RESTORE FILELISTONLY
    FROM DISK = 'c:\Northwind.bak'
    RESTORE DATABASE testdb
    FROM DISK = 'c:\Northwind.bak'
    WITH MOVE 'Northwind' TO 'E:\data\testdb.mdf',
    MOVE 'Northwind_log' TO 'E:\data\testdb.ldf'
    GO
      

  7.   

    好了,就说到这,如果再有什么不知道请参照SQL SERVER的HELP.
      

  8.   

    楼上:
    谢谢您,你在回复中写到:
    “恢复的数据库名叫testdb,他的数据文件存放在E:\data下,
    Northwind,Northwind_log是逻辑文件名,”
    我在程序中怎么获得数据库的逻辑名呢?数据库的名字是由用户自己定义的(不同的数据库逻辑应该也不一样吧?我的恢复问题就是出在逻辑名的获取上的)。
    麻烦你能讲清楚一点。
      

  9.   

    Northwind,Northwind_log是就是你在本机上的两个数据库文件
    我建议你根据SQL SERVER的企业管理器恢复数据库,从设备恢复,选择BAK文件后你可以看到在选项中的东东,