【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

いつも楽しく勉強させていただいております。

環境はSQLServer2012のExpressでOSはWindowsServer2008です。

Test1というデータベースのバックアップを取ってTest2という名前で復元しようとしましたが、なぜか失敗してしまいます。
どなたか原因を教えていただけませんか。

次の手順でバックアップを取り、復元をしています。


○バックアップのフェーズ

1.データベースのバックアップのダイアログボックスを開く。
2.ソースにTest1、バックアップの種類に完全を指定する。
3.バックアップ先は以下のファイルに

 C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\Test1.bak

4.OKをクリックし、「データベース'Test1'のバックアップが正常に完了しました」を確認。

○復元のフェーズ

5.データベースの復元のダイアログボックスを開く。
6.ソースはデバイスにする。
7.ファイル名に上記3.のファイル名を指定
8.転送先データベースはTest2とする。
9.OKをクリック(ここでエラーとなる)。

エラーメッセージは以下の通りです。

------------------------------------------
データベース'Test2'の復元に失敗しました。(Microsoft.SqlServer.Mangement.RelationalEngineTasks)
追加情報:

System.Data.SqlClient.SQLError:ファイル'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Test1.mdf'に上書きできません。
データベースTest1が使用中です。(Microsoft.SqlServer.SmoExtended)
------------------------------------------

メッセージの内容で引っかかるのはTest1.mdfに上書きできませんというところです。
上書きでなくTest2という新規データベースに書き込みたいのですが。

ためしにTest2というデータベースを作成しておいて「既存のデータベースに上書きする」をチェックしてやってみましたが、やはり失敗。
メッセージは上と同じです。
SQLServerを再起動して試してもやはり結果は同じです。

何が悪いのでしょう。

「SQLServer2012の復元ができな」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (1件)

復元時にデータファイルとログファイルの格納先を指定して変更する必要があります。

    • good
    • 7
この回答へのお礼

できました!!

復元の手順の9.OKをクリックの前に復元のダイアログボックスで格納先を指定したら成功しました。
同じ悩みを持つ人がいるかもしれないので詳しく書きますと、

1.復元のダイアログボックスの左のバーでファイルをクリック。
2.画面右下の...ボタンをクリックして、新しいデータベースのmdfとldfを指定する。

お礼日時:2014/05/22 13:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Q復旧中のデータベースについて

SQL Serverのバックアップを取る為
DBをオフラインにしたのですが
いくつかのDBが
[DB名](復旧中) となったまま状態が元に戻りません。
この状態を強制的に解除する方法はありますでしょうか?
教えて下さい。

Aベストアンサー

うーん、そもそもやり方に問題がありますね。

バックアップというのは、通常BACKUPコマンドを使って実行し、バックアップファイルの拡張子はBAKになります。
戻すときはRESTOREコマンドを使って実行します。

質問者さんがやられたようにMDF/LDFのファイル自体をコピーする方法は一般的ではありません。
が、もしやるならば、「オフラインにする」のではなく、「データベースのデタッチ」を実行してデータベースを一旦切り離し、
それからコピーするのが正しい方法です。
(お勧めはしませんが、SQL Serverサービスを停止させてからコピーする方法もあります)

データベースのステータスはシステムデータベースのmasterが管理しています。
データベースをオフラインにして、ファイルを差し替えたことにより、masterデータベースの把握している状態と齟齬が生じてしまったため、そのような状態になってしまったと考えられます。
そのデータベースをドロップするかデタッチして、改めてMDF/LDFをアタッチするしかないと思いますが、前にコピーしたMDF/LDFも同じ方法でとったものならば、わずかながらうまくいかないリスクはあります。

SQL Serverのバージョンは何ですか?Enterprise ManagerもしくはSQL Server Management Studioが使える状態ですか?
(バックアップ、リストア、デタッチ、アタッチはGUIでできるので)

うーん、そもそもやり方に問題がありますね。

バックアップというのは、通常BACKUPコマンドを使って実行し、バックアップファイルの拡張子はBAKになります。
戻すときはRESTOREコマンドを使って実行します。

質問者さんがやられたようにMDF/LDFのファイル自体をコピーする方法は一般的ではありません。
が、もしやるならば、「オフラインにする」のではなく、「データベースのデタッチ」を実行してデータベースを一旦切り離し、
それからコピーするのが正しい方法です。
(お勧めはしませんが、SQL Serv...続きを読む

Q既定のインスタンスと名前付きインスタンス

Microsoft SQL Server 2012 をインストールしたいのですが、
既定のインスタンスと名前付きインスタンスのどちらを選べばいいのでしょうか?
SQLサーバーは初心者です。

Aベストアンサー

SQL Server は同一マシン上にいくつもインストールすることができる。
SQL Server は DB を管理するサービス (DBMS) なので、同一マシンに複数インストールすれば、同一マシンで複数の DBMS が稼動することになる。
1つめの DBMS で管理されている DB-A という DB があったとして、さらに 2つ目の DBMS にも DB-A という DB があったとしても、1つ目の DBMS で管理している DB-A と 2つ目の DBMS で管理している DB-A は別物である。

これは Windows のフォルダーで考えればわかりやすい。
1つのマシン上には複数のドライブ (C とか D とか) をマウントできる。
各ドライブには当然ながらフォルダーがあるが、C:\hoge と D:\hoge という 2つの同じ名前のフォルダーはドライブが違うので別物である。

で、本題。
同一マシン上に複数の DBMS をインストールする場合、それぞれの DBMS のインスタンスに名前をつけて区別する。
ただし 1つの DBMS しか稼動させない場合は名前をつける必要がない。これを 「既定のインスタンス」 と呼ぶ。
既定のインスタンスが稼動しているマシンに 2つ目の DBMS をインストールする場合、すでに稼動している既定のインスタンスと区別するために何か名前をつける必要がある。これが 「名前付きインスタンス」 である。

ただし DBMS を 1つしか稼動させない場合でも、何が何でも既定のインスタンスにしなくてはならないわけじゃなく、名前をつけてやってもかまわない。

例外として、SQL Server の無償版である Express Edition は、通常は名前付きインスタンスとしてインストールされる。
名前付きインスタンスを指定せずにインストールした場合は、既定の名前付きインスタンスである SQLExpress が使用される。

SQL Server は同一マシン上にいくつもインストールすることができる。
SQL Server は DB を管理するサービス (DBMS) なので、同一マシンに複数インストールすれば、同一マシンで複数の DBMS が稼動することになる。
1つめの DBMS で管理されている DB-A という DB があったとして、さらに 2つ目の DBMS にも DB-A という DB があったとしても、1つ目の DBMS で管理している DB-A と 2つ目の DBMS で管理している DB-A は別物である。

これは Windows のフォルダーで考えればわかりやすい。
1つのマシン上には複数...続きを読む

QSQL Server のキャラクターセット(内部文字コード)は何処で定義するのでしょうか?

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問させていただきます。
以下2点についてどなたかコメント願います。
1.(Oracleでいうキャラクターセット)はどこで定義するのでしょうか?
2.OracleでいうNLS_LANGに相当するものはあるのでしょうか?
 (ひょっとしたらマイクロソフト製品なのでサーバもクライアントもCP932固定なのでしょうか?)

根本的にはシステム構築する上で『極力文字化けに遭遇したくない』思い出このような質問をさせていただきました。
『文字化け』について注意点などありましたら合わせてコメントいただければ助かります。
以上よろしくお願いします。

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問...続きを読む

Aベストアンサー

Windowsのロケールの設定を日本語にした状態でSQLServerをインストールした場合、cp932がデフォルトの照合順序になります。照合順序については参考URLをご覧下さい。

SQLServerではわかりませんが、PostgresではJDBCドライバ部分で変換していたように記憶しています。ODBCドライバではAutoTranslateという機能があります。

このため、ODBC接続で何も考えずにvarcharを使用するとcp932になります。

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/sql2005/bb330962.aspx

Q別のDBからテーブルをコピーする方法

SQL Server2005 Express Edition を使っています。
異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの
ですが・・・
コピー元DB名:DB_A
コピー元テーブル名:dbo.顧客
コピー先DB名:DB_B

テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。
お教えいただければ幸いです。
よろしくお願いいたします。

Aベストアンサー

別のDBでも同じインスタンス内ならば同じです。

SELECT * INTO DB_B.dbo.顧客 FROM DB_A.dbo.顧客

Q復元に異常に時間がかかる

DBの復元をしようとしているのですが、
復元中のメッセージ表示後、インジケータが全く動かなくて、
1時間たったところでキャンセルしました。
その間、タスクマネージャーを見てみましたが、
CPUは1%、メモリも300MB程で、
何もしていないで止まっている感じです。
なぜそうなってしまうのでしょうか?
回答宜しくお願いします。

Aベストアンサー

リストアするときにそのデータベースに接続しているセッションが残っていると、リストアがいつまで経っても0%のままなので、「おかしいな」と思うことは昔よくありました。
(実際には「排他アクセスを取得できませんでした」というメッセージが別ウィンドウで返ってきているのですが、気付きにくいんですよね)

今回のケースが同じものか、書かれている状況だけでは判断できませんが、クエリアナライザの接続も一つ残らず閉じて、それでリトライしてみることをお勧めします。

Q処理件数を非表示にしたい

ManagementStudioでストアドプロシージャの開発をしています

開発中、デバッグのためにプロシージャをコールすると、SQLの発行の度に
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
「何件処理されました。」
・・・

と処理件数が表示され、確認の際に邪魔で困っています。
処理件数を非表示にするにはどうすれば良いでしょうか?

また同様に、SELECT文の発行ごとにSELECT結果がグリッドに表示されるのを非表示にできないでしょうか?

Aベストアンサー

処理件数を非表示にする方法

⇒SELECT文の前に「set nocount on」を記載すると件数は表示されません。

SELECT文の発行ごとにSELECT結果がグリッドに表示されるのを非表示にする方法

⇒デバッグのためには表示された方が良いと思いますが、
 とりあえず…SELECT文の前に「SET NOEXEC ON」を記載するとデバッグだけ実施され、
 グリッドは表示されません。
例であげると以下のとおりです。
SET NOCOUNT ON
SET NOEXEC NO
SELECT *
FROM DB.dbo.TableName
go

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

QSQLサーバから、項目の属性(型)を取得したいのですが・・・

SQLサーバからテーブルの項目名、属性(型)を取得するには、どのように
クエリを組めば良いのでしょうか?

Aベストアンサー

2つ前の質問に書いたのと一緒ですが。。
基本的にsys.objects, sys.columnsというシステムビューを使います。

select object_name(object_id),name,type_name(user_type_id) from sys.columns c
where object_id=object_id('テーブル名')

Q型 varchar から型 numeric への変換エラー。

SQLクエリアナライザを使って、あるデータベースからLEFT JOINなどを駆使し、条件にそってデータを抽出しようと必死でやっております。
今まではうまく取得できていたのに、”型 varchar から型 numeric への変換エラー。”というエラーがでるようになりました。
前回とテーブルのデータを比較してみると、IsNULL(chrShokuhinCD,'') as chrShokuhinCDで引っ掛かっているようです。
この項目には空白(スペース)が入ったデータが最近存在しているのが原因だと思うのですが。。。
空白だったとき、IsNULL(chrShokuhinCD,'') as chrShokuhinCDはどのように修正すればよいでしょうか?教えてください。

Aベストアンサー

>空白だったとき、IsNULL(chrShokuhinCD,'') as chrShokuhinCDはどのように修正すればよいでしょうか?

では質問です。
空白だったとき、どんな数値として扱えばいいでしょうか?

これで何を入れればいいかわかると思いますが。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング