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;