【SQL Server 2012】バッチ(コマンドプロンプト)でリストア
公開日:
:
最終更新日:2015/01/12
データベース SQL Server 2012, コマンドプロンプト, データベース, リストア
バッチ(コマンドプロンプト)を使って、SQL Server 2012のリストアしてみたいと思います。
個人的には、リストアをバッチファイルで行うってことは、ないかなぁーって思ってます。
まずは、僕の環境。
・OS:Windows Server 2012
・データベース:SQL Server 2012
・リストア対象のDBサーバーホスト名:DBSERVER
・リストア対象のインスタンス:SQLEXPRESS
・リストア対象のデータベース名:db_Sales
・接続ユーザー:Windows認証
・リストア用のバックアップファイル:C:\temp\testdb3.bak
※リストア用のバックアップファイルは、以前にバッチ(コマンドプロンプト)で取得したバックアップファイルです。
sqlcmd -S .\SQLEXPRESS -Q “RESTORE DATABASE db_Sales FROM DISK = N’C:\temp\testdb3.bak’ WITH REPLACE” > C:\temp\restore.log |
※ダブルコーテーションとシングルコーテーションは半角へ変更
↑のコマンドをサーバー上のコマンドプロンプトで実行すれば、対象のデータベースがリストアされます。
■コマンド解説
sqlcmd -S .\SQLEXPRESS -Q “RESTORE DATABASE db_Sales FROM DISK = N’C:\temp\testdb3.bak’ WITH REPLACE” > C:\temp\restore.log |
・sqlcmd
SQL ServerをCUIで管理するツール
・-S DBSERVER\SQLEXPRESS
接続サーバー。僕の場合、ホスト名:DBSERVER、インスタンス名:SQLEXPRESSなので、
DBSERVER\SQLEXPRESS となります。ローカルの場合は、ホスト名を省略して「.\SQLEXPRESS」でもOK。
・-Q “RESTORE DATABASE 【対象データベース】 FROM DISK = N’【リストアファイル名】’ WITH REPLACE”
実行するSQLコマンド。
・ > C:\temp\restore.log
ログファイルの出力先。無くても問題ありません。
■SQLServer認証ユーザーでコマンドを実行する場合、以下のように認証ユーザーとパスワードを追加。
sqlcmd -S DBSERVER\SQLEXPRESS -U 【ログインユーザー名】 -P 【ログインパスワード】 -Q “RESTORE DATABASE db_Sales FROM DISK = N’C:\temp\testdb.bak’ WITH REPLACE” > C:\temp\restore.log |
・-U 【ログインユーザー名】
SQLServer認証ユーザー名。
・-P 【ログインパスワード】
SQLServer認証ユーザーのパスワードを上記のように追加して、実行すれば可能です。
■リストアが失敗するときのエラーその1
メッセージ 3110、レベル 14、状態 1、サーバー DBSERVER\SQLEXPRESS、行 1 ユーザーにはデータベース ‘db_Sales’ を復元する権限がありません。 メッセージ 3013、レベル 16、状態 1、サーバー DBSERVER\SQLEXPRESS、行 1 RESTORE DATABASE が異常終了しています。 |
対処方法は、実行するユーザーに復元する権限がないので、以下のどれかを付与する
・dbo
・sysadminサーバロール
・dbcreatorサーバロール
僕は、実行ユーザーにdbcreator権限を付与してあげて、実際にリストアに成功しました。
【権限付与方法】
1.Management Studioで対象のデータベースへ接続し、
データベース/セキュリティ/ログインの対象ユーザーを右クリック、【プロパティ】
2.ログインのプロパティ画面で【サーバーロール】を選択
3.【dbcreator】にチェックを入れ、OK
■リストアが失敗するときのエラーその2
メッセージ 3101、レベル 16、状態 1、サーバー DBSERVER\SQLEXPRESS、行 1 データベースは使用中なので、排他アクセスを獲得できませんでした。 メッセージ 3013、レベル 16、状態 1、サーバー DBSERVER\SQLEXPRESS、行 1 RESTORE DATABASE が異常終了しています。 |
対処方法は、誰がデータベースにアクセスしているか調べ、データベースから抜けてもらう。
・利用状況モニターで確認する。
リストアなんて基本やらないほうがいいと思いますが…
覚えておいて損はないと思います。
Adsense
関連記事
-
【Management Studio】テーブル単位のメモリ使用量の確認
1.Management Studioを起動し、メモリ使用量が確認したい対象サーバーへ接続 2.確
-
【SQL Server】Excel VBAでSELECT文を実行してレコードセットへ取得
前回は、テーブルのレコードをVBAで直接更新(Insert/update/delete) 今回
-
【レプリケーション】SQL Server 2012 Expressでレプリケーション
Windows Server 2012のSQL Server 2012 Expressを二台用意して
-
【SQL Server 2012】バッチ(コマンドプロンプト)でバックアップ
バッチ(コマンドプロンプト)を使って、SQL Server 2012のバックアップを取得します。
-
【SQL Server 2012】SQLでエクセル表示の実行エラーの対処法
SQLでエクセル表示を実行した時にエラーとなった場合の対処法。 実はSQLでエクセルファイルを表示
-
【SQL Server 2012】Management Studioでサンプルデータベース(mdfファイル)をアタッチ
以前、Windows Server 2012にMicrosoftR SQL ServerR 2012
-
【ODBC】Access2007でSQL Server 2012に接続する為のサーバー側の設定
ODBCでAccess2007からSQL Server 2012へ接続する為には SQL Serv
-
【SQL Server】Management Studioを使ったトランザクションログファイルの圧縮
「ファイルが書き出せない」と問い合わせを受け、DBサーバーのマイコンピュータ確認したら、Dドライブ(
-
【SQLServer2012】バックアップ/リストア方法 リストア編
SQL Server 2012のデータベースをManagement Studioを使用して、リストア
-
【SQL Server 2012】Management Studioを使ったバックアップで面白い機能。
Management Studioを使ったバックアップをかれこれ3年くらいやってるんですが、一つのバ