数据库的备份及还原

实例应用1:

//备份procedure TF_DataBaseBackUp.Btn_bfClick(Sender: TObject);
var i:integer;
begin
 
if SaveDialog1.Execute then
 
begin
    ADOConnection1.Connected:
=False;
    ADOConnection1.ConnectionString:
=StringReplace(GetConnectionString,'Taxi','master',[rfReplaceAll]);
    ADOConnection1.Connected:
=True;
    ADOQuery1.SQL.Text :
='backup database Taxi to disk='+QuotedStr(SaveDialog1.FileName);
    try
      Btn_bf.Caption :
=' 正在备份…';
      self.repaint;
      ADOQuery1.execsql;
     
for i:=1 to 100 do
     
begin
        Btn_bf.Caption :
=' 备份中…'+inttostr(i)+'%';
        self.repaint;
        sleep(
50);
     
end;
      ShowMessage(
'数据备份操作已经成功完成!');
    except
      ShowMessage(
'数据备份时出错!请重试。');
   
end;
    Btn_bf.caption:
='  开始备份';
    self.repaint;
 
end;
end;
//恢复
procedure TF_DataBaseBackUp.Btn_hfClick(Sender: TObject);
var i:integer;
begin
 
if Application.MessageBox('该操作会把当前程序数据改为备份时的状态,您确定要这么做吗?','提示',mb_okcancel+MB_ICONQUESTION )<>idok then exit;
 
if OpenDialog1.Execute then
 
begin
    try
      ADOConnection1.Connected:
=False;
      ADOConnection1.ConnectionString:
=StringReplace(GetConnectionString,'Taxi','master',[rfReplaceAll]);
      ADOConnection1.Connected:
=True;
      Btn_hf.Caption :
=' 清除数据库连接...';
      self.Repaint;
      ClearDBConnections();
      Btn_hf.Caption :
=' 正在恢复...';
      self.repaint;
      ADOQuery1.SQL.Text :
='restore database Taxi from disk='+QuotedStr(OpenDialog1.FileName);
      ADOQuery1.execsql;
     
for i:=1 to 100 do
     
begin                         
        Btn_hf.Caption :
=' 恢复中…'+inttostr(i)+'%';
        self.repaint;
        sleep(
50);
     
end;
      Btn_hf.caption:
='  开始恢复';
      self.repaint;
    except
      Application.MessageBox(
'数据恢复时出错!请重试。','提示',64);
      Btn_hf.caption:
='  开始恢复';
      self.repaint;
      exit;
   
end;
    application.MessageBox(
'数据库已成功恢复!请重新启动系统!','提示:',mb_ok+mb_iconinformation);
 
end;
end;
//------------------------------------------------------------------------------
//函数名称: ClearDBConnections
//函数功能: 清除数据库连接
//------------------------------------------------------------------------------

procedure TF_DataBaseBackUp.ClearDBConnections;
var vspid:string;
begin
 
//覆盖数据库,清除数据库现有连接
  ADOQuery1.Close;
  ADOQuery1.SQL.Text:
='select   spid   from   sysprocesses   where   dbid=db_id(''Taxi'')';
  ADOQuery1.Open;
 
while not ADOQuery1.Eof do
 
begin
    vspid:
=ADOQuery1.FieldByName('spid').AsString;
    ADOQuery2.Close;
    ADOQuery2.SQL.Text:
='kill '+vspid;
    ADOQuery2.ExecSQL;
    ADOQuery1.Next;
 
end;
end;

实例应用2:

procedure TF_BF.BitBtn1Click(Sender: TObject);
var inif:Tinifile;
T:string;
begin
  inif:=Tinifile.Create(ExtractFilePath(Paramstr(0))+'data/SysSet.ini');
  T:=inif.ReadString('Data','DbType','');
  IF LENGTH(TRIM(EDIT2.Text))=0 THEN
  BEGIN
    APPLICATION.MessageBox('请指定数据备份的文件名!','林康软件',MB_OK+MB_ICONWARNING);
  END
  ELSE
  BEGIN
    if T='SQLserver' then
    begin
      ADOQUERY1.Close;
      ADOQUERY1.SQL.Clear;
      ADOQUERY1.SQL.Add('USE MASTER');
      ADOQUERY1.SQL.ADD('BACKUP DATABASE GZGL to disk='+#39+SAVEDIALOG1.FileName+#39+' with init');
      TRY
        ADOQUERY1.ExecSQL;
        APPLICATION.MessageBox('数据备份操作成功!','林康软件',MB_OK+MB_ICONWARNING);
      EXCEPT
        APPLICATION.MessageBox('数据备份操作失败!','林康软件',MB_OK+MB_ICONWARNING);
      END;
      close;
      TRY
        F_main.ADOConnection1.Close;
        F_main.ADOConnection1.Open;
      EXCEPT
        APPLICATION.MessageBox('该系统需要重新启动, 请退出!','林康软件',MB_OK+MB_ICONWARNING);
        application.Terminate;
      END;
    end;
    if T='Access' then
    begin
      F_MAIN.ADOConnection1.Close;
      TRY
        COPYFILE(PCHAR(ExtractFilePath(Paramstr(0))+'DATA/gzgl.mdb'),PCHAR(EDIT2.Text),FALSE);
        APPLICATION.MessageBox('数据备份操作成功!','林康软件',MB_OK+MB_ICONWARNING);
      EXCEPT
        APPLICATION.MessageBox('数据备份操作失败!','林康软件',MB_OK+MB_ICONWARNING);
      END;
      F_MAIN.ADOConnection1.Open;
    end;
  END;
end;


恢复:
procedure TF_HF.BitBtn1Click(Sender: TObject);
var
  t:string;
  inif:Tinifile;
begin
  inif:=Tinifile.Create(ExtractFilePath(Paramstr(0))+'data/SysSet.ini');
  T:=inif.ReadString('Data','DbType','');
  IF LENGTH(TRIM(EDIT2.Text))=0 THEN
  BEGIN
    APPLICATION.MessageBox('请指定数据恢复的文件名!','林康软件',MB_OK+MB_ICONWARNING);
  END
  ELSE
  BEGIN
    if T='SQLserver' then
    begin
      if MESSAGEDLG('数据恢复操作将覆盖现有的数据,需要继续吗?',mtconfirmation,[MBYES,MBNO],1) <>Mryes THEN exit;
      ADOQUERY1.Close;
      ADOQUERY1.SQL.Clear;
      ADOQUERY1.SQL.ADD('use master declare  @spid  int');
      ADOQUERY1.SQL.ADD('declare  getspid  cursor  for');
      ADOQUERY1.SQL.ADD('select  spid  from  sysprocesses  where  dbid=db_id('+#39+'GZGL'+#39+')');
      ADOQUERY1.SQL.ADD('open  getspid');
      ADOQUERY1.SQL.ADD('fetch  next  from  getspid  into  @spid');
      ADOQUERY1.SQL.ADD('while  @@fetch_status   <  >-1');
      ADOQUERY1.SQL.ADD('begin');
      ADOQUERY1.SQL.ADD('exec('+#39+'kill '+#39+'+@spid)');
      ADOQUERY1.SQL.ADD('fetch  next  from  getspid  into  @spid');
      ADOQUERY1.SQL.ADD('end');
      ADOQUERY1.SQL.ADD('close  getspid');
      ADOQUERY1.SQL.ADD('deallocate  getspid');
      ADOQUERY1.SQL.ADD('RESTORE DATABASE GZGL FROM disk='+#39+OPENDIALOG1.FileName+#39+' WITH REPLACE');
      TRY
        ADOQUERY1.ExecSQL;
        APPLICATION.MessageBox('数据恢复操作成功!','林康软件',MB_OK+MB_ICONWARNING);
      EXCEPT
        APPLICATION.MessageBox('数据恢复操作失败!','林康软件',MB_OK+MB_ICONWARNING);
      END;
      close;
      TRY
        F_main.ADOConnection1.Close;
        F_main.ADOConnection1.Open;
      EXCEPT
        APPLICATION.MessageBox('该系统需要重新启动, 请退出!','林康软件',MB_OK+MB_ICONWARNING);
        application.Terminate;
      END;
    end;
    if T='Access' then
    begin
      F_MAIN.ADOConnection1.Close;
      TRY
        COPYFILE(PCHAR(EDIT2.Text),PCHAR(ExtractFilePath(Paramstr(0))+'DATA/Gzgl.mdb'),FALSE);
        APPLICATION.MessageBox('数据恢复操作成功!','林康软件',MB_OK+MB_ICONWARNING);
      EXCEPT
        APPLICATION.MessageBox('数据恢复操作失败!','林康软件',MB_OK+MB_ICONWARNING);
      END;
      F_MAIN.ADOConnection1.Open;
    end;
  END;

end;

实例应用3: 

最简单的sql语句:备份与还原sql   server自带的数据库  
   
  在服务器上备份:  
  use   northwind  
  backup   database   northwind   to   disk=d:/northwind_bak.dat   with   init  
   
  restore   database   northnwind   from   disk   =   d:/northwind_bak.dat  
   
  ------------------------------------------------------------------  
  备份数据库这一操作在客户机上实现    
  客户机:machine  
  共享目录:share     

    
  backup:  
  bakcup   database   dbname   to   disk=//machine/share/data.bak   with   init  
  //machine/share目录要有写权限。  
   
  restore:  
  restore   database   dbname   from   disk=//machine/share/data.bak         
    
  //  
  备注:restore   语句有很多的选项,可以查看企业管理器的在线帮助。如下  
      with   replace,   move   dbname_dat   to   c:/mssql7/data/dbname.mdf,    
      move   dbname_log   to   c:/mssql7/data/dbname.log  
  其中c:/mssql7/data/是服务器的目录,这点要注意  

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值