首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 2008 R2 Express 怎么用Delphi开发的程序恢复BAK备份

2013-07-11 
SQL 2008 R2 Express 如何用Delphi开发的程序恢复BAK备份BAK 备份文件是SQL2000备份的,早先该BAK文件是通

SQL 2008 R2 Express 如何用Delphi开发的程序恢复BAK备份
BAK 备份文件是SQL2000备份的,早先该BAK文件是通过以下语句恢复

use master 
alter database DB set offline with rollback immediate
restore database DB from disk='D:\qqq.bak'
alter database DB set online with rollback immediate
use DB

在SQL2000 MSDE 里,用Delphi程序执行以上语句可以恢复,但是在SQL 2008 R2 Express 里,这个语句在Delphi程序里执行,只会恢复字段,里面的数据根本不能恢复,如果用SQL 2008 R2 Express 执行,会报

消息 3154,级别 16,状态 4,第 3 行
备份集中的数据库备份与现有的 'DB' 数据库不同。
消息 3013,级别 16,状态 1,第 3 行
RESTORE DATABASE 正在异常终止。 

错误,如果把已经存在的DB数据库删除,SQL2008 执行以上语句可以恢复,或者用以下语句在SQL 2008里执行,也行。

use master
drop database DB
restore database DB from disk='D:\qqq.bak'

但是以上语句在Delphi程序里,在drop database DB就执行无效(不会报错),请问怎么在Delphi程序里往SQL 2008 数据库里恢复BAK文件 
[解决办法]
ALTER DATABASE DB_1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
RESTORE DATABASE DB_1 FROM DISK = 'c:\2.bak'
WITH Replace, MOVE 'DB_Data' TO 'd:\Data\DB_1.mdf', MOVE 'DB_log' TO 'd:\Data\DB_log.mdf' 
ALTER DATABASE DB_1 SET MULTI_USER 

[解决办法]

引用:
的确是要覆盖现有数据库,用restore database DB from disk='D:\qqq.bak' REPLACE 执行报告REPLACE附近语法错误,好像要加with mdf 到具体位置的mdf之类。但是具体位置不清楚,或者难以获取。为什么SQL 2000 MSDE 能执行的,怎么到SQL 2008 R2 Express 无法执行。

restore database DB from disk='D:\qqq.bak' with REPLACE 

热点排行