*

【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

関連記事

データベース

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

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

記事を読む

データベース

【ODBC】Access2007でSQL Server 2012に接続する為のサーバー側の設定

ODBCでAccess2007からSQL Server 2012へ接続する為には SQL Serv

記事を読む

データベース

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

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

記事を読む

データベース

【SQL Server 2012】バックアップ/リストア方法 バックアップ編

Management StudioでSQL Server 2012のデータベースバックアップファイル

記事を読む

データベース

【SQL Server】エクセルをテーブルに取り込む方法

以前にManagement Studioを使ってSQLでエクセルを直接取り込む方法を書きましたが、今

記事を読む

データベース

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

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

記事を読む

データベース

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

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

記事を読む

データベース

【Management Studio】テーブル単位のメモリ使用量の確認

1.Management Studioを起動し、メモリ使用量が確認したい対象サーバーへ接続 2.確

記事を読む

データベース

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

バッチ(コマンドプロンプト)を使って、SQL Server 2012のバックアップを取得します。

記事を読む

データベース

【SQL Server】Management Studioを使ったトランザクションログファイルの圧縮

「ファイルが書き出せない」と問い合わせを受け、DBサーバーのマイコンピュータ確認したら、Dドライブ(

記事を読む

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 ↑