01 引言
最近我老婆在运行金蝶软件时,发现打不开了,软件修复了也没用。最重要的是没有备份账套文件!!!
可能是操作系统更新的原因,或许是其它的问题,没办法了,于是只能在新的一台电脑重新安装金蝶的软件,那么问题来了,旧电脑的账套文件如何恢复呢?
我研究了一番,大致了解了金蝶的运行流程,于是就有了本文,旨在解决“在没有备份金蝶账套的情况下,如何恢复账套?”。
02 金蝶是如何备份的?
金蝶的备份分为手动备份和自动备份,我画了一张简单的流程图:
一般很容易忘记手动备份,或者自动备份需要等待一段周期(7天)才会备份一次,如果系统出了问题,或者没有手动备份的习惯,这是很容易导致数据丢失的。
上述的图片,表明金蝶在备份是分为如下两个文件:
- bak:即是备份账套的完整数据库的内容(包括表结构、表数据等);
- dbb:这个文件应该主要是辅助金蝶导入的一些元数据,即这个文件必须存在,才可以使用金蝶去恢复导入。
我们的想法肯定是生成之后,然后拷贝到新的电脑,直接使用新的金蝶导入账套的,但是旧电脑的金蝶软件打不开了,所以是无法备份的了。那么问题来了,这两个文件都没有,如何生成呢?。
03 导出数据库账套文件?
其实金蝶安装时,是直接顺便安装了SQLServer
数据库的,新建账套时,会在SQL Server
新建对应的一个数据库名与账套名一样的数据库。比如:新建了账套“XX20231013
”,那么在SQLServer
数据库也会新建一个数据库名为XX20231013
的数据库。
所以,可以理解为账套的所有数据都存在对应数据库名的数据库里面,因此,导出该数据库,就意味着把账套的所有内容导出了,导出之后的格式跟金蝶备份到磁盘的格式一样,即:以bak
结尾的文件。
导出命令如下(在安装金蝶的机器,打开搜索cmd,打开执行以下命令即可):
sqlcmd -S [SQL Server 实例] -Q "BACKUP DATABASE 数据库名 TO DISK='D:\数据库名.bak' WITH FORMAT"
举例(表示:将名为 “XX20231013
” 的数据库备份到 “D:\XX20231013.bak
” 文件中,其中 SQL Server 实例名称为 “LAPTOP-GF57IB6L\SQLEXPRESS”,这个不懂的可以请教博主如何查看):
sqlcmd -S LAPTOP-GF57IB6L\SQLEXPRESS -Q "BACKUP DATABASE XX20231013 TO DISK='D:\XX20231013.bak' WITH FORMAT"
那么bak
的文件是导出来了,但是dbb
文件呢?这个文件是金蝶程序生成的,我们可以不用管它,直接绕过它的“门面”,直捣黄龙😁,下面来讲讲。
04 新建一套完全一样的账套
接着在新的电脑,我们可以按照以前的步骤,在金蝶新建一套与之前一模一样的账套,忘记截图了,所以这里没图(注意的是:账套名必须与待备份的账套名一样,对应的是数据库的名称)。
新建完成之后,就相当于现在已经有了以前的账套了,只是没数据而已。
05 新账套导入数据
这些数据就是存储前面步骤导出的bak
文件里面(例子中的XX20231013.bak
文件),我们把它拷贝到新的电脑,以准备恢复这些数据。
恢复数据之前,需要下载SSMS
连接工具(也就是连接SQL Server
的客户端),下载地址(免费的):https://download.microsoft.com/download/a/c/a/aca4e29f-6925-4d50-a06b-5576c6ea629f/SSMS-Setup-CHS.exe
安装完成之后,打开并进行依次如下操作:
- 右键单击目标数据(比如例子中的:
XX20231013
); - 选择 “任务” > “还原”;
- 在 “还原数据库” 对话框中,选择 “设备”,然后单击 “…” 按钮;
- 在 “选择备份设备” 对话框中,单击 “添加” 按钮,然后选择你的
.bak
文件(如前面例子的:XX20231013.bak
文件); - 然后单击 “确定” 来开始还原操作。
注意:如果上面的还原操作失败,提示“数据库正在使用,所以无法获得对数据库独占访问权”,说明金蝶的客户端占用了该数据库的连接,需要把这些连接杀掉,然后再次执行上述步骤。可以直接在ssms里查询哪些进程占用了该数据库,然后kill掉,相关命令如下:
USE master; -- 查询哪些进程占用了该数据库的连接,并查出spid EXEC sp_who; -- 根据spid 杀掉该进程 KILL spid;
上述步骤都没问题之后, 重启电脑,打开金蝶,进入账套查看,会发现之前账套的记录全部恢复了。
06 文末
很高兴自己能在短时间内给老婆解决了金蝶账套恢复的问题,主要是金蝶的教程太少了,而且很多的都是吐槽软件的问题。其实静下心来,利用自己的已有的专业知识,会发现这些问题也不是很难解决的,只要愿意去思考与尝试。
希望本文能帮助到遇到相同问题的人,欢迎关注,谢谢大家的阅读,本文完!