1차 DB 서버 문제 발생시 2차 서버로 우회 하여 연결하기 [출처] 1차 DB 서버 문제 발생시 2차 서버로 우회 하여 연결하기|작성자 항해자  

 DB Connection Code Sample [inc_DBConn.asp]

<%
Dim Dbconn
Set DbConn = Server.CreateObject("ADODB.Connection") 
DbConn.Provider = "SQLOLEDB" 
DbConn.ConnectionString = "SERVER=(서버명); Database=(DB명); UID=(ID); PWD=(비빌번호)" 
DbConn.Open
%>

 

위의 코드는 일반적인 DB 연결 코드의 예입니다. SQL Server 연결의 전형적인 예라고 할 수 있습니다.

그러나 연결하려 하는 DB Server의 문제가 생겨서 연결을 할 수 없다면 inc_DBConn.asp 를 참조하는 모든 페이지에는 에러를 발생하게 됩니다. 그러나 End User가 이 "DB Server에 연결 할 수 없습니다." 라는 메시지를 보게 되면 사이트의 신뢰도는 떨어지게 될 것이고 이로 인하여 사이트의 전반적인 신뢰도가 떨어질 수 도 있습니다. 위의 코드를 조금만 변환하면 DB Server의 연결 에러를 해결 할 수 있습니다.

 

우선 서버의 구성은 아래의 그림 1 처럼 Primary DB와 Secondary DB가 존재 해야합니다. 원본 DB Server 가 문제가 생기면 백업이나 스텐바이 서버로 사용자를 우회 시키고 그사이에 관리자는 DB를 복구 하면 사용자는 에러없는 페이지를 볼 수 있습니다.

[그림 1 : 서버구성도]

다만 스텐바이 서버와 원본 서버의 DB의 내용이 두 서버간의 백업이나 복제 인터벌(interval)의 차이로 인하여 다소 다를 수 있으나, 서비스가 안되는 상황보다는 훨씬 상황이 좋은 편이라고 할 수 있습니다.

* 에러 처리가 추가된 소스

<%
'On Error Resume Next를 사용하여 에러처리를 가능하게 한다.
On Error Resume Next
Dim Dbconn


Set DbConn = Server.CreateObject("ADODB.Connection") 
DbConn.Provider = "SQLOLEDB" 
DbConn.ConnectionString = "SERVER=(서버명); Database=(DB명); UID=(ID); PWD=(비빌번호)" 
DbConn.Open

 

'에러가 나면 Secondry DB로 연결을 시도한다.
If Err.Number <> 0 Then
   Err.Clear
   DbConn. ConnectionString = "SERVER=(서버명); Database=(DB명); UID=(ID); PWD=(비빌번호)"
   DbConn.Open
End If

 

'Secondry DB의 연결도 실패할경우 에러 메시지를 출력한다.
'다른 서버가 더존재하면 Secondry 루틴을 다시 만든다. 

If Err.Number <> 0 Then
   '에러 메시지 출력
   Response.write "DB 서버 에러 발생"
   Response.End
End If


'On Error Goto 0 를 이용하여 에러 처리를 불가능하게 한다.
On Error Goto 0
%>

 

위의 코드를 보시면 On Error Resume Next를 이용하여 VBScript에서 에러처리를 가능하도록 설정하고 Err.Number 를 이용하여 연결 에러를 검출하여 문제가 있으면 Secondry DB로 연결을 시도하게 됩니다.

좀더 추가적으로 루틴을 만들자면 아래 코드처럼 문제가 생기면 관리자에게 메일이나 SMS를 보내는 기능을 추가하여 문제발생시 관리자 빠른시간에 알수 있도록 해주는것도 좋은 방법입니다.

 

* 에러처리 & 메일 발송이 추가 된 소스

<%
'On Error Resume Next를 사용하여 에러처리를 가능하게 한다.
On Error Resume Next
Dim Dbconn


Set DbConn = Server.CreateObject("ADODB.Connection") 
DbConn.Provider = "SQLOLEDB" 
DbConn.ConnectionString = "SERVER=(서버명); Database=(DB명); UID=(ID); PWD=(비빌번호)" 
DbConn.Open

 

'에러가 나면 Secondry DB로 연결을 시도한다.
If Err.Number <> 0 Then
   '관리자에게 메일로 통보
   ufMailSend("Primary Server")

   Err.Clear
   DbConn. ConnectionString = "SERVER=(서버명); Database=(DB명); UID=(ID); PWD=(비빌번호)"
   DbConn.Open
End If

 

'Secondry DB의 연결도 실패할경우 에러 메시지를 출력한다.
'다른 서버가 더존재하면 Secondry 루틴을 다시 만든다. 

If Err.Number <> 0 Then
   '관리자에게 메일로 통보
   ufMailSend("Secondry Server")

   '에러 메시지 출력
   Response.write "DB 서버 에러 발생"
   Response.End
End If

 

'메일 보내기 Function
Function ufMailSend (Server_Name)
   Dim objMail
   SET objMail = Server.CreateObject("CDONTS.NewMail")


   With objMail
      .To = "ServerAdmin@Domain.com" 
      .From = "ServerAdmin@Domain.com"
      .Subject = "DB 연결 에러발생"
      .Body = "에러 발생 시간 : "& New &"  <br> 에러 발생 서버 : "& Server_Name
      .BodyFormat = 0 '내용 형식(HTML : 0, Text : 1)
      .MailFormat = 0 '메일 형식(MIME : 0, Text : 1)
      .Send 
    End With


    Set objMail = Nothing
End Function

 

'On Error Goto 0 를 이용하여 에러 처리를 불가능하게 한다.
On Error Goto 0
%>

이러한 ASP Error 객체와, 사용자 오류 페이지를 잘 활용하면 완성도 있는 웹사이트를 만들수 있습니다.

+ Recent posts