web-dev-qa-db-ja.com

Tempdbデータファイルが消える

最近、Tempデータベースファイルを別のドライブに移動しました(2つのデータファイルと1つのログファイルがありました)。

ただし、サーバーを再起動した後、2番目のデータファイルがGUIのファイルリストとsp_helpfileの両方から消えました。この動作を何度か再現しました。新しいデータファイルを追加し、それがguiとsp_helpfileの両方に表示され、サーバーを再起動すると消えるのを確認しました。

データベースに対してdbcc checkdbを実行しましたが、エラーは返されません。 SQLログにもWindowsアプリケーションイベントログにも情報はありません。

もう少し調査した後、次のクエリを実行しました。

select d.name, m.* from sys.master_files m
inner join sys.databases d 
on (m.database_id = d.database_id)
where d.name like 'tempdb'
order by 1, 2

結果: http://Pastebin.com/Zu5fJ2h

4つの異なるセカンダリデータファイルが表示されますが、sp_helpfileには表示されません。これらの名前を使用しようとすると、SQLサーバーでは許可されません。これらのファイルはいずれも、ディスク上に物理的には存在しません。私のサーバーはSQL 2012 Standardです。

3
Mansfield

(コメントを回答に統合することで、検索者がより簡単に利用できるようにします。)

これは、物理ファイルの場所を移動するときに、データコンテナーに適切な権限を付与しないことに関連しているようです。試したことがなければ、これはtempdbだけでなく、ユーザーデータベースにも当てはまると思います。

すべてのシステムデータベース(tempdbだけでなく)を移動する方法に関する古いが、技術的には正確なビデオがあります ここ 。これには、新しいデータに権限を割り当てるプロセスの表示が含まれますコンテナ。データベースエンジンでは、データフォルダーのルートから開始して、このフォルダー、サブフォルダー、およびファイルに対するフルコントロールが必要です。

データコンテナに権限が正しく設定された後、ダングリングファイルは ALTER DATABASE ... REMOVE FILE ... を使用してシステムカタログから削除できるはずです。

5
Jon Seigel