SQL Server on Linux CU就地升降级实践

一、  背景

首先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://www.mssqltips.com/sqlservertip/4642/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

https://blog.sqlauthority.com/2015/04/10/sql-server-login-failed-for-user-reason-server-is-in-script-upgrade-mode/

猜你喜欢

转载自blog.csdn.net/Hehuyi_In/article/details/89670301