DBNETLIB 예외 방지
DBNetLib(Database Network Library) 오류는 BizTalk Server 런타임에서 MessageBox 또는 관리 데이터베이스와 통신할 수 없는 경우 발생합니다. 이 오류가 발생하면 예외를 catch하는 BizTalk Server 런타임 인스턴스는 종료되고 분 단위로 순환하면서 데이터베이스 사용 여부를 확인합니다.
DBNetLib 오류의 가장 일반적인 원인은 많은 MessageBox 데이터베이스 서버 중 하나가 과도하게 사용되고 있으며 추가로 이러한 서버와의 통신 시도로 인해 시간 초과가 발생하여 DBNetLib 예외를 발생시키는 경우입니다.
MessageBox 데이터베이스가 단순히 과도하게 사용되는 경우뿐 아니라 여러 MessageBox 데이터베이스 중 하나를 호스팅하는 BizTalk 데이터베이스 서버에서 I/O 작업이 집중적으로 수행되는 경우에도 프로덕션 환경에서 DBNetLib 오류가 발생할 수 있습니다.
이 항목에서는 DBNetLib 오류를 발생시키는 조건과 이러한 오류를 방지하는 방법에 대해 설명합니다.
DBNetLib 오류의 원인 및 해결 방법
DBNetLib 오류의 증상
Microsoft BizTalk Server 호스트 인스턴스가 종료된 다음 자체적으로 다시 시작되고 다음과 같은 오류가 BizTalk Server 애플리케이션 로그에 기록됩니다.
Event Type:Warning
Event Source:BizTalk Server <version>
Event Category:BizTalk Server <version>
Event ID:5410
Computer:BIZTALKSERVER
Description:
An error occurred that requires the BizTalk service to terminate. The most common causes are the following:
1) An unexpected out of memory error.
OR
2) An inability to connect or a loss of connectivity to one of the BizTalk databases.
The service will shutdown and auto-restart in 1 minute. If the problematic database remains unavailable, this cycle will repeat.
Error message: [DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation.
Error source:
BizTalk host name: BizTalkHost
Windows service name: BTSSvc$BizTalkHost
---------------------------------------------------------
Event Type:Error
Event Source:BizTalk Server <version>
Event Category:BizTalk Server <version>
Event ID:6913
Computer:BIZTALKSERVER
Description:
An attempt to connect to "BizTalkMsgBoxDb" SQL Server database on server "SQLSERVER " failed.
Error: "[DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation."
MessageBox 데이터베이스를 호스팅하는 BizTalk 데이터베이스 서버에서 I/O 작업을 집중적으로 수행하게 되는 경우
BizTalk Server는 MessageBox 데이터베이스를 호스팅하는 데이터베이스 서버와 직접 통신하고 작업합니다. MessageBox 데이터베이스를 호스팅하는 데이터베이스 서버가 I/O 작업만 너무 많이 수행하게 되면 응답할 수 없게 될 수 있습니다. BizTalk Server 중 하나에서 이러한 데이터베이스 서버 중 하나와의 연결이 끊기고 DBNetLib 오류가 발생합니다.
테스트 결과 사용률이 매우 높은 데이터베이스 서버는 실제 디스크의 "%Idle time"이 10% 아래로 떨어지는 경우 I/O 작업을 집중적으로 수행하게 된다고 밝혀졌습니다. "%Idle time"이 계속 이 수준 아래로 떨어지면 데이터베이스 서버가 응답할 수 없게 될 수 있습니다.
원인
MessageBox 데이터베이스를 호스팅하는 데이터베이스 서버에서 I/O 작업을 집중적으로 수행하게 되는 원인에는 다음과 같은 몇 가지가 있습니다.
MessageBox 데이터베이스를 호스팅하는 데이터베이스 컴퓨터의 하드웨어 사양이 낮은 경우(메모리 부족, 프로세서 부족 및 프로세서 속도 낮음 등)
MessageBox 데이터베이스를 호스팅하는 데이터베이스 컴퓨터의 실제 디스크를 사용량이 높은 다른 데이터베이스와 공유할 경우. 일부 데이터베이스(MessageBox 포함)의 사용률이 동시에 높아지면 실제 디스크에서 I/O 작업을 집중적으로 수행하게 될 수 있습니다.
이러한 상황의 예는 다음과 같습니다.
테스트 결과에서는 BizTalkDTADb 및/또는 BAM 데이터베이스를 호스팅하는 데이터베이스 서버에서 실제 디스크의 %Disk Read 및 Write Times가 높아지는 경우가 자주 있다고 밝혀졌습니다. MessageBox 데이터베이스를 호스팅하는 데이터베이스 서버 디스크를 BizTalkDTADb 또는 BAM과 같이 사용률이 높은 다른 데이터베이스와 함께 공유하는 경우 이 두 데이터베이스 모두에 대한 사용률이 동시에 높아지면 데이터베이스 서버의 실제 디스크에서 I/O 작업을 집중적으로 수행하게 되어 응답할 수 없게 될 수 있습니다.
BizTalkDTADb 및 하나 이상의 MessageBox 데이터베이스가 데이터베이스 서버에서 같은 실제 디스크를 공유하는 경우 보관 및 제거 작업이 자주 수행되지 않으면 디스크에서 I/O 작업이 집중적으로 수행될 수 있습니다.
해상도
BizTalk MessageBox를 호스팅하는 데이터베이스 서버에서 이용량이 많아 응답할 수 없는 상황이 발생하지 않도록 합니다.
서버 디스크의 사용률이 높아지는 몇 가지 주요 원인은 이 문제를 완화시키는 방법과 함께 아래에 나열되어 있습니다.
낮은 하드웨어 사양
하드웨어 사양이 낮아 부하를 감당하지 못하는 경우 서버의 사용률이 점점 높아집니다. 하드웨어 사양이 낮을수록 시스템은 데이터베이스에서 수행해야 하는 작업 양을 신속하게 처리할 수 없게 됩니다. 이로 인해 서버의 %Disk Read 및 Write Times가 불안정하게 계속 증가하고 디스크의 %Idle time도 계속 감소하여 10% 아래로 떨어질 수 있으며 그 결과 데이터베이스 서버가 응답할 수 없게 됩니다.
과부하로 인해 데이터베이스 서버가 응답할 수 없게 되는 경우에는 BizTalk 배포의 부하 및 활동량을 고려하여 데이터베이스 서버에서 CPU 수, 메모리 및 SAN 연결 부분을 업그레이드해야 합니다. 물론 메모리, CUP 수 등의 하드웨어 사양 중 어떤 부분이 하드웨어 업그레이드를 필요로 하는 병목 상태를 발생시키는지를 적절히 진단해야 합니다.
둘 이상의 BizTalk 데이터베이스 그룹에 대해 하나의 서버 또는 디스크 공유
앞에서 설명했듯이 BizTalk 추적(BizTalkDTADb) 데이터베이스와 BAM 데이터베이스 같은 MessageBox 이외의 데이터베이스는 서버의 실제 디스크에서 주기를 많이 사용할 수 있습니다. 그러므로 이러한 데이터베이스가 MessageBox 데이터베이스와 동일한 실제 디스크를 공유하는 경우 디스크를 중지시켜 응답할 수 없게 만들 수 있으며, 그 결과 BizTalk Server와 MessageBox 데이터베이스의 연결이 끊어지고 DBNetLib 오류가 발생할 수 있습니다.
서버의 실제 디스크 사용률이 높을 것으로 예상되는 데이터베이스는 모두 BizTalk MessageBox와 분리시켜 이러한 데이터베이스가 서로 다른 실제 디스크를 공유하도록 하거나 서로 다른 서버에서 실행되도록 하는 것이 좋습니다. BizTalkDTADb 데이터베이스와 BAM 데이터베이스를 별도의 드라이브/서버에 MessageBox와 분리시키고 각각의 MessageBox 데이터베이스(두 개 이상인 경우)도 서로 다른 디스크에 배치하는 것이 좋습니다.
보관 및 제거
BizTalkDTADb 데이터베이스와 MessageBox 데이터베이스가 같은 서버의 같은 디스크를 공유하는 경우에는 정기적으로 BizTalkDTADb 데이터베이스를 보관하고 제거해야 합니다. 그렇지 않으면 무한정 커질 수 있습니다.
정기적으로 보관하고 제거하는 것이 좋지만 비정상적인 과부하 상태에서 실행하는 경우에는 보다 자주 보관하고 제거해야 합니다. BizTalkDTADb 데이터베이스 증가량을 정기적으로 유지 관리하지 않고 이러한 작업을 마지막에 한 번에 수행하면 시간이 많이 걸릴 수 있으며 사용 가능한 데이터베이스 서버 리소스의 대부분을 사용하게 됩니다.