目前做了一个还原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数据库呢?
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数据库呢?
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionWrite (WrapperWrite()).
ALTER DATABASE DBName SET OFFLINE WITH ROLLBACK IMMEDIATE
Restore DataBase DBName from Disk = BakFileName With Replace
ALTER DATABASE DBName SET ONLINE WITH ROLLBACK IMMEDIATE
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()). 这个问题如何解决呢?这才是我最关心的,麻烦您给解答一下。
如何表示关掉其他链接呀,我的程序里面在数据重新附加之后,就重新做了一遍链接,然后在执行第一条Sql语句时,就会出现以上错误,但是在之后的第二条Sql,却不会出现错误了。还请不吝赐教!谢谢!