先日 SQL Server のカーソルの動作を把握する という投稿しましたが、sys.databases をカーソルで参照する際には、Snapshot ベース音カーソルを使用したほうが動作が安定するかと思います。
Archive for the ‘SQL Server’ tag
ワークグループクラスター (ドメインに依存しないクラスター) では Failover Cluster Instance を構築することはできません (2023-07 時点)
Windows Server 2016 以降は、ドメインのメンバーでなくてもクラスターを構築することができるワークグループクラスターの機能が追加されました。
ワークグループ クラスター (ドメインに依存しないクラスター) の Windows Server での構築方法については、Workgroup and Multi-domain clusters in Windows Server 2016 に記載されており、この方法を使用することでワークグルプ環境でも Windows Failover Cluster (WSFC) を構築することができます。
ワークグループクラスターは SQL Server の可用性環境の構築でも活用することができるのですが、Always On Failover Cluster Instance (FCI) では使用することはできません。
現時点では、ワークグループクラスターで構築ができる可用性環境は Always On Availability Group (AG) のみとなります。
最近 TechNet フォーラムで 本件についての質問 があったのですが、ワークグループクラスターで FCI がサポートされてないことを明記した情報が探しづらいかなとも感じましたので情報をまとめておきたいと思います。
SQL Server の Assertion のダンプについて
SQL Server ではダンプが出力されるエラーの種類としては、[A15] SQL Server Trouble Shooting Tips from Support Team by Takashi Honma で解説されている次のような種類があります。
- Access Violation
- Assertion
- Latch Timeout
- Non-yielding Scheduler
- Deadllock Schedulers
- Non-yielding Resource Monitor
- Non-yielding IOCP Listener
この中で Assertion (アサーション) のダンプについてまとめておきたいと思います。
SQL Server のカーソルの動作を把握する
SQL Server のカーソルの動作について、理解が薄い個所がありましたので、調べた内容をまとめておこうと思います。
カーソルについては次の情報を参考にするのが最初のステップとなるかと思います。
SQL Server エージェントのジョブ所有者がローカルアカウントを使用している場合の挙動について
以前、SQL Server エージェントで Transact-SQL を実行する際に使用されるログインについて という投稿を書きました。
この投稿の中では、sysadmin ロールに含まれていないログインをジョブの所有者に設定した場合の挙動に触れてみました。
ジョブの所有者が sysadmin ロール以外で、Windows 認証のログインを使用している場合、OS 側のログインが無効の状態になっている場合、どのような挙動となるかについて確認する必要がありましたので、その内容をまとめておきたいと思います。
ローカルアカウントではなく、ドメインアカウントを対象としたものについては、次の情報を確認してください。
DBCC SHRINKFILE の WAIT_AT_LOWPRIORITY について
SQL Server 2022 / SQL Database / Managed Instance では、データベースのファイルサイズを削減するためのコマンドである、DBCC SHRINKFILE に WAIT_AT_LOWPRIORITY というオプションが追加されました。
このオプションを使用した場合のデータファイルのサイズ縮小について動作を把握しておきたかったので、調べてみました。
SQL Server で接続のプロセスの途中でコネクションタイムアウトを発生させる
SQL Server でコネクションタイムアウトを発生させる方法としては、
- 存在しないサーバーに対しての接続
- シングルユーザーモードのデータベースに対しての接続
を実行することでコネクションタイムアウトを発生させるという方法があります。
これらの方法では初期の接続ができないためエラーとなりますが、運用環境でコネクションタイムアウトが発生するケースとしては接続プロセスの途中で、タイムアウトの設定秒数に達したため、コネクションタイムアウトが発生するということがあります。
このコネクションタイムアウトの状態を意図的に発生させるための方法を残しておきたいと思います。
SQL Server 2022 で追加された query_antipattern を使用したクエリ情報の取得
Bob Ward の SQL Server 2022 Hidden Gems で解説されているのですが、SQL Server 2022 ならびに Azure SQL Database では、query_antipattern という拡張イベントが追加されています。
MS のブログでも紹介されており、最近、新しい記事も公開されました。
- Watch out for performance problems due to antipattern queries in SQL
- Lesson Learned #367: Query Antipattern and Ring Buffer in Azure SQL Database
この拡張イベントについて、本ブログでも触れておきたいと思います。
Manaed Instance の TDE を無効化した DB を SQL Server 2022 にリストアする際の注意点
※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 については、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」については、本投稿の事象は発生しません。
go-sqlcmd で sqlconfig が設定されている場合のログイン名を指定した接続について
コマンドラインで 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 の動作が従来の動作とは変わる可能性があります。