SQL Serverは混乱の状態にあります。データベースは存在しますか、それとも存在しませんか?


8

本当に奇妙で厄介な問題が発生しました。サーバー上で実行されているSQL Server 2008 R2のインスタンスがなんらかの理由で破損しています。

まず、昨日作成したデータベースが見つからないことに気づきました。それで、私たちは周りを見回して、それはまだそこにあるが、離れていることがわかりました。したがって、mdfを添付しようとしましたが、のようなメッセージが表示されましたThe file is currently in use

変だと思ったのでSQL Serverを再起動しました。同じこと...さて、抜本的な対策の時間...それで、サービスを停止し、mdfを圧縮し、サービスを開始し、解凍してから、復元しようとしました。上記のメッセージは消えましたが、それから私は得ました:

既存のデータベースと同じ名前のデータベースをアタッチできません

痛い。もちろん、データベースエクスプローラには表示されないので、何が起こっているのかわかりません...最後の手段:

DROP DATABASE [DatabaseName]

もちろん、それはうまくいきませんでした。データベースが存在しないことを教えてくれます。だから、私は行き詰まっています...ある時点でSQL Serverはデータベースが存在すると見なし、別の時点でdbが存在しないと見なします。明らかに混乱の状態にあります。

誰かこれを見たことがある?それを修正する方法に関するアイデアはありますか?


物理ファイルはもう存在しませんね?それでもデータベースは表示されますsys.databasesか?例えば、SELECT * FROM sys.databasesまだあなたのデータベースをリストしていますか?
marc_s 2013年

@Josienはヒントをありがとう..私もそこに置いた
Matt

@marc_s試しましたが、そのクエリを実行しても表示されません
Matt

何をSELECT name, user_access_desc, state_desc FROM sys.databases明らかにしますか?
Mark Storey-Smith

一体誰がこの投稿に反対票を投じるのでしょうか?誰かが詳しく説明してもらえますか?真剣に...
マット

回答:


5

右..私はそれを理解しました..(それを所有しない)ここのピエロの一部がdbの名前を変更したため、SSMSでのその名前はmdfおよびldfファイルの名前とは異なり、少しだけ違います。 。 全然違う。笑。とにかくあなたの役に立つ提案をありがとう。


4
安全のために、「sa」以外のすべてのユーザーに対してデータベースのALTER権限を拒否し、「sa」のパスワードを変更し、「クラウン」にパスワードを提供する際は厳選する
Carol Baker West

4

データベースを表示する権限がない場合は、これがまさに症状です。データベースはビューに表示されません。アクセス権のないデータベースのファイルをザップしただけではないですか?システム管理者として運用していますか?

更新


データベースはデタッチされたオフラインでしたか?あなたがSo, we looked around and found that it was still there, but detached正確に何について話していると言うとき?どこを見た、何を見つけた?データベースが「切り離された」(たとえば、削除されたのではなく)ことを特定することは簡単ではありません。


私は実際にシステム管理者です
Matt

2
:あなたはそれを言及しているので、私は、デフォルトのデータ/ログフォルダに付着していないデータベースファイルを検出し、私のブログ上でスクリプト持っvoluntarydba.com/post/2012/08/21/...
ジョン・シーゲル

ありがとう、私が後でオフィスにいるときにそれを試してみるつもりです。
Matt

@JonSeigel、素晴らしいものですが、残念ながらそれは私には何も現れませんでした。私は他のことも試しました..サーバーを再起動してから、その名前で新しいDBを作成しました..それを行うことができません..非常に迷惑です。この状況を無視して、別の名前で新しいデータベースを作成する必要があると思います。
Matt

3

sys.databasesをクエリします。データベースの名前の末尾にスペースを付けて作成された可能性があります。以下のコードを実行すると、作成できるデータベースは1つだけで、どのデータベースを最初に作成しても、そのデータベースしか作成できないことに注意してください。

create database [test]
create database [test ]

これはバグだと思いますよね?
AK

おそらく違います。SQLは、値が存在するかどうかを確認するときにデータベース名に対してTRIMを実行していると想定しています。それは意図的なものでなければならないので、おそらく仕様によるものです。
mrdenny 2013年

@mrdenny、ありがとう、でもそこには助けがありません..データベースはまったく表示されず、名前に変化はありません..そのサーバーにはデータベースがほんの少ししかないので、そこにあればすぐに見つけます。とにかくありがとう
Matt

0

master、msdb、およびデータベース自体で「DBCC CHECKDB」を実行して、メッセージの内容を確認します。dbccをデータ損失のある修復モードで実行するために、システムをシングルユーザーモードにする必要がある場合があります。または、必要に応じてmasterとmsdbのバックアップを復元します。


... masterおよびmsdbに助けにはならなかったことを実行していると私は全く管理スタジオでデシベルを見ることができないので、私は、DB自体にそれを試すことができません
マット・

0

私にとって、これはデータベースを更新することで解決しました。私はいくつかの失敗したリカバリを実行し、同じエラーメッセージで削除に失敗したdbを確認しました。「データベースがサーバーに存在しません。」


2
「データベースの更新」をどの程度正確に行うかについて詳しく説明したい場合があります。
Mustaccio 2014年

0

SQL Server 2008r2を使用してこれと同じ問題が発生していました。

データベースを複製しようとして(バージョン管理foo)、SQLサーバーを混乱させました。SQL Server Management Studioはデータベースが存在すると(MDFとLDFは存在する)と考えていましたが、マスターデータベースはデータベースが存在するとは考えていません(sys.databasesに表示されませんでした)。

コツは、MDFファイルとLDFファイルの名前を変更し、SQLからデータベースを作成してからcreate database [db name here]、データベースを削除し、最後に以前のMDFファイルとLDFファイルを添付することでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.