SQL Server в замешательстве: база данных существует или нет?


8

Получилась очень странная, раздражающая проблема. Каким-то образом экземпляр SQL Server 2008 R2, работающий на нашем сервере, несколько испортился.

Во-первых, мы заметили, что база данных, которую мы создали вчера, отсутствует. Итак, мы осмотрелись и обнаружили, что он все еще там, но оторван. Итак, мы попытались прикрепить mdf, но получили сообщение, похожее на The file is currently in use.

Я думал, что это было странно, поэтому перезапустил SQL Server. То же самое ... хорошо, время для радикальных мер ... итак, я остановил службу, заархивировал mdf, запустил службу, разархивировал ее и попытался восстановить. Вышеприведенное сообщение пропало, но потом я получил:

Невозможно присоединить базу данных с тем же именем, что и существующая база

Уч. Конечно, это не отображается в проводнике баз данных, так что понятия не имею, что происходит ... в крайнем случае:

DROP DATABASE [DatabaseName]

Конечно, это не сработало .. это говорит мне, что база данных не существует. Итак, я застрял ... в какой-то момент SQL Server думает, что база данных существует, а в другой момент думает, что БД не существует ... очевидно, он находится в состоянии путаницы.

Кто-нибудь видел это раньше? Есть идеи как это исправить?


Значит, физических файлов больше нет, верно? Вы все еще видите свою базу данных в sys.databases?? Например, SELECT * FROM sys.databasesвсе еще список вашей базы данных?
marc_s

@Josien thansk за совет .. Я тоже положил его туда
Matt

@marc_s Я попробовал это сейчас, но он не отображается, когда я запускаю этот запрос
Мэтт

Что SELECT name, user_access_desc, state_desc FROM sys.databasesпоказывает?
Марк Стори-Смит

С какой стати кто-то понизит этот пост? Может кто-нибудь уточнить, пожалуйста? Серьезно ...
Мэтт

Ответы:


5

Правильно ... Я понял это ... какой-то клоун здесь (который не будет владеть им) переименовал БД, чтобы его имя в SSMS отличалось от имен файлов mdf и ldf ... и не просто немного отличалось ... . совершенно другой. ЛОЛ. Спасибо всем за ваши полезные предложения в любом случае.


4
Чтобы быть в безопасности, отказывайте в разрешении ALTER на базу данных всем, кроме «sa», меняйте пароль «sa» и будьте внимательны при назначении пароля «клоунам»
Кэрол Бейкер Вест

4

Если у вас нет разрешения на просмотр базы данных, это будут именно симптомы. База данных не будет отображаться в ваших представлениях. Вы уверены, что не просто запилили файл (ы) базы данных, к которой у вас не было доступа? Вы работаете как системный администратор?

Обновить


База данных была отключена или отключена ? Когда вы говорите, So, we looked around and found that it was still there, but detachedчто именно вы говорите? Где вы смотрели, что вы нашли? Выявление того, что база данных была «отсоединена» (в отличие, скажем, от удаления), не является тривиальным.


Я действительно сисадмин
Мэтт

2
Поскольку вы упомянули об этом, у меня в блоге есть скрипт, который обнаруживает неприкрепленные файлы базы данных в папках данных / журналов по умолчанию: добровольный_домен.com
post/2012/08/

Спасибо, я попробую позже, когда буду в офисе.
Мэтт

@JonSeigel, хороший, но, к сожалению, это ничего не значит для меня. Я попробовал что-то еще ... перезапустить сервер, а затем создать новую БД с таким именем ... не позволил бы мне сделать это ... очень раздражает. Я думаю, что мне придется игнорировать эту ситуацию и создать новый БД с другим именем.
Мэтт

3

Запрос sys.database. Возможно, база данных была создана с пробелом в конце ее имени. Запустите приведенный ниже код и обратите внимание, что вы можете создать только одну из баз данных, и не имеет значения, какую из них вы создаете первыми, вы можете создать только эту.

create database [test]
create database [test ]

Я думаю, что это ошибка, верно?
AK

Возможно нет. Я предполагаю, что SQL выполняет TRIM для имени базы данных, когда проверяет, существует ли значение. Это должно быть преднамеренным, так что это, вероятно, по замыслу.
Мрденный

@ mrdenny, спасибо, но там никакой помощи .. база данных вообще не отображается, с любым изменением имени вообще ... и на этом сервере есть всего несколько баз данных, поэтому я сразу заметил бы, если бы он был там , В любом случае, спасибо
Мэтт

0

Запустите 'DBCC CHECKDB' на master, msdb и на самой базе данных, чтобы увидеть, что там написано. Может потребоваться перевести систему в однопользовательский режим, чтобы dbcc работал в режиме восстановления с потерей данных. Или просто восстановите ваши резервные копии master и msdb в зависимости от ситуации.


Запуск этого на master и msdb не помог, и я не могу попробовать это на самой db, потому что я вообще не вижу db в студии управления ...
Matt

0

Для меня это было решено обновлением баз данных. Я сделал несколько неудачных восстановлений и увидел db, который не удалось удалить, с тем же сообщением об ошибке: «База данных не существует на сервере».


2
Возможно, вы захотите рассказать о том, как именно вы «обновляете базы данных».
Мустаччо

0

У меня была такая же проблема с использованием SQL Server 2008r2.

Я пытался дублировать базу данных (версия foo) и в результате запутал сервер SQL. SQL Server Management Studio считал, что база данных существует (MDF и LDF сделали), но основная база данных не считает, что база данных существует (не отображается в sys.databases)

Хитрость заключалась в том, чтобы переименовать файлы MDF и LDF, затем создать базу данных из SQL, create database [db name here]затем удалить базу данных и, наконец, присоединить файлы MDF и LDF ранее.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.