目前做了一个还原sql2000 的程序,我是用的存储过程。
pro_dbrestore:
CREATE PROCEDURE pro_dbrestore @restorefile varchar(200)
 AS
exec killspid cabinet
restore database cabinet from disk=@restorefile
GO
存储过程killspid
create    proc    killspid    (@dbname    varchar(20))      
as      
begin      
declare    @sql    nvarchar(500)      
declare    @spid    int      
set    @sql='declare    getspid    cursor    for          
select    spid    from    sysprocesses    where    dbid=db_id('''+@dbname+''')'      
exec    (@sql)      
open    getspid      
fetch    next    from    getspid    into    @spid      
while    @@fetch_status    <    >-1      
begin      
exec('kill    '+@spid)      
fetch    next    from    getspid    into    @spid      
end      
close    getspid      
deallocate    getspid      
end
GO
以上两个存储过程都是在master数据库下,因为在其他数据库下无法完成。目前这两个存储过程已经可以恢复数据库,可是却遇到了另外一个问题,我想在cabinet数据库下操作,可是执行完以上两个存储过程之后提示‘连接失败’。我都已经把用于连接存储过程的adoconnection free了,为什么还是连接不到cabinet数据库呢?

解决方案 »

  1.   

    sql 2000 提示如下的错误:
    [Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionWrite (WrapperWrite()). 
      

  2.   

    use master
    ALTER DATABASE DBName SET OFFLINE WITH ROLLBACK IMMEDIATE
    Restore DataBase DBName  from Disk =  BakFileName With Replace
    ALTER DATABASE DBName  SET ONLINE WITH ROLLBACK IMMEDIATE
      

  3.   

    或者KILL SPID,然后再RESTORE
      

  4.   

    我在Delphi中写了如下代码
    ADOQuery1.ConnectionString:='provider=SQLOLEDB.1;persist security info=true;user id=sa;password=ecp_janitor;initial catalog=master;data source=.';
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('use master');
      ADOQuery1.SQL.Add('ALTER DATABASE cabinet SET OFFLINE WITH ROLLBACK IMMEDIATE');
      ADOQuery1.SQL.Add('Restore DataBase cabinet  from Disk ='''+edit_restorefile.Text+''' With Replace');
      ADOQuery1.SQL.Add('ALTER DATABASE cabinet  SET ONLINE WITH ROLLBACK IMMEDIATE');
      ADOQuery1.ExecSQL;
    虽然数据库还原成功了,可还是出现问题。“连接失败”。因为还原数据库之后我还要连接Cabinet数据库,可是这时已经连接不上了,Delphi中提示“连接失败”,SQL 2000中提示[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionWrite (WrapperWrite()). 这个问题如何解决呢?这才是我最关心的,麻烦您给解答一下。
      

  5.   

    请问lz,我也出现你的问题,
    如何表示关掉其他链接呀,我的程序里面在数据重新附加之后,就重新做了一遍链接,然后在执行第一条Sql语句时,就会出现以上错误,但是在之后的第二条Sql,却不会出现错误了。还请不吝赐教!谢谢!