SQL Server をインストールするときにシステム データベース ディレクトリが指定されます。
このディレクトリは、[データルート ディレクトリ] を元に設定され、インスタンス ID 等が用いられたディレクトリ構成が自動的に使用され、任意のディレクトリに変更をすることができません。
インストール後にこのディレクトリを変更するための方法をまとめてみたいと思います。
システム データベース ディレクトリには以下の内容が格納されます。
- システムデータベース (master / model /msdb)
- SQL Server のログ
- SQL Server Agent のログ
インストール時にこれらの格納先を変更できればよいのですが、投稿時点の SQL Server のバージョンでは変更することができませんので、インストール後に変更をする必要があります。
システムデータベースの移動については、システム データベースの移動 に記載されています。
master / SQL Server のログについてはスタートアップオプションとして設定されているためレジストリを変更する必要があります。
# SQL Server 構成マネージャーからも変更できます。
model / msdb については ALTER DATABASE で変更をすることができます。
SQL Server Agent のログについてはレジストリに格納されていますので、レジストリから設定を変更することで格納場所を変えることができます。
これらの設定ですが、以下のような PowerShell で変更できます。
# 初期設定 $OldDir = "C:MSSQLDATADatabaseMSSQL11.MSSQLSERVERMSSQLDATA*" $NewDir = "C:MSSQLDATADatabase" $NewlogDir = "C:MSSQLDATALog" $SQLArgPath = "registry::HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLServerParameters" $SQLAgentArgPath = "registry::HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL ServerMSSQL11.MSSQLSERVERSQLServerAgent" # 実行ポリシーと PowerShell モジュールのインポート Set-ExecutionPolicy RemoteSigned -Force Import-Module SQLPS -DisableNameChecking # model / msdb のファイルパス変更 (SQL Server) Invoke-SQLCMD "ALTER DATABASE model MODIFY FILE ( NAME = modeldev , FILENAME = '$NewDirmodel.mdf' )" Invoke-SQLCMD "ALTER DATABASE model MODIFY FILE ( NAME = modellog , FILENAME = '$NewDirmodellog.ldf' )" Invoke-SQLCMD "ALTER DATABASE msdb MODIFY FILE ( NAME = MSDBData , FILENAME = '$NewDirMSDBData.mdf' )" Invoke-SQLCMD "ALTER DATABASE msdb MODIFY FILE ( NAME = MSDBLog , FILENAME = '$NewDirMSDBLog.ldf' )" # 物理ファイルの移動 Stop-Service "SQLSERVERAGENT" -Force Stop-Service "MSSQLSERVER" -Force # ファイルのコピー Copy-Item $OldDir $NewDir -Force # master のパス変更 Set-ItemProperty -Path $SQLArgPath -Name "SQLArg0" -Value "-d$NewDirmaster.mdf" Set-ItemProperty -Path $SQLArgPath -Name "SQLArg2" -Value "-l$NewDirmastlog.ldf" # ログ用ディレクトリの作成 New-Item $NewLogDir -Type directory -Force # SQL Server ログの変更 Set-ItemProperty -Path $SQLArgPath -Name "SQLArg1" -Value "-e$NewlogDirERRORLOG" # SQL Server Agent ログの変更 Set-ItemProperty -Path $SQLAgentArgPath -Name "ErrorLogFile" -Value "$NewlogDirSQLAGENT.OUT" Start-Service "MSSQLSERVER" Start-Service "SQLSERVERAGENT"
元のファイルはコピーで複製しているので起動しなかった場合は、元のシステムデータベースのファイルを利用することが可能です。
Amazon の RDS for SQL Server は動作を眺めていると、インスタンスのデプロイ時に SQL Server をインストールしているように見受けられます。
# ログを眺めながらの想像ですので実際には違うかもしれませんが。
RDS では master データベース等は [D:RDSDBDATADATA] に保存されていますので、インストール後にこのような配置変更処理を実行しているのかもしれないですね。