KB4492899 - 修正:SQL Server 2016 および 2017 でデータベースを起動した後、FileTable データベース レベルのディレクトリにアクセスできなくなる

適用先
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer Windows SQL Server 2017 Enterprise Windows SQL Server 2017 Enterprise Core Windows SQL Server 2017 Standard Windows

現象

Microsoft SQL Server 2016 および 2017 のスタートアップ時に、データベースが開始される前に接続しようとすると、ユーザー セッションによってデータベースが自動的にスタートされることがあります。 この事態が発生すると、データベースに FileTable が含まれ、FILESTREAM non_transacted_access が有効になっている場合、データベースの起動後にデータベース レベルの FileTable ディレクトリにアクセスできなくなります。 エクスプローラーからフォルダーにアクセスしようとすると、フォルダーが利用できないことを示す場合があります。 コマンド プロンプトから "dir" コマンドを実行すると、 "指定されたファイルがシステムで見つかりません。" が返されます。

さらに、ユーザー セッションによってデータベースが自動起動するようにトリガーされたことを示す次のエラーがエラー ログに表示される場合があります。

DateTime ログオン エラー: 18456、重大度: 14、状態: 38。

DateTime ログオン: ユーザー 'UserName' はログインできませんでした。 理由: 明示的に指定されたデータベース 'DatabaseName' を開くことができませんでした。 [クライアント: IPNumber]

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

解決策

この問題は、次の SQL Server の累積的な更新プログラムで修正されています。

SQL Server の累積的な更新プログラムについて:

SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。

回避策

この問題の回避策は、データベースの FILESTREAM non_transacted_accessを無効にしてから再度有効にすることです。

ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE [DatabaseName] SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF )

ALTER DATABASE [DatabaseName] SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL )

ALTER DATABASE [DatabaseName] SET MULTI_USER WITH ROLLBACK IMMEDIATE

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。