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

SQLServerフェールオーバークラスター内のシステムデータベースの移動

    最近、私はプロジェクトに割り当てられました。お客様が新しいSANを購入し、古いSANを新しいSANに交換することを望んでいました。ユーザーとシステムのデータベースはSANを利用していましたが、オペレーティングシステムとSQLはサーバーのローカルディスクにインストールされていました。ラッキーな私たち..!!アイデアは、既存のユーザーデータベースとシステムデータベースを新しいSANに移動し、ダウンタイムを可能な限り最小限に抑えることでした。そのため、ダウンタイムを最小限に抑えるために、OSとSQLを再インストールする代わりに、次のアプローチを使用することにしました。

    1. 新しいSANを既存のサーバーに接続し、そのサーバー上に新しいドライブを作成して、それらのドライブを既存のフェールオーバークラスターインスタンスに追加します。
    2. SQL Serverを停止し、マスター、モデル、およびmsdbデータベースを新しいドライブにコピーして、SQLサービスを開始します。
    3. ユーザーデータベースを新しいドライブに移動し、古いSANを削除します。

    前回の記事では、既存のフェールオーバークラスターに新しいストレージを追加する手順を説明しました。さらに、ユーザーデータベースを新しいドライブに移動するプロセスを示しました。

    この記事では、プロジェクトで使用した新しいドライブにシステムデータベースを移動するプロセスを示します。前回の記事では、ドライブを既存のフェールオーバークラスターに追加しましたが、この記事では同じドライブを使用します。ドライブのボリュームラベルは「E:\」です。 」という名前で、「 SystemDatabases」という名前のディレクトリを作成しました。 」E:\ ドライブ。次の画像を参照してください:

    現在、システムデータベースは「 F:\ MSSQL14.MSSQLSERVER \ MSSQL \ DATA」にあります 」ディレクトリ。これらのデータベースを「E:\ SystemDatabases」に移動します 」ディレクトリ。ユーザーデータベースとは異なり、システムデータベースの移動は単純なプロセスではありません。正しい順序と手順に従う必要があります。そうしないと、SQLインスタンスが起動しません。

    まず、システムデータベースの現在の場所を確認しましょう。次のクエリを実行して、システムデータベースの現在の場所を取得します。

    USE MASTER
    
    GO
    
    SELECT DB_NAME(DATABASE_ID) AS [DATABASE NAME], 
    
           NAME AS [LOGICAL NAME], 
    
           PHYSICAL_NAME AS [FILE PATH] 
    
     FROM SYS.MASTER_FILES 
    
     WHERE DATABASE_ID < 4

    出力は次のとおりです。

    DatabaseName Logical Name File Path
    
    -------------- ------------------- --------------------------------------------
    
    master master F:\MSSQL14.MSSQLSERVER\MSSQL\DAT\master.mdf
    
    master mastlog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
    
    tempdb tempdev F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb.mdf 
    
    tempdb templog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\templog.ldf
    
    model modeldev F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\model.mdf
    
    model modellog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\modellog.ldf
    
    msdb msdbdata F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\msdbdata.mdf
    
    msdb msdblog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\msdblog.ldf

    次に、データベースを別のディレクトリに移動するプロセスを次のように説明します。

    1. msdbおよびモデルデータベースを移動する手順を説明します。
    2. tempdbデータベースを移動する手順を説明します。
    3. マスターデータベースを移動する手順を説明します。

    このデモでは、すべてのシステムデータベースを E:\に移動する方法を説明します。 ドライブ、したがってダウンタイムを減らすために、プロセスの最後にSQLサービスを再起動します。

    msdbおよびモデルデータベースを移動する手順

    msdbデータベースとモデルデータベースを移動するには、まず、ALTERデータベースクエリを実行して、システムカタログ内のファイルの場所を更新する必要があります。これを行うには、PowerShellまたはSSMSで次のクエリを実行します。

    USE MASTER; 
    
     GO 
    
     ALTER DATABASE MODEL MODIFY FILE (NAME = MODELDEV, FILENAME = 
    
     'E:\SYSTEMDATABASES\MODEL.MDF'); 
    
     GO 
    
     ALTER DATABASE MODEL MODIFY FILE (NAME = MODELLOG, FILENAME = 
    
     'E:\SYSTEMDATABASES\MODELLOG.LDF'); 
    
     GO 
    
     
    
    ALTER DATABASE MSDB MODIFY FILE (NAME = MSDBDATA, FILENAME = 
    
    'E:\SYSTEMDATABASES\MSDBDATA.MDF'); 
    
     GO 
    
     
    
     ALTER DATABASE MSDB MODIFY FILE (NAME = MSDBLOG, FILENAME = 
    
     'E:\SYSTEMDATABASES\MSDBLOG.LDF'); 
    
     GO

    出力は次のとおりです。

    The file "MODELDEV" has been modified in the system catalog. The new path will be used the next time the database is started.
    
    The file "MODELLOG" has been modified in the system catalog. The new path will be used the next time the database is started.
    
     
    
    The file "MSDBDATA" has been modified in the system catalog. The new path will be used the next time the database is started.
    
    The file "MSDBLOG" has been modified in the system catalog. The new path will be used the next time the database is started.

    次に、次のクエリを実行して、システムカタログでパスが更新されていることを確認します。これを行うには、次のクエリを実行します。

    SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 
    
           PHYSICAL_NAME AS [FILE LOCATION] 
    
     FROM SYS.MASTER_FILES 
    
     WHERE  DB_NAME(DATABASE_ID) IN ('MSDB', 'MODEL') 
    
     GO

    出力は次のとおりです。

    DatabaseName Logical Name File Path
    
    -------------- ------------------- --------------------------------------------
    
    model modeldev E:\SystemDatabases\model.mdf
    
    model modellog E:\SystemDatabases\modellog.ldf
    
    msdb msdbdata E:\SystemDatabases\msdbdata.mdf
    
    msdb msdblog E:\SystemDatabases\msdblog.ldf

    tempDBデータベースを移動する手順

    SQL Serverを再起動すると、tempdbファイルとログファイルが自動的に再作成されるため、tempdbファイルを手動で移動する必要はありません。データベースファイルのパスを変更するだけです。 tempdbデータベースファイルのパスを変更するには、PowerShell/SSMSで次のクエリを実行します。

    USE MASTER; 
    
     GO 
    
    ALTER DATABASE TEMPDB MODIFY FILE (NAME = TEMPDEV, FILENAME = 
    
    'E:\SYSTEMDATABASES\TEMPDB.MDF');
    
    
     GO 
    
    ALTER DATABASE TEMPDB MODIFY FILE (NAME = TEMPLOG, FILENAME = 
    
    'E:\SYSTEMDATABASES\TEMPLOG.LDF');
    
    
     GO

    出力は次のとおりです。

    The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started.
    
    The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started.

    次に、次のクエリを実行して、システムカタログでパスが更新されていることを確認します。

    SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 
    
           PHYSICAL_NAME AS [FILE LOCATION] 
    
     FROM SYS.MASTER_FILES 
    
     WHERE  DB_NAME(DATABASE_ID) = 'TEMPDB' 
    
     GO

    出力は次のとおりです。

    DatabaseName Logical Name File Path
    
    -------------- ------------------- --------------------------------------------
    
    tempdb tempdev E:\SystemDatabases\tempdb.mdf 
    
    tempdb templog E:\SystemDatabases\templog.ldf

    マスターデータベースを移動する手順

    マスターデータベースを別のドライブに移動するプロセスは、他のシステムデータベースを移動するプロセスとは異なります。システムデータベースを移動するには、次の手順を実行します。

    1. SQLServer構成マネージャー2017を開く [SQLServerサービス]をクリックして展開します 。次の画像を参照してください:
    2. SQL Server(MSSQLSERVER)を右クリックします プロパティをクリックします。プロパティダイアログボックスで、「起動パラメータ」を選択します " タブ。次の画像を参照してください:
    3. 上の画像でわかるように、既存のパラメータのテキストボックスには、データファイル、ログファイル、およびエラーログのデフォルトの場所が含まれています。ここで-d マスターデータベースのデータファイルのデフォルトパスを示します 同様に、 -l <​​/ strong> マスターデータベースのログファイルのデフォルトパスを示します。これらのパラメータを新しい場所に置き換える必要があります。したがって、データファイルパラメータをクリックして、「 – dE:\ Systemdatabases \ master.mdf」に置き換えます。 」の値を入力し、「更新」をクリックします。同様に、ログファイルのパラメータをクリックして、 「-lE:\ Systemdatabases\mastlog.ldf」に置き換えます。 値を入力し、更新をクリックします。次の画像を参照してください:

    4.[OK]をクリックしてダイアログボックスを閉じます。

    注:

    SQL Serverフェールオーバーインスタンスでこのタスクを実行しているため、セカンダリノード(SQL02.Dc.Local)で上記のすべての変更を実行する必要があります

    SQLServerサービスを再起動します。

    SQL Serverカタログでmsdb、model、およびtempdbの新しいパスが更新されたら、サービスを停止してデータベースファイルを新しいドライブにコピーする必要があります。これを行うには、SQLServer構成マネージャー2017を開きます>>[サービス]をクリックします>>SQL Server(MSSQLSERVER)を右クリックし、[停止]をクリックします。次の画像を参照してください:

    次に、すべてのシステムデータベースファイルを新しいドライブにコピーします。次の画像を参照してください。

    次に、SQLServer構成マネージャーからサービスを開始します。サービスが正常に開始された場合は、システムとデータベースのパスが正常に更新されています。次のクエリを実行して、マスターデータベースのパスを確認します。

    SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 
    
           PHYSICAL_NAME AS [FILE LOCATION] 
    
     FROM SYS.MASTER_FILES 
    
     WHERE  DB_NAME(DATABASE_ID) = 'MASTER' 
    
     GO

    出力は次のとおりです。

    DatabaseName Logical Name File Path
    
    -------------- ------------------- --------------------------------------------
    
    master master E:\SystemDatabases\master.mdf 
    
    master mastlog E:\SystemDatabases\mastlog.ldf

    概要

    この記事では、システムデータベースを新しいクラスター化されたディスクに移動するプロセスを段階的に説明しました。


    1. ORA-30926:表をマージするときに、ソース表で安定した行のセットを取得できません

    2. MySQL:同じテーブルを複数回結合するにはどうすればよいですか?

    3. MySQLテーブルにカスタムCHECK制約を追加するにはどうすればよいですか?

    4. pgAdmin4を実行しようとしてエラーが発生しました