找到无法还原的数据库,右键-属性
数据库属性页面,点击左侧的‘选项’
点开状态,找到限制访问,修改选择值,把原来的multi_user,改成single_user,点击确定,保存修改
修改保存后,刷新数据库列表,可以看到该数据库后面已经显示‘单个用户’
这个时候,在重新还原数据库,应该就可以成功了
同时我们提供以下方法来终止此恢复过程,但请用户注意这些 *** 作将带来数据的不一致性。必要时,希望用户用完整、可靠的数据库备份恢复此数据库。1>sp_configure
"allow
updates",
12>go1>begintran2>go1>use
master
2>go1>update
sysdatabases
2>set
status
=-327683>where
name="pubs2"
4>go
如果得到(1
row
affected),则1>commit2>go1>rollback2>go
(3)这时重新启动sql
server,
使用bcp工具将该数据库(本例中为pubs2)内的全部数据导出备份(这一步很重要!
1>rollback2>go1>sp_configure
"allow
updates"
,02>go5)
重新启动server
(6)
如果你的数据库原来有dboption(例如"select
into","trunc
log
on
chkpt"等),
你需要重新设置这些option..
(7)
当数据库已经恢复可使用状态后,运行dbcc命令检查数据库的一致性(参照"如何检查数据库中数据一致性"文章)
(8)
后备用户数据库
例如:
1>dumpdatabase
pubs2
to
"/usr/sybase/pubs2.dup"
2>go
点此发表你的看法>>【已有位网友发表了看法】
看你的脚本的意思是:在master数据库建存储过程:killspid,
如果你的目的也是这样,那么执行执行还原的sql语句应该是这样:
use masrer
go
exec killspid 'dbname'--dbname改成要还原的数据库名称
go
--在这里写RESTORE 语句还原你的数据库
go
如果你的意图不是上面的,而是在要还原的数据上面创建killspid存储过程,估计你将无完达到你的目的,因为你要执行killspid时,执行killspid的进程也在你要kill的进程列表里面,就出现了你所说的情况:不能用kill来终结自己的进程;
建议直接用sql语句而不是存储过程:
use master--须使用use master
go
declare @dbname nvarchar(500)
set @dbname ='dbname' --dbname改成要还原的数据库名称
declare @spid nvarchar(20)
declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)