단일 사용자 모드 종료
현재 데이터베이스는 싱글 사용자 모드입니다.데이터베이스를 확장하려고 하면 다음 오류가 나타납니다.
데이터베이스 'my_db'에 액세스할 수 없습니다.(오브젝트 탐색기)
또, 데이터베이스를 삭제하려고 하면, 다음의 에러가 표시됩니다.
지금은 데이터베이스 'my_db'의 상태 또는 옵션을 변경할 수 없습니다.데이터베이스가 단일 사용자 모드이며 사용자가 현재 데이터베이스에 연결되어 있습니다.
싱글 사용자 모드를 종료하려면 어떻게 해야 하나요?이 데이터베이스를 사용하는 사용자가 없습니다.
IIS를 사용하여 사이트를 참조하려고 하면 다음과 같은 오류가 발생합니다.
현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다.예외 발생원 및 위치에 대한 정보는 다음 예외 스택 추적을 사용하여 식별할 수 있습니다.
싱글 유저 모드가 원인인 것 같습니다.
일반적으로 SSMS는 백그라운드에서 데이터베이스에 대한 여러 연결을 사용합니다.액세스 모드를 변경하기 전에, 다음의 접속을 절단할 필요가 있습니다.
- 먼저 오브젝트 탐색기가 마스터와 같은 시스템 데이터베이스를 가리키는지 확인합니다.
- 「」를 합니다.
sp_who2'my_db'는 'my_db'로 하겠습니다.KILL { session id }는 "session id" 입니다.SPID표시sp_who2. - 셋째, 새 쿼리 창을 엽니다.
이 3단계 후에 다음 코드를 실행합니다.
-- Start in master
USE MASTER;
-- Add users
ALTER DATABASE [my_db] SET MULTI_USER
GO
데이터베이스 파일 관리에 대한 블로그 기사를 참조하십시오.파일 이동용으로 작성되었지만 사용자 관리는 동일합니다.
.KILL현재 실행 중인 모든 프로세스
다음 '보다 낫다'를 해 보세요.T-SQL를 MULTI_USER
USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses
WHERE spid > 50 AND dbid = DB_ID('<Your_DB_Name>')
EXEC(@kill);
GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
- 데이터베이스 섹션에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭합니다.
- [속성"
- "옵션" 페이지를 선택합니다.
- "기타 옵션" 아래로 스크롤하여 "액세스 제한" 필드를 변경합니다.
싱글 유저 모드를 종료하려면 , 다음의 순서에 따릅니다.
ALTER DATABASE [my_db] SET MULTI_USER
싱글 유저 모드로 되돌리려면 , 다음의 조작을 실시합니다.
ALTER DATABASE [my_db] SET SINGLE_USER
이거 작동하려고 했는데
ALTER DATABASE dbName SET MULTI_USER WITH ROLLBACK IMMEDIATE
같은 문제가 발생했는데 다음 쿼리를 사용하여 session_id to kill을 찾았습니다.
Select request_session_id From sys.dm_tran_locks Where resource_database_id=DB_ID('BI_DB_Rep');
만약 누군가가 이 스레드에 걸려든다면 싱글 유저 모드로 되어 있는SQL Server에 대한 방탄 솔루션을 다음에 나타냅니다.
-- 가 있는 ID합니다.ID(스파이드)를 취득합니다
'인 'DBName'으로.
SELECT sd.[name], sp.spid, sp.login_time, sp.loginame
FROM sysprocesses sp
INNER JOIN sysdatabases sd on sp.dbid = sd.dbid
WHERE sd.[name] = 'DBName'
또는 "sp_who" 명령을 사용하여 열린 연결의 "spid"를 가져올 수도 있습니다.
-- 또는 이 SP를 대신 사용합니다.
exec sp_who
-- 그런 다음 다음을 실행하여 [spid]와 [DBName]를 올바른 값으로 바꿉니다.
KILL SpidToKillGoesHere
GO
SET DEADLOCK_PRIORITY HIGH
GO
ALTER DATABASE [DBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
CTRL + 1을 누릅니다.
데이터베이스를 잠그는 프로세스를 찾습니다.dbname 열에서 db를 찾고 spid를 확인합니다.이제 이 문장을 실행해야 합니다.
kill <your spid>
ALTER DATABASE <your db> SET MULTI_USER;
다음과 같은 것이 도움이 되었습니다.
USE [master]
SET DEADLOCK_PRIORITY HIGH
exec sp_dboption '[StuckDB]', 'single user', 'FALSE';
ALTER DATABASE [StuckDB] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [StuckDB] SET MULTI_USER WITH ROLLBACK IMMEDIATE
또 다른 옵션은 다음과 같습니다.
- 데이터베이스를 오프라인으로 전환합니다.SMSS에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 Take Offline을 선택한 후 'Drop all connections'를 선택합니다.
- 달려.
ALTER DATABASE [Your_Db] SET MULTI_USER
이것이 도움이 될지는 모르겠지만, 같은 문제가 있어서 저를 지연시키고 있는 프로세스를 찾을 수 없었습니다.SSMS를 닫고 로컬인스턴스에 영향을 주는 모든 서비스를 정지했습니다.그 후 다시 들어가서 exec sp_who2를 실행하자 범인이 나타났습니다.프로세스를 종료하고 Multi_User를 작동시킨 후 서비스를 재시작할 수 있었습니다.IIS가 몇 분/초마다 특정 패키지를 검색했습니다.
Jespers의 답변에 더하여 더욱 효과적입니다.
SET DEADLOCK_PRIORITY 10;-- Be the top dog.
SET DEADLOCK_PRIORITY HIGH사용하다DEADLOCK_PRIORITY5개 중 하나.
다른 프로세스가 데이터베이스에 균열이 생겨 프로세스가 더 낮은 경우DEADLOCK_PRIORITY그럼 경주에서 지게 되죠
이렇게 하면 (여러 번 수행해야 할 수도 있음) 다른 스파이드를 찾아서 죽일 필요가 없어집니다.
어쩌면 당신은 도망쳐야 할 수도 있다.ALTER DATABASE(하지만 제스퍼는 그렇게 한다.)수정된 코드:
USE [master]
SET DEADLOCK_PRIORITY HIGH
exec sp_dboption '[StuckDB]', 'single user', 'FALSE';
ALTER DATABASE [StuckDB] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [StuckDB] SET MULTI_USER WITH ROLLBACK IMMEDIATE
이 스크립트 사용
exec sp_who
dbname 및 spid 열을 찾습니다.
지금 실행하다
kill spid
go
ALTER DATABASE [DBName]
SET MULTI_USER;
나는 오늘 아침에 같은 문제를 우연히 만났다.그것은 간단한 문제로 판명되었다.개체 탐색기에서 단일 사용자 데이터베이스로 설정된 쿼리 창을 열었습니다.sp_who2 스토어드 프로시저에 접속이 표시되지 않았습니다.일단 닫으면, 나는 그것을 로 설정할 수 있었습니다.
오늘 같은 문제에 직면했습니다.데이터베이스가 Multi User 모드에서 Single User 모드로 변경되어 데이터베이스를 공개하지 못하게 되었습니다.
이 문제를 해결하기 위해 모든 Visual Studio 인스턴스를 닫고 SQL Server 쿼리 창에서 다음 명령을 실행해야 했습니다.
USE [Your_Database_Name]; ALTER DATABASE [Your_Database_Name] SET MULTI_USER GO
이 명령에 의해 DB가 Single User에서 Multi User로 변경되어 게시할 수 있게 되었습니다.
같은 문제가 발생해도 my_db에 대한 활성 연결을 찾을 수 없지만 동일한 오류가 나타납니다.서버상의 모든 데이터베이스에 대해 가능한 모든 SSMS 연결을 끊고 SSMS에서 새로운 연결을 만든 후 Multi user로 변경합니다.
-- Actual Code to change my_db to multi user mode
USE MASTER;
GO
ALTER DATABASE [my_db] SET MULTI_USER
주의: 이것은 SQL Server 2005에서 발생할 수 있는 버그인 것 같습니다.
방금 SQL 2012에서 이 문제를 경험했습니다.원래 세션을 종료하고 단일 사용자로 설정했을 때 복제 프로세스가 중단되었습니다.그러나 sp_who2는 DB에 연결된 새로운 프로세스를 보여주지 않았습니다.SSMS를 닫고 다시 열면 데이터베이스에서 이 프로세스를 볼 수 있습니다.이 프로세스를 종료하고 즉시 multi_user 모드로 전환할 수 있습니다.
이 배경의 논리는 알 수 없지만 SSMS의 버그로 보여 SQL 2012에서도 나타나고 있습니다.
사용 마스터
가세요
p.dbid = d.dbid = d.dbid에서 syspprocesses p inner join sysdatabases d에서 d.name, d.dbid, spid, loginame을 선택합니다. 여기서 d.name = '명칭'
kill 568 -- kill spid (스파이드를 죽인다)
데이터베이스 이름 변경'
MULTI_USER go 설정
언급URL : https://stackoverflow.com/questions/18965980/exit-single-user-mode
'source' 카테고리의 다른 글
| SQL Server에서 특정 날짜보다 큰 모든 날짜를 조회하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
|---|---|
| 테이블의 열에서 ID 제거 (0) | 2023.04.07 |
| sql 쿼리: 두 테이블 간의 차이를 반환합니다. (0) | 2023.04.07 |
| 데이터를 다른 테이블로 복사 (0) | 2023.04.07 |
| 인덱스를 작성할 때 INCLUDE 절을 사용하는 이유는 무엇입니까? (0) | 2023.04.07 |
