上一会演示了如果在Docker环境下安装SQL Server,这次我们来演示下如何还原一个数据库备份文件到数据库实例上。
使用winscp上传bak文件到linux服务器
上一回我们启动docker容器的时候使用了-v参数挂账了本地目录/hd2/sqlserver2019_data到容器内目录/var/opt/mssql,所以我们只需要把文件testdb.bak上传到/hd2/sqlserver2019_data目录,docker容器即可访问。
![4342090a86a5461f3777dbf2bec66c12.png](https://i-blog.csdnimg.cn/blog_migrate/9b10ffd73a8da73d05d685384fbc9142.png)
我使用了下Sql Server Management Studio的还原功能试了下,没有成功,不知是不是SSMS版本的问题。既然SSMS不能还原,那就使用命令行来试试吧。
使用docker exec命令在容器内执行命令
因为SQL Server安装在Docker容器内,所以执行命令行都需要进入到容器内。
sudo docker exec -it sqlserver2019 /bin/bash
![acaa28fc1756974203f4b8ebee2f3421.png](https://i-blog.csdnimg.cn/blog_migrate/94e0b027d3f23af22e7687c2c12359ea.png)
接下来的命令全部在sqlserver2019容器内执行。
使用RESTORE FILELISTONLY命令列出备份数据文件的逻辑名
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'dev@123,' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/testdb.bak"' | tr -s ' ' | cut -d ' ' -f 1-2
![80a03bcdb45a407c66317a7a316cc995.png](https://i-blog.csdnimg.cn/blog_migrate/d693f890c373ce58159d043fe7a5c89f.png)
使用该命令可以把数据库的数据文件,日志文件名称显示出来。在接下来的恢复操作中有用。
使用RESTORE DATABASE命令还原数据库
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'dev@123,' -Q 'RESTORE DATABASE testdb FROM DISK = "/var/opt/mssql/testdb.bak" WITH MOVE "testdb" TO "/var/opt/mssql/data/testdb.mdf" , MOVE "testdb_log" TO "/var/opt/mssql/data/testdb.ldf"'
![ecaa2a88ec3b47ac04550ea86d77f278.png](https://i-blog.csdnimg.cn/blog_migrate/dcfbdac4aef518a5aff11ccfdd045e4a.jpeg)
![7993608fec070093804eb2ea1c7a505d.png](https://i-blog.csdnimg.cn/blog_migrate/99a0d0e47a8413c342be669058a9fe46.png)
看到RESTORE DATABASE successfully的时候表示数据库还原成功了。让我们使用SSMS看看数据库是否真的还原成功了。
![ecff335e775c631111708855fb15ea64.png](https://i-blog.csdnimg.cn/blog_migrate/a8c8ba63b8594561bf75e55acea8e022.jpeg)
可以看到数据库已经还原上去,里面的表,数据都可以正常操作。至此,数据库文件还原成功。
关注公众号一起玩转技术
![a7746e4aadf717cd8dcf5ad58808a685.gif](https://i-blog.csdnimg.cn/blog_migrate/df32748344e58c2f552278551018f502.gif)