본문 바로가기
DB(sql)

MSSQL Temp 또는 Model db 등 시스템 DB 오류로 SQL서버가 시작되지 못할 때

by doran365 2024. 8. 3.

1. 개요

서버 이전 도중에 DAS와 연결되어 있던 DB서버가 이전/부팅 과정의 실수 등으로 인하여 다시 DAS가 붙는 과정에서 HDD 등의 오류로 인하여 OS에 의해서 자동 FIX 되는 경우 MSSQL서버가 시작되지 않는 경우가 있을 수 있습니다. 또한, 라이브 상태의 DB서버에 붙어 있는 DAS의 전원을 먼저 꺼버렸을 경우에 관련 DB 파일들이 손상되는 경우가 발생할 수 있습니다.

이번 서버 이전 과정에서 어쨌거나 DAS를 다시 인식시키는 과정에서 데이터베이스 파일에 손상이 있었고, 일반 데이터베이스 파일은 물론이고 시스템 데이터베이스 파일이 손상된 경우가 발생했습니다. 이때 일반 사용자 데이터베이스가 손상되었을 경우에 SQL서버는 시작되나 해당 데이터베이스명에 (주의대상)으로 표시되고 동작하지 않습니다. 이 부분은 해당 DB를 오프라인 시키거나 삭제 후 백업했던 데이터베이스를 복원하면 됩니다.

시스템 데이터베이스가 손상되었을 경우는 아래와 같이 cmd 창에서 sqlservr -c -f -T3608 -T4022를 실행하여 싱글 모드로 진입합니다. 이때 tempdb 또는 modeldb가 손상되어 처리될 수 없다는 메시지가 나타나게 됩니다. 이 상태에서 쿼리 분석기 또는 SQL Studio Manager를 실행할 수 있는데 매니저 실행 후 쿼리 분석기를 또 실행하면 싱글 모드이기 때문에 열리지 않습니다. tempdb가 손상되었을 경우에는 싱글 모드 상태에서 쿼리 분석기만을 오픈한 상태에서 아래 참조한 4, 5번 항목으로 해결이 가능합니다. 이 쿼리를 날렸을 경우에 cmd prompt에 실행된 싱글 모드가 종료된다면 tempdb의 문제가 아니니 메시지를 잘 확인할 것. 이번 경우는 modeldb에 문제가 있다는 메시지를 확인 후 modeldb를 제거 후 백업했던 modeldb를 복원하여 정상화 시켰습니다. modeldb는 템플릿화해서 작업을 쉽게하기 위한 정보가 있는 것이기 때문에 최초 설정된 정보로 복원해도 상관없습니다..

2. SQL 서버 시작 불가 문제의 원인

서버 이전 과정의 실수

서버 이전 과정에서 발생하는 가장 흔한 실수는 HDD의 오류나 잘못된 부팅 순서로 인한 문제입니다. 이러한 문제는 OS에 의해 자동으로 수정되는 경우가 많지만, 일부 경우에는 MSSQL 서버가 정상적으로 시작되지 못할 수 있습니다.

DAS의 전원 관리

라이브 상태의 DB서버에 연결된 DAS의 전원을 잘못 관리하면 DB 파일이 손상될 수 있습니다. 특히 DAS의 전원을 먼저 꺼버리는 경우 데이터베이스 파일의 무결성이 훼손될 위험이 큽니다.

3. 손상된 데이터베이스 파일의 복구 방법

싱글 모드로 진입하기

시스템 데이터베이스가 손상되었을 경우, SQL 서버를 싱글 모드로 실행하여 문제를 해결할 수 있습니다. CMD 창에서 다음 명령어를 입력합니다:

sqlservr -c -f -T3608 -T4022

손상된 데이터베이스 파일 식별

싱글 모드에서 SQL Studio Manager를 실행한 후, 쿼리 분석기를 이용하여 손상된 데이터베이스 파일을 식별합니다. tempdb가 손상된 경우, 싱글 모드 상태에서 쿼리 분석기를 열어 문제를 해결할 수 있습니다. 만약 modeldb에 문제가 있다면, 해당 데이터베이스를 제거한 후 백업 파일

4. tempdb 손상 문제 해결

쿼리 분석기 이용

tempdb가 손상된 경우, 싱글 모드 상태에서 쿼리 분석기를 열어 다음과 같은 절차를 따릅니다:

  1. 쿼리 분석기 실행
  2. 손상된 tempdb 식별
  3. 적절한 SQL 명령어를 사용하여 tempdb 문제 해결

tempdb 재생성

tempdb는 시스템이 재시작될 때마다 자동으로 생성되는 임시 데이터베이스입니다. 따라서 tempdb가 손상된 경우, SQL 서버를 다시 시작하면 tempdb가 자동으로 재생성됩니다. 그러나 이 방법이 실패할 경우, 싱글 모드에서 수동으로 tempdb를 재생성해야 합니다.

 
USE master;
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'C:\SQLData\tempdb.mdf');
GO
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'C:\SQLData\templog.ldf');
GO

5. modeldb 손상 문제 해결

modeldb 복원

modeldb는 새로운 데이터베이스를 생성할 때 템플릿으로 사용되는 시스템 데이터베이스입니다. modeldb가 손상되면 SQL 서버는 새로운 데이터베이스를 생성할 수 없습니다. 이를 해결하기 위해, 손상된 modeldb를 제거하고 백업 파일로 복원합니다.

USE master;
GO
ALTER DATABASE model SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE model;
GO
RESTORE DATABASE model FROM DISK = 'C:\Backup\model.bak';
GO

modeldb 재설정

USE master;
GO
ALTER DATABASE model SET MULTI_USER;
GO

modeldb를 복원한 후, 필요한 설정을 다시 구성합니다. 이는 주로 초기 설정값을 복원하는 과정입니다.

 

 

6. 예방 조치 및 백업 전략

정기적인 백업

정기적인 백업은 데이터베이스 손상 시 신속한 복구를 가능하게 합니다. 주기적인 백업 계획을 수립하여 중요한 데이터를 보호하십시오.

서버 이전 전 점검

서버를 이전하기 전에 모든 하드웨어와 소프트웨어 상태를 점검합니다. 특히, 데이터베이스 서버와 연결된 모든 장치가 정상적으로 작동하는지 확인하십시오.

DAS 전원 관리

DAS와 같은 외부 장치의 전원을 관리할 때는 신중을 기해야 합니다. 라이브 상태에서 전원을 끄기 전에 모든 연결을 안전하게 종료하십시오.

7. 결론

SQL 서버가 시작되지 않는 문제는 서버 이전 과정에서 흔히 발생할 수 있는 문제 중 하나입니다. 이 문제를 해결하기 위해서는 시스템 데이터베이스의 손상 여부를 정확히 파악하고, 적절한 복구 절차를 따르는 것이 중요합니다. 정기적인 백업과 신중한 전원 관리는 이러한 문제를 예방하는 데 큰 도움이 됩니다. 서버 이전 전 철저한 점검과 준비를 통해 데이터 손상 및 서버 다운타임을 최소화하십시오.