如何備份還原資料庫sql server2000

來源:互聯網
上載者:User
為什麼我還原的時候會出現“資料庫正在使用,無法獲得對資料庫的排他權”.
希望各位高手不吝賜教。感謝

----------------------------------------------
-

作者:
jyenjoy (jy) ▲△△△△ -
普通會員
2003-11-28 15:36:51
1樓: Restore database Mydatabasename from disk='C:/MyDB.db'  WITH replace,stats   // 恢複 

不過在恢複的時候沒有取得排它的存取權限。 

解決方案 :1  獲得許可權 ,

          2  建立新的別名資料庫 ,串連 master,斷開與來源資料庫的串連 ,

           在 master 中執行還原的 SQL 語句 ,完成後刪除建立別名資料庫。
請問:解決方案1,2如何在delphi中實現。懇切,懇切 

----------------------------------------------
-

作者:
luyiting (lusin) ▲△△△△ -
普通會員
2003-11-30 12:22:36
2樓: 1.確保只有一個應用程式使用該資料庫,在還原資料庫時,必須關掉delphi編程環境下的資料庫連接和企業管理器到資料庫的串連,用sql sever內建的事件探測器可以看見當前有幾個到資料庫的串連。事件探測器本身不算一個串連。

2.用一個AdoCommand直接連到Master表。

3. 用企業管理器試著還原一次資料庫,在事件探測器中觀看執行過程,提出有RESTORE的那一句,將這一句寫入AdoCommand的 CommandText中然後執行。執行前先斷開你的應用程式中其他的資料庫連接,等待大概一分鐘左右。執行後等待大概三十秒,再重新串連資料庫,並開啟 資料集,應用程式恢複到原來狀態。
----------------------------------------------
-

作者:
niewenlong (niewenlong) ▲△△△△ -
普通會員
2004-11-9 19:29:19
3樓: 我貼代碼出來吧  呵呵 
自己看就明白怎麼回事了
procedure TDB_frm.SB_bakClick(Sender: TObject);
var
  BackupToFile,tempstr: string;
  adobackup:TAdocommand;
begin
BackupToFile := self.EdtBackUpPath.Text ;
if Trim(EdtBackUpPath.Text) = '' then
  begin
    MessageDlg('未設定備份的目的資料庫!', mtError, [mbOK], 0);
    Exit;
  end
else
  begin
  tempstr:= copy(BackupToFile,length(BackupToFile)-3,4);
  if uppercase(tempstr)<>'.BAK' then
     backuptofile :=self.EdtBackUpPath.Text+'.bak'
  end;

if self.RB_bak.Checked then  //備份
  begin
    if FileExists(BackupToFile) then
    begin
      if MessageDlg(BackupToFile + '已經存在,是否要覆蓋該檔案?', mtWarning,
        [mbYes,mbCancel], 0) = MrCancel then Exit;
    end;

    adobackup:=TAdocommand.Create(application);
    adobackup.ConnectionString:=' Provider=SQLOLEDB.1;'+'Persist Security Info=False;User ID='''+conninfo.username+''';Password='''+conninfo.userpassword+''';'+
          'Data Source='''+conninfo.servername+'''';
    adobackup.CommandText:='backup database '+conninfo.database+' to disk = '+ ''''+BackupToFile+'''';
    try
      adobackup.Execute;
      adobackup.Free;
    if Application.MessageBox( '備份成功! ','提示',64)=IDOK then Close;
    except
      Application.MessageBox('備份失敗!','提示',64);
      adobackup.Free;
      exit;
    end;

  end;

end;

procedure TDB_frm.SB_restoreClick(Sender: TObject);
var
RestoreFromFile: string;
adorestore:TAdocommand;

begin
if Trim(self.edtRestorePath.Text) = '' then
  begin
  MessageDlg('未設定還原的目的資料庫!', mtError, [mbOK], 0);
  Exit;
end;

if self.RB_restore.Checked=true then
  begin
    RestoreFromFile := self.edtRestorePath.Text;
    if not FileExists(RestoreFromFile) then
      begin
        MessageDlg('找不到用於還原資料庫的備份檔案!', mtError, [mbOK], 0);
        Exit;
     end;
  end;

  if application.MessageBox('此操作將使上次備份以來的所有資料丟失,是否繼續?','恢複資料',33)=IDCANCEL then  exit;
    dm_frm.Free;
    adorestore:=TAdocommand.Create(application);
    adorestore.ConnectionString:=' Provider=SQLOLEDB.1;'+'Persist Security Info=False;User ID='''+conninfo.username+''';Password='''+conninfo.userpassword+''';'+
    'Data Source='''+conninfo.servername+'''';
    adorestore.CommandText:='restore database '+conninfo.database+' from disk='''+RestoreFromFile+''' with replace';
    try
      adorestore.Execute;
      adorestore.Free;
      if Application.MessageBox( '恢複成功! 現在需要重新登陸軟體,請按“確定” ','提示',64)=IDOK then Close;
      Application.Terminate;
    except
      Application.MessageBox('恢複失敗!請斷開與該資料庫的所有串連!','提示',64);
      adorestore.Free;
      exit;
    end;
end;

procedure TDB_frm.RB_bakClick(Sender: TObject);
begin
self.edtRestorePath.Clear;
self.EdtBackUpPath.Enabled  := true;
self.EdtBackUpPath.ReadOnly :=false;
self.edtRestorePath.Enabled :=false;
self.edtRestorePath.ReadOnly:=true;
self.SB_bak.Enabled:= true;
self.SB_bak_P.Enabled:= true;
self.SB_restore.Enabled:= false;
self.SB_restore_P.Enabled:= false;
end;

procedure TDB_frm.RB_restoreClick(Sender: TObject);
begin
self.EdtBackUpPath.Clear;
self.EdtBackUpPath.Enabled  :=false;
self.EdtBackUpPath.ReadOnly :=true;
self.edtRestorePath.Enabled :=true;
self.edtRestorePath.ReadOnly:=false;
self.SB_bak.Enabled:= false;
self.SB_bak_P.Enabled:= false;
self.SB_restore.Enabled:= true;
self.SB_restore_P.Enabled:= true;
end;

procedure TDB_frm.FormShow(Sender: TObject);
begin
self.RB_bak.Checked := true;
self.EdtBackUpPath.Clear;
self.edtRestorePath.Clear;
end;

procedure TDB_frm.SB_bak_PClick(Sender: TObject);
begin
self.SaveDialog1.Filter:='備份檔案(*.bak)|*.bak';
if self.SaveDialog1.Execute then
  self.EdtBackUpPath.Text:=self.SaveDialog1.FileName;
end;

procedure TDB_frm.SB_restore_PClick(Sender: TObject);
begin
OpenDialog1.filter:='備份檔案(*.bak)|*.bak' ;
if self.OpenDialog1.Execute then
   self.edtRestorePath.Text:=self.OpenDialog1.FileName; 
end;

end.

備份和恢複SQL SERVER 資料庫   恢複資料庫:
  關鍵字:Alter Database 被恢複的資料庫名 Set Offline with Rollback immediate;
            restore database 被恢複的資料庫名 from disk = '備份檔案路徑';
            Alter Database 被恢複的資料庫名 Set OnLine With rollback Immediate;

/////////////////////
    string sql = "Alter Database db Set Offline with Rollback immediate;"; //db 是要備份的資料庫名
    sql +=  "restore database db from disk = '" ;
    sql += Server.MapPath("").ToString() +"//";
    sql += bakname + "'";  //bakname 是備份檔案名
    sql += "Alter Database db Set OnLine With rollback Immediate;";
    try
    {
     串連 master 資料庫 ;
     執行 sql  語句;
     Response.Write("<script language=javascript>alert('資料恢複成功!');</script>");
    }
    catch(Exception ex)
    {
     Response.Write("<script language=javascript>alert('資料恢複失敗!');</script>");
     this.Label2.Text = ex.ToString();
    }

備份資料庫:

關鍵字:backup database 被備份的資料庫名 to disk ='備份檔案路徑';
//////////////////////    
 string sql = "backup database db to disk = '" + Server.MapPath("").ToString() +"//"
    + bakname  //備份檔案名
    + System.DateTime.Now.DayOfYear.ToString()
    + System.DateTime.Now.Millisecond.ToString() + ".bak'";
  try

  串連 被備份的資料庫 ;
  執行 sql  語句;

   Response.Write("<script language=javascript>alert('備份成功!');location='restore.aspx'</script>");
}
    catch(Exception ex)
    {
     Response.Write("<script language=javascript>alert('備份失敗!');</script>");
     this.Label2.Text = ex.ToString();
    }
 

----------------------------------------------

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.