sqlcmdユーティリティ

Last-modified: 2025-10-04 (土) 20:33:16

Amazon SQL本

バッチファイルで、SqlServerのバックアップを行う方法(.bakファイルを作る)

サンプル

No.コマンド(オプション)実行例実用性(社内SEの利用シーン)
1基本的な接続sqlcmd -S SERVER_NAME最も基本的な接続。既定ではWindows認証(現在のログインユーザー)を使用し、対話モードでT-SQLを実行します。
2SQL Server認証sqlcmd -S SERVER_NAME -U UserID -P PasswordSQL Server認証(IDとパスワード)で接続します。認証トラブルやWindows認証が使えない環境での接続確認に不可欠です。
3データベース指定sqlcmd -S SERVER_NAME -d DatabaseName接続時にすぐに作業対象のデータベースに切り替えます。誤操作防止と効率向上に役立ちます。
4クエリの直接実行sqlcmd -S SERVER_NAME -Q "SELECT COUNT(*) FROM TableName"ワンショットでの確認や、スクリプト化に最も使われます。結果がすぐに表示され、対話モードを起動する手間が省けます。
5ファイルの実行sqlcmd -S SERVER_NAME -i "C:\script\update.sql"定型作業の自動化、大規模な更新やバッチ処理に必須。事前に用意したSQLファイルを指定したサーバーで実行します。
6結果をファイルに出力sqlcmd -S SERVER_NAME -Q "SELECT * FROM Logs" -o "C:\result\log.txt"監査ログ、エラー情報、設定値などを取得し、ファイルとして保存・共有・分析するために使います。
7行数の抑制sqlcmd -S SERVER_NAME -h -1 -Q "SELECT * FROM LargeTable"大量のデータ取得時に、既定で表示される「影響を受けた行数」などのメッセージ表示を抑制し、純粋なデータのみを扱いたい場合に有用です。
8変数の利用sqlcmd -S SERVER_NAME -i update.sql -v TargetID=100スクリプトファイル内で動的に値を変更したい場合に利用。汎用性の高いSQLスクリプトを作成・再利用するために重要です。
9エラー出力のリダイレクトsqlcmd -S SERVER_NAME -i script.sql > C:\log.txt 2>&1T-SQLの実行結果だけでなく、**実行時の標準出力とエラー出力(標準エラー)**を全てログファイルに記録し、トラブルシューティングの証拠とします。
10ヘッダーの非表示sqlcmd -S SERVER_NAME -h -1 -W -Q "SELECT Name FROM Users"スクリプトの結果をそのまま別の処理の入力として使いたい場合など、余分な列ヘッダーを非表示にします。
11タイムアウト指定sqlcmd -S SERVER_NAME -l 60 -Q "SELECT... (重いクエリ)"接続試行のタイムアウト(秒)を指定します。ネットワークが不安定な場合や、意図的に短時間で処理を打ち切りたい場合に利用します。
12ワイドな表示sqlcmd -S SERVER_NAME -W -Q "SELECT... (多くの列)"既定の80列制限を解除し、広い列を持つテーブルのデータを整形せずに表示できます。データ確認の効率が上がります。

サンプル2

バッチファイル(sql-Bck.bat)から、SQLファイル(PickDB-BackUp.sql)を呼び出し、バックアップする。

バッチファイル側 (sql-Bck.bat)

echo %date% %time% ---------------------- >>D:\BACKUP\SqlserverBackUp.LOG
echo %date% %time% BackUp Start ... >>D:\BACKUP\SqlserverBackUp.LOG
del D:\BACKUP\PickDB.BAK1
ren D:\BACKUP\PickDB.BAK PickDB.BAK1
sqlcmd -S (サーバ名\インスタンス名) -U (LoginID) -P (Password) -i D:\BACKUP\PickDB-BackUp.sql
echo %date% %time% BackUp ...End >>D:\BACKUP\SqlserverBackUp.LOG

SQLファイル側 (PickDB-BackUp.sql)

BACKUP DATABASE PickDB TO DISK = N'D:\BACKUP\PickDB.BAK' WITH INIT

バックアップ中の同時実行の制限事項

バックアップ中はほとんどの操作が可能です。
たとえば、INSERT、UPDATE、または DELETE ステートメントはバックアップ操作中でも使用できます。
ただし、データベースの作成中または削除中にバックアップ操作を開始しようとすると、データベースの作成または削除操作が完了するまで、
またはバックアップがタイムアウトするまで、バックアップ操作が待機します

データベース バックアップやトランザクション ログ バックアップ中に、次の操作を実行することはできません。

  • ADD FILE または REMOVE FILE のいずれかのオプションが指定された ALTER DATABASE ステートメントなどのファイル管理操作。
  • データベースまたはファイルの圧縮操作。これには自動圧縮操作も含まれます。
  • バックアップ操作実行中にデータベース ファイルを作成または削除しようとすると、作成操作または削除操作は失敗します。

参考

Amazon SQL本

sqlファイル側

-- スクリプト変数に設定されたテーブル名のレコードを取得
SELECT * FROM $(Param1)
-- スクリプト変数をローカル変数に代入
DECLARE @UserId char(8)
SET @UserId = '$(Param2)'

batファイル側

sqlcmd -S %DB_NAME%\%INSTANCE_NAME% -i %SQL_FILE_NAME% -v Param1=%PARAM1% Param2=%PARAM2%

サイト内リンク

SQL Server

DB系

その他

OS系

Office系