반응형
내부의.SQL Azure의 Net Framework 데이터 공급자 오류 6
에 대한 연결을 만들 때 위의 오류가 정기적으로 발생합니다.AzureSQL 데이터베이스.구현했습니다.ReliableSqlConnection이 문제를 방지하기 위해 재시도 로직을 사용했지만 소용이 없었습니다.다음은 오류 스택 추적의 예입니다.
System.InvalidOperationException
Internal .Net Framework Data Provider error 6.
System.InvalidOperationException: Internal .Net Framework Data Provider error 6.
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.ReliableSqlConnection.<Open>b__1()
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy.<>c__DisplayClass1.<ExecuteAction>b__0()
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy.ExecuteAction[TResult](Func`1 func)
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy.ExecuteAction(Action action)
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.ReliableSqlConnection.<Open>b__0()
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy.<>c__DisplayClass1.<ExecuteAction>b__0()
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy.ExecuteAction[TResult](Func`1 func)
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy.ExecuteAction(Action action)
at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.ReliableSqlConnection.Open(RetryPolicy retryPolicy)
이 문제는 탄력적인 풀에 새 데이터베이스를 만들 때 발생합니다.SQL 명령 텍스트는 다음과 같은 방법으로 실행됩니다.
public void ExecuteCommandText(string commandText)
{
if (IsNullOrEmpty(commandText))
throw new ArgumentNullException(nameof(commandText));
List<string> commandSteps = SplitCommandText(commandText);
using (var sqlConnection = CreateConnection())
{
foreach (string commandStep in commandSteps)
{
using (SqlCommand command = sqlConnection.CreateCommand())
{
command.CommandText = commandStep;
command.CommandTimeout = _commandTimeout;
command.ExecuteNonQuery();
command.Dispose();
}
}
}
}
위치:
private ReliableSqlConnection CreateConnection()
{
if (IsNullOrEmpty(ConnectionString))
throw new InvalidOperationException("Connection string is not defined.");
ReliableSqlConnection sqlConnection = new ReliableSqlConnection(ConnectionString, _retryPolicy, _retryPolicy);
sqlConnection.Open();
return sqlConnection;
}
그리고:
var retryStrategy = new ExponentialBackoff(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(2));
_retryPolicy = new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryStrategy);
연결 문자열의 형식은 다음과 같습니다.
$"Server=tcp:{serverName},1433;Data Source={serverName};Persist Security Info=False;User ID='{user}';Password='{password}';MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=90;"
또한, 저는 확인했습니다.eDTU내 탄력적인 풀의 사용량:
첫 번째 스파이크는 풀에 1개의 데이터베이스를 생성하는 것이고, 두 번째 스파이크는 2개, 세 번째 스파이크는 3개, 네 번째 스파이크는 4개의 데이터베이스를 동시에 생성하는 것입니다.탄력적인 풀 서비스 계층은 표준 100입니다.
Azure SQL 임시 오류 중 하나입니다.많은 정보가 여기에 있습니다. https://msdn.microsoft.com/en-us/library/dn440719(v=pandp.60).aspx .코드를 통해 백업을 시도할 때 동일한 오류가 나타납니다.그런 경우에는 드롭했다가 다시 시작합니다.
언급URL : https://stackoverflow.com/questions/42027191/internal-net-framework-data-provider-error-6-in-sql-azure
반응형
'programing' 카테고리의 다른 글
| "ViewController라는 클래스에 대한 정보를 찾을 수 없습니다." (0) | 2023.05.14 |
|---|---|
| AWS 람다 함수가 다른 함수를 호출할 수 있습니까? (0) | 2023.05.14 |
| 페이지를 나가기 전에 저장하지 않은 변경 사항에 대해 사용자에게 경고 (0) | 2023.05.09 |
| 생성자와 ngOnInit의 차이점 (0) | 2023.05.09 |
| 왜 그럴까요?수집이 null인 경우 각 루프 스로우 NullRefException에 대한 NET? (0) | 2023.05.09 |