KB4492899 - FIX: 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' を開けませんでした。 [CLIENT: IPNumber]

状態

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

解決策

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

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

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

回避策

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

ALTER DATABASE [DatabaseName] SET SINGLE_USER 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 ROLLBACK IMMEDIATE

参考資料

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