Overview
This document describes the retry behavior for database connectors when handling transient errors.
AWS Redshift
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Fixed retry |
30 seconds interval |
20 |
Transient error codes
Retries are triggered automatically when any of the following error codes are encountered:
|
Code |
Description |
|---|---|
|
08S01 |
Communication link error |
|
08001 |
Connection timeout |
|
28000 |
Communication closed during authentication |
|
53300 |
Too many connections |
|
40P01 |
Deadlock detected |
Azure SQL Database
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Fixed retry |
30 seconds interval |
30 |
Transient error codes
Retries are triggered automatically when any of the following error codes are encountered:
|
Error code |
Description |
|---|---|
|
-2 |
Timeout (Client-side) |
|
2 |
Database server not found |
|
26 |
Error locating server / Instance specified |
|
40 |
Could not open connection |
|
121 |
Transport-level error (Semaphore timeout) |
|
233 |
Database server not found / Connection limit |
|
258 |
Pre-login handshake timeout (SSL) |
|
615 |
In-memory cache database ID out of sync |
|
926 |
Database marked SUSPECT |
|
4221 |
Read-secondary login failure (Availability Group wait) |
|
10053 |
Transport-level error (connection aborted) |
|
10928 |
Resource limit reached |
|
10929 |
Server too busy for database |
|
11001 |
No such host known (DNS/Network) |
|
1204 |
Database engine cannot obtain a lock |
|
1205 |
Deadlock (Transaction victim) |
|
18452 |
Authentication failure (Domain-based) |
|
4060 |
Login failed (Database not found/deleted) |
|
40143 |
Connection loss (Azure-specific transient) |
|
40197 |
Service busy / error processing request |
|
40501 |
Service busy / error processing request |
|
40544 |
Database reached size quota |
|
40549 |
Session terminated (Long-running transaction) |
|
40550 |
Session terminated (Too many locks) |
|
40551 |
Session terminated (Excessive TEMPDB usage) |
|
40552 |
Session terminated (Excessive transaction log usage) |
|
40553 |
Session terminated (Excessive memory usage) |
|
40613 |
Database unavailable (Retry later) |
|
40615 |
Firewall issues (Temporary gateway blip) |
|
49918 |
Not enough resources (Retry later) |
|
49919 |
Too many create/update operations in progress |
|
49920 |
Too many concurrent operations in progress |
In addition to the numeric error codes above, retries are also triggered by message-text matching for transport-level errors, "Invalid object name", "severe error occurred", and other network-related connection failures.
Google BigQuery
BigQuery has two distinct, independently-configured retry mechanisms depending on the operation type; they should not be conflated.
Query retry (SELECT / DML)
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Linear backoff retry strategy with jitter |
Retry interval grows by a fixed increment per attempt (not exponential), starting from a base delay of 60 seconds, then randomized within that window. The delay is clamped so it never exceeds 15 minutes. |
1440 |
Transient errors
Retries are triggered by matching on the exception message text (not by BigQuery reason/category codes such as rateLimitExceeded or quotaExceeded, which are not checked):
|
Error category |
Specific description / Message match |
|---|---|
|
Streaming Buffer |
"Update or delete statement over table would affect rows in streaming buffer" (also requires a specific native error code) |
|
Concurrency |
"Could not serialize access to table due to concurrent update" (also requires a specific native error code) |
|
Rate Limit / Throttling |
"Exceeded rate limits" OR "Too many table update operations for this table" — handled as a single combined check, not two separate categories |
|
Job Execution |
"The job encountered an error during execution" (message-text match only; no internalError/backendError reason-code check) |
|
Network (DNS) |
Message must contain both "Couldn't resolve host name" AND "Error interacting with REST API" |
|
Security (SSL) |
Message must start with the exact prefix "(1160) Cannot enable SSL" |
Bulk insert retry (streaming inserts)
A separate mechanism governs retries for row insert operations only.
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Exponential backoff retry strategy |
True exponential (doubling) backoff, starting from a base delay of 1 second, clamped to a maximum of 64 seconds |
60 |
Transient errors
Retries are triggered based on the HTTP status code returned by the Google API client (not message text):
|
HTTP status |
Description |
|---|---|
|
404 |
Not Found |
|
500 |
Internal Server Error |
Oracle
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Fixed retry |
5 seconds interval |
5 |
Transient error codes
Retries are triggered automatically when any of the following error codes are encountered:
|
Error code |
Description |
|---|---|
|
604 |
Error occurred at recursive SQL level (Generic wrapper) |
|
1033 |
ORACLE startup or shutdown in progress |
|
1089 |
Immediate shutdown in progress - no operations are permitted |
|
3113 |
End-of-file on communication channel (Session lost) |
|
3114 |
Not connected to ORACLE |
|
3135 |
Connection lost contact |
|
12170 |
TNS:Connect timeout occurred |
|
12514 |
TNS:Listener does not currently know of service requested |
|
12518 |
TNS:Listener could not hand off client connection |
|
12528 |
TNS:Listener: all appropriate instances are blocking new connections |
|
12541 |
TNS:No listener |
|
12571 |
TNS:Packet writer failure |
|
-1000 |
OCI_INVALID_HANDLE (Typically a driver-level transient state) |
Special Case Handling
The implementation includes an additional retry condition for Oracle table statistics operations when the query contains CALL DBMS_STATS.gather_table_stats and the error code is 1 (a special case for table statistics operations).
PostgreSQL
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Fixed retry |
30 seconds interval |
20 |
Transient error codes
Retries are triggered automatically when any of the following error codes are encountered:
|
Code |
Description |
|---|---|
|
40001 |
Serialization failure |
|
40P01 |
Deadlock detected |
|
53000 |
Insufficient resources |
|
53100 |
Disk full |
|
53200 |
Out of memory |
|
53300 |
Too many connections |
|
53400 |
Configuration limit exceeded |
|
55000 |
Object not in prerequisite state |
|
55006 |
Object in use |
|
55P03 |
Lock not available |
|
57000 |
Operator intervention |
|
57014 |
Query canceled |
|
57P01 |
Admin shutdown |
|
57P02 |
Crash shutdown |
|
57P03 |
Cannot connect now |
|
57P04 |
Database dropped |
|
58000 |
System error |
|
58030 |
I/O error |
|
08000 |
Connection exception |
|
08001 |
Client unable to establish connection |
|
08003 |
Connection does not exist |
|
08004 |
Server rejected connection |
|
08006 |
Connection failure |
|
08007 |
Transaction resolution unknown |
|
08P01 |
Protocol violation |
|
08S01 |
Communication error |
Snowflake
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Exponential backoff retry strategy |
Retry interval is calculated using an exponential backoff strategy with jitter, starting from a base delay of 10 seconds and increasing exponentially with each retry attempt. The final delay is clamped to ensure it doesn't exceed 5 minutes |
30 |
Transient error codes
Retries are triggered automatically when any of the following error codes are encountered:
SQL state codes
|
Code |
Description |
|---|---|
|
08006 |
Network issue |
SQL error codes
|
Code |
Description |
|---|---|
|
270001 |
Connection pool exhausted |
|
270007 |
Request timeout |
HTTP status codes
|
Code |
Description |
|---|---|
|
400 |
Bad request |
|
403 |
Forbidden |
|
404 |
Not found |
|
417 |
Expectation failed |
|
429 |
Too many requests |
|
475 |
Too many requests (custom) |
|
502 |
Bad gateway |
|
503 |
Service unavailable |
|
504 |
Gateway timeout |
|
408 |
Request timeout |
SQL Server
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Fixed retry |
30 seconds interval |
20 |
Transient error codes
Retries are triggered automatically when any of the following error codes are encountered:
|
Code |
Description |
|---|---|
|
1205 |
SQL Server Deadlock |
|
4060 |
Database Login Failed |
|
2 |
Server Not Found / Network Issues |
|
233 |
Server Not Found / Network Issues |
|
1204 |
Cannot Obtain a Lock |
|
18452 |
Unable to Authenticate Based on Domain |
|
-2 |
Timeout or Server Not Responding |
Teradata
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Fixed retry |
30 seconds interval |
30 |
Transient error codes
Retries are triggered automatically when any of the following error codes are encountered:
|
Error code |
Specific description |
|---|---|
|
36 |
BufferSize exceeded |
|
2631 |
Deadlock |
|
2639 |
Too many simultaneous transactions |
|
2641 |
Database/Table ID was restructured; Resubmit |
|
2659 |
The DBS restarted between FastLoad or MLoad requests |
|
2825 |
No record of the last request was found after DBC restart |
|
2826 |
Request completed but all output was lost due to DBC restart |
|
2827 |
Request was aborted by user or due to statement error |
|
2828 |
Request was rolled back during system recovery |
|
2834 |
Another user released the lock requested by the current operation |
|
2835 |
A unique index has been invalidated; Resubmit request |
|
3006 |
Logons are disabled |
|
3007 |
Maximum number of sessions already on this PE (Parsing Engine) |
|
3025 |
Host quiesced by DBC operator; New activity not allowed |
|
3026 |
The user's right to log on has been revoked |
|
3111 |
The Dispatcher has timed out the transaction |
|
3120 |
The request is aborted because of a DBS recovery |
|
3598 |
Concurrent change conflict on database — try again |
|
3603 |
Concurrent change conflict on table — try again |
|
3897 |
Request aborted due to Teradata system restart; Resubmit |
|
7423 |
Object already locked and NOWAIT encountered |
|
100002 |
Cannot create connection within the time specified |
|
100004 |
Invalid Connection Pool operation |
|
100029 |
The connection does not exist |
|
115000 |
Unable to connect transport (Network/Port issue) |
|
115001 |
Transport error sending data |
|
115002 |
Transport error receiving data |
|
115003 |
The receive operation timed out |
|
115004 |
Unable to begin an asynchronous receive operation |
|
115006 |
Could not resolve DataSource to an IpAddress |
|
115008 |
An invalid response message was received |
|
115009 |
Message truncation error; not all data was received |
|
115012 |
Operation aborted due to unrecoverable session errors |
|
115013 |
Invalid session state for requested operation |
|
115014 |
The session is not open; send or receive operation not allowed |
|
115024 |
Transport error initializing socket |
|
115025 |
Could not resolve Data Source to an available node |
|
115037 |
Transport error performing asynchronous send |
|
115038 |
Error queuing the BeginSend operation |
|
115039 |
Unable to begin an asynchronous send operation |
|
115046 |
Reconnection timeout has expired |
|
115047 |
The recovery attempt failed |
|
115048 |
Session cannot be reconnected (Refer to InnerException) |
|
115049 |
The socket connection was aborted or reset |
Yellowbrick
Retry logic
|
Type |
Description |
Max retry count |
|---|---|---|
|
Fixed retry |
30 seconds interval |
20 |
Transient error codes
Retries are triggered automatically when any of the following error codes are encountered:
|
Error code |
Specific description |
|---|---|
|
WL002 |
Workload wait time exceeded (Query timed out while in the queue) |
|
WL003 |
Workload execution time exceeded (Query exceeded the maximum allowed runtime) |
|
WL004 |
Workload rowcount exceeded (Query exceeded the maximum allowed rowcount) |
|
08000 |
Connection exception |
|
08003 |
Connection does not exist |
|
08006 |
Connection failure (Backend unexpectedly closed connection) |
|
08001 |
SQL client unable to establish SQL connection |
|
08004 |
SQL server rejected establishment of connection |
|
40P01 |
Deadlock detected |
|
53300 |
Too many connections |
Database connectors that do not implement retry logic
-
Azure Database for MySQL
-
Azure Database for PostgreSQL
-
Databricks
-
Apache Cassandra
-
Google BigTable