sql serve的備分與還原

                                      sql serve的備分與還原

用sql語句backup 'RESTORE 等,也可以用sql server中的存儲過程
下面的例子是我貼來的,不知道能不能用,不過大概可以起個引導作用。

procedure TBak.btnRestoreClick(Sender: TObject);
var
  Qry:TADOQuery;
begin
  if FileExists(self.edtReStorePath.Text) then
    begin
      DM.Conn.Connected:=False; //斷開系統數據庫連接
      Qry:=TADOQuery.Create(self);
      Qry.CommandTimeout:=120;
      //把連接轉移到master庫
      Qry.ConnectionString:='Provider=SQLOLEDB.1;Password='+Login.GetDBServerInfo('Pwd')+';Persist Security Info=True;User

ID='+Login.GetDBServerInfo('User')+';Initial Catalog=master;Data Source='+Login.GetDBServerInfo('Server');
      //-------------------端開rxd_CRM庫------------------------------------------
      Qry.Close;
      Qry.SQL.Clear;
      Qry.SQL.Text:='ALTER DATABASE rxd_CRM SET OFFLINE WITH ROLLBACK IMMEDIATE';
      Qry.Prepared;
      Qry.ExecSQL;
      //------------------- 端開rxd_CRM庫結束-------------------------------------
      Qry.Close;
      Qry.SQL.Clear;
      Qry.SQL.Text:='RESTORE DATABASE rxd_CRM FROM DISK='''+self.edtReStorePath.Text+''' with replace';
      Qry.Prepared;
      try
        Qry.ExecSQL;
        Login.MsgInfo('成功恢復數據!');
      finally
        //-------------------重新連接rxd_CRM庫------------------------------------
        Qry.Close;
        Qry.SQL.Clear;
        Qry.SQL.Text:='ALTER DATABASE rxd_CRM SET ONLINE WITH ROLLBACK IMMEDIATE';
        Qry.Prepared;
        Qry.ExecSQL;
        //-------------------重新連接rxd_CRM庫結束--------------------------------
        Qry.Free;
        DM.Conn.ConnectionString:=Login.GetDBServerInfo('DBStr');
        try
          DM.Conn.Connected:=True;
        except
          Login.MsgError('連接數據庫失敗,請嘗試重啓系統!');
        end;
      end
    end
  else
    begin
      Login.MsgInfo('數據文件不存在,請重新選擇!');
      self.edtReStorePath.SetFocus;
    end;
end;

至於異地,根據ip地址連接sql server就可以了。
下面這段代碼應該可以用

備份:
procedure TBackupFrm.BitBtn2Click(Sender: TObject);
begin
  if Edit1.Text= '' then
    begin
      Showmessage('無選擇要保存的文件名');
      exit;
    end;
  try
    try
      dmData.adoQryTmp.Active:= false;
      dmData.adoQryTmp.SQL.Clear;
      dmData.adoQryTmp.SQL.Add('BACKUP DATABASE [dzyl] TO DISK = '''+edit1.text+''' WITH INIT');
      dmData.adoQryTmp.ExecSQL;
    finally
      begin
        dmData.adoQryTmp.Active:= false;
        Showmessage('數據庫備份成功!');
      end;
    end;
  except
  on e:exception do
    begin
      ShowMessage('數據庫備份失敗!');
    end;
  end;
end;
---------------
恢復
procedure TBackupFrm.BitBtn4Click(Sender: TObject);
begin
  if Edit2.Text = '' then
    begin
      showmessage('未選擇要恢復的數據庫文件!');
      exit;
    end;
  with dmData do
  begin
    try
      adocmmd.CommandText:='use master';
      adocmmd.Execute;
      adocmmd.CommandText:=' alter database dzyl set offline with rollback immediate';
      adocmmd.Execute;
      adocmmd.CommandText:='restore database dzyl from disk= '''+edit2.Text+''' with recovery ';
      adocmmd.Execute;
      adocmmd.CommandText:=' alter database dzyl set online with rollback immediate';
      adocmmd.Execute;
      showmessage('數據庫恢復成功!');
      application.Terminate;
    except
    on e:exception do
      begin
        showmessage('數據庫恢復失敗!'+e.Message);
      end;

    end;
  end;
 

end;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章