[mssql] 응급모드 복구

2019. 12. 12. 11:02DB/MSSQL

Step 1:

ALTER DATABASE DB명 SET EMERGENCY

GO

 

Step 2:

DBCC CHECKDB('DB명')

GO

  • 위의 결과에서 어떤것들이 검색되었다고 나오면 복구 가능성이 높고
  • 그렇지 않고 메모리 공간 부족등 이상한 오류가 나오면 힘들다.

검색 결과가 나오면

 

Step 3: 단일 사용자 모드로 변경

ALTER DATABASE DB명 SET SINGLE_USER WITH ROLLBACK IMMEDIATE

GO

  • DBCC CHECKDB 옵선
    • REPAIR_FAST : 시간이 많이 소요 되지 않고, 데이터의 손실이 없는 사소한 오류
    • REPAIR_REBUILD : REPAIR_FAST가 하는 모든 작업, 인덱스 재생성과 같이 시간이 소요되는 작업이 복구 과정에서 진행됨,역시 데이터 손실 위험을 없다.
    • REPAIR_ALLOW_DATA_LOSS : REPAIR_REBUILD가 하는 모든 작업, 할당 오류, 구조적 행 오류나 페이지 오류, 손상된 텍스트 개체 삭제를 수정하기 윈한 행과 페이지의 할당 및 할당 취소 등의 작업이 진행된다.
      Step 3: DB복구

Step 4:

DBCC CHECKDB('DB명', REPAIR_ALLOW_DATA_LOSS)

  • 복구 불가능한 데이터는 버리고 테이블 복구

Step 5: 다중 사용자 모드로 변경

ALTER DATABASE DB명 SET MULTI_USER

GO

  • DB에 걸려 있던 응급 모드도 자동 해제됨.

그래도 응급모드가 복구 안되면 온라인모드로 변경해준다.

ALTER DB명 데이터베이스명 SET ONLINE;

단 세션이 열려 있을때는 ONLINE 이나 OFFLINE 이 안되고 잡혀 있어서 무한 반복한다. 

select * from sys.dm_exec_sessions; 명령을 통해 접속 하고 있는 정보를 확인 후 

kill 명령어를 통해 세션을 죽여야 바로 진행 된다. 

'DB > MSSQL' 카테고리의 다른 글

[MSSQL] 조건 합  (0) 2020.02.07
[MSSQL] 세션 상태 및 진행률 확인  (0) 2019.12.13
[MSSQL] 복구작업  (0) 2016.03.18
[MSSQL] DB서버 최대 서버 메모리 설정  (0) 2016.02.29
[MSSQL] ISDATE 사용하기  (0) 2014.11.11