SQL Server 데이터베이스를 오프라인으로 전환 할 때의 대기 시간


278

나는 내 dev에 데이터베이스에 일부 오프라인 유지 보수 (dev에 데이터베이스가 라이브 백업에서 복원)을 수행하기 위해 노력하고있어,하지만 SQL Server Management Studio를 통해 '오프라인 상태'명령을 수행하는 매우 천천히 - 삼십분 플러스 지금의 순서. 나는 단지 내 wits 끝에 있으며 속도 문제를 일으키는 원인 또는 해결 방법에 대한 온라인 참조를 찾을 수없는 것 같습니다.

일부 사이트에서는 데이터베이스에 대한 열린 연결로 인해 속도가 느려질 수 있다고 제안했지만이 데이터베이스를 사용하는 유일한 응용 프로그램은 개발자 컴퓨터의 IIS 인스턴스이고 서비스가 중지되었습니다. 더 이상 열린 연결이 없습니다.

이 속도 저하의 원인은 무엇이며 속도를 높이려면 어떻게해야합니까?

답변:


408

추가 검색 (gbn의 답변과 kMike의 답변에 대한 u07ch의 의견에서 영감을 얻은 새로운 검색어) 후 2 초 안에 성공적으로 완료되었습니다.

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(최신 정보)

그래도 다음과 같은 오류가 발생하면 이 블로그 게시물에서 영감을 얻은대로 수정할 수 있습니다 .

데이터베이스 'dbname'에 잠금을 배치 할 수 없으므로 ALTER DATABASE가 실패했습니다. 나중에 다시 시도하십시오.

다음 명령을 실행하여 데이터베이스를 잠그는 사람을 찾을 수 있습니다.

EXEC sp_who2

그리고 SPID다음 명령에서 찾은 것을 사용 하십시오.

KILL <SPID>

그런 다음 ALTER DATABASE명령을 다시 실행 하십시오. 이제 작동합니다.


35
이것이 작동하지 않으면 (자물쇠를 놓을 수 없음) stackoverflow.com/questions/4673065 에서 솔루션을 시도하십시오 .
nalply

3
DB 오프라인 처리 프로세스가 여전히 실행중인 경우 개발 시스템의 경우 작업 관리자에서 종료하고 위 명령을 실행할 수 있습니다.
널 헤드

1
KILL 명령을 실행하고 "KILL을 사용하여 자체 프로세스를 종료 할 수 없습니다"라는 메시지가 표시되면 master 데이터베이스를 사용하여 명령을 실행하고 있는지 확인하십시오.
Jarrod

129

어딘가에서 DB에 연결되었을 가능성이 높습니다 (드문 예 : 비동기 통계 업데이트) )

연결을 찾으려면 sys.sysprocesses를 사용하십시오.

USE master
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB')

강제로 연결을 끊으려면 ROLLBACK IMMEDIATE를 사용하십시오.

USE master
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE

7
프로세스 쿼리를 통해이 데이터베이스에 연결된 내용을 알 수 있기 때문에 +1입니다. 내 경우에이었다 SSMS와 불량 직원 : 열
MikeMurko

3
제 경우에는 쿼리 분석기 창이 열려있는 불량이었습니다.
dellyjm

1
필자의 경우 개발자는 OLD
ZZ9

3
ALTER DATABASE failed because a lock could not be placed on database명령 KILL <SPID>이 도움이 된다면
Muflix

28

이 DB에 연결된 열려있는 SQL Server Management Studio 창이 있습니까?

단일 사용자 모드로 설정 한 후 다시 시도하십시오.


2
ALTER DATABASE <DBNAME> SET SINGLE_USER with Rollback Immediate
u07ch

KMike-내가 가지고있는 유일한 연결은 오프라인으로 만들려는 데이터베이스가 아니라 Master 데이터베이스에 열려 있습니다.
Erik Forbes

17

내 경우에는 너무 많은 시간을 기다린 후에 인내심이 없었으며 단순히 관리 스튜디오를 닫았습니다. 종료하기 전에 성공 메시지 db가 오프라인 상태임을 표시했습니다. 파일 이름을 바꿀 수있었습니다.


7

저장 프로 시저 sp_who2를 실행하십시오.

이를 통해 차단 잠금 장치가 있는지 확인할 수 있습니다.


5

SSMS에서 : SQL 서버 아이콘, 활동 모니터를 마우스 오른쪽 단추로 클릭하십시오. 프로세스를 엽니 다. 처리 된 연결을 찾으십시오. 프로세스를 마우스 오른쪽 단추로 클릭하십시오.


4

이 유형의 항목을 실행할 때마다 항상 트랜잭션 로그를 생각해야합니다. 롤백 즉시 alter db statment는 이것이 사실임을 나타냅니다. 이것 좀 봐: http://msdn.microsoft.com/en-us/library/ms189085.aspx

검사 점 등을 요약합니다. 로그의 트랜잭션을 저장할 가치가 있는지 여부를 결정한 다음 그에 따라 db를 실행할 모드를 선택해야합니다. 기다릴 이유는 없지만 데이터를 잃을 이유도 없습니다. 둘 다 가질 수 있습니다.


2
세이지 조언-감사합니다-그러나이 경우 복원되는 개발 데이터베이스이므로 데이터를 소비 할 수 있습니다.
Erik Forbes

3

요청이 이루어진 SSMS (SQL Service Manager) 인스턴스를 닫으면 문제가 해결되었습니다.


3

필자의 경우이 작업을 실행하기 전에 DB의 일부 테이블을 살펴 보았습니다. 내 사용자 계정이 SSMS에서이 DB에 대한 활성 연결을 유지하고있었습니다. SSMS에서 서버와의 연결을 끊으면 ( '데이터베이스를 오프라인으로 설정'대화 상자를 연 상태로 유지) 작업이 성공했습니다.


저도 마찬가지입니다. 그런 다음 다시 연결하고 활성 데이터베이스를 마스터로 변경하고 다음 명령을 실행했습니다. ALTER DATABASE XXX SET OFFLINE WITH ROLLBACK IMMEDIATE
cskwg

2

이 문제를 해결하기 위해 IIS에서 db에 연결된 웹 사이트를 중지하고 즉시 'frozen' 'db db offline'패널이 고정 해제되었습니다.


2

나는 아래의 모든 제안을 시도했지만 아무것도 효과가 없었습니다.

  1. EXEC sp_who
  2. <SPID> 죽이기

  3. 롤백 즉시 ALTER DATABASE SET SINGLE_USER

    롤백 즉시 오프라인으로 설정된 데이터베이스 변경

    결과 : 위의 두 명령도 모두 멈췄습니다.

4. 데이터베이스-> 특성-> 옵션을 마우스 오른쪽 단추로 클릭하십시오. 데이터베이스를 읽기 전용으로 True로 설정하십시오. 경고 대화 상자에서 '예'를 클릭하십시오. SQL Server는 데이터베이스에 대한 모든 연결을 닫습니다.

결과 : 창이 실행 중 멈췄습니다.

마지막 수단으로 구성 관리자에서 SQL Server 서비스를 다시 시작한 다음 ROLLBACK IMMEDIATE를 사용하여 ALTER DATABASE SET OFFLINE을 실행했습니다. 그것은 매력처럼 일했다


1

또한 문제의 데이터베이스에 연결된 열려있는 쿼리 창을 모두 닫습니다.)


1

SSMS에서 데이터베이스를 읽기 전용으로 설정 한 다음 다시 설정하십시오. 연결이 닫히고 잠금이 해제됩니다.

제 경우에는 데이터베이스에 연결되어있는 웹 사이트가있었습니다. 이 방법은 충분히 쉬웠다 :

  1. 데이터베이스-> 특성-> 옵션을 마우스 오른쪽 단추로 클릭하십시오.
  2. Database Read-OnlyTrue로 설정
  3. 대화 상자 경고에서 '예'를 클릭하십시오. SQL Server는 데이터베이스에 대한 모든 연결을 닫습니다.
  4. 옵션을 다시 열고 읽기 전용을 끄십시오
  5. 이제 데이터베이스 이름을 바꾸거나 오프라인 상태로 만드십시오.

0

나를 위해 방금 작업 활동 모니터로 이동하여 처리중인 두 가지를 중단해야했습니다. 그런 다음 즉시 오프라인 상태가되었습니다. 제 경우에는 그 두 가지 프로세스가 무엇인지 알고 있었고 그 프로세스를 중지해도 괜찮습니다.


0

필자의 경우 데이터베이스는 이전 Sharepoint 설치와 관련이있었습니다. 서버 관리자에서 관련 서비스를 중지 및 비활성화하면 40 분 동안 실행 된 오프라인 조치 수행이 "중지"되어 즉시 완료되었습니다.

현재 데이터베이스를 사용하는 서비스가 있는지 확인할 수 있습니다.


1
실행 sp_who2프로세스가 데이터베이스 및 사용을 사용하는 것을보고 kill <PID>그들을 막을 수 있습니다.
Eric Kigathi

0

다음에 오프라인으로 만들기 대화 상자에서 '모든 활성 연결 삭제'확인란을 선택해야합니다. 또한 연결이없는 로컬 컴퓨터에서 SQL_EXPRESS를 사용했지만 해당 확인란을 선택하지 않으면이 속도 저하가 발생했습니다.


-1

내 경우에는 Tomcat 서버를 중지했습니다. 그런 다음 즉시 DB가 오프라인 상태가되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.