ASP에서 1차 DB 서버 문제 발생시 2차 서버로 우회 하여 연결하기 > 유익한 싸이트

본문 바로가기
 

ASP에서 1차 DB 서버 문제 발생시 2차 서버로 우회 하여 연결하기

페이지 정보

작성자 이름으로 검색 댓글 0건 조회 8,481회 작성일 06-12-20 09:00

본문



ASP에서 1차 DB
서버 문제 발생시 2차 서버로 우회 하여 연결하기

저자:
wowhoon
| 날짜:
2003년 03월 12일

print.gif




6x6.gif

 

동적인 웹사이트 있어서 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 : 서버구성도]

 



chk_dbconn.gif

 


다만 스텐바이 서버와 원본 서버의 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 객체와, 사용자 오류 페이지를 잘 활용하면 완성도 있는 웹사이트를 만들수 있습니다.




[이 게시물은 human님에 의해 2007-05-14 17:58:49 bilkboard1에서 복사 됨]
[이 게시물은 human님에 의해 2007-05-15 09:09:28 bulk3에서 이동 됨]

댓글목록

등록된 댓글이 없습니다.

Total 224건 3 페이지
유익한 싸이트 목록
번호 제목 글쓴이 조회 날짜
188 이름으로 검색 8263 02-12
187 이름으로 검색 8651 01-24
186 이름으로 검색 15692 01-24
185 이름으로 검색 8323 01-15
184 이름으로 검색 190 01-15
183 이름으로 검색 8374 01-01
182 이름으로 검색 15159 01-01
181 이름으로 검색 14340 01-01
180 이름으로 검색 14274 12-20
179 이름으로 검색 13981 12-20
178 이름으로 검색 12627 12-20
177 이름으로 검색 8064 12-20
176 이름으로 검색 8253 12-20
열람중 이름으로 검색 8482 12-20
174 이름으로 검색 8302 12-19
173 이름으로 검색 12817 12-19
172 이름으로 검색 8176 12-16
171 이름으로 검색 8457 12-14
게시물 검색