存储过程中实现数据库还原?

ameng_2002 2003-06-12 11:18:24
CREATE proc pr_restoredbase
@dbase varchar(25),
@fileName nvarchar(100)
AS
--use master
RESTORE DATABASE @dbase
FROM DISK = @fileName
GO

会出现以下的问题:
System.Data.SqlClient.SqlException: 因为数据库正在使用,所以未能获得对数据库的排它访问权。

但是存储过程中不能用use master啊!!!
该怎样解决??
...全文
55 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ameng_2002 2003-06-13
  • 打赏
  • 举报
回复
谢谢啦
zjcxc 2003-06-12
  • 打赏
  • 举报
回复
你是这样的吗?
比如你要恢复的数据库在a
而你写的数据库恢复的存储过程也放在a数据库中

如果是这样的话,就不行.
否则的话,就可以:

select * from master..sysprocesses where hostname is not null
group by dbid,loginame
找出连接在需恢复数据库的进程
然后kill proccess,再进行restore
ameng_2002 2003-06-12
  • 打赏
  • 举报
回复
up
ameng_2002 2003-06-12
  • 打赏
  • 举报
回复
这样做是不是不合理?
ameng_2002 2003-06-12
  • 打赏
  • 举报
回复
那位高手给我写一个存储过程啊?
在程序中运行存储过程也要连接数据库,我该连接哪个数据库啊?
wgy2008 2003-06-12
  • 打赏
  • 举报
回复
你可以断开其它连接在恢复。
firetoucher 2003-06-12
  • 打赏
  • 举报
回复
select * from master..sysprocesses where hostname is not null
group by dbid,loginame
找出连接在需恢复数据库的进程
然后kill proccess,再进行restore
--------------------------------------
看!
那支正飞向太阳的蛾子.....
就是我!
--------------------------------------
ameng_2002 2003-06-12
  • 打赏
  • 举报
回复
那我在程序中运行存储过程时,应该连接都那个数据库,是要还原的数据库,还是master?
存储过程中不能用use master吗?
ameng_2002 2003-06-12
  • 打赏
  • 举报
回复
但是我老是出现上面的问题!
CrazyFor 2003-06-12
  • 打赏
  • 举报
回复
可以,但是你要保证没有其它用户连接到这个数据库.
97866 2003-06-12
  • 打赏
  • 举报
回复
CREATE proc pr_restoredbase
@dbase varchar(25),
@fileName nvarchar(100)
AS
Declare @spid char(3)
Declare Cu_A cursor for
SELECT spid FROM master..sysprocesses where Spid>12 and Spid<>@@SPID
Open Cu_A
Detch CU_A into @spid
While @@fetch_status=0
Begin
Exec('kill '+@spid)
Fetch CU_A into @spid
End
Close Cu_A
Deallocate Cu_A
RESTORE DATABASE @dbase FROM DISK = @fileName
ameng_2002 2003-06-12
  • 打赏
  • 举报
回复
谢谢楼上了,可是还有些错误,麻烦帮忙看看

服务器: 消息 170,级别 15,状态 1,过程 pr_restoredbase,行 6
第 6 行: '=' 附近有语法错误。
服务器: 消息 137,级别 15,状态 1,过程 pr_restoredbase,行 10
必须声明变量 '@spid'。
服务器: 消息 137,级别 15,状态 1,过程 pr_restoredbase,行 13
必须声明变量 '@spid'。
服务器: 消息 137,级别 15,状态 1,过程 pr_restoredbase,行 14
必须声明变量 '@spid'。
nboys 2003-06-12
  • 打赏
  • 举报
回复
CREATE proc pr_restoredbase
@dbase varchar(25),
@fileName nvarchar(100)
AS
declare @spid=spid varchar(100)
declare spid cursor for
SELECT spid FROM master..sysprocesses,master..sysdatabases where hostname is not null and sysdatabases.name=@dbase and sysdatabases.dbid=sysprocesses.dbid
open spid
fetch next from spid into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from spid into @spid
end
close spid
deallocate spid
RESTORE DATABASE @dbase FROM DISK = @fileName
GO
nboys 2003-06-12
  • 打赏
  • 举报
回复
CREATE proc pr_restoredbase
@dbase varchar(25),
@fileName nvarchar(100)
AS
exec('use master')
RESTORE DATABASE @dbase
FROM DISK = @fileName
GO
ameng_2002 2003-06-12
  • 打赏
  • 举报
回复
up
分不够再加!
ameng_2002 2003-06-12
  • 打赏
  • 举报
回复
数据库恢复的存储过程也放在master数据库中,但是如果一个数据库中存在几个进程,应该怎样删除?

CREATE proc pr_restoredbase
@dbase varchar(25),
@fileName nvarchar(100)
AS
SELECT spid FROM master..sysprocesses,master..sysdatabases where hostname is not null and sysdatabases.name=@dbase and sysdatabases.dbid=sysprocesses.dbid

--怎样删除select出来的spid?

RESTORE DATABASE @dbase
FROM DISK = @fileName
GO

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧