上一回演示了如果在 Docker 环境下安装 SQL Server, 这次我们来演示下如何还原一个数据库备份文件到数据库实例上.
使用 winscp 上传 bak 文件到 Linux 服务器
上一回我们启动 docker 容器的时候使用了 - v 参数挂账了本地目录 / hd2/sqlserver2019_data 到容器内目录 / var/opt/mssql, 所以我们只需要把文件 testdb.bak 上传到 / hd2/sqlserver2019_data 目录, docker 容器即可访问.
我使用了下 Sql Server Management Studio 的还原功能试了下, 没有成功, 不知是不是 SSMS 版本的问题. 既然 SSMS 不能还原, 那就使用命令行来试试吧.
使用 docker exec 命令在容器内执行命令
因为 SQL Server 安装在 Docker 容器内, 所以执行命令行都需要进入到容器内.
sudo docker exec -it sqlserver2019 /bin/bash
接下来的命令全部在 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
使用该命令可以把数据库的数据文件, 日志文件名称显示出来. 在接下来的恢复操作中有用.
使用 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"'
看到 RESTORE DATABASE successfully 的时候表示数据库还原成功了. 让我们使用 SSMS 看看数据库是否真的还原成功了.
可以看到数据库已经还原上去, 里面的表, 数据都可以正常操作. 至此, 数据库文件还原成功.
来源: http://www.linuxidc.com/Linux/2019-08/159788.htm