售后技术专线:4006-6500-28
新购有特价、金蝶老客户升级金蝶云产品可以享受5折优惠,送手机、送话费,好礼不断!
【问题描述】
单个账套登录报错:无法打开所请求的数据库,且DBCC报错“文件不可访问,或者内存或磁盘不足”。
前台单个账套登录报错:无法打开所请求的数据库。
后台运行DBCC CHECKDB('账套号'),结果为:文件不可访问,或者内存或磁盘不足,如下图所示:
图1 - dbcc运行结果
在该场景下,初步判定为日志文件损坏,以下为日志文件损坏的修复流程,该过程中软件不能使用:
1、一般情况,建议把实体文件复制一份作为备份。直接进行复制会出现报错,需要关闭数据库服务再进行复制(如果不知道关什么,就把SQL相关的正在运行的服务都停止),复制完毕后需要重新开启之前被停止的服务。
图3 - 停止SQL相关服务
图4 - 启用SQL相关服务
2、在SQL Server里新建一个和损坏账套一模一样的账套号名字的数据库(如果此时损坏账套在数据库列表里,需要把损坏账套脱机或者删除)
图5 - 新建数据库
图6 - 设置好新账套的名称和路径
3、用备份好的数据库实体的mdf文件复制到新账套的存储路径里,替换新账套的mdf文件。
图7 - 替换新账套的mdf文件
图8 - 替换之后刷新数据库列表对应数据库的状态为"恢复挂起"
4、执行以下脚本(以下的AIS20230207171606都对应的账套号,新建的日志文件放置路径可自行设置,建议一条一条按顺序执行)
--修改账套为紧急模式ALTER DATABASE AIS20230207171606 SET EMERGENCYGO --修改账套为单用户模式ALTER DATABASE AIS20230207171606 SET SINGLE_USER GO--重建日志文件alter database AIS20230207171606 set Emergency WITH ROLLBACK IMMEDIATE GOexec sp_dboption AIS20230207171606,single,true GOalter database AIS20230207171606 Rebuild Log on (name=AIS20230207171606,filename='D:\AIS20230207171606_log.ldf') GO alter database AIS20230207171606 set multi_userGO
5、利用DBCC CHECKDB检查账套是否正常:
图9 - DBCC检查账套正常
【注意事项】
本条知识针对特定的账套数据进行分析,并不代表相同的报错一定就是这个原因引发,
相关的修复SQL也不适合直接使用,主要供读者参考,请读者根据实际情况具体分析。