如何备份还原数据库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();
    }
 


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

SQL SERVER 2000 数据库备份与还原

备份数据库,例如:BACKUP DATABASE Northwind    TO DISK = c:/Northwind.bak还原数据库,例如:--返回由备份集内包含的数据库和日志文件列表组成的结果...
  • feng19821209
  • feng19821209
  • 2006年08月29日 16:32
  • 3198

SQL2000数据库同名覆盖数据恢复

这几天接了一些客户的数据库修复案列,,闲暇之余,把案列
  • sqlrecovery
  • sqlrecovery
  • 2014年11月09日 19:35
  • 844

SQL Server2000:使用数据库创建向导创建数据库

 利用向导,可以使用下面的方式创建一个数据库:这时弹出下面的对话框:选择“创建数据库向导”选项,单击“确定”按钮:单击“下一步”按钮:可以配置“数据库名称”,“数据库文件位置”,“事务日志文件位置”,...
  • sky2098
  • sky2098
  • 2007年03月25日 18:23
  • 2995

SQLserver2000还原数据库

一:重要 如果您有独立的数据库ftp控制面板,请首先登陆ftp控制面板。如果没有,直接忽略,跳到第六步(如图)   二:输入数据库的账号密码 登陆数据库控制面板,点击备份/还原/导入数据库     三...
  • salestina
  • salestina
  • 2016年02月24日 10:55
  • 295

SQL SERVER2000备份还原存储过程

/*备份数据库的过程*/if exists(select * from sysobjectswhere name=pr_backup_db and xtype=p)begindrop proc pr_...
  • yiruoyun
  • yiruoyun
  • 2004年10月11日 21:04
  • 2046

java与SQL Server 2000的连接

一。安装jdk到SUN官方站点(http://java.sun.com)下载J2SDK的安装文件:j2sdk-1_4_2_04-windows-i586-p.exe,下载之后安装好J2SDK;安装完之...
  • wangschang
  • wangschang
  • 2006年06月26日 21:58
  • 778

SQL Server 2008数据库创建,备份,还原图解及注意点

一、新建数据库 步骤1:点击“新建数据库”。 步骤2:输入数据库名称,设置数据库文件保存位置(注意点:最好自己设置数据库文件保存位置,不要采用安装时默认的文件保存位置!),点击“确认”即可完成...
  • tiana0
  • tiana0
  • 2013年10月12日 16:32
  • 11798

VB实现SQL SERVER2000数据库备份还原

********************************************************** 名称:BackupDatabase* 功能:备份数据库* 控件:一个文本框和两个按...
  • yczz
  • yczz
  • 2007年12月19日 21:47
  • 3098

导入和导出数据库sql server2000

一、导出导入SQL Server里某个数据库1.在SQL Server企业管理器里选中要转移的数据库,按鼠标右键,选所有任务->...
  • zhoubaiwen
  • zhoubaiwen
  • 2008年01月30日 08:43
  • 6889

sql2008备份还原到sql2012数据库

使用普通的还原,右键-->任务-->还原  不好用,报  "备份集中的数据库备份与现有的数据库不同”   使用代码还原: RESTORE DATABASE zggtsl FROM DISK = 'D...
  • yaozhiwei1019
  • yaozhiwei1019
  • 2016年05月23日 17:32
  • 769
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何备份还原数据库sql server2000
举报原因:
原因补充:

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