관리 스튜디오에서 작업을 중단했습니다. 어떻게 처리합니까?


13

관리 스튜디오에서 "데이터베이스를 오프라인으로 설정"을 클릭 한 후이 메시지는 정지 상태를 유지하고 닫기를 클릭해도 닫히지 않습니다.

https://i.imgur.com/KD6AROv.png

관리 스튜디오에서 이와 같은 멈춤 된 작업을 처리하는 좋은 방법은 무엇입니까? 당신은 활동 모니터를 통해 그들을 죽일 수 있습니까? 이 작업이 진행되는 것을 막고 종료하는 프로세스를 찾아야합니까?


4
먼저 무엇을 차단하는지 확인하십시오. 이 정보는 sys.dm_exec_requests에서 얻을 수 있습니다. 또한 귀하의 작업은 ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;먼저 발행함으로써 차단되지 않는 방식 으로이 작업을 수행 할 수 있습니다.
Aaron Bertrand

single_user에서 데이터베이스를 설정하면 문제가 해결되었습니다. SQL Server는 항상 이런 종류의 것들에 대해 single_user가 필요합니다.
A_V

답변:


13

데이터베이스를 사용하고 있지 않다는 사실을 모르면 GUI에서 "Take Offline"을 사용하지 마십시오. 무엇이든. 약간의 레거시 작업 없이는 알기가 어렵 기 때문에이 스크립트를 어딘가에 저장하고 항상 사용하지 않겠습니까?

USE [master];
GO
ALTER DATABASE $dbname$ SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE $dbname$ SET OFFLINE;

그리고 물론 역수 :

ALTER DATABASE $dbname$ SET ONLINE;
GO
ALTER DATABASE $dbname$ SET MULTI_USER;

SINGLE_USERSQL Server를 사용하려면 데이터베이스에 단독으로 액세스해야하므로 기존 사용자 를 먼저 설정해야하는 이유 는 기존 사용자를 제거하는 것입니다. 오프라인입니다. 이제 대규모 백업 작업이나 ETL 작업 도중에이 작업을 수행하는 것처럼 문제가 될 수있는 것처럼 현재 데이터베이스를 사용중인 사람을 확인하기 위해 추가 작업을 수행 할 수 있습니다.

편집 : 이것에 대해 Connect에 대한 제안을 제출했으며 ( Connect # 2687832 참조 ) Trello ( "Object Explorer"에 보관)에 게시했습니다 .


또한 단일 사용자를 설정해도 데이터베이스에 대한 잠금을 얻을 수 없기 때문에 실패하면 어떻게합니까?
StackOverthrow

@ user560822 데이터베이스를 잠글 수있을 때까지 기다려야합니다. 그렇다면 세션을 죽여야한다는 의미입니다.
Aaron Bertrand

9

이미 정지 상태에 있다면 서버를 통해 열린 연결을 검색 할 수 있습니다.

sp_who2  

master와 같은 다른 데이터베이스에서
데이터베이스가 오프라인으로 전환하려는 데이터베이스가있는 곳의 결과를 스캔하십시오.
해당 행의 spid (프로세스 ID) 열 값에 유의하십시오.

한 번에 하나씩

kill  ##

여기서 "##"은 spid입니다.

확실히 프로세스가 실행 상태를 유지하는 데 중요하지 않은지 확인하십시오. 최신 명령을 완료하지 않고 경고없이 종료됩니다.


1
받아 들여진 대답은 나를 위해 속임수를 쓰지 않았습니다. 첫 번째 명령에서 실패했습니다. 이 답변은 완벽하게 작동합니다. 감사합니다
Cheburek

그게 좋습니다 :) 그렇습니다. 허용 된 답변은 실제로 문제를 피하기위한 것입니다 ... 이미 중단 된 경우이를 죽이려면 이와 같은 것이 필요합니다.
Mike M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.