SQL Serverデータベースは、データとオブジェクトをファイルに格納します。各データベースには少なくとも1つのデータファイル(およびログファイル)がありますが、1つだけに限定されるわけではなく、多くのデータファイルが含まれる可能性があります。データベースからデータファイルを削除する必要がある場合は、削除する前に、まずそのファイルを空にする必要があります。
ただし、ファイルを空にしても実際にはデータが削除されるわけではないので、心配しないでください。ファイルのデータを同じファイルグループ内の他のファイルに移行するだけです。
以下の例は、データファイルを空にしてから、Transact-SQLを使用してデータベースから削除する方法を示しています。
簡単な例
データファイルを空にしてデータベースから削除する方法を示す簡単な例を次に示します。
-- Empty the file DBCC SHRINKFILE (Solutions2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Solutions REMOVE FILE Solutions2; GO
説明したように、これによりファイルが空になり、データベースから完全に削除されます。 EMPTYFILE
を使用する場合 、これにより、すべてのデータがファイルから同じファイルグループ内の他のファイルに移動します。したがって、これがファイルグループ内の唯一のファイルではないことを確認する必要があります(そうしないと、エラーが発生します)。 EmptyFileは、ファイルに新しいデータが追加されないことも保証します。
より長い例
前の例で混乱した場合は、新しいデータベースを作成し、新しいデータファイルを追加し、それを空にしてから削除するプロセスを見ていきましょう。
データベースを作成してそのデータファイル情報を表示する
-- Switch to the master database USE master; GO -- Create a new database CREATE DATABASE Test; GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
Test
という新しいデータベースを作成する前に、まずマスターデータベースに切り替えます。 。次に、新しいデータベースに切り替えて、sys.database_files
からそのデータベースファイルに関する特定の情報を選択します。 システムカタログビュー。
新しいデータファイルを追加する
-- Add a new data file ALTER DATABASE Test ADD FILE ( NAME = Test2, FILENAME = '/var/opt/mssql/data/Test2.mdf', SIZE = 8MB ); GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
ここで、論理名がTest2
の新しいデータファイルを追加します。 および/var/opt/mssql/data/Test2.mdf
の物理パス (これはLinux / Macパスであることに注意してください。Windowsを使用している場合は、スラッシュの代わりにバックスラッシュを使用してください)。ここでも、sys.database_files
にクエリを実行します。 新しいファイルの詳細を確認できるように、システムカタログビューを表示します。
データファイルを空にして削除します
この例では、データベースが本番環境に移行し、作成したデータファイルにデータがロードされていると仮定します。次に、そのファイルを削除します(何らかの理由で)。ただし、ファイルを削除する前に、ファイルを空にする必要があります(データを別のファイルに移行します)。
その方法は次のとおりです。
-- Empty the new data file DBCC SHRINKFILE (Test2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Test REMOVE FILE Test2; GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
したがって、これはこのページの最初の例と同じですが、データベースの名前が異なる点が異なります。この例では、sys.database_files
にクエリを実行します。 ファイルが実際に削除されたことを確認します。