데이터베이스를 SINGLE USER 모드에서 MULTIUSER 모드로 설정
합니다.SINGLE_USER
를 「」로 설정합니다.MULTI_USER
ALTER DATABASE BARDABARD
SET MULTI_USER;
GO
다음의 에러가 표시됩니다.
지금은 데이터베이스 'BADABARD'의 상태 또는 옵션을 변경할 수 없습니다.
데이터베이스가 단일 사용자 모드이며 사용자가 현재 데이터베이스에 연결되어 있습니다.
SINGLE_USER
다른 할 수 있지만, 할 수는 SINGLE_USER
SQL Server Management Studio를 사용합니다.해 보십시오.ALTER
시시시질질질다다
일반적으로 이 오류 메시지는 DB에 연결된 다른 프로세스가 있음을 의미합니다.다음을 실행하여 연결된 항목을 확인합니다.
exec sp_who
그러면 프로세스가 반환되고 다음 작업을 수행할 수 있습니다.
kill [XXX]
[xx는 "xx"입니다.spid
당신이 죽이려는 과정의 일부입니다.
그런 다음 위의 문을 실행할 수 있습니다.
변경 내용을 즉시 롤백하는 옵션을 추가할 수 있습니다.
ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO
SQL Server 2012:
오른쪽 합니다.DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_user
[확인] 을 클릭합니다.
보일라!
같은 문제가 발생하여 다음 순서로 해결되었습니다.참조: http://giladka8.blogspot.com.au/2011/11/database-is-in-single-user-mode-and.html
use master
GO
select
d.name,
d.dbid,
spid,
login_time,
nt_domain,
nt_username,
loginame
from sysprocesses p
inner join sysdatabases d
on p.dbid = d.dbid
where d.name = 'dbname'
GO
kill 56 --=> kill the number in spid field
GO
exec sp_dboption 'dbname', 'single user', 'FALSE'
GO
이건 나한테 잘 먹혔어.
스텝 1. 데이터베이스 엔진을 오른쪽 클릭하고 액티비티 모니터를 클릭하여 어떤 프로세스가 연결되어 있는지 확인합니다.특정 사용자를 죽이고 쿼리를 즉시 실행합니다.
스텝 2
USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO
데이터베이스를 새로 고칩니다.
다음 단계로 수정했습니다. 도움이 될 수 있습니다.
순서: 1
순서: 2
순서: 3
순서: 4
순서: 5
그런 다음 다음 쿼리를 실행합니다.
ALTER DATABASE YourDBName
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO
즐기세요...!
실제로 프로세스 및 프로세스와의 경쟁 조건에 의해 db가 거의 잠기는 문제가 있었습니다.그 때, 1개의 커맨드를 갱신하고 나서, 다시 잠가 버렸습니다.SSMS에서 다음 명령어를 연속해서 실행하여 오프라인으로 만들고, 거기서 복원한 후 온라인으로 돌아왔습니다.다음 두 가지 질문입니다.
첫 번째 실행:
USE master
GO
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses
WHERE dbid = db_id('<yourDbName>')
EXEC(@kill);
그 직후(두 번째 쿼리 창에서):
USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE
내가 필요한 걸 하고 다시 온라인으로 만들었어이 작품을 써주신 모든 분들께 제 문제를 함께 해결해 주셔서 감사합니다.
SQL Management Studio를 사용하는 대신 직접 서버에 로그온하는 것이 가장 좋습니다.
MULTI_USER로 설정하는 데이터베이스의 로그인 계정이 dbowner인지 확인합니다.가능하면 (SQL 서버 인증을 사용하여) sa로 로그인합니다.
데이터베이스가 IIS에서 사용되는 경우 웹 사이트와 해당 데이터베이스를 사용하는 앱 풀을 중지합니다. 이 프로세스가 연결되어 MULTI_USER로 설정되지 않도록 차단할 수 있습니다.
USE MASTER
GO
-- see if any process are using *your* database specifically
SELECT * from master.sys.sysprocesses
WHERE spid > 50 -- process spids < 50 are reserved by SQL - we're not interested in these
AND dbid=DB_ID ('YourDbNameHere')
-- if so, kill the process:
KILL n -- where 'n' is the 'spid' of the connected process as identified using query above
-- setting database to read only isn't generally necessary, but may help:
ALTER DATABASE YourDbNameHere
SET READ_ONLY;
GO
-- should work now:
ALTER DATABASE Appswiz SET MULTI_USER WITH ROLLBACK IMMEDIATE
아직 문제가 있는 경우는, 여기를 참조해 주세요.
마지막 대안으로 - 위의 모든 것을 시도해 보았지만, 절박한 상황이라면 SQL Server 인스턴스를 중지하고 다시 시작할 수 있습니다.
싱글 모드에서는 데이터베이스를 사용할 수 없습니다.무엇보다도 SQL 관리 스튜디오를 열었을 때 데이터베이스 상의 사용자를 알 수 없지만 데이터베이스를 클릭하면 단일 사용자로 간주되며 명령어가 작동하지 않습니다.관리 스튜디오를 닫았다가 다시 엽니다.데이터베이스를 선택하지 않고 명령어스크립트를 작성합니다.
USE [master];
GO
ALTER DATABASE [tuncayoto] SET MULTI_USER WITH NO_WAIT;
GO
f5 wolla 모든 것을 괜찮게 만들어라!
는 래래idididididid into into intoid changeid sp sp i i iSPID로 하기 위해 때 .singleuser
use master
GO
select
d.name,
d.dbid,
spid,
login_time,
nt_domain,
nt_username,
loginame
from sysprocesses p
inner join sysdatabases d
on p.dbid = d.dbid
where d.name = 'dbname'
GO
kill 52 -- kill the number in spid field
GO
exec sp_dboption 'dbname', 'single user', 'FALSE'
GO
- 모든 것을 시도했지만 소용없었다.
- 모든 연결을 끊기 때문에 해당 서버에 원격으로 로그인하십시오.
- 다음 코드를 두 번 이상 실행하여 완료되고 더 이상 "프로세스 수정" 테스트가 없을 때까지 계속합니다.
- 아래 코드를 사용하여 다시 활성화하십시오.
마스터 GO 선언 @sql을 varchar(20), @spid를 int로 사용
마스터에서 @spid = min(spid)을 선택합니다.sysprocesses 여기서 dbid = db_id('DB_NAME') 및 spid != @@spid
(@spid는 null이 아님) 'Killing process ' + cast(@spid as varchar)' + '...'를 인쇄하는 동안 @sql = 'kill ' + cast(@spid as varchar)' exec(@sql)을 설정합니다.
select @spid = min(spid) from master..sysprocesses where dbid = db_id('DB_NAME') and spid != @@spid end
그리고 그것을 살아서 되찾기 때문에
데이터베이스 DB_NAME SET MULTI_USER; 시작
이것은 나에게 잘 작동했다.
- 백업을 작성하다
- 새 데이터베이스 생성 및 백업 복원
- 다음으로 [Properties]> [ Options ]> [ Scroll down ]> [ State ]> [ Restrict Access ]> [ Multi _ user ]를 선택하고 [OK]을 클릭합니다.
- 이전 데이터베이스 삭제
모든 사람에게 효과가 있기를 바랍니다. 감사합니다. 라메쉬 쿠마르
위와 같이 동작하지 않는 경우는, spid 의 로그인명을 검색해, 시큐러티 - 로그인에서 무효로 합니다.
나는 그 문제를 쉽게 해결했다.
데이터베이스 이름을 마우스 오른쪽 버튼으로 클릭합니다.
변경 후 데이터베이스 이름 --> 속성 --> 옵션 --> 스크롤의 맨 아래로 이동합니다(SINGLE_USER to MULTI_USER).
데이터베이스 이름을 이전 이름으로 변경할 수 있습니다.
SQL Server 2014를 사용하여 작업한 적이 3번 이상 있습니다.데이터베이스를 변경하지 않고 싱글 유저 모드로 변환했습니다.데이터베이스 작성 중에 발생한 것이 틀림없습니다.데이터베이스가 싱글 유저 모드로 되어 있어 접속할 수 없는 에러가 항상 발생하고 있기 때문에, 상기의 메서드는 모두 동작하지 않습니다.
SQL Server Windows Service를 재시작하는 것밖에 할 수 없었습니다.이를 통해 데이터베이스에 연결하여 필요한 내용을 변경하거나 데이터베이스를 삭제하고 다시 시작할 수 있습니다.
데이터베이스 속성으로 이동하여 SINGLE USER 모드를 MULTIUSER로 변경하기만 하면 됩니다.
메모: 문제가 해결되지 않으면 DB 백업 및 복원을 다시 수행하고 위의 방법을 다시 수행하십시오.
* 싱글=싱글_사용자
복수=MULTI_USER
Restricted=CHESTED_USER
단일 사용자 모드로 전환한 후 클라이언트는 SQL Server와의 연결을 하나만 설정할 수 있습니다. "개체 탐색기"는 (별도의) 연결을 차지하므로 쿼리 창에서 Multi-User 문을 실행하려고 하면 단일 사용자 모드에서는 다른 연결을 설정할 수 없다는 오류가 발생합니다.
그러나 제 경우에는 몇 초마다 지속적으로 연결을 확립하는 자동화된 프로세스가 거의 없었기 때문에 DB를 단일 사용자 모드로 전환하고 직접 연결을 끊자마자 연결 중 하나가 설정/사용되었습니다(복원 작업을 시작하기 전).연결을 끊으면 바로 다시 연결되고 복원 명령을 실행하면 연결이 이미 사용 중이라는 오류가 표시됩니다.
이 문제를 해결하기 위해 저는kill
of " " " " 、 "User-Mode
와 「」를 참조해 주세요.Restore
하나의 쿼리창으로 모든 작업을 수행할 수 있습니다.한 번에 실행하니 voila!!!효과가 있었어요
이것이 다른 사람들에게 도움이 되길 바랍니다.
지역 DB에 문제가 있었어요
SQL Server를 중지하고 SQL Server를 시작한 후 SSMS UI를 사용하여 DB 속성을 Multi_User로 변경함으로써 이 문제를 해결할 수 있었습니다.
백업을 복원하려고 할 때 DB가 "Single User" 모드로 전환되었습니다.복원을 시도하기 전에 대상 데이터베이스의 백업을 생성하지 않았습니다(SQL 2017).매번 이런 짓을 하게 될 거야
SQL Server를 중지하고 SQL Server를 시작한 다음 위의 스크립트를 실행하거나 UI를 사용합니다.
잠시 동안 솔루션을 검색하다가 마침내 다음과 같은 솔루션을 생각해 냈습니다.
일반적으로 SSMS는 백그라운드에서 데이터베이스에 대한 여러 연결을 사용합니다.
액세스 모드를 변경하기 전에 이러한 연결을 끊어야 합니다.(아래 코드 템플릿에서 EXEC(@kill)로 실행했습니다.)
그리고나서,
다음 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 [<Your_DB_Name>] SET SINGLE_USER
이거면 될 거야.해피 코딩!!
감사합니다!!
작업:
먼저 데이터베이스가 사용되지 않음을 증명하기 위해 모든 데이터베이스 프로세스를 종료합니다.사용자 모드를 변경한 후.
프로세스가 A에서 재빠르게 취득되는 경우가 있기 때문에, 이 프로세스를 다시 실행할 필요가 있습니다.
데이터베이스 이름을 사용하려면 아래의 DATABASE_NAME 식을 바꿉니다.
-- Kill 프로세스
USE Master
GO
declare @sql as varchar(20), @spid as int
select @spid = min(spid) from master..sysprocesses where dbid = db_id('DATABASE_NAME') and spid != @@spid
while (@spid is not null)
begin
print 'Killing process ' + cast(@spid as varchar) + ' ...'
set @sql = 'kill ' + cast(@spid as varchar)
exec (@sql)
select
@spid = min(spid)
from
master..sysprocesses
where
spid > 50 AND dbid = db_id('DATABASE_NAME')
and spid != @@spid
end
print 'Killing Process completed...'
GO
**--Alter user mode**
ALTER DATABASE DATABASE_NAME SET MULTI_USER;
GO
print 'Alter Database Process completed...'
언급URL : https://stackoverflow.com/questions/14652923/set-database-from-single-user-mode-to-multi-user
'programing' 카테고리의 다른 글
번호 배열이 주어지면 다른 모든 번호의 제품 배열을 반환합니다(분할 없음). (0) | 2023.05.07 |
---|---|
git branch, fork, fetch, merge, rebase 및 clone의 차이점은 무엇입니까? (0) | 2023.05.07 |
MySQL의 NOW()와 동등한 SQL Server? (0) | 2023.04.07 |
SQL Server에서 예/아니오 부울 필드를 만드는 방법 (0) | 2023.04.07 |
row_number()를 사용한SQL 업데이트 (0) | 2023.04.07 |