Connexion à une base de données SQL Azure

 

TéléchargerTélécharger le pilote JDBC

Cette rubrique aborde les problèmes rencontrés lors de l'utilisation de Pilote Microsoft JDBC pour SQL Server pour la connexion à Base de données Azure SQL. Pour plus d'informations sur la connexion à Base de données Azure SQL, consultez :

Lors de la connexion à Base de données Azure SQL, vous devez vous connecter à la base de données MASTER pour appeler SQLServerDatabaseMetaData.getCatalogs.
Base de données Azure SQL ne prend pas en charge le retour de l'ensemble de catalogues d'une base de données utilisateur.SQLServerDatabaseMetaData.getCatalogs utilise la vue sys.databases pour obtenir les catalogues. Consultez la section traitant des autorisations de la rubrique sys.databases (Base de données SQL Azure) pour comprendre le comportement de SQLServerDatabaseMetaData.getCatalogs dans Base de données Azure SQL.

Connexions supprimées
Lors de la connexion à Base de données Azure SQL, les connexions inactives peuvent être arrêtées par un composant réseau (tel un pare-feu) après une période d'inactivité. Il existe deux types de connexions inactives dans ce contexte :

  • Les connexions inactives sur la couche TCP, lorsque les connexions peuvent être supprimées par n'importe quel dispositif réseau.

  • Les connexions inactives via la passerelle SQL Azure, en cas de messages TCP keepalive (qui rendent la connexion non inactive du point de vue de TCP), mais sans requête active dans les 30 minutes. Dans ce scenario, la passerelle détermine que la connexion TDS est inactive à 30 minutes et l'arrête.

Pour éviter la suppression des connexions inactives par un composant réseau, les paramètres de Registre suivants (ou leurs équivalents non Windows) doivent être définis sur le système d'exploitation dans lequel le pilote est chargé :

Paramètre de RegistreValeur recommandée
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime30 000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveInterval1000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpMaxDataRetransmission10

Vous devez redémarrer l'ordinateur pour appliquer les paramètres de clé de Registre.

Pour effectuer cela lorsque vous exécutez le système dans Windows Azuren, créez une tâche de démarrage pour ajouter les clés de Registre. Par exemple, ajoutez la tâche de démarrage suivante au fichier de définition du service :

<Startup>  
    <Task commandLine="AddKeepAlive.cmd" executionContext="elevated" taskType="simple">  
    </Task>  
</Startup>  

Puis ajoutez un fichier AddKeepAlive.cmd à votre projet. Définissez le paramètre « Copier dans le répertoire de sortie » sur « Toujours copier ». Voici un exemple de fichier AddKeepAlive.cmd :

if exist keepalive.txt goto done  
time /t > keepalive.txt  
REM Workaround for JDBC keep alive on SQL Azure  
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 TcpMaxDataRetransmission /t REG_DWORD /d 10 >> keepalive.txt  
shutdown /r /t 1  
:done  

Ajout du nom de serveur à l'ID d'utilisateur dans la chaîne de connexion
Avant la version 4.0 du Pilote Microsoft JDBC pour SQL Server, lors de la connexion à Base de données Azure SQL, vous deviez ajouter le nom du serveur à l'ID d'utilisateur dans la chaîne de connexion. Par exemple, utilisateur@nomserveur. À partir de la version 4.0 de Pilote Microsoft JDBC pour SQL Server, il n'est plus nécessaire d'ajouter @nomserveur à l'ID d'utilisateur dans la chaîne de connexion.

Utilisation du chiffrement, nécessitant la définition d'un hostNameInCertificate
Lors de la connexion à Base de données Azure SQL, vous devez spécifier hostNameInCertificate si vous spécifiez encrypt=true. (Si le nom du serveur dans la chaîne de connexion est shortName.domainName, définissez la propriété hostNameInCertificate sur *.domainName.)

Exemple :

jdbc:sqlserver://abcd.int.mscds.com;databaseName= myDatabase;user=myName;password=myPassword;encrypt=true;hostNameInCertificate= *.int.mscds.com;  

Connexion à SQL Server à l'aide du pilote JDBC

Ajouts de la communauté

AJOUTER
Afficher: