Database/MSSQL Server

TempDB 경로 문제로 인한 SQL Server 시작 불가능

데이터엔지니어 주형권 2016. 1. 21. 10:47
반응형

보통 TempDB를 만들고 나면 성능을 위해서 TempDB를 여러개로 쪼개고 위치를 변경하고 여러가지 작업을 합니다. 

TempDB는 성능에 많은 영향을 미치는 DB로써 SQL Server에서 매우 민감하게 작용됩니다. Latch를 유발할 수도 있으며, 다양한 이슈가 발생 합니다.


이번에 작업 시 TempDB 경로를 잘못 설정하여, SQL Server가 올라오지 않는 문제가 있어서 해결과정을 포스트 하였습니다.


문제

- TempDB의 ldf 파일의 경로를 잘못 변경하였는데, 잘못 변경한지 인지하지 못하고 올라오지 못하는 원인을 찾지 못하였음

- Eventvwr에 내용이 있지만, 엑세스가 거부되었다는 메시지가 나와서 권한 문제로 인식하여 권한을 추가하였으나 정상적으로 올라오지 않음



Windows Event Log

① 이벤트 ID : 5123

물리적 파일 'L:\MSSQL\TEMPDB_LOG'을(를) 열거나 만드는 중 CREATE FILE에서 운영 체제 오류 5(액세스가 거부되었습니다.)이(가) 발생했습니다.

- 우리는 여기서 파일의 경로를 보지 않고, 엑스가 거부되었다는 것에 초점을 맞췄습니다. 하여, 권한을 부여하였으나 해결되지 않았습니다.

이벤트 ID : 17204

FCB::Open failed: 파일 번호 2에 대한 파일 L:\MSSQL\TEMPDB_LOG을(를) 열 수 없습니다. OS 오류: 5(액세스가 거부되었습니다.).





해결 방법 

- 결국 원인은 Windows Event Log에 있는 파일의 경로였습니다.

"'L:\MSSQL\TEMPDB_LOG'을(를) 열거나 만드는 중 CREATE FILE에서 운영 체제 오류 5(액세스가 거부되었습니다.)이(가) 발생했습니다." 이 부분에서 ldf파일은 없습니다.

결국은 ldf 파일이 없으니 아에 열것이 없다는 것 입니다. 

- 완전히 올라가지 않는 SQL Server를 재시작 하기 위해서는 다른 방법으로 SQL Server를 시작해야 합니다.



시나리오 테스트


Step 1 - alter database를 통해 Tempdb 경로를 일부러 잘못 수정

alter database tempdb 
modify file ( name = templog,filename = 'L:\MSSQL\TEMPDB_LOG',size = 10MB)
go


위의 경로를 보시면 ldf까지 주지 않고, 폴더까지만 주었습니다. 하지만 결과는? 아주 잘 변경 됩니다. 그리고 SQL Server를 다시 시작하면, 위와 같은 오류와 함께 시작이 되지

않습니다.




Step 2 - SQL Server를 시작하는 방법 

관리자 모드로 CMD창을 열어서 Binn 폴더로 이동합니다. 이 폴더의 위치는 설치시 위치 및 SQL Server의 버전마다 다릅니다.

그 후에 CMD창에 아래의 내용을 입력 합니다.

sqlservr.exe /c /f -T3608 -T4022


☞ 시작옵션 (/c , /f에 관하여,,,)

https://msdn.microsoft.com/ko-kr/library/ms190737(v=sql.120).aspx


☞ 추적 플래그 (-T3608 , -T4022에 관하여,,,)

https://msdn.microsoft.com/ko-kr/library/ms188396(v=sql.120).aspx

https://sites.google.com/site/jayantdass/trace-flag--t3608--t4022-sql-server


   -T4022 (MSDN에 내용없음)

- 시작 시 절차 무시하여, SQL Server 가동



Step 3 - SQL Server가 올라온 것을 확인 하고, SSMS를 실행

위와 같은 조치를 했다면, 문제없이 SQL Server 올라갑니다. 하지만 이 모드는 Master DB만 올리는 모드 이므로, Master에만 접근 됩니다.

이제 다시 스크립트를 이용하여, TempDB를 정상적인 경로로 변경해주면 됩니다.


alter database tempdb 
modify file ( name = templog,filename = 'L:\MSSQL\TEMPDB_LOG\templog.ldf',size = 10MB)
go


이후에 재시작을 통해 정상적으로 가동되는 것을 확인 합니다.



감사합니다.


반응형