*

【SQL Server 2012】バッチ(コマンドプロンプト)でリストア

公開日: : 最終更新日:2015/01/12 データベース , , ,

バッチ(コマンドプロンプト)を使って、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
SQL Server 2012 dbcreator権限の付与
■リストアが失敗するときのエラーその2

メッセージ 3101、レベル 16、状態 1、サーバー DBSERVER\SQLEXPRESS、行 1
データベースは使用中なので、排他アクセスを獲得できませんでした。
メッセージ 3013、レベル 16、状態 1、サーバー DBSERVER\SQLEXPRESS、行 1
RESTORE DATABASE が異常終了しています。

対処方法は、誰がデータベースにアクセスしているか調べ、データベースから抜けてもらう。
利用状況モニターで確認する。
リストアなんて基本やらないほうがいいと思いますが…
覚えておいて損はないと思います。

Adsense

関連記事

データベース

【Management Studio】データベースの定義を取得する方法

あくまでデータベース定義の取得です。 ※データベースのデータを取得する方法ではありません。

記事を読む

データベース

【SQL Server 2012】SQLでエクセルをテーブルとして表示させる方法

SQL Management Studioを使用してインポート等は使用せずにSQLのみでテーブルを表

記事を読む

データベース

【SQL Server】アンインストール手順

手順としては、http://technet.microsoft.com/ja-jp/library/

記事を読む

データベース

【SQL Server】varchar型、nvarchar型の文字数とバイト(byte)数を取得する

varchar型の文字数、バイト(byte)数を取得する方法 SELECT LEN(【文字

記事を読む

データベース

【SQL Server 2012】テーブル、カラム、主キー、NULL制約、データ型、長さ、INDEXの有無の一括表示

職場のシステムリプレースに伴い、データベースのテーブル(カラム)の一覧が必要になりました。 普

記事を読む

データベース

【SQL Server 2012 Express】Windows Server 2012にインストールしてみる

Windows Server 2012にSQL Server 2012をインストールしてみる。 以

記事を読む

データベース

【SQL Server】Excel VBAのレコードセットを使ってテーブルの一括更新

前々回は読み取り専用でレコードセットへ取得し、結果をエクセルへ書き出し 前回はVBAから更新S

記事を読む

データベース

【SQL Server】Excel VBAでSELECT文を実行してレコードセットへ取得

前回は、テーブルのレコードをVBAで直接更新(Insert/update/delete) 今回

記事を読む

データベース

【SQLServer2012】バックアップ/リストア方法 リストア編

SQL Server 2012のデータベースをManagement Studioを使用して、リストア

記事を読む

データベース

【SQL Server】Management Studioでテーブルをデザインから変更するとエラーになる

変更の保存が許可されていません。行った変更には、次のテーブルを削除して再作成することが必要に

記事を読む

Adsense

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

Microsoft Office
【Access】削除クエリの「指定されたテーブルから削除できませんでした。」の対処法

削除クエリで「指定されたテーブルから削除できませんでした。」と ポッ

Microsoft Office
【PowerPoint】表や図形、画像オブジェクトの位置をピッタリ合わせる方法

パワーポイントで、図形や画像等のオブジェクトの細かい位置調整は、 完

データベース
【SQL Server】Excel VBAのレコードセットを使ってテーブルの一括更新

前々回は読み取り専用でレコードセットへ取得し、結果をエクセルへ書き出し

application
【Visual Studio】デバック、ブレークポイントで止まらない。

Visual Studio 2015でVB.netのプログラムをデバッ

データベース
【SQL Server】Excel VBAでSELECT文を実行してレコードセットへ取得

前回は、テーブルのレコードをVBAで直接更新(Insert/updat

→もっと見る

PAGE TOP ↑