一、 背景
首先sqlserver的升级分为几种:
- 一是version(从SQL Server 2012(EE)SP4升级到SQL Server 2016(EE)SP2);
- 二是Edition (从SQL Server 2014标准版升级到SQL Server 2014企业版);
- 三是两种一起升(从SQL Server 2012(SE)升级到SQL Server 2017(EE))
- 此外,每当您将累积更新(CU)作为常规维护的一部分应用于SQL Server时,您实际上正在进行小型升级。
本文指的是累积更新(CU)升降级
1. 测试环境
操作系统:Oracle Linux Server 7.2
Sqlserver版本:Microsoft SQL Server 2017 (RTM-CU10) (KB4342123) - 14.0.3037.1 (X64)
2. 主要测试场景
1) 升级至最新版本
SQL Server 2017 (CU10) 14.0.3037.1升级至SQL Server 2017 (CU13) 14.0.3048.4 (目前最新的CU版本)
2) 降级至指定版本
SQL Server 2017 (CU13) 14.0.3048.4 降级至SQL Server 2017 (CU11) 14.0.3038.14-2
3) 升级至指定版本
SQL Server 2017 (CU11) 14.0.3038.14-2升级至SQL Server 2017 (CU12) 14.0.3045.24-1
4) 使用rpm进行升/降级
SQL Server 2017 (CU12) 14.0.3045.24-1降级回SQL Server 2017 (CU10) 14.0.3037.1
3. 大致步骤
1) 配置yum repositories
Repository |
Version |
Command |
Preview (2019) |
2019 |
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-preview.repo |
CU |
2017 |
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo |
GDR |
2017 |
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017-gdr.repo |
2) 备份系统及用户数据库或对服务器做快照
3) 升/降级至指定版本
4) 验证版本与业务数据
4. 注意事项
1) 如果使用yum更新,需要服务器能联网
2) 升降级不影响用户和系统数据库,但最好还是进行备份
3) 官方文档提供的方法只会更新mssql-server包,不更新其余包,注意版本依赖关系
4) 使用yum更新时,更新期间服务不可用,更新完后会自动启动服务
5) 使用rpm更新时,更新期间服务不可用,更新完后需要手动启动服务
6) 更新后二进制命令还是放在/opt/mssql/,可以将该目录加到PATH
7) 之前配置的参数不会改变,可以通过 /var/opt/mssql/mssql.conf查看
8) 降级只支持降到相同主版本
5. 创建测试库和测试表
1> create database test0221;
2> go
1>
1> select name from sys.databases
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
test0221
(5 rows affected)
1> create table aaa(a int);
2> go
1> insert into aaa values(1);
2> insert into aaa values(2);
3> insert into aaa values(3);
4> go
(1 rows affected)
(1 rows affected)
(1 rows affected)
1> select * from aaa;
2> go
a
-----------
1
2
3
(3 rows affected)
以下是测试过程的记录
二、 升级至最新版本
SQL Server 2017 (CU10) 14.0.3037.1升级至SQL Server 2017 (CU13) 14.0.3048.4 (目前最新的CU版本)
1. 查看当前数据库版本
1> select @@version
2> go
------------------------------------------------------------------------------------------
Microsoft SQL Server 2017 (RTM-CU10) (KB4342123) - 14.0.3037.1 (X64)
Jul 27 2018 09:40:27
Copyright (C) 2017 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Linux (Oracle Linux Server 7.2)
(1 rows affected)
2. 配置yum repositories
curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
3. 备份业务及系统数据库
4. 检查可用更新
[root@euphe yum.repos.d]# yum check-update mssql-server
Loaded plugins: langpacks, ulninfo
mssql-server.x86_64 14.0.3048.4-1 packages-microsoft-com-mssql-server-2017
查看详细信息
[root@euphe yum.repos.d]# yum info mssql-server
Loaded plugins: langpacks, ulninfo
Installed Packages
Name : mssql-server
Arch : x86_64
Version : 14.0.3037.1
Release : 2
Size : 893 M
Repo : installed
Summary : Microsoft SQL Server Relational Database Engine
License : Commercial
Description : The mssql-server package contains the Microsoft SQL Server Relational
: Database Engine.
Available Packages
Name : mssql-server
Arch : x86_64
Version : 14.0.3048.4
Release : 1
Size : 169 M
Repo : packages-microsoft-com-mssql-server-2017
Summary : Microsoft SQL Server Relational Database Engine
License : Commercial
Description : The mssql-server package contains the Microsoft SQL Server Relational
: Database Engine.
5. 更新mssql-server(这一步会包含下载时间)
[root@euphe yum.repos.d]# yum update mssql-server
Loaded plugins: langpacks, ulninfo
Resolving Dependencies
--> Running transaction check
---> Package mssql-server.x86_64 0:14.0.3037.1-2 will be updated
---> Package mssql-server.x86_64 0:14.0.3048.4-1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================
Package Arch Version Repository Size
===================================================================================
Updating:
mssql-server x86_64 14.0.3048.4-1 packages-microsoft-com-mssql-server-2017 169 M
Transaction Summary
===================================================================================
Upgrade 1 Package
Total download size: 169 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for packages-microsoft-com-mssql-server-2017
warning: /var/cache/yum/x86_64/7Server/packages-microsoft-com-mssql-server-2017/packages/mssql-server-14.0.3048.4-1.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID be1229cf: NOKEY
Public key for mssql-server-14.0.3048.4-1.x86_64.rpm is not installed
mssql-server-14.0.3048.4-1.x86_64.rpm | 169 MB 00:05:20
Retrieving key from https://packages.microsoft.com/keys/microsoft.asc
Importing GPG key 0xBE1229CF:
Userid : "Microsoft (Release signing) <gpgsecurity@microsoft.com>"
Fingerprint: bc52 8686 b50d 79e3 39d3 721c eb3e 94ad be12 29cf
From : https://packages.microsoft.com/keys/microsoft.asc
Is this ok [y/N]: y
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Updating : mssql-server-14.0.3048.4-1.x86_64 1/2
Cleanup : mssql-server-14.0.3037.1-2.x86_64 2/2
Verifying : mssql-server-14.0.3048.4-1.x86_64 1/2
Verifying : mssql-server-14.0.3037.1-2.x86_64 2/2
Updated:
mssql-server.x86_64 0:14.0.3048.4-1
Complete!
6. 查看新版本
2> select @@version
3> go
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64)
Nov 30 2018 12:57:58
Copyright (C) 2017 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Linux (Oracle Linux Server 7.2)
(1 rows affected)
7. 验证业务数据
1> select name from sys.databases
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
test0221
1> select * from aaa;
2> go
a
-----------
1
2
3
(3 rows affected)
三、 降级至指定版本
要将SQL Server回滚或降级到指定的版本,请参考以下步骤:
1. 确定要降级到的SQL Server程序包的版本号。
有关软件包编号的列表,请参阅发行说明。本测试中从SQL Server 2017 (CU13) 14.0.3048.4 降级至SQL Server 2017 (CU11) 14.0.3038.14-2
2. 降级前先备份数据库
3. 降级到指定版本的SQL Server。
[root@euphe lib]# yum downgrade mssql-server-14.0.3038.14-2.x86_64
Loaded plugins: langpacks, ulninfo
Resolving Dependencies
--> Running transaction check
---> Package mssql-server.x86_64 0:14.0.3038.14-2 will be a downgrade
---> Package mssql-server.x86_64 0:14.0.3048.4-1 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================
Package Arch Version Repository Size
===================================================================================
Downgrading:
mssql-server x86_64 14.0.3038.14-2 packages-microsoft-com-mssql-server-2017 169 M
Transaction Summary
===================================================================================
Downgrade 1 Package
Total download size: 169 M
Is this ok [y/d/N]: y
Downloading packages:
mssql-server-14.0.3038.14-2.x86_64.rpm | 169 MB 00:07:13
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : mssql-server-14.0.3038.14-2.x86_64 1/2
Cleanup : mssql-server-14.0.3048.4-1.x86_64 2/2
Verifying : mssql-server-14.0.3038.14-2.x86_64 1/2
Verifying : mssql-server-14.0.3048.4-1.x86_64 2/2
Removed:
mssql-server.x86_64 0:14.0.3048.4-1
Installed:
mssql-server.x86_64 0:14.0.3038.14-2
Complete!
4. 验证版本
1> select @@version
2> GO
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2017 (RTM-CU11) (KB4462262) - 14.0.3038.14 (X64)
Sep 14 2018 13:53:44
Copyright (C) 2017 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Linux (Oracle Linux Server 7.2)
(1 rows affected)
5. 验证业务数据
1> select * from aaa;
2> GO
a
-----------
1
2
3
(3 rows affected)
1>
1> select name from sys.databases
2> GO
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
test0221
(5 rows affected)
四、 升级至指定版本
要将SQL Server升级到指定的版本,请参考以下步骤:
1. 确定要升级到的SQL Server程序包的版本号。
有关软件包编号的列表,请参阅发行说明。本测试中从SQL Server 2017 (CU11) 14.0.3038.14-2升级至SQL Server 2017 (CU12) 14.0.3045.24-1
2. 升级前先备份数据库
3. 升级到指定版本的SQL Server。
[root@euphe lib]# yum update mssql-server-14.0.3045.24-1.x86_64
Loaded plugins: langpacks, ulninfo
Resolving Dependencies
--> Running transaction check
---> Package mssql-server.x86_64 0:14.0.3038.14-2 will be updated
---> Package mssql-server.x86_64 0:14.0.3045.24-1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================
Package Arch Version Repository Size
===================================================================================
Updating:
mssql-server x86_64 14.0.3045.24-1 packages-microsoft-com-mssql-server-2017 169 M
Transaction Summary
===================================================================================
Upgrade 1 Package
Total download size: 169 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for packages-microsoft-com-mssql-server-2017
mssql-server-14.0.3045.24-1.x86_64.rpm | 169 MB 00:05:10
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : mssql-server-14.0.3045.24-1.x86_64 1/2
Cleanup : mssql-server-14.0.3038.14-2.x86_64 2/2
Verifying : mssql-server-14.0.3045.24-1.x86_64 1/2
Verifying : mssql-server-14.0.3038.14-2.x86_64 2/2
Updated:
mssql-server.x86_64 0:14.0.3045.24-1
Complete!
4. 验证版本
1> select @@version
2> go
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2017 (RTM-CU12) (KB4464082) - 14.0.3045.24 (X64)
Oct 18 2018 23:11:05
Copyright (C) 2017 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Linux (Oracle Linux Server 7.2)
(1 rows affected)
5. 验证业务数据
1> select * from aaa;
2> GO
a
-----------
1
2
3
(3 rows affected)
1>
1> select name from sys.databases
2> GO
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
test0221
(5 rows affected)
五、 使用rpm进行升/降级
我们最后再测试下不用yum进行升降级,官方文档没找到相关资料,卸载现有的mssql-server软件,重新安装会有什么影响
1. 查看现有mssql-server包
[root@euphe lib]# rpm -qa|grep mssql
mssql-server-14.0.3045.24-1.x86_64
mssql-tools-17.2.0.1-1.x86_64
2. 停sqlserver服务
[root@euphe lib]# systemctl stop mssql-server.service
[root@euphe lib]#
[root@euphe lib]# systemctl status mssql-server.service
- ● mssql-server.service - Microsoft SQL Server Database Engine
Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Thu 2019-02-21 03:45:45 EST; 5s ago
Docs: https://docs.microsoft.com/en-us/sql/linux
Main PID: 10042 (code=exited, status=0/SUCCESS)
Feb 21 03:25:12 euphe sqlservr[10042]: 2019-02-21 03:25:12.37 spid3s Exec...b]
Feb 21 03:29:59 euphe sqlservr[10042]: 2019-02-21 03:29:59.42 spid52 Usin...5'
Feb 21 03:30:01 euphe sqlservr[10042]: 2019-02-21 03:30:01.46 spid52 Atte...d.
Feb 21 03:30:01 euphe sqlservr[10042]: 2019-02-21 03:30:01.50 spid52 Usin...d.
Feb 21 03:45:43 euphe systemd[1]: Stopping Microsoft SQL Server Database Engine...
Feb 21 03:45:43 euphe sqlservr[10042]: 2019-02-21 03:45:43.06 spid3s Alwa...d.
Feb 21 03:45:43 euphe sqlservr[10042]: 2019-02-21 03:45:43.07 spid3s SQL ...d.
Feb 21 03:45:43 euphe sqlservr[10042]: 2019-02-21 03:45:43.18 spid23s Serv...n.
Feb 21 03:45:43 euphe sqlservr[10042]: 2019-02-21 03:45:43.37 spid3s SQL ...d.
Feb 21 03:45:45 euphe systemd[1]: Stopped Microsoft SQL Server Database Engine.
Hint: Some lines were ellipsized, use -l to show in full.
3. 卸载软件
rpm -e mssql-server-14.0.3045.24-1.x86_64
4. 安装想要的版本
[root@euphe mssql]# rpm -ivh mssql-server-14.0.3037.1-2.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:mssql-server-14.0.3037.1-2 ################################# [100%]
此时不会像新装时提示需要 /opt/mssql/bin/mssql-conf setup
5. 启动服务
[root@euphe mssql]# systemctl start mssql-server.service
[root@euphe mssql]# systemctl status mssql-server.service
- ● mssql-server.service - Microsoft SQL Server Database Engine
Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2019-02-21 03:54:25 EST; 2s ago
Docs: https://docs.microsoft.com/en-us/sql/linux
Main PID: 11353 (sqlservr)
CGroup: /system.slice/mssql-server.service
├─11353 /opt/mssql/bin/sqlservr
└─11447 /opt/mssql/bin/sqlservr
Feb 21 03:54:27 euphe sqlservr[11353]: 2019-02-21 03:54:27.94 Server The ...1'
Feb 21 03:54:27 euphe sqlservr[11353]: 2019-02-21 03:54:27.94 Server Node...d.
Feb 21 03:54:27 euphe sqlservr[11353]: 2019-02-21 03:54:27.95 Server Usin...d.
Feb 21 03:54:27 euphe sqlservr[11353]: 2019-02-21 03:54:27.95 Server In-M...e.
Feb 21 03:54:27 euphe sqlservr[11353]: 2019-02-21 03:54:27.99 Server Data...d.
Feb 21 03:54:27 euphe sqlservr[11353]: ForceFlush is enabled for this instance.
Feb 21 03:54:27 euphe sqlservr[11353]: 2019-02-21 03:54:27.99 Server Quer...1,
Feb 21 03:54:28 euphe sqlservr[11353]: 2019-02-21 03:54:27.99 Server Soft...d.
Feb 21 03:54:28 euphe sqlservr[11353]: 2019-02-21 03:54:28.00 spid4s Star...'.
Feb 21 03:54:28 euphe sqlservr[11353]: ForceFlush feature is enabled for log d...y.
Hint: Some lines were ellipsized, use -l to show in full.
6. 连接验证
连接到数据库,发现报错了
[root@euphe bin]# sqlcmd -S localhost -U SA -P 1qaz@WSX
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'sa'. Reason: Server is in script upgrade mode. Only administrator can connect at this time..
[root@euphe bin]#
但是稍等一会又能进去了
1> select @@version
2> go
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2017 (RTM-CU10) (KB4342123) - 14.0.3037.1 (X64)
Jul 27 2018 09:40:27
Copyright (C) 2017 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Linux (Oracle Linux Server 7.2)
(1 rows affected)
1> select name from sys.databases
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
test0221
(5 rows affected)
1> select * from aaa;
2> go
a
-----------
1
2
3
(3 rows affected)
看起来跟yum升降级貌似没什么区别,不过没查到用这种方法的文档
-------------------
参考
Upgrading SQL Server vNext on Red Hat Linux to latest available update
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-2017#upgrade