求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
SQL Server数据库备份与恢复(DELPHI版本)
 

发布于2011-06-22

 

一、SQL语句说明

备份数据库的SQL语句

BACKUP DATABASE 数据库名 TO DISK = '文件名'

恢复数据库的SQL语句

RESTORE DATABASE 数据库名 FROM DISK = '文件名'

这里有个小技巧,我就经常喜欢这么用。使用SQL Server 2000自带的工具"SQL事件探查器",能够监视到所有执行的SQL语句。比如你不知道备份与恢复数据库该用什么SQL,那么可以运行探查器,然后到企业管理器里执行一下备份与恢复操作。就可以到探查器里找找结果了。

有一点要说明的是,备份与恢复,都只能在装有数据库的那台机器(服务器)上操作,不能远程执行的。要特别注意这点。

二、备份部分

procedure TDataBackupForm.btnBackupClick(Sender: TObject);
var
ado:TADOCommand;
msg:TFMessageWindow;
begin
if IDYES=MessageDlg('数据库备份功能只能在服务器上执行,请先确认计算机是要备份的服务器,是否现在进行备份?',mtConfirmation ,[mbYes,mbNo],0) then
begin
if SaveDialog1.Execute then
begin
msg := TFMessageWindow.Create(application);
msg.SetMessage('正在备份,可能需要几分钟时间。');
if (not FileExists(SaveDialog1.FileName)) or (DeleteFile(SaveDialog1.FileName)) then
begin
ado := TADOCommand.Create(nil);
ado.Connection := MainDM.ADOconn;
ado.CommandTimeout := 300;
msg.Show;
application.ProcessMessages;
ado.CommandText := 'BACKUP DATABASE WYSFXT TO DISK = ''' + SaveDialog1.FileName + '''';
try
ado.Execute;
except
ShowMessage('数据库备份失败');
Exit;
end;
ado.Free;
ShowMessage('操作成功,系统数据库已备份。'+chr(13)+chr(13)
+'备份文件:'+SaveDialog1.FileName);
end;
msg.Close;
msg.Free;
end;
end;
end;

懒得去详细说明各条语句了。程序很简单。可能要说明一下的是那个msg:TFMessageWindow;

这是一个窗体,自己新建个过去,重命名。再在上面加个LABEL,命名为lblMessage,增加一个函数

procedure TFMessageWindow.SetMessage(AStr:string);
begin
lblMessage.Caption := AStr;
end;

用于设置要显示的信息。

在上面那段备份数据库的代码中,是调用这个窗体来显示提示的!

三、恢复部分

恢复有个地方要注意的,是必须没有其他程序连接到你要恢复的这个数据库上。包括你的程序自身。

因为有可能你的程序前面已经连接到数据库,并进行了一些操作。比如:登录系统->验证用户名。

这时必须关闭AdoConnection,并重新打开,打开的时候,注意不能指定默认数据库(特别注意)。你一指定默认数据库,就又连接上了。那么永远也没办法成功恢复数据库的!

procedure TDataBackupForm.btnRestoreClick(Sender: TObject);
var
conn:TADOConnection;
ado:TADOCommand;
msg:TFMessageWindow;
sPath:string;
begin
if IDYES=MessageDlg('数据库恢复功能只能在服务器上执行,请先确认计算机是要恢复的服务器,并且现在没有任何程序正在使用数据库,是否现在进行恢复?',mtConfirmation ,[mbYes,mbNo],0) then
begin
if OpenDialog1.Execute then
begin
msg := TFMessageWindow.Create(application);
msg.SetMessage('正在恢复,可能需要几分钟时间。');
try
conn := TADOConnection.Create(nil);
conn.LoginPrompt := false;
conn.Connected := false;
conn.ConnectionString :=
'Provider=SQLOLEDB.1;User ID=sa;Password=sa;Data Source='
+ LogonServerForm.GetServerName;

MainDM.ADOconn.Free; //关掉原先已经打开的数据库连接

conn.Connected := true;
ado := TADOCommand.Create(nil);
ado.Connection := conn;
ado.CommandTimeout := 3000;
msg.Show;
Application.ProcessMessages;
sleep(100);
ado.CommandText := 'RESTORE DATABASE WYSFXT FROM DISK = '''
+ OpenDialog1.FileName + '''';
ado.Execute;
ado.Free;
msg.Close;
msg.Free;
msg := nil;
MessageDlg('数据库恢复完成,现在将重启动本系统。',mtInformation ,[mbOK],0);
MainForm.Close;
except
msg.Close;
msg.Free;
MessageDlg('数据库恢复失败,请确认没有其它程序已经连接到数据库。现在将重启动本系统。',mtInformation ,[mbOK],0);
MainForm.Close;
end;
sPath:=ExtractFilePath(application.ExeName);
shellexecute(0,'open',
Pchar(ExtractFileName(Application.ExeName)),nil,@sPath,sw_normal);
end;
end;
end;

注意程序最后用了个小技巧,使用shellexecute,在数据库恢复成功,或者恢复失败时,重启程序本身。

 
分享到
 
 
     


MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


资料:中国移动深度数据挖掘
不错的资料:数据库设计
分享:Oracle数据库高级技术
资料:数据仓库与数据挖掘
求:数据库架构方面的资料


数据库设计


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...