SQLServerでデータベースをコピーする(バックアップする)方法を紹介します。
本記事では、SSMS(SQL Server Management Studio)を使用せず、コマンドラインでバックアップする方法になります。
はじめに
BeforeDatabaseと同じ内容のデータベースAfterDatabaseを作成します。
SQLServerにログイン
まずSQLServerにログインします。コマンドプロンプトを開き、
sqlcmd -S サーバ名 -U ユーザ名 -P パスワード
上記のコマンドのサーバ名、ユーザ名、パスワードは適当変更してください。
>1
と表示されれば、ログイン完了です。
SQLServerのデータファイルの場所を確認
SELECT
name, physical_name
FROM sys.master_files
WHERE
database_id = DB_ID()
go
physical_nameに出力されたSQL Serverのデータファイルの場所(ファイル名は除外)をメモしておきます。
具体例
name physical_name
----------------------------------------------------------------------------------------------------------------
master C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\master.mdf
mastlog C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA
をメモする。
既存のデータベースをコピーする
以下のSQL文を実行します。
BACKUP DATABASE ○○
TO DISK = 'メモしたファイルの場所(DATAをBACKUP)\○○.bak'
go
メモしたファイルの場所に○○.bakが作成されました。
具体例
BACKUP DATABASE BeforeDatabase
TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\BACKUP\BeforeDatabase.bak'
go
データベースを別名で保存
以下のSQL文を実行します。
RESTORE DATABASE □□
FROM DISK = 'メモしたファイルの場所(DATAをBACKUP)\○○.bak'
WITH
MOVE '○○' TO 'メモしたデータファイルの場所\□□.mdf',
MOVE '○○_log' TO 'メモしたデータファイルの場所\□□_log.ldf'
go
□□は、別名のデータベースになります。
MOVE ‘○○’とMOVE ‘○○_log’は、以下のSQL文を実行し、論理名(logical_name)を確認して代替して実行してください。
RESTORE FILELISTONLY FROM DISK = 'メモしたファイルの場所(DATAをBACKUP)\○○.bak'
go
具体例
RESTORE DATABASE AfterDatabase
FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\BACKUP\BeforeDatabase.bak'
WITH
MOVE 'BeforeDatabase' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AfterDatabase.mdf',
MOVE 'BeforeDatabase_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\BACKUP\AfterDatabase.ldf'
go
これで、BeforeDatabaseと同じ内容のAfterDatabaseを作成できました。