之前没有太在意,这两天在程序中添加备份还原模块,发现备份没为题,还原时出现“因为数据库正在使用,所以未能获得对数据库的排它访问权”,放狗搜了一下,看到遇到类似情况地同志还不少,看了帖子中给出解决的办法是:
1、使用两个TAdoConnection,还原时将要还原数据库的Adoconnection1断开链接,将Adoconnection2链接到Master数据库,但经我多次试验,似乎也不能成功;2、使用存储过程,这个应该能实现,大段的代码我没仔细看,稍显啰嗦。
最后说说我的处理办法,单用一个AdoConnection,没用存储过程,直接上代码吧,一目了然:
核心部分就是这几句:
AdoBkRs.SQL.Add('use master');
AdoBkRs.SQL.Add('ALTER DATABASE MeterInfo SET OFFLINE WITH ROLLBACK IMMEDIATE');
AdoBkRs.SQL.Add('Restore Database MeterInfo From Disk= '''+sFdir+''' with REPLACE ');
AdoBkRs.SQL.Add('ALTER DATABASE MeterInfo SET ONLINE WITH ROLLBACK IMMEDIATE');
另外,使用如今方式亦可(未试验):
用single userEXEC sp_dboption 'dababasename','single user', 'TRUE'
RESTORE DATABASE databasename FROM DISK = 备份文件名 with REPLACE
EXEC sp_dboption 'dababasename','single user', 'false
在尝试数据库还原过程中遇到'因为数据库正在使用,所以未能获得对数据库的排它访问权'的问题。文章介绍了两种解决方法,包括使用两个TAdoConnection和通过SQL命令设置数据库离线并立即回滚。最终采用的解决方案是通过AdoBkRs对象执行SQL语句,使数据库在主模式下离线,然后进行替换还原,最后再将其设回在线。"
129745338,7375540,Excel单元格数值统计算法实现,"['javascript', '算法', '数据处理']

2773

被折叠的 条评论
为什么被折叠?



