hur.cn - 华软网

 热门搜索

帮我这个看看数据库恢复的问题?

  作者:未知    来源:网络    更新时间:2017/12/5
数据库保存的是*.bak的形式,现在我使用的是连接master数据库的方式来恢复这个数据库,明明断开了和原来数据库的连接关系,可还是出现"因为数据库正在被使用,所以无法获得对数据库的排他使用权",实在是搞不清楚是什么原因!(sql server2000)

程序如下:
string s_path ,s_use,ls_database
int i_err=0
ls_database=sqlca.database
Transaction SQLCA_MASTER


SQLCA_MASTER = CREATE Transaction
SQLCA_master.DBMS       = sqlca.dbms
SQLCA_master.Database   = "master"
SQLCA_master.LogPass    = sqlca.logpass
SQLCA_master.ServerName = sqlca.servername
SQLCA_master.LogId      = sqlca.logid
SQLCA_master.AutoCommit = true
SQLCA_master.DBParm     = sqlca.dbparm

commit using sqlca;
disconnect using sqlca;
disconnect;

CONNECT using sqlca_master;
if sqlca_master.sqlcode<>0 then
messagebox("警告","数据库连接失败!")
connect using sqlca;
return
end if

//恢复备份文件
s_path = trim(sle_1.text)//数据库保存的路径
sqlca_master.autocommit=true

s_use = "EXEC sp_addumpdevice  'disk' "+" , " + ls_database +","+"  '"+s_path+"'  "
EXECUTE IMMEDIATE : s_use using sqlca_master;

s_use = "RESTORE DATABASE " +ls_database + " FROM DISK = "+" '"+s_path+"' "  
EXECUTE IMMEDIATE : s_use using sqlca_master;
if sqlca_master.sqlcode<>0 then   //正是这里出现报错的问题
i_err=1
messageBox('restore databse',sqlca_master.sqlErrText)
end if

s_use = "EXEC sp_dropdevice " +ls_database
EXECUTE IMMEDIATE : s_use using sqlca_master;
if sqlca_master.sqlcode<>0 then i_err=1

sqlca_master.autocommit=false
disconnect using sqlca_master;
DESTROY sq
connect using sqlca;

if i_err = 0 then
messagebox("提示","恢复成功")
close(w_xtgl_sjkhf)
return
else
messagebox("警告","恢复失败")
return
end if
------华软网友回答------
应该是DESTROY sqlca_master;
------华软网友回复------
备份时不要打开SQL Server的"企业管理器"或"查询分析器"等
------华软网友回复------
关了,还是出现同样的问题啊?
也没有其它的在使用数据库

------华软网友回复------
只是开了sql server服务器
程序方面不知道有没有问题?
------华软网友回复------
所有有关的SQL工具PB之类的都关掉
------华软网友回复------
说得具体一点吧
我只开了pb和sql server,这两个应该是必须的吧,系统进程里面也只有sqlmangr.exe和sqlservr.exe,pb90.exe可能和数据库有关其它的什么也没开啊!
可就是不行!
真是搞不明白
------华软网友回复------
有没有其它的原因啦?

------华软网友回复------
把MSSQL关掉
------华软网友回复------
再不行,重启机器
不要打开PB和MSSQL,直接运行生成的EXE
------华软网友回复------
编译成可执行文件试试
------华软网友回复------
按照上面的方法都试了一下,可是还是不行。报同样的错。
程序有没有问题啊?
------华软网友回复------
算了,揭帖了,还是没解决问题,不过还是感谢大家!
------华软网友回复------
可能是你没有这2句代码:string str_sql
str_sql="execute('use master')"
execute immediate :str_sql using sqlca_bak ;
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。