SQL Serverデータベースには、プライマリデータファイル、セカンダリデータファイル(オプション)、およびトランザクションログファイルが含まれています。
プライマリデータファイルとセカンダリデータファイルには、テーブル、データベースオブジェクト、スキーマ、およびデータが含まれています。
プライマリデータベースファイルのファイル拡張子は*。mdfです。 、およびセカンダリデータファイルのファイル拡張子は*。ndf 。
トランザクションログファイルには、トランザクションによって行われたすべての変更(挿入、更新、および削除)が保存されます。 SQL Serverが予期せず再起動したりクラッシュしたりした場合、データベースエンジンは、トランザクションログファイルを使用して、障害点の前に不完全なトランザクションをロールバックします。
トランザクションログファイルの拡張子は*。ldf 。トランザクションログファイルのアーキテクチャを理解するには、この記事を参照することをお勧めします。
この記事では、SQL Server 2019でデータベースファイル(MDFファイル)を管理する方法について説明します。
この記事では、次の点について説明します。
- DMVとSQLServerManagementStudioを使用してデータベースファイルの詳細を表示します。
- ユーザーデータベースのMDFファイルをアタッチおよびデタッチします。
- システムデータベースのMDFファイルをアタッチおよびデタッチします。
動的管理ビューを使用してデータベースファイルを表示する
データベースのmdfファイルの詳細を表示するには、 sys.database_filesを使用できます。 およびsys.master_files 。クエリは次のように書く必要があります:
use master
go
select DB_NAME(database_id),
name as [logical Name],
physical_name as [File Location],
state_desc as [State of the file],
Size [Size of data File],
case when convert(varchar,max_size) =-1 then 'Unlimited' else convert(varchar,max_size) end as [Maximum Size]
from sys.master_files where type_desc='ROWS'
and database_id >5
この例ではすべてのデータベースのMDFの詳細を参照しているため、特定のデータベースファイルを表示するには別のコードが必要です。そのために、 sys.database_filesを使用します 。
次のスクリプトは、 SSISDBの詳細を取得します データベース:
use SSISDB
Go
select
name as [logical Name],
physical_name as [File Location],
state_desc as [State of the file],
Size [Size of data File],
case when convert(varchar,max_size) =-1 then 'Unlimited' else convert(varchar,max_size) end as [Maximum Size]
from sys.database_files
SQL ServerManagementStudioを使用してデータベースファイルを表示する
SQL Server Management Studio(SSMS)で使用可能なMDFファイルリストを表示するオプション。
SQL Server Management Studioでは、 SQLServerインスタンスに接続します。次に、データベースを展開します ->任意のデータベースを右クリック->プロパティをクリックします :
データベースのプロパティ ウィンドウで、ファイルをクリックします 。データベースのリストが表示されますMDF およびLDF ファイル:
ユーザーデータベースのMDFファイルをデタッチして添付します
ユーザーデータベースのMDFファイルをデタッチおよびアタッチする方法は2つあります。
- SQL ServerManagementStudioの使用。
- T-SQLスクリプトを使用します。
SSMSを使用してデータベースをアタッチおよびデタッチする
データベースを接続する
SSMSを起動します->SQLServerインスタンスに接続します-> データベースを右クリックします ->添付をクリックします 。
データベースの接続が開きます 窓。 追加をクリックします そのウィンドウで:
新しいデータベースファイルの検索 ウィンドウで、ファイルシステムを参照して MDF を見つけます ファイル。ダブルクリックします。
関連するデータファイルとログファイルは、関連ファイルに入力されます データベースの接続のグリッドビュー 窓。 OKをクリックします データベースを接続します。
データベースが接続されると、SQL ServerManagementStudioで確認できます。
データベースをデタッチする
SQL Server Management Studioを起動し、SQLServerインスタンスに接続します 。 [データベース]リストを展開します。
必要なデータベースを右クリックします ->タスク ->切り離しをクリックします 。
データベースに接続されているすべてのユーザーとプロセスを強制的に切断する場合は、データベースの切断で行います。 ウィンドウ。
接続の削除にチェックマークを付けます デタッチするデータベースのオプション セクションをクリックし、 OKをクリックします 。
T-SQLを使用してデータベースをアタッチおよびデタッチする
CREATE DATABASE WITH ATTACHを使用できます 次の構文でクエリを実行します:
USE [master]
GO
CREATE DATABASE [DatabaseName] ON
( FILENAME = 'Path of Primary Database file (MDF)' ),
( FILENAME = N'Path of Secondary Database file (NDF)' ),
...
...
( FILENAME = N'Path of Transactional Log file (LDF)' )
FOR ATTACH
GO
データベースを接続するには、次のT-SQLクエリを実行します。
USE [master]
GO
CREATE DATABASE [WideWorldImporters] ON
( FILENAME = N'C:\MSSQL\SQLData\WideWorldImporters.mdf' ),
( FILENAME = N'C:\MSSQL\SQLLog\WideWorldImporters.ldf' ),
( FILENAME = N'C:\MSSQL\SQLData\WideWorldImporters_UserData.ndf' )
FOR ATTACH
GO
また、 sp_detach_dbを実行することもできます データベースをデタッチするためのストアドプロシージャ。
ユーザーを強制的に切断する場合は、 ALTER DATABASE SET SINGLE_USERを使用できます。 次のスクリプトのコマンド:
Use [master]
GO
ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
EXEC sp_detach_db [WideWorldImporters]
GO
システムデータベースのMDFファイルを管理する
システムデータベースのMDFファイル(master、model、msdb、およびTempdb)を別の場所に移動するとします。プロセスを調べてみましょう。
マスターデータベースを移動する
マスターを移動するには データベースで、SQLServer構成マネージャーを開きます->SQLServerサービスをクリックします ->目的のSQLServerインスタンスのSQLServerサービスを右クリックします( MSSQLSERVER )->プロパティをクリックします :
master.mdfを変更するには ファイルの場所で、マスターファイルのデータファイルパスをクリックします。
master.mdf パス値の後に-dが続きます 、および mastlog.ldf パス値の後に-lが続きます
これらの値を次のように置き換えます。
データファイル:-dD:\ MS_SQL \ Data \ master.mdf
ログファイル:-lD:\ MS_SQL \ Log \ mastlog.ldf
値が変更されたら、更新をクリックします 下の図に示すように:
OKをクリックします 値を保存します。
次に、SQL Serverサービスを停止し、データベースファイルを新しい場所にコピーします。完了後、SQLサービスを再開します。
以下のクエリを実行して、ファイルの場所を確認します。
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='master'
モデルデータベースの移動
モデルデータベースを別のドライブに移動するには、最初にALTER DATABASEMODIFYFILEコマンドを実行する必要があります。これは、SQLServerシステムカタログ内の場所を変更するのに役立ちます。
以下のコマンドを実行します:
ALTER DATABASE model
MODIFY FILE (NAME = modeldev, FILENAME = 'D:\MS_SQL\Data\model.mdf');
GO
ALTER DATABASE model
MODIFY FILE (NAME = modellog, FILENAME = 'D:\MS_SQL\Log\modellog.ldf');
GO
次に、PowerShellで次のコマンドを実行してSQLServerサービスを停止します。
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER
model.mdfをコピーします およびmodellog.ldf ファイルを新しい場所に移動し、サービスを開始します。
以下のクエリを実行して、ファイルの場所を確認します。
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='model'
MSDBデータベースを移動する
MSDBを移動するには データベースを別のドライブに移動するには、最初にALTER DATABASE MODIFY FILEコマンドを実行して、SQLServerシステムカタログ内の場所を変更します。
ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBData, FILENAME = 'D:\MS_SQL\Data\MSDBData.mdf');
GO
ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBLog, FILENAME = 'D:\MS_SQL\Log\MSDBLog.ldf');
GO
PowerShellで次のコマンドを実行して、SQLServerサービスを停止します。
/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER
MSDBData.mdfをコピーします およびMSDBLog.ldf ファイルを新しい場所に移動し、サービスを開始します。
以下のクエリを実行して、ファイルの場所を確認します。
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='msdb'
TempDBデータベースを移動する
TempDBを移動するには データベースを別のドライブに移動するには、最初にALTER DATABASE MODIFY FILEコマンドを実行して、SQLServerシステムカタログ内のファイルの場所を変更します。
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\MS_SQL\Data\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp2, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_2.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp3, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_3.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp4, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_4.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp5, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_5.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp6, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_6.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp7, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_7.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp8, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_8.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\MS_SQL\Log\templog.ldf');
GO
PowerShellで次のコマンドを実行して、SQLServerサービスを再起動します。
/*Restart SQL Services*/
PS C:\> Restart-Service MSSQLSERVER -Force
以下のクエリを実行して、ファイルの場所を確認します。
select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files
where DB_NAME(database_id)='tempdb'
Devart社のトランザクションログツールを使用することもできます。これには、MDFおよびLDFファイルのデータを表示するオプションも含まれています。
概要
この記事では、SQLServerデータベースのデータベースファイルとMDFファイルの場所を表示する方法について説明しました。また、データベースのアタッチとデタッチのプロセスについて説明し、システムデータベースのデータファイルを移動するステップバイステップのプロセスを示しました。