【背景】

  楼主去甲方那里拷了sql server一个老版本的数据,拿回来做新功能的开发。备份出来的.bak文件大概几个Gb,回来在自己电脑上安装了SQL Server 2016一整套,通过Microsoft SQL Server Management Studio工具也恢复进去了,并且用JDBC也连接没问题。但是安装在Win10上的一整套实在太多了,感觉还是用docker容器的比较清爽。

【步骤】

(1)拉取docker hub的镜像,命令

  docker pull mcr.microsoft.com/mssql/server:2017-latest

(2)启动容器。

  如果直接点镜像后的RUN启动,会秒停,你可以进到容器去看报错日志。这里直接放我启动成功的方式,就是在Win10 CMD用命令启动容器,

  docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=密码" -p 1433:1433 --name sqlserver2017 -d mcr.microsoft.com/mssql/server:2017-latest

  需要注意的是,docker hub官方给的命令,这个-e后面的参数都是单引号,但是在win docker下不识别,要改成双引号。另外sql server对初始密码强度有要求,字母数字都要有,如果设置密码过于简单,一样启动不了。

(3)使用Navicat连接测试,能够连接上

  

 

   但是连接上后啥也看不到,我们来尝试创建一个数据库。

   点击右键“新建数据库”,弹出的对话框,一个个填写。

  

 

  

 

 

   但保存时,报错了A file activation error occurred. The physical file name 'zhangsan.ndf' may be incorrect. Diagnose and correct additional errors and retry the operation. (5105)

  

 

   百度了一下报错,发现不怎么对口,这时点击SQL预览去看,发现Navicat给我们生成的SQL创建数据库语句有问题,难怪创建不了。

  

  

  于是可以用navicat提供的命令行去创建,还是鼠标右键点击连接,选择“新建查询”,把刚才生成的SQL语句拷贝进去,但要做一点修改,将单引号字符串前面多余的N全部去掉:

  

   然后就可以执行成功了

  

 

   关闭连接再打开,就可以看到自己刚才创建的数据库了:

  

   至此,我们已经成功启动了一个sql server 2017容器,然后通过navicat连接创建了一个数据库。

 

(4)通过Microsoft SQL Server Management Studio连接,恢复.bak文件。

  我看网上用navicat也能恢复,但我试了试,貌似遇到点问题,反正在我卸载Win10上的SQL Server 2016之前,还可以利用一下SSMS这个工具。

  需要注意的是,服务器名称填写,ip地址和port之间的分隔符是英文逗号。(使用冒号是连接不上的!)

  

 

   

   右键点击这个数据库,依次选择“任务”-“还原”-“数据库...",后面的操作按窗口提示就行了。。。

  

  

 

 posted on 2021-04-22 17:29  银色甲壳虫  阅读(536)  评论(0编辑  收藏  举报