数据库:D7+SQL 2K
在程序中如何利用
adoQuery执行数据库的恢复操作?总是提示数据库正在使用,未能获得数据库的排它访问权.....

解决方案 »

  1.   

    备份与恢复数据库的存储过程
    create   PROCEDURE  GY_DBBak  
              @bakequip    int,         --  备份设备:磁盘&磁带  
              @bakpath     varchar(50), --  带全路径的备份文件名  
              @baktype     int,         --  完全备份&增量备份  
              @baklog      int,         --  ‘0’备份日志  
              @bakdb       int,         --  ‘0’备份数据库  
              @kind  varchar(7),        --备份还是恢复  
              
      @retmsg  varchar(20)  output     --返回信息  
    AS  
       DECLARE  @DevName_data    varchar(50)  
       DECLARE  @DevName_log   varchar(50)
       declare @db_path varchar(100)
       declare @log_path varchar(100)
           
       DECLARE  @RC INT     SELECT    @db_path    =  @bakpath    +  '.dat'  
    SELECT    @log_path   =  @bakpath    +  'log.dat'  
            SELECT    @RC=0   DBCC  CHECKDB(Northwind)  
    /***********************************************************
    ** CREATE BACKUP AND RESTORE DEVICES
    ************************************************************/
    IF @RC=0
       BEGIN

        EXEC sp_addumpdevice 'disk', @DevName_data,@db_path

    exec sp_addumpdevice 'disk', @DevName_log,@log_path
        select @rc=@@error
    IF @RC<>0
    begin
    EXEC SP_DropDevice @Devname_data
    exec sp_dropdevice @devname_log
    SELECT @RC=-1000
    return @rc
    end
      END

       IF  @kind='backup'  
       BEGIN  
           IF  @bakequip=0  
           BEGIN  
               IF  @baktype=0  
               BEGIN  
                   IF  @bakdb=0  
                   BEGIN    
                       BACKUP  DATABASE  Northwind  TO  DISK=@Devname_data   
                       WITH  INIT  
                   END  
                   IF  @baklog=0  
                   BEGIN              
                       BACKUP  LOG  Northwind  WITH  NO_LOG              
                       BACKUP  LOG  Northwind  TO  DISK=@DevName_log 
                       WITH  INIT,NO_TRUNCATE  
                   END  
               END  
               ELSE  BEGIN  
                   IF  @bakdb=0  
                   BEGIN  
                       BACKUP  DATABASE  Northwind  TO  DISK=@DevName_data
                       WITH  NOINIT  
                   END  
                   IF  @baklog=0  
                   BEGIN  
                       BACKUP  LOG  Northwind  WITH  NO_LOG              
                       BACKUP  LOG  Northwind  TO  DISK=@DevName_log 
                       WITH  NOINIT,NO_TRUNCATE  
                   END  
               END          
           END  
           SELECT  @retmsg='数据库备份成功!'  
       END  
     
       IF  @kind='restore'      
       BEGIN  
           RESTORE  DATABASE  Northwind  FROM  DISK=  @DevName_data WITH  REPLACE  
           SELECT  @retmsg='恢复数据库成功!'  
       END  
     
       RETURN  0  
      

  2.   

    1﹑放一個adoconnection2﹐adoquery2在窗體上。(adoconnection2要連MASTER數據庫)
    2﹑恢復前先將另一個adoconnection斷開﹕
      adoconnection1.connected:=false;
      adoconnection2.connected:=true;
      adoquery2.connection:=adoconnection2;
      with adoquery2 do
    begin
      close;
      sql.clear;
      sql.Add('restore database 數據庫名 from disk='''+備份文件路徑+''' with replace');
      execsql;
      close;
      

  3.   

    救急啊我按bbs791109说的方法,结果提示:超时已过期..
    现在数据库服务的状态是:正在装载..
    可我已经把程序停止了啊,怎么才能恢复到正常状态呢?
      

  4.   

    数据库恢复:
        with adoquery do
        begin
        sql.add('use master restore database name from disk=''c:\name.bak'' with replace'); //name:你的数据库名称
        execsql;
        end;
      

  5.   

    sleep(50000);  //解决超时已过期的问题
        with ADOQuery_procedure do begin
          Close;
          SQL.Clear;       
          SQL.Add(' use master restore database '+dmData.database+' from disk='+''''+Efilename.Text+''''+' with replace');
          ExecSQl;
        end;
      

  6.   

    with ADOQuery_procedure do 
    begin
      Close;
      SQL.Clear;       
      SQL.Add('restore database '+dmData.database+'   fromdisk='+''''+Efilename.Text+''''+' with replace');
       ExecSQl;
    end;
      

  7.   

    超时的问题:重装SQL SERVER 找上补丁,不要染上病毒