SQL Server では、ALTER DATABASE ステートメントの FILENAME 句で新しいファイルの場所を指定することで、ユーザー データベースのデータ ファイル、ログ ファイル、およびフルテキスト カタログ ファイルを新しい場所に移動することができます。この方法は、同じ SQL Server インスタンス内でデータベース ファイルを移動する場合に使用できます。SQL Server の別のインスタンスや、別のサーバーにデータベースを移動する場合は、バックアップと復元操作かデタッチ操作とアタッチ操作を使用します。
メモ : |
|---|
|
SQL Server データベース エンジンの一部の機能は、データベース エンジンがデータベース ファイルに情報を格納する方法を変更します。これらの機能は、SQL Server の特定のエディションでのみ使用できます。これらの機能を備えたデータベースを、それらをサポートしない SQL Server のエディションに移動することはできません。現在のデータベースで有効なエディション固有の機能をすべて一覧表示するには、sys.dm_db_persisted_sku_features 動的管理ビューを使用します。
|
このトピックの手順では、データベース ファイルの論理名が必要です。論理名を取得するには、sys.master_files カタログ ビューで name 列に対するクエリを実行します。
計画に従った再配置の一環としてデータ ファイルやログ ファイルを移動するには、次の手順を実行します。
-
次のステートメントを実行します。
ALTER DATABASE database_name SET OFFLINE
-
ファイルを新しい場所に移動します。
-
移動したそれぞれのファイルに対して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' )
-
次のステートメントを実行します。
ALTER DATABASE database_name SET ONLINE
-
次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'<database_name>');
スケジュールされたディスク メンテナンスでの再配置
スケジュールされたディスク メンテナンスの一環としてファイルを再配置するには、次の手順を実行します。
-
移動対象のそれぞれのファイルに対して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
-
メンテナンスを行うため、SQL Server のインスタンスを停止するか、システムをシャットダウンします。詳細については、「サービスの停止」を参照してください。
-
ファイルを新しい場所に移動します。
-
SQL Server のインスタンスまたはサーバーを再起動します。詳細については、「サービスの開始と再開」を参照してください。
-
次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'<database_name>');
ハードウェア障害が原因でファイルを移動する必要がある場合、次の手順に従って別の場所にファイルを再配置します。
重要 : |
|---|
|
データベースを起動できないとき、つまり、データベースが問題のあるモードか復旧できない状態にある場合、ファイルを移動できるのは、sysadmin 固定ロールのメンバだけです。
|
-
SQL Server のインスタンスが起動していたら停止します。
-
コマンド プロンプトで次のいずれかのコマンドを入力し、SQL Server のインスタンスを master のみを復旧するモードで開始します。
-
既定 (MSSQLSERVER) のインスタンスの場合は、次のコマンドを実行します。
NET START MSSQLSERVER /f /T3608
-
名前付きインスタンスの場合は、次のコマンドを実行します。
NET START MSSQL$instancename /f /T3608
詳細については、「SQL Server のインスタンスを起動する方法 (net コマンド)」を参照してください。
-
移動対象の各ファイルに対し、sqlcmd コマンドか SQL Server Management Studio を使用して、次のステートメントを実行します。
ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
sqlcmd ユーティリティの使用方法の詳細については、「sqlcmd ユーティリティの使用」を参照してください。
-
sqlcmd ユーティリティまたは SQL Server Management Studio を終了します。
-
SQL Server のインスタンスを停止します。
-
ファイルを新しい場所に移動します。
-
SQL Server のインスタンスを開始します。たとえば、
NET START MSSQLSERVER を実行します。
-
次のクエリを実行して、ファイルが変更されたことを確認します。
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'<database_name>');
フルテキスト カタログを移動するには、次の手順を実行します。カタログの移動先の場所を指定する場合は、new_path/os_file_name ではなく、new_path だけを指定します。
-
次のステートメントを実行します。
ALTER DATABASE database_name SET OFFLINE
-
フルテキスト カタログを新しい場所に移動します。
-
次のステートメントを実行します。
logical_name は sys.database_files 中の name 列の値であり、new_path はカタログの新しい場所です。
ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path')
-
次のステートメントを実行します。
ALTER DATABASE database_name SET ONLINE
また、CREATE DATABASE ステートメントの FOR ATTACH 句を使用してフルテキスト カタログを移動することもできます。次の例では、AdventureWorks データベースにフルテキスト カタログを作成しています。このフルテキスト カタログを新しい場所に移動するには、AdventureWorks データベースをデタッチし、フルテキスト カタログを物理的に新しい場所に移動します。その後、データベースをアタッチするときにフルテキスト カタログの新しい場所を指定します。
USE AdventureWorks;
CREATE FULLTEXT CATALOG AdvWksFtCat AS DEFAULT;
GO
USE master;
GO
--Detach the AdventureWorks database.
sp_detach_db AdventureWorks;
GO
--Physically move the full-text catalog to the new location.
--Attach the AdventureWorks database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks ON
(FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_Data.mdf'),
(FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_log.ldf'),
(FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO
次の例では、計画に従った再配置の一環として、AdventureWorks のログ ファイルを新しい場所に移動します。
USE master;
GO
-- Return the logical file name.
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'AdventureWorks')
AND type_desc = N'LOG';
GO
ALTER DATABASE AdventureWorks SET OFFLINE;
GO
-- Physically move the file to a new location.
-- In the following statement, modify the path specified in FILENAME to
-- the new location of the file on your server.
ALTER DATABASE AdventureWorks
MODIFY FILE ( NAME = AdventureWorks_Log,
FILENAME = 'C:\NewLoc\AdventureWorks_Log.ldf');
GO
ALTER DATABASE AdventureWorks SET ONLINE;
GO
--Verify the new location.
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'AdventureWorks')
AND type_desc = N'LOG';
概念
データベースのデタッチとアタッチ
システム データベースの移動
その他の技術情報
ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)
データベースの変更
データベース ファイルの移動
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
サービスの停止
サービスの開始と再開
ヘルプおよび情報
SQL Server 2008 の参考資料の入手