コマンドラインでSQL Serverデータベースをバックアップする際のベストプラクティス
この解説では、SQL Serverデータベースをコマンドラインでバックアップするためのシンプルなスクリプトについて説明します。
対象者
- SQL Serverデータベースのバックアップを自動化したい方
- コマンドライン操作に慣れていない方
解説
バックアップコマンド
SQL Serverデータベースをコマンドラインでバックアップするには、BACKUP DATABASE
コマンドを使用します。
BACKUP DATABASE database_name
TO disk_location
オプション
WITH
句: バックアップオプションを指定できます。NOFORMAT
オプション: バックアップファイルのフォーマットを検証しない。INIT
オプション: バックアップファイルのヘッダー情報を初期化します。
例
BACKUP DATABASE MyDatabase
TO C:\Backups\MyDatabase.bak
WITH NOFORMAT, INIT
スクリプティング
上記のBACKUP DATABASE
コマンドをスクリプトファイルに記述することで、バックアップ作業を自動化できます。
# PowerShellスクリプト
$databaseName = "MyDatabase"
$backupLocation = "C:\Backups"
Backup-SqlDatabase -DatabaseName $databaseName -BackupLocation $backupLocation
# ログ出力
Write-Host "データベース[$databaseName]のバックアップが完了しました。"
スケジュール設定
作成したスクリプトをタスクスケジューラなどのツールで定期的に実行することで、データベースの定期的なバックアップを実現できます。
注意事項
- バックアップファイルは安全な場所に保存してください。
- バックアップ前にデータベースをトランザクションログバックアップしておくことをお勧めします。
- スクリプトを実行する前に、必ずテストを行ってください。
補足
上記はシンプルなスクリプトの例です。実際の運用環境に合わせて、スクリプトをカスタマイズする必要があります。
コマンドライン操作に慣れていない方は、SQL Server Management Studio (SSMS) などのツールを使用して、GUIでバックアップを実行することもできます。
- 自分に合った方法を選択してください。
以上
# PowerShellスクリプト
$databaseName = "MyDatabase"
$backupLocation = "C:\Backups"
# バックアップファイル名
$backupFileName = "$databaseName-$(Get-Date -Format yyyyMMdd-HHmmss).bak"
# バックアップ実行
Backup-SqlDatabase -DatabaseName $databaseName -BackupLocation $backupLocation -BackupFileName $backupFileName
# ログ出力
Write-Host "データベース[$databaseName]のバックアップが完了しました。"
バッチファイル
@echo off
rem データベース名
set "databaseName=MyDatabase"
rem バックアップ場所
set "backupLocation=C:\Backups"
rem バックアップファイル名
set "backupFileName=%databaseName%-%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%.bak"
rem バックアップ実行
sqlcmd -S localhost -Q "BACKUP DATABASE %databaseName% TO '%backupLocation%\%backupFileName%'"
rem ログ出力
echo "データベース[%databaseName%]のバックアップが完了しました。"
Pythonスクリプト
import pyodbc
# 接続情報
server = "localhost"
database = "MyDatabase"
username = "sa"
password = "YourPassword"
# バックアップファイル名
backup_file_name = f"{database}-{datetime.datetime.now():%Y%m%d-%H%M%S}.bak"
# バックアップ実行
connection = pyodbc.connect(f"Driver={{SQL Server}};Server={server};Database={database};Trusted_Connection=Yes;", username, password)
cursor = connection.cursor()
cursor.execute(f"BACKUP DATABASE {database} TO '{backup_file_name}'")
connection.close()
# ログ出力
print(f"データベース[{database}]のバックアップが完了しました。")
実際の運用環境に合わせて、コードをカスタマイズする必要があります。
SQL Serverデータベースをコマンドラインでバックアップするその他の方法
sqlcmd
コマンドを使用して、BACKUP DATABASE
コマンドを実行できます。
sqlcmd -S localhost -Q "BACKUP DATABASE MyDatabase TO C:\Backups\MyDatabase.bak"
T-SQL
BACKUP DATABASE MyDatabase
TO C:\Backups\MyDatabase.bak
WITH NOFORMAT, INIT
PowerShellを使用して、Backup-SqlDatabase
コマンドレットを実行できます。
Backup-SqlDatabase -DatabaseName MyDatabase -BackupLocation C:\Backups
他のツール
- SQL Server Backup and Restore Wizard
- Ola Hallengren's SQL Server Backup Script
- Redgate SQL Backup
コマンドライン操作に慣れていない方は、SSMS などのツールを使用して、GUIでバックアップを実行することをお勧めします。
その他の方法を選択する際の考慮事項
- 使いやすさ
- 機能
- セキュリティ
sql-server command-line scripting