ASP에서 1차 DB
서버 문제 발생시 2차 서버로 우회 하여 연결하기 |
동적인 웹사이트 있어서 DB Server의 역할은 대단히 중요하다고 말할 수 있습니다.
이처럼 중요한 DB Server에 문제가 생겨서 서비스에 지장이 생기면 그 사이트는 심각한 타격을 받게 됩니다. 이번에
살펴볼 내용은 주 DB Server (메인)의로의 연결이 실패하면 2차 DB Server (백업 or 스텐바이)로 연결하는 방법에
대하여 이야기 하려 합니다.
강좌에 사용된 코드는 VB Script-x로 작성 하였으며 DB Server는 SQL Server이며 OLEDB를 이용한 연결을
사용하고 있습니다. 또한 아래의 코드는 연결 문자열만 따로 파일로 만들어 SSI를 이용하여 연결을 하겠습니다. 그럼 우선 기존의
코드를 먼저 보도록 하겠습니다.
* 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-x에서 에러처리를 가능하도록 설정하고
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 &" 에러 발생 서버 : "&
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 객체와, 사용자 오류 페이지를 잘 활용하면 완성도 있는 웹사이트를 만들수 있습니다.
|