最近、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です。
(コメントを回答に統合することで、検索者がより簡単に利用できるようにします。)
これは、物理ファイルの場所を移動するときに、データコンテナーに適切な権限を付与しないことに関連しているようです。試したことがなければ、これはtempdb
だけでなく、ユーザーデータベースにも当てはまると思います。
すべてのシステムデータベース(tempdb
だけでなく)を移動する方法に関する古いが、技術的には正確なビデオがあります ここ 。これには、新しいデータに権限を割り当てるプロセスの表示が含まれますコンテナ。データベースエンジンでは、データフォルダーのルートから開始して、このフォルダー、サブフォルダー、およびファイルに対するフルコントロールが必要です。
データコンテナに権限が正しく設定された後、ダングリングファイルは ALTER DATABASE ... REMOVE FILE ...
を使用してシステムカタログから削除できるはずです。