如何备份还原数据库sql server2000

转载 2006年05月22日 11:58:00
为什么我还原的时候会出现“数据库正在使用,无法获得对数据库的排他权”.
希望各位高手不吝赐教。感谢

----------------------------------------------
-
作者:
男 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();
    }
 


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

相关文章推荐

MS SQL Server 2000 数据库使用备份还原造成dbo登录名丢失解决法(转)

在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复。但是,此时会出现问题,这里说明几种常见问题的解决方法。 一、孤立用户的问题 比如...

Sql Server 2000的数据库备份还原到Sql Server 2005

使用Sql Server 2000的数据库备份文件还原Sql Server 2000的数据库和还原Sql Server 2005的数据库时,其关键所在就是在Sql 2000时是必须新建数据库并对其...

Sql Server 2000数据库备份文件还原成Sql Server 2005

核心步骤: 在sql server 2005 中直接右击数据库选还原数据库。   详细内容: 用Sql Server 2000的数据库备份来还原Sql Server 2...

SQL Server 2000数据库备份还原到SQL Server2005数据库

现在手中有SQL Server2000中的数据库备份文件(如果此备份文件没有后缀名*.bak或*.tm,请追加相应的后缀名,如*.bak),欲将此文件还原到SQL Server2005中,还原时突然报...

用Sql Server 2000的数据库备份来还原Sql Server 2005中的数据库

用Sql Server 2000的数据库备份来还原Sql Server 2005中的数据库 现在手中有Sql Server 2000中的数据库备份文件(如果此备份文件没有后缀...

SQL Server 2005 还原 2000的备份文件

现在手中有Sql Server 2000中的数据库备份文件(如果此备份文件没有后缀名*.bak或*.trn,请追加相应的后缀名),欲将此文件还原到Sql Server 2005中,还原时突然报错,为此...

sql server数据库备份和还原工具

  • 2009年12月05日 09:43
  • 668KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何备份还原数据库sql server2000
举报原因:
原因补充:

(最多只允许输入30个字)