Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
JDBC-stuurprogramma downloaden
In dit artikel worden problemen besproken wanneer u het Microsoft JDBC-stuurprogramma voor SQL Server gebruikt om verbinding te maken met een Azure SQL Database. Zie voor meer informatie om verbinding te maken met een Azure SQL Database:
Procedure: Verbinding maken met Azure SQL met behulp van JDBC
Verbinding maken met behulp van verificatie met Microsoft Entra ID (voorheen Azure Active Directory)
Bijzonderheden
Als u verbinding wilt maken met een Azure SQL Database, moet u verbinding maken met de hoofddatabase om SQLServerDatabaseMetaData.getCatalogs aan te roepen.
Azure SQL Database biedt geen ondersteuning voor het retourneren van de volledige set catalogi uit een gebruikersdatabase.
SQLServerDatabaseMetaData.getCatalogs gebruikt de sys.databases weergave om de catalogi op te halen. Om het gedrag van SQLServerDatabaseMetaData.getCatalogs op een Azure SQL Database te begrijpen, zie de bespreking van permissies in sys.databases.
Time-out voor aanmelden
Wanneer je verbinding maakt met Azure SQL-databases, is de loginTimeout standaard van 30 seconden een redelijk startpunt. Voor Azure SQL Database serverless met auto-pauze ingeschakeld, verhoog deze zodat deze de verbindingspogingen van de driver kan vasthouden terwijl de database wordt hervat. Voor meer informatie, zie Verbind met een automatisch gepauzeerde serverloze database. Zie Verbindingseigenschappen instellen om loginTimeout in te stellen.
Verbindingen verbroken
Wanneer je verbinding maakt met een Azure SQL Database, kan een netwerkcomponent (zoals een firewall) de inactieve verbindingen beëindigen na een periode van inactiviteit. In deze context zijn er twee typen inactieve verbindingen:
Niet actief op de TCP-laag, waar verbindingen kunnen worden verwijderd door een willekeurig aantal netwerkapparaten.
Inactief volgens de Azure SQL Gateway, waar TCP-keepalive berichten kunnen optreden (waardoor de verbinding vanuit TCP-perspectief niet als inactief wordt beschouwd), maar in de afgelopen 30 minuten geen actieve query heeft gehad. In dit scenario bepaalt de gateway dat de TDS-verbinding gedurende 30 minuten inactief is en de verbinding wordt beëindigd.
U kunt het volgende doen om het tweede punt aan te pakken en te voorkomen dat de gateway niet-actieve verbindingen beëindigt:
Gebruik het omleidenverbindingsbeleid om uw Azure SQL-gegevensbron te configureren.
Houd verbindingen actief via lichtgewicht activiteit. Deze methode wordt niet aanbevolen en mag alleen worden gebruikt als er geen andere mogelijke opties zijn.
Als u het eerste punt wilt aanpakken en wilt voorkomen dat niet-actieve verbindingen worden verbroken door een netwerkonderdeel, stelt u de volgende registerinstellingen of hun niet-Windows-equivalenten in op het besturingssysteem waar het stuurprogramma wordt geladen.
Opmerking
Vanaf versie 10.2 van het Microsoft JDBC-stuurprogramma voor SQL Server stelt het stuurprogramma automatisch de volgende waarden voor keep alive in op sockets die worden gemaakt tijdens databaseverbindingen, waarbij de standaardinstellingen van het besturingssysteem worden overschreven die zijn gedefinieerd in de volgende tabel. Deze automatische instelling wordt alleen uitgevoerd op versies van Java die ondersteuning bieden voor het instellen van de socket keep alive-opties. In Linux en macOS ondersteunen de nieuwste updates van Java 8+ deze instelling. In Windows ondersteunen de nieuwste updates van Java 17+ deze instelling.
| Registerinstelling | Aanbevolen waarde |
|---|---|
| HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ KeepAliveTime | 30.000 |
| HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ KeepAliveInterval | 1000 |
| HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ TcpMaxDataRetransmissions | 10 |
Start de computer opnieuw op om de registerinstellingen van kracht te laten worden.
De waarden KeepAliveTime en KeepAliveInterval bevinden zich in milliseconden. Deze instellingen zorgen ervoor dat een niet-reagerende verbinding binnen 10 tot 40 seconden wordt verbroken. Als er geen antwoord wordt ontvangen nadat een keep alive-pakket is verzonden, wordt het elke seconde tot 10 keer opnieuw geprobeerd. Als er gedurende die tijd geen antwoord wordt ontvangen, wordt de verbinding met de socket aan de clientzijde verbroken. Afhankelijk van uw omgeving wilt u mogelijk de KeepAliveInterval verhogen om bekende onderbrekingen (bijvoorbeeld migraties van virtuele machines) te voorkomen, waardoor een server langer dan 10 seconden niet meer reageert.
Opmerking
TcpMaxDataRetransmissions is niet aanpasbaar op Windows Vista of Windows 2008 en hoger.
Als u dit wilt configureren in een Azure-VM, maakt u een opstarttaak om de registersleutels toe te voegen. Voeg bijvoorbeeld de volgende opstarttaak toe aan het servicedefinitiebestand:
<Startup>
<Task commandLine="AddKeepAlive.cmd" executionContext="elevated" taskType="simple">
</Task>
</Startup>
Voeg vervolgens een AddKeepAlive.cmd-bestand toe aan uw project. Stel de instelling 'Kopiëren naar uitvoermap' in op Altijd kopiëren. Het volgende script is een voorbeeldbestand AddKeepAlive.cmd:
if exist keepalive.txt goto done
time /t > keepalive.txt
REM Workaround for JDBC keep alive on Azure SQL
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime /t REG_DWORD /d 30000 >> keepalive.txt
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveInterval /t REG_DWORD /d 1000 >> keepalive.txt
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpMaxDataRetransmissions /t REG_DWORD /d 10 >> keepalive.txt
shutdown /r /t 1
:done
Voeg de servernaam toe aan de userId in de verbindingsreeks
Vóór de 4.0-versie van het Microsoft JDBC-stuurprogramma voor SQL Server, moest u de servernaam toevoegen aan de UserId in de verbindingsreeks om verbinding te maken met een Azure SQL Database. Bijvoorbeeld user@servername. Vanaf versie 4.0 van de Microsoft JDBC Driver voor SQL Server is het niet meer nodig om @servername aan de UserId toe te voegen in de verbindingsreeks.
Voor het gebruik van versleuteling is het instellen van hostNameInCertificate vereist
Voordat u verbinding maakt met een Azure SQL Database met het Microsoft JDBC-stuurprogramma voor SQL Server versie 7.2, moet u hostNameInCertificate opgeven als u encrypt=true opgeeft (Als de servernaam in de connectiestring shortName.domainName is, stel de eigenschap hostNameInCertificate in op *. domainName.). Deze eigenschap is optioneel vanaf versie 7.2 van het stuurprogramma.
Voorbeeld:
jdbc:sqlserver://abcd.int.mscds.com;databaseName=myDatabase;user=myName;password=<password>;encrypt=true;hostNameInCertificate=*.int.mscds.com;