当前位置: 代码迷 >> Sql Server >> SQL 2008 R2 Express 怎么用Delphi开发的程序恢复BAK备份
  详细解决方案

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

热度:30   发布时间:2016-04-24 21:11:48.0
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 
  相关解决方案