用户有两套机子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('数据恢复完毕!!!');注:在同台机子上恢复没有问题,但是在不同机子上恢复却出现错误,不知何因?请高手指点、
解决方案 »
- 高手进:关于XML的问题
- DELPHI中,用ADOQUERY作数据源,用DBGRID呈现数据,如何感应到DBGRID中的数据已经改变?
- 请问:哪儿有关于三层开发方面的书籍?在线等!
- 大家好! 谁有关于硬盘序列号的程序,谢谢!!
- *****急问一个StringGrid问题,解决就接贴!!!!!****
- 跨平台访问数据 急 公司任务 请高手教教我 快死人啦~~~~~~ :(
- 我是这样定义一个线程的 !!
- 关于ADOQuery的问题。在线等待...
- 关于数字在sql中的写法
- 怎样获取,shelltreeview 中所选节点的路径信息? 节点中的node.text是'本地磁盘(c)'而我要得到的是 c:\
- 请教,使用BDE table连oracle出错,进者有分,可再加
- 哪里出了SQL语法错误
更改还原时的地址即可有关内容参见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文件后你可以看到在选项中的东东,