【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
関連記事
-
-
【ODBC】Access2007でSQL Server 2012に接続する為のサーバー側の設定
ODBCでAccess2007からSQL Server 2012へ接続する為には SQL Serv
-
-
【ODBC】Windows7でAccess2007とSQL Serverを接続する為のODBCの作成
前回、ODBC接続の為のサーバー側の設定を行いましたので、 今回はAccess2007側のWind
-
-
【SQL Server 2012 Express】Windows Server 2012にインストールしてみる
Windows Server 2012にSQL Server 2012をインストールしてみる。 以
-
-
【SQL Server 2012】バッチ(コマンドプロンプト)でバックアップ
バッチ(コマンドプロンプト)を使って、SQL Server 2012のバックアップを取得します。
-
-
【SQL Server 2012】Management Studioを使ったバックアップで面白い機能。
Management Studioを使ったバックアップをかれこれ3年くらいやってるんですが、一つのバ
-
-
【SQL Server 2012】Management Studioで誰がデータベースに接続しているか調べる。
SQL Server 2012でリアルタイムで接続しているユーザーを確認するには Manageme
-
-
【レプリケーション】SQL Server 2012 Expressでレプリケーション
Windows Server 2012のSQL Server 2012 Expressを二台用意して
-
-
【Management Studio】Microsoft SQL Server 2012 ExpressにManagement Studio のインストール方法。
前回、Windows Server 2012にSQL Server 2012 Expressをインス
-
-
【SQL Server】データベース作成日時(リストアした日付)を確認する方法
トラブルの調査をするとき、開発用の環境を作成して、調査するのですが… この環境っていつ作成した
-
-
【SQL Server】エクセルをテーブルに取り込む方法
以前にManagement Studioを使ってSQLでエクセルを直接取り込む方法を書きましたが、今