盒子
盒子

关于sql server备份文件恢复的事儿

好久都没写文了,怎么的也得刷新下博客了,最近拿到一个.bak文件,经过分析是sql server的备份文件,想把它数据移植到mysql中,于是就有了下文


首先sql server中数据要移植到mysql中,在自带安装的SQL Server Management Studio中只发现了可以导出成sql文件的方法,但是这个sql格式好像是叫T-SQL,反正就是Mysql不能直接导入,如果这样的话,好像有些工具可以转换这种SQL文件,但是我并没有找到有详细说明文档的,stackoverflow上并没有找到合适的方法。

对了这里顺便提一下.bak文件恢复到sql server的方法:可以使用SQL Server Management Studio,然后连接上之后,右击左侧数据库—>选择还原数据库—>选择设备->添加bak文件->等待恢复成功。恢复前还可以验证下bak文件,看看是否损坏什么的,避免浪费时间。

其实,后面才是我最想写的。

导入sql server之后,想舒舒服服的导入到mysql,简单的方法就是装个navicat,这个网上破解版很多,装了之后可以导出成dbf格式,然后再从dbf格式导入到mysql,全程无脑操作。

后面问题来了,有一个bak文件导出不成功,报各种错,然后还提示啥DBCC CHECKDB去查看原因。本人不太懂sql server。先开始是想到的是sql server版本问题,于是果断从2014降到2012,方法是重装,花了不少时间,发现有的表勉强能够导出了,但是还是有些要报错。

最终我选择,试试这个DBCC CHECKDB命令,运行之后,等待了好久,才有反应。错误名字大概叫CHECKDB 发现了 0 个分配错误和 多少 个一致性错误,大概这么个意思。于是再一次google,我还是蛮幸运的,找到了解决办法,错误说明如下:

一般情况下,引起分配错误的原因是磁盘损坏或突然停电;一致性错误可能是数据库中的表或索引坏,一般都可修复。
1、查看红色字体,并把有错误的数据库表名记录下来,或把索引损坏的表名记录下来。
2、把数据库设置为单用户模式,直接在查询分析器中执行以下语句即可:
EXEC sp_dboption 'dbname', 'single user', 'TRUE'
上面语句我执行发现没开启啥存储过程,然后就搜砸开起存储过程。搜到了另一个高版本开启方法:
alter database dbname set SINGLE_USER with ROLLBACK IMMEDIATE
3、进入查询分析器执行如下语句:

1
2
3
use  dbname
dbcc checkdb('dbname',repair_allow_data_loss)-------修复数据库
dbcc checkdb ('dbname',REPAIR_REBUILD)----------------修复数据库索引

4、再执行:dbcc checkdb,检测数据库,出现结果为:
CHECKDB 发现了0个分配错误和 0个一致性错误(在数据库 ‘dbname’ 中)。
数据库已经修复完毕。
5、取消单用户模式,即直接在查询分析器中执行以下语句即可:
EXEC sp_dboption 'dbname', 'single user','FALSE'
对应的: alter database dbname set MULTI_USER with ROLLBACK IMMEDIATE

最终顺利搞定,真是伤脑筋。