Невозможно подключить к сети любую базу данных на сервере - PullRequest
1 голос
/ 24 февраля 2020

На выходных мой сервер Dev столкнулся с очень интересной проблемой. У меня есть сценарии, которые периодически отключают несколько баз данных, а затем снова переводят их в оперативный режим. Они запустились и перевели все указанные базы данных в автономный режим, но затем не смогли снова их подключить, указанное сообщение об ошибке было:

Сообщение 5011, Уровень 14, Состояние 7, Строка 4 У пользователя нет разрешение на изменение базы данных «XXX», база данных не существует или база данных не находится в состоянии, которое позволяет проверять доступ. Сообщение 5069, Уровень 16, Состояние 1, Строка 4: оператор ALTER DATABASE не выполнен.

Мне это не подходит, поскольку мы запускаемся из учетной записи пользователя, для которой установлены следующие свойства:

enter image description here

Я также подтвердил, что это не проблема с разрешениями, войдя на этот сервер, запустив SSMS в качестве администратора и войдя в систему с помощью моего windows учетные данные (также учетная запись администратора) и выполнение следующего SQL в автономной базе данных:

USE [master]
GO

ALTER DATABASE [XXX] SET ONLINE
GO

с теми же результатами ...

Я смотрел на SQL регистрирует более подробную информацию об указанной ошибке c, однако нет записей, связанных с этой проблемой. Я могу воспроизвести эту проблему на каждой базе данных на этом конкретном сервере. Единственный способ получить доступ к базам данных через Интернет - это отсоединить и снова присоединить их.

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

Обновление 1

В этом посте рассказывается о том, как защита файлов может вызвать это сообщение об ошибке, я предоставил полный доступ к группа пользователей в одной из баз данных, а затем повторно введите онлайн-команду, не повезло. Сервер My SQL работает под учетной записью службы, которая входит в группу пользователей «Администратор» и имеет полный доступ ко всем файлам базы данных.

Обновление 2

Все виды интересных идей выдвигается здесь , также обсуждается здесь . Множество команд и идей о том, как восстановить поврежденные базы данных с помощью нескольких комбинаций восстановления, таких как команда SQL, к сожалению, ни одна из них не работает в моей ситуации, они либо не будут работать в автономных базах данных, либо после отсоединения и присоединения не сообщают любые ошибки. Конечно, всегда есть ряд сообщений, в которых просто утверждается, что решение основано на разрешениях и работает: GRANT ALTER ON DATABASE решит все проблемы. Для моей учетной записи администратора это не должно иметь значения, но это спорный вопрос, поскольку я даже не могу запустить эту команду в автономной базе данных ...

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Несколько месяцев назад, я получил то же сообщение об ошибке. Это было C# приложение, созданное в Visual Studio 2010.

Я следовал совету онлайн-статьи: https://www.sqlskills.com/blogs/glenn/setting-your-page-verify-database-option-to-checksum/

Я попытался установить PAGE_VERIFY CHECKSUM для моей SQL установки. Сначала я открыл командную строку от имени администратора и набрал sqlcmd -S myComputerName \ SQLEXPRESS

Кто-то сказал: - Кажется, база данных уже повреждена. У вас есть последняя резервная копия до того, как произошло повреждение? Если это так, удалите поврежденную базу данных и восстановите ее из резервной копии.

Если нет, вы можете исправить ошибки согласованности базы данных с помощью аргумента REPAIR_REBUILD команды DB CC CHECKDB. Если потеря данных приемлема, вы можете попробовать ее с аргументом REPAIR_ALLOW_DATA_LOSS. Смотрите пример кода, как показано ниже:

USE [databaseName] 
Go
DBCC CHECKDB([databaseName], REPAIR_REBUILD)
Go

Если DB CC CHECKDB не может исправить эту базу данных, вы ничего не можете сделать, все внутри этой базы данных потеряно навсегда. Вам придется вручную все перестроить.

Я прочитал этот пост и исправил проблему: https://community.spiceworks.com/topic/1617777-sql-database-fix

0 голосов
/ 24 февраля 2020

Наконец-то обнаружена проблема, по-видимому, у нас был совершенно не связанный экземпляр базы данных SQL на том же сервере в режиме восстановления. Пока он восстанавливался, мы не можем вывести какие-либо автономные экземпляры в онлайн. Отключение / повторное присоединение работало бы, и мы могли бы прекрасно восстановить базу данных, но просто не установить ее в оперативном режиме.

Восстановление отдельной базы данных завершено, и теперь мы можем запустить команду без проблем. Я полагаю, что в будущем, если мне наплевать на базу данных, которая находится в процессе восстановления (что я часто не делаю), я выполню связанные шаги , чтобы избавиться от нее, прежде чем перезапускать SQL Сервер и обработка:

Стоп SQL Сервер

Удаление MDF + LDF

Запуск SQL Сервер

Восстановление (может потребоваться брось первым, подходит подозреваемый)

...