用户有两套机子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('数据恢复完毕!!!');注:在同台机子上恢复没有问题,但是在不同机子上恢复却出现错误,不知何因?请高手指点、
在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('数据恢复完毕!!!');注:在同台机子上恢复没有问题,但是在不同机子上恢复却出现错误,不知何因?请高手指点、
更改还原时的地址即可有关内容参见SQL帮助 RESTORE DATABASE .. MOVE ..
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;
我用过RESTORE DATABASE... MOVE...好像也不行呀,move后面跟的是逻辑数据库名,哪我怎么样才能得到这个名字呢?楼上的是用同名恢复可以,但是不同名的好像不行呀。
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
你备份文件:是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”的名称呢?即原数据库的逻辑名呢?
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
谢谢您,你在回复中写到:
“恢复的数据库名叫testdb,他的数据文件存放在E:\data下,
Northwind,Northwind_log是逻辑文件名,”
我在程序中怎么获得数据库的逻辑名呢?数据库的名字是由用户自己定义的(不同的数据库逻辑应该也不一样吧?我的恢复问题就是出在逻辑名的获取上的)。
麻烦你能讲清楚一点。
我建议你根据SQL SERVER的企业管理器恢复数据库,从设备恢复,选择BAK文件后你可以看到在选项中的东东,