안녕하세요?? 저희는 약국 POS 관리하는 업체입니다.

약국 전산상에 있는 MS-SQL 2014 EXPRESS DB서버와 POS 간의 통신에서 문제가 생겨 문의 드립니다. Log 확인결과 


"System.Data.SqlClient.SqlException (0x80131904): 연결이 끊겼고 복구할 수 없습니다. 클라이언트 드라이버에서 한 번 이상 연결을 복구하려고 했지만 모두 실패했습니다. "


라는 메세지가 찍히며, 어플리케이션이 멈추고 약 30초에서 1분간 동작을 하지 않습니다.

문제는 위와같은 문제가 산발적으로 발생하며 일정시간이 지나면 정상 작동 된다는 것입니다. 

위 SqlException 번호를 확인해보니 SQL서버와 통신이 끊기겨서 발생하는 현상이라고 합니다. 

네트워크나 IP를 확인해보라고 하는데... 네트워크는 이상이 없고(Ping 잘떨어 집니다.) IP대신 컴퓨터명으로 사용하기 때문에 위 사항도 아닌듯 합니다. (무엇보다 평소에는 잘 되다가 갑자기 산발적으로 않된다고 하니... 미치겠스니다.)

혹시 세선이나 연결제한 등의 문제일까요?? 

혹 해결할 방법이 있을까요??

고수님들의 잠언을 기대합니다. ^^~



[에러 로그 앞뒤 부분]


2020-07-01 19:05:41,981 [INFO ] - [판매로그] 상품조회 쿼리 실행

2020-07-01 19:05:41,997 [INFO ] - [판매로그] 상품코드 : 8806436017214 상품명 : 페리덱스연고(덱사메타손) 단가 : 4000

2020-07-01 19:05:42,041 [INFO ] - [판매로그] 총 판매금액이 변동됨 - object : System.Windows.Forms.TextBox, Text: 4,000 EventArgs : System.EventArgs

2020-07-01 19:05:42,041 [INFO ] - [판매로그] 총 판매금액 : 4,000

2020-07-01 19:45:55,993 [ERROR] - 연결이 끊겼고 복구할 수 없습니다. 클라이언트 드라이버에서 한 번 이상 연결을 복구하려고 했지만 모두 실패했습니다. 복원 시도 횟수를 늘리려면 ConnectRetryCount 값을 높이십시오.

System.Data.SqlClient.SqlException (0x80131904): 연결이 끊겼고 복구할 수 없습니다. 클라이언트 드라이버에서 한 번 이상 연결을 복구하려고 했지만 모두 실패했습니다. 복원 시도 횟수를 늘리려면 ConnectRetryCount 값을 높이십시오. ---> System.Data.SqlClient.SqlException (0x80131904): SQL Server에 연결을 설정하는 중에 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스할 수 없습니다. 인스턴스 이름이 올바르고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오. (provider: TCP Provider, error: 0 - 원격 컴퓨터가 네트워크 연결을 거부했습니다.) ---> System.ComponentModel.Win32Exception (0x80004005): 원격 컴퓨터가 네트워크 연결을 거부했습니다

   위치: System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)

   위치: System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)

   위치: System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)

   위치: System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)

   위치: System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)

   위치: System.Data.ProviderBase.DbConnectionPool.ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)

   위치: System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)

   위치: System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)

   위치: System.Data.SqlClient.SqlInternalConnectionTds.TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)

   위치: System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)

   위치: System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)

   위치: System.Data.SqlClient.SqlConnection.OpenAsync(CancellationToken cancellationToken)

--- 예외가 throw된 이전 위치의 스택 추적 끝 ---

   위치: System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

   위치: System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   위치: System.Data.SqlClient.SqlConnection.<ReconnectAsync>d__127.MoveNext()

ClientConnectionId:00000000-0000-0000-0000-000000000000

Error Number:1225,State:0,Class:20

   위치: System.Data.SqlClient.SqlConnection.<ReconnectAsync>d__127.MoveNext()

--- 예외가 throw된 이전 위치의 스택 추적 끝 ---

   위치: System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

   위치: System.Data.SqlClient.AsyncHelper.WaitForCompletion(Task task, Int32 timeout, Action onTimeout, Boolean rethrowExceptions)

   위치: System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)

   위치: System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)

   위치: System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)

   위치: System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)

   위치: System.Data.SqlClient.SqlCommand.ExecuteReader()

   위치: BlueChannel.Framework.IO.Database.DatabaseCommand.QuerySql(String sql) 파일 C:\Users\ehgus\Desktop\20200521_1.0v\trunk\Framework\IO\Database\DatabaseCommand.cs:줄 447

ClientConnectionId:3b0524a3-db6f-4671-a086-6f9627ee7739

2020-07-01 19:45:56,224 [ERROR] - 연결이 끊겼고 복구할 수 없습니다. 클라이언트 드라이버에서 한 번 이상 연결을 복구하려고 했지만 모두 실패했습니다. 복원 시도 횟수를 늘리려면 ConnectRetryCount 값을 높이십시오.

System.Data.SqlClient.SqlException (0x80131904): 연결이 끊겼고 복구할 수 없습니다. 클라이언트 드라이버에서 한 번 이상 연결을 복구하려고 했지만 모두 실패했습니다. 복원 시도 횟수를 늘리려면 ConnectRetryCount 값을 높이십시오. ---> System.Data.SqlClient.SqlException (0x80131904): SQL Server에 연결을 설정하는 중에 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스할 수 없습니다. 인스턴스 이름이 올바르고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오. (provider: TCP Provider, error: 0 - 원격 컴퓨터가 네트워크 연결을 거부했습니다.) ---> System.ComponentModel.Win32Exception (0x80004005): 원격 컴퓨터가 네트워크 연결을 거부했습니다

   위치: System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)

   위치: System.Data.ProviderBase.DbConnectionPool.ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)

   위치: System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)

   위치: System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)

   위치: System.Data.SqlClient.SqlInternalConnectionTds.TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)

   위치: System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)

   위치: System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)

   위치: System.Data.SqlClient.SqlConnection.OpenAsync(CancellationToken cancellationToken)

--- 예외가 throw된 이전 위치의 스택 추적 끝 ---

   위치: System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

   위치: System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   위치: System.Data.SqlClient.SqlConnection.<ReconnectAsync>d__127.MoveNext()

ClientConnectionId:00000000-0000-0000-0000-000000000000

Error Number:1225,State:0,Class:20

   위치: System.Data.SqlClient.SqlConnection.<ReconnectAsync>d__127.MoveNext()

--- 예외가 throw된 이전 위치의 스택 추적 끝 ---

   위치: System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

   위치: System.Data.SqlClient.AsyncHelper.WaitForCompletion(Task task, Int32 timeout, Action onTimeout, Boolean rethrowExceptions)

   위치: System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)

   위치: System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)

   위치: System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)

   위치: System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)

   위치: System.Data.SqlClient.SqlCommand.ExecuteReader()

   위치: BlueChannel.Framework.IO.Database.DatabaseCommand.QuerySql(String sql) 파일 C:\Users\ehgus\Desktop\20200521_1.0v\trunk\Framework\IO\Database\DatabaseCommand.cs:줄 447

ClientConnectionId:3b0524a3-db6f-4671-a086-6f9627ee7739

...