Как перевести базу в многопользовательский режим sql
Перейти к содержимому

Как перевести базу в многопользовательский режим sql

  • автор:

Выход из однопользовательского режима

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

кроме того, когда я пытаюсь удалить базу данных, я получаю сообщение об ошибке:

изменения состояния или параметров базы данных ‘my_db’ не могут быть сделаны по адресу
эта пора. База данных находится в однопользовательском режиме, и пользователю
в настоящее время подключен к нему.

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

когда я пытаюсь просмотреть мой сайт с IIS, ошибка, которую я получаю:

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

Я чувствую, как будто однопользовательский режим вызывает это.

15 ответов:

SSMS обычно использует несколько соединений с базой данных за кулисами.

вам нужно будет убить эти соединения перед изменением режима доступа.

во-первых, убедитесь, что обозреватель объектов указывает на системную базу данных, такую как master.

во-вторых, выполните процедуру sp_who2 и найдите все соединения с базой данных ‘my_db’. Убейте все соединения, сделав KILL < session id >где идентификатор сеанса-это SPID перечислены sp_who2 .

в-третьих, открыть новые окно запроса.

выполните следующий код.

посмотреть мои статья в блоге об управлении файлами базы данных. Это было написано для перемещения файлов, но управление пользователями то же самое.

во-первых, найти и KILL все процессы, которые были запущены в данный момент.

затем выполните следующие T-SQL чтобы установить базу данных в MULTI_USER режим.

чтобы выйти из однопользовательского режима, попробуйте:

ALTER DATABASE [my_db] SET MULTI_USER

чтобы переключиться в однопользовательский режим, вы можете использовать:

ALTER DATABASE [my_db] SET SINGLE_USER

Изменить режим SQL с однопользовательского на многопользовательский для нескольких или всех баз

У меня есть несколько баз данных для изменения режима с Single-User на Multi-User . Я могу использовать это, чтобы изменить одну базу данных.

Можно ли изменить режим для нескольких баз или для любого запроса, когда режим будет изменен для многопользовательского режима, когда режим однопользовательский?

3 ответа

Вы могли бы использовать недокументированную системную процедуру sp_msforeachdb :

Щелкните правой кнопкой мыши базу данных, которую вы хотите изменить, затем нажмите Свойства.

Нажмите «Параметры» и прокрутите вниз, затем установите его, как показано ниже:

enter image description here

Нажмите OK, и это будет установлено.

Если вы новичок в управлении базами данных, я бы посоветовал против , используя sys.sp_MSforeachdb . Несмотря на отсутствие документов, это очень популярная функция среди администраторов баз данных, которые знают и четырехкратно проверяют, что они делают. В этой статье объясняются некоторые из свои подводные камни.

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

Как показывает статья, sp_MSforeachdb сам запрашивает таблицу sys.databases . Вы можете сделать то же самое, например, с:

Чтобы сгенерировать ALTER DATABASE для всех нужных вам баз данных, имена которых соответствуют условию WHERE . Вы также можете написать:

Исключить базы данных, которые уже находятся в многопользовательском режиме

Установите базу данных из режима SINGLE USER в MULTI USER

Изменения в состоянии или опциях базы данных ‘BARDABARD’ не могут быть сделаны в это время.

База данных находится в однопользовательском режиме, и пользователь в настоящее время подключен к ней.

Он должен быть в режиме non- SINGLE_USER чтобы установить его в другой режим, но я не могу установить базу данных в любом другом режиме, пока он находится в режиме SINGLE_USER .

“Пользователь в данный момент подключен к нему” может быть сам SQL Server Management Studio. Попробуйте выбрать основную базу данных и снова запустить запрос ALTER .

Это сообщение об ошибке обычно означает, что к БД подключены другие процессы. Попробуйте запустить это, чтобы увидеть, какие из них связаны:

Это вернет вам процесс, а затем вы сможете запустить:

Где [xxx] – это spid процесса, который вы пытаетесь убить.

Затем вы можете запустить вышеуказанный оператор.

Вы можете добавить возможность немедленного отменить изменения.

SQL Server 2012:

щелкните правой кнопкой мыши по DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_user и нажмите “ОК”.

Это сработало для меня.

Шаг 1. Щелкните правой кнопкой мыши механизм базы данных, выберите монитор активности и посмотрите, какой процесс имеет соединение. Убейте этого конкретного пользователя и немедленно выполните запрос.

и обновите базу данных.

У меня действительно была проблема, когда мой db был в значительной степени заблокирован процессами и условием гонки с ними, к тому времени, когда я получил одну команду, выполненную обновленно, и они снова заблокировали ее… Мне пришлось запустить следующие команды назад к спине в SSMS и получил меня в автономном режиме, и оттуда я сделал свое восстановление и вернулся в сети просто отлично, два запроса, где:

Затем сразу после (во втором окне запроса):

Сделал то, что мне было нужно, а затем вернул его онлайн. Спасибо всем, кто написал эти штуки для меня, чтобы объединить и решить мою проблему.

Лучше всего войти на сервер напрямую, а не с помощью SQL Management Studio.

Убедитесь, что учетная запись, в которую вы входите как dbowner для базы данных, которую вы хотите установить в MULTI_USER. Войдите в систему как sa (используя аутентификацию сервера SQL), если можете

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

Обратитесь сюда, если у вас все еще есть проблемы:

КАК ПОСЛЕДНЯЯ АЛЬТЕРНАТИВА – Если вы перепробовали все вышеперечисленное и испытываете отчаяние, попробуйте остановить экземпляр SQL-сервера и запустить его снова.

Код ниже работал у меня, когда я не знал конкретного SPID, который использовался для перехода в режим singleuser .

  • Пробовал все не получилось
  • Войти на этот сервер удаленно, поскольку мы собираемся убить все соединения
  • выполните приведенный ниже код более одного раза, пока он не завершит завершение, и тест на “процесс убийства” больше не будет
  • снова активируйте его, используя код ниже приведенного ниже кода.

использовать мастер GO объявить @sql как varchar (20), @spid как int

выберите @spid = min (spid) из master..sysprocesses, где dbid = db_id (‘DB_NAME’) и spid!= @@spid

while (@spid не равно null) begin print ‘Killing process’ + cast (@spid как varchar) + ‘…’ set @sql = ‘kill’ + cast (@spid как varchar) exec (@sql)

чтобы вернуть его назад

ALTER DATABASE DB_NAME SET MULTI_USER; GO

Это сработало отлично для меня

  • Сделайте резервную копию
  • Создайте новую базу данных и восстановите резервную копию.
  • Затем Properties > Options > [Scroll down] State > RestrictAccess > выберите Multi_user и нажмите OK
  • Удалить старую базу данных

Надеюсь, что эта работа для всех
спасибо
Рамеш Кумар

Если вышеуказанное не работает, найдите имя пользователя spid и отключите его в Security – Logins

Я легко решил проблему

Щелкните правой кнопкой мыши имя базы данных, переименуйте ее

После изменения щелкните правой кнопкой мыши по имени базы данных → properties → options → в нижней части прокрутки RestrictAccess (SINGLE_USER до MULTI_USER)

Теперь вы можете переименовать базу данных как свое старое имя.

просто перейти к свойствам базы данных
и измените режим SINGLE USER на MULTI USER

введите описание изображения здесь

Примечание:
если он не работает для вас, затем снова запустите резервное копирование и восстановление Db и снова выполните над методом

Более трех раз, работая с SQL Server 2014, у меня была конвертация базы данных в режим одиночного пользователя без изменения чего-либо. Возможно, это произошло во время создания базы данных. Все вышеприведенные методы никогда не работали, так как я всегда получал сообщение о том, что база данных находилась в однопользовательском режиме и к ней не подключалось.

Единственное, что я получил, это перезапустить службу Windows SQL Server. Это позволило мне подключиться к базе данных и внести необходимые изменения или удалить базу данных и начать с нее.

Я пробовал все вышеперечисленные ответы, ничего не работало для меня, кроме:

После перехода в однопользовательский режим клиент может установить только ОДНО соединение с SQL Server, помните, что “Обозреватель объектов” принимает (отдельное) соединение, поэтому, если вы пытаетесь запустить многопользовательский оператор в запросе окно, вы получите ошибку, что в однопользовательском режиме вы не можете установить другое соединение.

Для меня это не было проблемой, хотя, в моем случае, было немного автоматизированных процессов, которые постоянно (каждые несколько секунд) устанавливали соединения, так что, как только я перевел БД в однопользовательский режим и отключил себя, один из процессы установили/заняли соединение (прежде чем я смог начать операцию восстановления). Как только я разорвал эти соединения – они переподключились, и когда я запустил команду Восстановить, я получил бы ошибку, что соединение уже занято.

Чтобы решить эту проблему, я должен был написать операторы kill , изменение операторов User-Mode и операции Restore все в одном окне запроса, и когда я запустил их все за один раз, вуаля . это сработало.

Надеюсь, что это помогает другим.

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

У меня были проблемы с локальной БД.

Я смог решить эту проблему, остановив SQL-сервер, а затем запустив SQL-сервер, а затем с помощью пользовательского интерфейса SSMS изменил свойства БД на Multi_User.

БД перешла в режим “Однопользовательский”, когда я пытался восстановить резервную копию. Я не создавал резервную копию целевой базы данных перед попыткой восстановления (SQL 2017). это получит тебя каждый раз.

Остановите SQL Server, запустите SQL Server, затем запустите приведенные выше сценарии или используйте пользовательский интерфейс.

Я только что исправил с помощью следующих шагов, это может помочь вам.

Шаг: 1

right click on single user database

Шаг: 2

take offline

Шаг: 3

Drop connection and take offline

Шаг: 4

Take online

Шаг: 5

Затем выполните следующий запрос.

Некоторое время я гуглял в поисках решения и, наконец, нашел решение, приведенное ниже:

SSMS в целом использует несколько подключений к базе данных за кулисами.

Вам нужно будет разорвать эти подключения перед изменением режима доступа.(я сделал это с помощью EXEC (@kill); в приведенном ниже шаблоне кода.)

Запустите следующий SQL, чтобы перевести базу данных в режим MULTI_USER.

Чтобы вернуться в однопользовательский режим, вы можете использовать:

Это должно работать. Удачного кодирования !!

Если вы делаете резервную копию из существующего db (A) на сервере, а затем пытаетесь восстановить его на другом db ( B) на сервере

Затем следует убедиться, что пути B правильно установлены с помощью путей mdf и ldf базы данных B.

введите описание изображения здесь

Итак, нажмите на кнопки elips и задайте правильный путь mdf и ldf. база B (Пути красного и синего должны быть разными).

Установка базы данных из однопользовательского режима в многопользовательский

изменения состояния или параметров базы данных «BARDABARD» не могут быть внесены в настоящее время.

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

он должен быть в non — SINGLE_USER mode, чтобы установить его в другой режим, но я не могу установить базу данных в любом другой режим, пока он SINGLE_USER режим.

16 ответов

«пользователь в настоящее время подключен к нему» может быть само окно SQL Server Management Studio. Попробуйте выбрать базу данных master и запустить ALTER запрос снова.

это сообщение об ошибке обычно означает, что есть другие процессы, связанные с БД. Попробуйте запустить это, чтобы увидеть, какие из них подключены:

это вернет вам процесс, а затем вы сможете запустить:

где [xxx] находится spid процесса, который вы пытаетесь убить.

затем вы можете запустить выше заявление.

вы можете добавить опцию для отката изменения немедленно.

SQL Server 2012:

щелкните правой кнопкой мыши на DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_user и нажмите OK.

это отлично сработало для меня.

Шаг 1. Щелкните правой кнопкой мыши на Database engine, нажмите на монитор активности и посмотрите, какой процесс имеет соединение. Убейте этого конкретного пользователя и немедленно выполните запрос.

и обновить базу данных.

у меня на самом деле была проблема, когда моя БД была в значительной степени заблокирована процессами и состоянием гонки с ними, к тому времени, когда я получил обновленную команду, и они снова заблокировали ее. Я должен был выполнить следующие команды спина к спине в SSMS и получил меня в автономном режиме, и оттуда я сделал свое восстановление и вернулся в интернет просто отлично, два запроса, где:

потом сразу после (во втором окне запроса):

сделал то, что мне было нужно, а потом снова включил. Спасибо всем, кто написал эти кусочки для меня, чтобы объединить и решить мою проблему.

возможно, лучше всего войти на сервер напрямую, а не использовать SQL Management Studio

убедитесь, что учетная запись, которую вы регистрируете как dbowner для базы данных, которую вы хотите установить в MULTI_USER. Войдите в систему как sa (используя аутентификацию SQL server), если вы можете

если ваша база данных используется IIS, остановите веб-сайт и пул приложений, которые его используют — это может быть процесс, который подключен и блокирует установку на MULTI_USER

см. вот если у вас все еще есть проблемы:

В КАЧЕСТВЕ ПОСЛЕДНЕЙ АЛЬТЕРНАТИВЫ — если вы пробовали все выше, и вы в отчаянии, вы можете попробовать остановить экземпляр SQL server и запустить его снова

приведенный ниже код работал для меня, когда я не знал конкретного SPID, который использовался для изменения в singleuser режим.

  1. пробовал все не получилось
  2. войдите на этот сервер удаленно, так как мы убьем все соединения
  3. запустите приведенный ниже код более одного раза, пока он не вернется завершенным, и тест» процесс убийства » больше не
  4. повторно активируйте его, используя код ниже приведенного ниже кода

используйте master GO declare @sql как varchar (20), @spid как int

выберите @spid = min (spid) из master..ѕуѕргосеѕѕеѕсистемная где dbid = db_id (‘DB_NAME’) и spid != @ @ spid

while (@spid не равно null) begin печать ‘процесс убийства’ + cast (@spid как varchar)+’. ‘ set @sql = ‘kill’ + cast (@spid как varchar) exec (@sql)

тогда вернуть его живым

ИЗМЕНИТЬ ПАРАМЕТРЫ DB_NAME БАЗЫ ДАННЫХ SET MULTI_USER; ИДИ

Это отлично сработало для меня

  1. сделать резервную копию
  2. создайте новую базу данных и восстановите резервную копию к ней
  3. затем Свойства > параметры > [прокрутите вниз] состояние > RestrictAccess > выберите Multi_user и нажмите OK
  4. удалить старую базу данных

надеемся, что эта работа для всех Спасибо Рамеш Кумар!—1—>

Если выше не работает, найдите имя Входа spid и отключите его в Security — Logins

просто зайти в свойства базы данных и измените однопользовательский режим на MULTI USER

enter image description here

Примечание.: если это не работает для вас, то возьмите резервную копию БД и восстановите снова и сделайте выше метод снова

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *