Docker 运行 Sql Server 2017 还原数据库 执行sql文件

Docker 运行 Sql Server 2017

后台运行 Sql Server:

# -d 后台运行
# --restart always 开机自启动
# -v sqlserver-data:/var/opt/mssql/data/ 持久化到 volume 中
# -e "MSSQL_COLLATION=Chinese_PRC_CI_AS"  中文字符集
# -e "ACCEPT_EULA=Y" 必须同意条款,否则无法安装
# -e "SA_PASSWORD=your_password" 密码,sa的密码
# -p 1433:1433 端口映射,左边是服务器的端口,右边是容器的端口
# 
docker run -d --restart always --name sqlserver -v sqlserver-data:/var/opt/mssql/data/  -e "MSSQL_COLLATION=Chinese_PRC_CI_AS"  -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=your_password" -p 1433:1433 mcr.microsoft.com/mssql/server:2017-latest

查看日志:

# -f:日志跟随
docker logs sqlserver -f

从文件还原数据库

还原(替换)test数据库,生产环境谨慎使用:

# 0. 先复制数据到容器内
docker cp test.bak sqlserver:/

# 1. 先进入容器
docker exec -it sqlserver bash

# 2. 容器内执行。
# /dir/test.bak 目录是指容器的目录
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -Q "RESTORE DATABASE test FROM DISK='/test.bak' WITH REPLACE"

# WITH REPLACE 表示替换掉原来的数据库

执行 sql

容器内执行

/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'password' -d your_database -i your_sql.sql

常见错误

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.

这是因为系统没人的collation跟某一列的collation不一致导致的,要么修改列的collation,要么修改表的collation,要么修改整个数据库的collation,
或者把数据库的collation改成一样的。

常见的查看 collation sql:

-- 查看一个表的所有列的collation
SELECT
  col.name, col.collation_name
FROM
  sys.columns col
WHERE
  object_id = OBJECT_ID('test')

--查看数据库的collation
SELECT name, collation_name
FROM sys.databases
WHERE name = 'test';

-- 查看数据库默认的collation
SELECT CONVERT (varchar, SERVERPROPERTY('collation'));
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值