sql >> データベース >  >> RDS >> Sqlserver

SQLServer2019でMDFファイルを管理する

    SQL Serverデータベースには、プライマリデータファイル、セカンダリデータファイル(オプション)、およびトランザクションログファイルが含まれています。

    プライマリデータファイルとセカンダリデータファイルには、テーブル、データベースオブジェクト、スキーマ、およびデータが含まれています。

    プライマリデータベースファイルのファイル拡張子は*。mdfです。 、およびセカンダリデータファイルのファイル拡張子は*。ndf

    トランザクションログファイルには、トランザクションによって行われたすべての変更(挿入、更新、および削除)が保存されます。 SQL Serverが予期せず再起動したりクラッシュしたりした場合、データベースエンジンは、トランザクションログファイルを使用して、障害点の前に不完全なトランザクションをロールバックします。

    トランザクションログファイルの拡張子は*。ldf 。トランザクションログファイルのアーキテクチャを理解するには、この記事を参照することをお勧めします。

    この記事では、SQL Server 2019でデータベースファイル(MDFファイル)を管理する方法について説明します。

    この記事では、次の点について説明します。

    1. DMVとSQLServerManagementStudioを使用してデータベースファイルの詳細を表示します。
    2. ユーザーデータベースのMDFファイルをアタッチおよびデタッチします。
    3. システムデータベースの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つあります。

    1. SQL ServerManagementStudioの使用。
    2. 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ファイルの場所を表示する方法について説明しました。また、データベースのアタッチとデタッチのプロセスについて説明し、システムデータベースのデータファイルを移動するステップバイステップのプロセスを示しました。


    1. jQuery UIソート可能、次にデータベースに順序を書き込む

    2. 最も一般的なPostgreSQLの障害シナリオ

    3. SQL Serverのストアドプロシージャ/関数で入出力パラメータを宣言する方法は?

    4. MySQL –ドロップされたパフォーマンススキーマデータベースを回復する