클러스터된 SQL 서버 인스턴스에 대한 호스트 이름 확인
- Version : SQL Server 2005, 2008, 2008R2, 2012, 2014
SQL Server 클러스터 페일오버를 트러블슈팅할때 페일오버된 시간과 페일오버 이전 호스트의 이름을 확인하는 것은 필수 사항이다. 이번 시간에 장애조치가 발생한 시간과 이전에 실행된 SQL Server 이름을 확인하는 방법에 대해서 알아본다.
SQL Server 클러스터링 환경에서 페일오버 이후에는 이전의 SQL Server 노드를 식별하는 것이 곤란하다. 로깅의 대부분이 네트워크 또는 가상 서버의 인스턴스명을 사용하기 때문이다. 이때 SQL Server 에러로그와 이벤트 뷰어 로그를 사용하여 확인 할 수 있다.
SQL Server가 현재 실행중인 노드/호스트 이름을 확인하는 것은 매우 간단하다. 다음 스크립트를 실행하면 확인 할 수 있다.
select serverproperty('ComputerNamePhysicalNetBIOS') |
SQL Serer가 다시 시작되었을 때 장애 시점은 에러로그를 통해서 확인 할 수 있다. SSMS에서 로그파일 뷰어를 사용하거나 xp_readerrorlog 확장 저장 프로시저를 사용할 수 있다.
아래 그림은 SSMS의 화면이다. 첫 번째 메시지는 현재 호스트의 로그가 기록되어 있기 때문에 이전의 기록인 2 번째 로그를 확인 한다.
예를 들어 아래 그림을 보면 동일한 호스트 / 노드(DBP2)에서 다시 시작되었음을 나타낸다. 마지막 메시지는 SQL Server가 장애조치 이전의 호스트 DBP1에서 실행되었음을 나타낸다.
확장 프로시저를 이용할 때에는 NETBIOS라는 구문이 포함된 문장을 확인해야 한다. 다음 스크립트를 실행하면 NETBIOS를 포함한 오류로그를 확인할 수 있다.
SET NOCOUNT ON -- 1 - Declare variables DECLARE @numerrorlogfile int -- 2 - Create temporary table CREATE TABLE #errorLog ([LogDate] datetime, [ProcessInfo] nvarchar(20), [Text] nvarchar(max) ) -- 3 - Initialize parameters SET @numerrorlogfile = 0 -- 4 - WHILE loop to process error logs WHILE @numerrorlogfile < 5 BEGIN TRY INSERT #errorLog ([LogDate], [ProcessInfo], [Text]) EXEC master.dbo.xp_readerrorlog @numerrorlogfile, 1, N'NETBIOS', NULL, NULL, NULL, N'desc'
SET @numerrorlogfile = @numerrorlogfile + 1; END TRY BEGIN CATCH SET @numerrorlogfile = @numerrorlogfile + 1; END CATCH -- 5 - Final result set SELECT LogDate,[Text] FROM #errorLog -- 6 - Clean-up temp table DROP TABLE #errorlog GO
|
Windows Event 뷰어에서도 호스트의 이름을 확인 할 수 있다. 이벤트ID 17664 로그에서 Node/Host를 확인 할 수 있다.
[참고자료]
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp