procedure RestoreDataBase;
var
ConnString: String;
ExecSQLTStrings: TStrings;
begin
try
ConnString := 'Provider=SQLOLEDB.1; Integrated Security=SSPI; Persist Security Info=False; Initial Catalog=master; Data Source=127.0.0.1,1433;';
RestoreADOConn.Connected := False;
RestoreADOConn.ConnectionString := ConnString;
RestoreADOConn.Connected := True;
ExecSQLTStrings := TStringList.Create;
try
ExecSQLTStrings.Clear;
ExecSQLTStrings.Add('USE master');
ExecSQLTStrings.Add('');
ExecSQLTStrings.Add('ALTER DATABASE [' + RestoreDataBaseName + '] SET OFFLINE WITH ROLLBACK IMMEDIATE');
ExecSQLTStrings.Add('');
ExecSQLTStrings.Add('RESTORE DATABASE [' + RestoreDataBaseName + ']');
ExecSQLTStrings.Add(' FROM DISK=''' + RestoreFile + '''');
ExecSQLTStrings.Add(' WITH MOVE ''' + RestoreDataBaseName + ''' TO ''' + RestoreDataBasePath + RestoreDataBaseName + '.mdf'',');
ExecSQLTStrings.Add(' MOVE ''' + RestoreDataBaseName + '_log'' TO ''' + RestoreDataBasePath + RestoreDataBaseName + '_log.ldf'',');
ExecSQLTStrings.Add(' REPLACE');
ExecSQLTStrings.Add('');
ExecSQLTStrings.Add('ALTER DATABASE [' + RestoreDataBaseName + '] SET ONLINE');
ExecSQLTStrings.Add('');
ExecSQLTStrings.Add('GO');
with RestoreQuery do
begin
Close;
SQL.Clear;
SQL.AddStrings(ExecSQLTStrings);
ExecSQL;
end;
finally
ExecSQLTStrings.Free;
end;
except
end;
end;
数据库采用的是SQL Server 2008 R2 SP2 Express版本
上面这个函数无法还原数据库,不知道是啥原因,把ExecSQLTStrings的内容保存到文本,然后复制内容到分析器,可以正常还原数据库。
具体执行的代码如下:
USE master
ALTER DATABASE [RmmisClient6] SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE [RmmisClient6]
FROM DISK='F:\SQL(2008)DataBase\RmmisClient6\数据库备份_20141027_1456.BAK'
WITH MOVE 'RmmisClient6' TO 'F:\SQL(2008)DataBase\RmmisClient6\RmmisClient6.mdf',
MOVE 'RmmisClient6_log' TO 'F:\SQL(2008)DataBase\RmmisClient6\RmmisClient6_log.ldf',
REPLACE
ALTER DATABASE [RmmisClient6] SET ONLINE
GO
4 个解决方案
#1
没有试验,但GO不是sql语句,去掉它试试
#2
建议使用下列代码:恢复数据库:
ADOQ.SQL.Clear;
ADOQ.SQL.Add('Use master'); // 使用 SQL master 数据库
ADOQ.SQL.Add('ALTER DATABASE '+DatabaseName+' SET OFFLINE WITH ROLLBACK IMMEDIATE'); // 脱机
ADOQ.SQL.Add('restore database '+DatabaseName+' from disk='''+UpDateFile+''' With File=1, Replace'); // 用备份文件 还原 用户数据库
ADOQ.SQL.Add('ALTER DATABASE '+DatabaseName+' SET ONLINE WITH ROLLBACK IMMEDIATE'); // 联机
ADOQ.SQL.Add('use '+DatabaseName); // 使用 用户 数据库
ADOQ.ExecSQL;
#3
非常感谢,可以还原了。。。
#4
来学习了
#1
没有试验,但GO不是sql语句,去掉它试试
#2
建议使用下列代码:恢复数据库:
ADOQ.SQL.Clear;
ADOQ.SQL.Add('Use master'); // 使用 SQL master 数据库
ADOQ.SQL.Add('ALTER DATABASE '+DatabaseName+' SET OFFLINE WITH ROLLBACK IMMEDIATE'); // 脱机
ADOQ.SQL.Add('restore database '+DatabaseName+' from disk='''+UpDateFile+''' With File=1, Replace'); // 用备份文件 还原 用户数据库
ADOQ.SQL.Add('ALTER DATABASE '+DatabaseName+' SET ONLINE WITH ROLLBACK IMMEDIATE'); // 联机
ADOQ.SQL.Add('use '+DatabaseName); // 使用 用户 数据库
ADOQ.ExecSQL;
#3
非常感谢,可以还原了。。。
#4
来学习了