こんにちは。SQL Server
サポート チームです。
今回は、Windows Internal Database(WID)
で発生するトラブルに関する Tips
をご紹介します。
WID は
SQL Server と比較し機能が制限されております。
この機能制限に抵触しデータベースが復旧待ちになり、アプリケーションが動作しなくなるといったお問合せもたびたびございます。
WID は
WSUS と組み合わせて利用するケースも多く、その中でも
SUSDB へアクセスできないといったお問合せが
SQL Server サポートチームに寄せられてきます。
WSUS のメンテナンスや、WSUS
のデータベース管理に際して、そもそも SUSDB
へ接続できないといった状況の場合、今回の Tips
がお役に立てば幸いです。
WSUS のデータベースメンテナンスが必要な際は、下記手順にて
Microsoft SQL Server Management Studio (SSMS) を利用します。
WSUS データベースを簡単に操作するには (Windows Server 2012
編)
https://social.msdn.microsoft.com/Forums/ja-JP/f02afeaa-37e9-4ecd-bf95-39f1019ed385/wsus?forum=jpsccmwsus
しかしながら、対象の SUSDB
に接続する際に、「データベース SUSDB
にアクセスできません。」といったエラーが発生することもあると思います。

その際、SSMS からデータベースを展開した際に、SUSDB
が (復旧待ち)
というステータスになっている場合には、以下の手順が有効となります。
事象のメカニズムにつきましても、解消手順に続いて補足いたします。

===================================
(復旧待ち)
ステータス解消手順
===================================
1. SSMS
から[データベース]
– [SUSDB] を右クリックし、[オフライン]
を選択します。
2. SSMS
から再度 [SUSDB]
を右クリックし、[オンライン]
を選択します。
3. SSMS
で [データベース]
– [SUSDB]
– [テーブル]
– [システムテーブル]
– [dbo.sysdiagrams]
を右クリックし、 [削除]
を選択します。
または、下記のクエリを実行することで、dbo.sysdiagrams
を削除します。
------- <クエリここから>
-------
USE SUSDB
go
DROP Table dbo.sysdiagrams
-------------------------------
*
事象発生のメカニズムについて
前述いたしました通り WID
には SQL Server
に対して内部的な機能制限があります。
WID
では内部的に機能制限に抵触していないかを確認する処理が定期的に実施されています。
その制限の一つにシステムテーブルへの変更を許可していないというものがございます。
今回の事象については、SUSDB
のシステムテーブルに dbo.sysdiagrams
というシステムテーブルが
追加されたことで、
機能制限のチェックに抵触し、強制的に復旧待ちステータスとなります。
一旦、オフラインからオンラインに手動で変更し SSMS
経由で制限に抵触している dbo.sysdiagrams
を
削除することで、
SUSDB
へのアクセスが回復いたします。
*
ご参考情報
SUSDB
のメンテナンスを実施される方は、一般にトラブルシューティングなども実施いただくことも多いかと思います。
イベントログや、WID
の
error.log に以下のログが発生している場合にも、同様の事象が発生していると判断できます。
*****
2020-07-15 18:12:23.44 spid20s
Verification failed
2020-07-15 18:12:23.44 spid20s
2020-07-15 18:12:23.44 spid20s
The following columns are unexpected:
dbo.sysdiagrams.name.sys.sysname(256)
dbo.sysdiagrams.principal_id.sys.int(4)
dbo.sysdiagrams.diagram_id.sys.int(4)
dbo.sysdiagrams.version.sys.int(4)
dbo.sysdiagrams.definition.sys.varbinary(-1)
2020-07-15 18:12:23.45 spid20s Database verification script failed for database 'SUSDB'.
*****
日本語環境の
Windows Server 2016 では、WID のログが
error.log には日時以外の情報がほとんど出力されない不具合があります。
以下のブログで情報を公開しておりますので、こちらもご参照ください。
日本語環境の Windows Server 2016
の WID のログが記録されない不具合について
https://social.technet.microsoft.com/Forums/ja-JP/f29e1df3-798a-48c5-ba50-fab8eb0d257e/260852641235486298722265912398-windows-server-2016-12398-wid?forum=jpbidp