SQL Server 2022 / SQL Database / Managed Instance では、データベースのファイルサイズを削減するためのコマンドである、DBCC SHRINKFILE に WAIT_AT_LOWPRIORITY というオプションが追加されました。
このオプションを使用した場合のデータファイルのサイズ縮小について動作を把握しておきたかったので、調べてみました。
SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿
SQL Server 2022 / SQL Database / Managed Instance では、データベースのファイルサイズを削減するためのコマンドである、DBCC SHRINKFILE に WAIT_AT_LOWPRIORITY というオプションが追加されました。
このオプションを使用した場合のデータファイルのサイズ縮小について動作を把握しておきたかったので、調べてみました。
SQL Server でコネクションタイムアウトを発生させる方法としては、
を実行することでコネクションタイムアウトを発生させるという方法があります。
これらの方法では初期の接続ができないためエラーとなりますが、運用環境でコネクションタイムアウトが発生するケースとしては接続プロセスの途中で、タイムアウトの設定秒数に達したため、コネクションタイムアウトが発生するということがあります。
このコネクションタイムアウトの状態を意図的に発生させるための方法を残しておきたいと思います。
Bob Ward の SQL Server 2022 Hidden Gems で解説されているのですが、SQL Server 2022 ならびに Azure SQL Database では、query_antipattern という拡張イベントが追加されています。
MS のブログでも紹介されており、最近、新しい記事も公開されました。
この拡張イベントについて、本ブログでも触れておきたいと思います。
※Azure SQL Managed Instance から SQL Server 2022 へのリストアだけでなく、異なる SQL Server インスタンス間のリストアでも該当します。
Azure SQL Managed Instance (MI) で取得したバックアップについては、SQL Server 2022 にリストアすることができます。
MI からリストア可能なバックアップについては、ユーザーが任意のタイミングで取得したバックアップとなるので「COPY_ONLY」オプションを使用して取得したバックアップの必要があります。
MI で COPY_ONLY バックアップを取得するには条件があり、次のいずれかの条件を満たしている必要があります。
「サービスマネージドキー」による TDE については、TDE のキーをユーザーが制御できないものとなるため、サービスマネージドキーを使用し TDE を実行している DB については、COPY_ONLY バックアップを取得することができません。
今回は「1.」で記載した TDE を無効にした状態のバックアップを SQL Server 2022 にリストアする際の注意点となります。
「2.」についても、SQL Server 2022 にリストアすることができるのですが、SQL Server 2022 では、Azure Key Vault を使用した SQL Server TDE 拡張キー管理を設定する の設定で、ユーザーマネージドキーの Key Vault へのアクセスをする必要があり、こちらはこちらで面倒ではあるのですが、それについては別の投稿で書こうと思います。
本投稿で対象としている TDE の無効化ですが、「TDE を有効にしている DB で、TDE を無効に変更」した場合が該当します。
「最初から TDE を無効の状態にしている DB」については、本投稿の事象は発生しません。
コマンドラインで SQL Server ベースの環境に接続するためのツールとしては従来の sqlcmd の他に、Go 言語を使用して作成されている go-sqlcmd があります。
go-sqlcmd は 従来の sqlcmd の同様のクエリを実行する機能 が含まれています。この機能のほかに、Use sqlcmd to create local SQL Server and Azure SQL Edge instances で解説されている SQL Server のコンテナーを作成する機能を使用することができます。
コンテナーの作成をするとユーザープロファイルのディレクトリに「.sqlcmd\sqlconfg」というファイルが作成されるのですが、このファイルの設定が影響して、go-sqlcmd の動作が従来の動作とは変わる可能性があります。
SQL Server 2017 からは、Service Pack が廃止され、新しいサービスモデルによる更新プログラムの提供となりました。
SQL Server 2017 以降は、累積更新プログラム (Cumulative Update: CU) / 一般配布リリース (General distribution release: GDR) による更新プログラムの提供が行われるようになっています。
SQL Server の更新プログラムの提供状況については、SQL Serverの最新の更新プログラムとバージョン履歴 で全体を把握することができるようになっています。
ライフサイクルサポートポリシーは 固定ライフサイクル となっており、5 年間のメインストリームサポートと 5 年間の延長サポートの合計 10 年となっています。(最近は 拡張セキュリティ更新プログラム (ESU) でさらに 3 年間延長できますが)
各バージョンのサポート期限は 製品およびサービスのライフサイクル情報の検索 で確認することができます。
昨年の話になるのですが、SQL Server 2017 のメインストリームサポートが終了し、2017 は現在延長サポートのフェーズとなっています。
今年になり、GDR も提供が行われメインストリームサポート終了後の更新プログラムの提供について、実際の提供ベースで情報がまとまってきましたので、SQL Server 2017 以降のライフサイクルサポートポリシーを改めてまとめておきたいと思います。
SQLBits 2023 の Bob Ward の SQL Server 2022 hidden gems で紹介されていたのですが、SQL Server 2022 で追加された query_abort という拡張イベントが、今後の SQL Server でエラーの原因を取得する際に活用できそうでしたので情報を残しておこうと思います。
この拡張イベントについては SQL Server 2022 Revealed でも触れられています。
最近、SQL Server のリンクサーバーのプロバイダーを見ていて気づいたのですが、SQL Server 2022 では、SQLNCLI11 がリンクサーバーのプロバイダーから削除されていました。
左が SQL Server 2022 / 右がそれより前のバージョンの SQL Server のリンクサーバーのプロバイダーとなるのですが、2022 では SQLNCLI11 が削除されていますね。
最近、次のアナウンスが行われ、Managed Instance でも SQLNCLI (SNAC) に対しての対応が行われたようです。
この領域は情報のキャッチアップができていなかったのですが、そろそろ少しずつ把握しておかないとなと思い、後で思い出すためのメモを。
SQLBits 2023 の Keynote で紹介されていたツールになります。
SQL Server の最新の機能を使用するためには、System.Data.SqlClient ではなく、Microsoft.Data.SqlClient を使用する必要があります。
以前、PowerShell (7.0.2) で Microsoft.Data.SqlClient 2.0 を使用する という投稿を書いたのですが、Windows PowerShell を使用していて、もう少しシンプルな方法で導入することはできないかと考えてみたところ、SQL Server PowerShell モジュール の存在を思い出しました。
2023/04/06 追記
Microsoft.Data.SqlClient が使用されている 22.x が GA リリースされました。
I'm pleased to announce the GA release of the SQLServer PowerShell module v22.https://t.co/hXJuyq2Xqh
— Matteo Taveggia (@matteo_taveggia) April 4, 2023
22.0.59 以降で Preview が外れましたので、現時点では GA 版を使用することができます。