sql >> データベース >  >> RDS >> Sqlserver

非推奨の機能がSQLServerインスタンスでまだ使用されているかどうかを確認する2つの方法

    ソフトウェアの世界で一部の機能がすぐに廃止される可能性があるのは驚くべきことです。

    この記事では、SQLServerインスタンスで非推奨の機能が使用されているかどうかを確認するための2つの方法を紹介します。

    方法1– sys.dm_os_performance_counters

    おそらく、それを行う最も簡単な方法は、sys.dm_os_performance_countersを使用することです。 システム動的管理ビュー。このビューで実行できる多くのことの中には、廃止された機能のリストと、SQLServerの起動以降に使用された回数を取得することがあります。

    これは、私の記事「SQLServerインスタンスでまだ使用されている廃止された機能を見つける最も簡単な方法」から抜粋した例です。

    SELECT
      RTRIM(instance_name) 'Feature', 
      cntr_value 'Usage Count'
    FROM sys.dm_os_performance_counters   
    WHERE object_name = 'SQLServer:Deprecated Features'
    AND cntr_value > 0;
    

    結果:

    +-----------------------------------+---------------+
    | Feature                           | Usage Count   |
    |-----------------------------------+---------------|
    | String literals as column aliases | 1             |
    | TIMESTAMP                         | 1             |
    | numbered_procedures               | 1             |
    | sysdatabases                      | 3             |
    | sp_db_vardecimal_storage_format   | 1             |
    | XP_API                            | 2             |
    +-----------------------------------+---------------+
    

    この例では、object_nameが含まれる行のみを返します。 列の値はSQLServer:Deprecated Features 、およびcntr_value 列の値がゼロより大きい。

    cntr_valueを削除できます このクエリの列を使用して、使用されていない機能を含む、廃止されたすべての機能を返します。

    方法2–拡張イベントを使用する

    これを行う別の方法は、拡張イベントを使用することです。これはより包括的な方法であり、非推奨の機能の使用状況のすべてのインスタンスを含むログファイルを作成するために使用できます。また、非推奨の機能を含むSQLステートメント、実行者、実行されたデータベースなども含まれます。 。以下は例です。

    イベントを作成します:

    CREATE EVENT SESSION [Deprecation Events] ON SERVER 
    ADD EVENT sqlserver.deprecation_announcement(
        ACTION(
            sqlserver.database_name,
            sqlserver.sql_text,
            sqlserver.username
            )
    ),
    ADD EVENT sqlserver.deprecation_final_support(
        ACTION(
            sqlserver.database_name,
            sqlserver.sql_text,
            sqlserver.username
        )
    )
    ADD TARGET package0.event_file(
        SET filename=N'/var/opt/mssql/tmp/DeprecationEvents.xel'
        )
    WITH (
        TRACK_CAUSALITY = ON
        );
    

    イベントを開始します:

    ALTER EVENT SESSION [Deprecation Events] ON SERVER STATE = START;
    

    非推奨のコードを実行します:

    SELECT * FROM sys.sql_dependencies;
    

    ログを読む:

    SELECT
        EventXml.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
        EventXml.value('(action[@name="username"]/value)[1]', 'nvarchar(256)') AS username,
        EventXml.value('(action[@name="database_name"]/value)[1]', 'nvarchar(128)') AS database_name,
        EventXml.value('(action[@name="sql_text"]/value)[1]', 'varchar(4000)') AS sql_text,
        EventXml.value('(@name)[1]', 'varchar(50)') AS event_name,
        EventXml.value('(data[@name="feature"]/value)[1]', 'varchar(255)') AS feature,
        EventXml.value('(data[@name="message"]/value)[1]', 'varchar(max)') AS message
    FROM (SELECT CAST(event_data AS XML) AS XmlEventData
        FROM sys.fn_xe_file_target_read_file (
            '/var/opt/mssql/tmp/DeprecationEvents*.xel', 
            null, 
            null, 
            null
        )) AS EventTable
    CROSS APPLY EventTable.XmlEventData.nodes('event') AS q(EventXml);
    

    結果(垂直出力を使用):

    timestamp     | 2019-10-31 04:03:06.5280000
    username      | sa
    database_name | Test
    sql_text      | SELECT * FROM sys.sql_dependencies;
    event_name    | deprecation_announcement
    feature       | sql_dependencies
    message       | sql_dependencies will be removed in a future version of SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use it.
    

    この方法の詳細については、「拡張イベントを使用して、SQLServerインスタンスで使用されている非推奨の機能をログに記録する」を参照してください。その記事には同じ例が含まれていますが、もう少し詳しく説明しています。


    1. java.sql.SQLException:ORA-03115:サポートされていないネットワークデータ型または表現

    2. 10個の例を含むPL/SQLのOracleCREATETABLEコマンド

    3. PostgreSQL:テーブル作成時間

    4. インメモリOLTPのDMLステートメントのテスト