Máy chủ SQL của tôi có được vá không?


23

Làm cách nào để biết liệu các phiên bản SQL Server của tôi có được vá không? Có chức năng riêng nào sẽ xác định xem có bản vá nào cho máy chủ của tôi không? Heck, tôi thậm chí có sẵn dữ liệu phiên bản cho tôi?

Câu trả lời:


26

Để trả lời theo thứ tự ngược lại

Tôi đang dùng phiên bản nào?

Có hai truy vấn khác nhau mà tôi sử dụng để xác định cấp độ Máy chủ SQL của mình.

Đầu tiên là phiên bản @@ . Điều tuyệt vời ở đây là nó cũng mang lại thông tin cấp độ hệ điều hành. Thách thức với nó là đó là một đống văn bản lớn và bạn phải phân tích điều đó để tìm các bit có liên quan.

ví dụ

SELECT @@version;

/*
Microsoft SQL Server 2014 - 12.0.4416.0 (X64) 
    Jun 11 2015 19:18:41 
    Copyright (c) Microsoft Corporation
    Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
*/

Sở thích của tôi là sử dụng ServerPropertiesvì tôi có thể xác định riêng các yếu tố.

SELECT 
    SERVERPROPERTY('productversion') AS ProductVersion
,   SERVERPROPERTY ('productlevel') AS ProductLevel
,   SERVERPROPERTY ('edition') AS Edition;

/*
ProductVersion  ProductLevel    Edition
12.0.4416.0     SP1             Developer Edition (64-bit)
*/

Có chức năng riêng để kiểm tra các bản vá?

Không có gì mà tôi biết. Nếu HĐH máy chủ có dịch vụ Windows Update đang chạy và ai đó đã chỉ định "Bao gồm các bản vá cho các sản phẩm MS khác" thì bạn có thể nhận được các bản vá được cài đặt cho SQL Server.

Nhưng, nếu bạn là một người chuyên nghiệp, có lẽ bạn không quan tâm đến việc chờ đợi một bản vá được liệt kê trong WSUS hoặc bạn muốn xác thực rằng bản vá đó hoạt động cho môi trường của bạn. Điều đó sẽ liên quan đến việc đọc các bài báo và bài kiểm tra cơ sở kiến ​​thức (KB).

Làm cách nào để biết các phiên bản SQL Server của tôi có được vá không?

Thiếu bất cứ thứ gì được tích hợp vào sản phẩm, tôi đã tham khảo sqlserverbuilds.blogspot.com . Nhưng có rất nhiều trang web khác đang cố gắng cung cấp cùng một danh sách các bản vá hợp nhất, chẳng hạn như:

Tôi đã lấy dữ liệu từ blog đó và chuyển đổi nó thành View, dbo.PatchLevel. Quan điểm đó phơi bày tất cả các bản vá. Chế độ xem này bị cắt ngắn để chỉ bao gồm năm 2016 và 2014, nếu không, tôi sẽ giới hạn ký tự cho câu trả lời.

CREATE VIEW dbo.PatchLevel
AS
-- data from http://sqlserverbuilds.blogspot.com
WITH SRC(Build,[File version],[KB / Description],[Release Date], SimpleVersion) AS
(
    SELECT
        CASE LEN(D.Build) - LEN(REPLACE(D.Build, '.', ''))
            WHEN 3 THEN REPLACE(D.Build, '.00.', '.0.')
            WHEN 2 THEN REPLACE(D.Build, '.00.', '.0.') + '.0'
        END AS Build
    ,   D.FileVersion
    ,   D.KB
    ,   CAST(REPLACE(D.ReleaseDate, ' *new', '') AS date) AS ReleaseDate
    ,   CAST(LEFT(D.Build, 4) AS decimal(4,2))
    FROM
    (
        VALUES
            ('13.00.500.53','2016.130.500.53','Microsoft SQL Server 2016 Community Technology Preview 2.3 (CTP2.3)','August 28, 2015 *new')
        ,   ('13.00.407.1','2016.130.407.1','Microsoft SQL Server 2016 Community Technology Preview 2.2 (CTP2.2)','July 23, 2015')
        ,   ('13.00.400.91','2016.130.400.91','Microsoft SQL Server 2016 Community Technology Preview 2.2 (CTP2.2) [withdrawn]','July 22, 2015')
        ,   ('13.00.300.44','2016.130.300.444','Microsoft SQL Server 2016 Community Technology Preview 2.1 (CTP2.1)','June 24, 2015')
        ,   ('13.00.200.172','2016.130.200.172','Microsoft SQL Server 2016 Community Technology Preview 2 (CTP2)','May 27, 2015')
        ,   ('12.00.4427','2014.120.4427.24','3094221 Cumulative update package 3 (CU3) for SQL Server 2014 Service Pack 1','October 21, 2015 *new')
        ,   ('12.00.4422','2014.120.4422.0','3075950 Cumulative update package 2 (CU2) for SQL Server 2014 Service Pack 1','August 17, 2015')
        ,   ('12.00.4416','2014.120.4416.0','3067839 Cumulative update package 1 (CU1) for SQL Server 2014 Service Pack 1','June 22, 2015')
        ,   ('12.00.4213','2014.120.4213.0','MS15-058: Description of the nonsecurity update for SQL Server 2014 Service Pack 1 GDR: July 14, 2015','July 14, 2015')
        ,   ('12.00.4100','2014.120.4100.1','SQL Server 2014 Service Pack 1 (SP1)','May 14, 2015')
        ,   ('12.00.4050','2014.120.4050.0','SQL Server 2014 Service Pack 1 (SP1) [withdrawn]','April 15, 2015')
        ,   ('12.00.2556','2014.120.2556.4','3094220 Cumulative update package 10 (CU10) for SQL Server 2014','October 20, 2015 *new')
        ,   ('12.00.2553','2014.120.2553.0','3075949 Cumulative update package 9 (CU9) for SQL Server 2014','August 17, 2015')
        ,   ('12.00.2548','2014.120.2548.0','MS15-058: Description of the security update for SQL Server 2014 QFE: July 14, 2015','July 14, 2015')
        ,   ('12.00.2546','2014.120.2546.0','3067836 Cumulative update package 8 (CU8) for SQL Server 2014','June 22, 2015')
        ,   ('12.00.2506','2014.120.2506.0','3063054 Update enables Premium Storage support for Data files on Azure Storage and resolves backup failures','May 19, 2015')
        ,   ('12.00.2505','2014.120.2505.0','3052167 FIX: Error 1205 when you execute parallel query that contains outer join operators in SQL Server 2014','May 19, 2015')
        ,   ('12.00.2504','2014.120.2504.0','2999809 FIX: Poor performance when a query contains table joins in SQL Server 2014','May 5, 2015')
        ,   ('12.00.2504','2014.120.2504.0','3058512 FIX: Unpivot Transformation task changes null to zero or empty strings in SSIS 2014','May 5, 2015')
        ,   ('12.00.2495','2014.120.2495.0','3046038 Cumulative update package 7 (CU7) for SQL Server 2014','April 23, 2015')
        ,   ('12.00.2488','2014.120.2488.0','3048751 FIX: Deadlock cannot be resolved automatically when you run a SELECT query that can result in a parallel batch-mode scan','April 1, 2015')
        ,   ('12.00.2485','2014.120.2485.0','3043788 An on-demand hotfix update package is available for SQL Server 2014','March 16, 2015')
        ,   ('12.00.2480','2014.120.2480.0','3031047 Cumulative update package 6 (CU6) for SQL Server 2014','February 16, 2015')
        ,   ('12.00.2474','2014.120.2474.0','3034679 FIX: AlwaysOn availability groups are reported as NOT SYNCHRONIZING','May 15, 2015')
        ,   ('12.00.2472','2014.120.2472.0','3032087 FIX: Cannot show requested dialog after you connect to the latest SQL Database Update V12 (preview) with SQL Server 2014','January 28, 2015')
        ,   ('12.00.2464','2014.120.2464.0','3024815 Large query compilation waits on RESOURCE_SEMAPHORE_QUERY_COMPILE in SQL Server 2014','January 5, 2015')
        ,   ('12.00.2456','2014.120.2456.0','3011055 Cumulative update package 5 (CU5) for SQL Server 2014','December 18, 2014')
        ,   ('12.00.2436','2014.120.2436.0','3014867 FIX: "Remote hardening failure" exception cannot be caught and a potential data loss when you use SQL Server 2014','November 27, 2014')
        ,   ('12.00.2430','2014.120.2430.0','2999197 Cumulative update package 4 (CU4) for SQL Server 2014','October 21, 2014')
        ,   ('12.00.2423','2014.120.2423.0','3007050 FIX: RTDATA_LIST waits when you run natively stored procedures that encounter expected failures in SQL Server 2014','October 22, 2014')
        ,   ('12.00.2405','2014.120.2405.0','2999809 FIX: Poor performance when a query contains table joins in SQL Server 2014','September 25, 2014')
        ,   ('12.00.2402','2014.120.2402.0','2984923 Cumulative update package 3 (CU3) for SQL Server 2014','August 18, 2014')
        ,   ('12.00.2381','2014.120.2381.0','2977316 MS14-044: Description of the security update for SQL Server 2014 (QFE)','August 12, 2014')
        ,   ('12.00.2370','2014.120.2370.0','2967546 Cumulative update package 2 (CU2) for SQL Server 2014','June 27, 2014')
        ,   ('12.00.2342','2014.120.2342.0','2931693 Cumulative update package 1 (CU1) for SQL Server 2014','April 21, 2014')
        ,   ('12.00.2269','2014.120.2269.0','3045324 MS15-058: Description of the security update for SQL Server 2014 GDR: July 14, 2015','July 14, 2015')
        ,   ('12.00.2254','2014.120.2254.0','2977315 MS14-044: Description of the security update for SQL Server 2014 (GDR)','August 12, 2014')
        ,   ('12.00.2000','2014.120.2000.8','SQL Server 2014 RTM','April 1, 2014')
        ,   ('12.00.1524','2014.120.1524.0','Microsoft SQL Server 2014 Community Technology Preview 2 (CTP2)','October 15, 2013')
    ) D(Build,FileVersion,KB,ReleaseDate)
)
SELECT
    SRC.Build
,   SRC.[File version]
,   SRC.[KB / Description]
,   SRC.[Release Date]
,   SRC.SimpleVersion
FROM
    SRC;
GO

Tôi có chế độ xem thứ hai, có chế độ xem lồng nhau - xấu tôi, dbo.MyPatchLevel sử dụng dữ liệu phiên bản từ trên để so sánh với phiên bản hiện tại của tôi và tạo đầu ra để cho tôi biết mức độ tệ của nó.

CREATE VIEW dbo.MyPatchLevel
AS
WITH MostRecentBuild AS
(
    SELECT
        SRC.Build
    ,   SRC.[Release Date]
    ,   SRC.SimpleVersion
    ,   SRC.[KB / Description]
    FROM
        dbo.PatchLevel AS SRC
    WHERE
        SRC.[Release Date] =
    (
        SELECT
            MAX(SRCI.[Release Date])
        FROM
            dbo.PatchLevel AS SRCI
        WHERE
            SRCI.SimpleVersion = SRC.SimpleVersion
    )
    AND
        SRC.Build =
    (
        SELECT
            MAX(SRCI.Build)
        FROM
            dbo.PatchLevel AS SRCI
        WHERE
            SRCI.SimpleVersion = SRC.SimpleVersion
            AND SRCI.[Release Date] = SRC.[Release Date]
    )

)
, MyVersion AS
(
    SELECT
        SRC.Build
    ,   SRC.[File version]
    ,   MRB.[KB / Description]
    ,   SRC.[Release Date]
    ,   D.ProductVersion
    ,   D.ProductLevel
    ,   D.Edition
    ,   D.Version
    ,   SRC.SimpleVersion
    ,   MRB.Build AS MostRecentBuild
    ,   MRB.[Release Date] AS MostRecentReleaseDate
    FROM
        dbo.PatchLevel AS SRC
        INNER JOIN
        (
            SELECT 
                SERVERPROPERTY('productversion') AS ProductVersion
            ,   SERVERPROPERTY ('productlevel') AS ProductLevel
            ,   SERVERPROPERTY ('edition') AS Edition
            ,   @@VERSION AS Version
        )D 
        ON D.ProductVersion  = SRC.Build
        INNER JOIN
            MostRecentBuild AS MRB
            ON MRB.SimpleVersion = SRC.SimpleVersion
)
SELECT
    MV.ProductVersion AS CurrentVersion
,   MV.MostRecentBuild
,   MV.[Release Date]
,   MV.MostRecentReleaseDate
,   DATEDIFF(DAY, MV.[Release Date], MV.MostRecentReleaseDate) AS DaysSincePatchAvailable
,   MV.[File version]
,   MV.ProductLevel
,   MV.[KB / Description] AS [Most Recent KB / Description]
,   MV.Edition
,   MV.Version
,   MV.SimpleVersion
,   CAST(SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS sysname) AS Server
,   CAST(SERVERPROPERTY('InstanceName') AS sysname) AS Instance
,   CAST(SERVERPROPERTY('ServerName') AS sysname)  AS ServerName
FROM
    MyVersion AS MV;
GO

Tôi sẽ sử dụng một truy vấn như

SELECT
    MPL.CurrentVersion
,   MPL.MostRecentBuild
,   MPL.[Release Date]
,   MPL.MostRecentReleaseDate
,   MPL.DaysSincePatchAvailable
,   MPL.[Most Recent KB / Description]
FROM
    dbo.MyPatchLevel AS MPL;

Các kết quả

CurrentVersion  MostRecentBuild  Release Date  MostRecentReleaseDate  DaysSincePatchAvailable  Most Recent KB / Description
12.0.4416.0     12.0.4422.0      2015-06-22    2015-08-17             56                       3075950 Cumulative update package 2 (CU2) for SQL Server 2014 Service Pack 1

Được trang bị các kết quả truy vấn này, tôi biết liệu tôi có được cập nhật hay không, đã bao lâu kể từ khi tôi vá và KB sẽ đọc gì về trạng thái bản vá hiện tại.

Các tập lệnh cũng được lưu trữ trên github

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.