En este tema se describen los problemas al usar Controlador Microsoft JDBC para SQL Server para conectarse a una base de datos de SQL Azure. Para obtener más información acerca de las bases de datos de SQL Azure, vea:
Detalles
- En SQL Azure, debe conectarse a la base de datos maestra para llamar a SQLServerDatabaseMetaData.getCatalogs.
SQL Azure no admite devolver todo el conjunto de catálogos de una base de datos de usuario. SQLServerDatabaseMetaData.getCatalogs usa la vista sys.databases para obtener los catálogos. Consulte la explicación de los permisos en sys.databases (Base de datos de SQL Azure) para entender el comportamiento de SQLServerDatabaseMetaData.getCatalogs en SQL Azure.
- Conexiones eliminadas
Al conectar con SQL Azure, las conexión inactivas se pueden terminar mediante un componente de red (como un firewall) después de un periodo de inactividad. Para evitar que un componente de red elimine las conexiones inactivada, se debe establecer la siguiente configuración del Registro (o su equivalente si no es Windows) en el sistema operativo donde esté cargado el controlador:
Configuración del Registro
Valor recomendado
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
30000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveInterval
1000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpMaxDataRetransmission
10
A continuación, debe reiniciar el equipo para que surta efecto la configuración del Registro.
Para llevar a cabo esta tarea cuando se ejecuta en Windows Azure, cree una tarea de inicio para agregar las claves del Registro. Por ejemplo, agregue la siguiente tarea de inicio al archivo de definición de servicios:
<Startup> <Task commandLine="AddKeepAlive.cmd" executionContext="elevated" taskType="simple"> </Task> </Startup>
A continuación, agregue un archivo AddKeepAlive.cmd al proyecto. Establezca la configuración "Copy to Output Directory" en Copy always. A continuación se muestra un archivo AddKeepAlive.cmd de ejemplo:
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
- Anexar el nombre de servidor al identificador de usuario en la cadena de conexión
Antes de la versión 4.0 de Controlador Microsoft JDBC para SQL Server, al conectarse a una base de datos de SQL Azure, se tenía anexar el nombre de servidor al identificador de usuario en la cadena de conexión. Por ejemplo, usuario@nombreDeServidor. A partir de la versión 4.0 de Controlador Microsoft JDBC para SQL Server, ya no es necesario anexar @nombreDeServidor al identificador de usuario en la cadena de conexión.
- Usar el cifrado requiere establecer hostNameInCertificate
Al conectarse con SQL Azure, debe especificar hostNameInCertificate si especifica encrypt=true. (Si el nombre de servidor en la cadena de conexión es shortName.domainName, establezca la propiedad hostNameInCertificate en *.domainName.)
Por ejemplo:
jdbc:sqlserver://abcd.int.mscds.com;databaseName= myDatabase;user=myName;password=myPassword;encrypt=true;hostNameInCertificate= *.int.mscds.com;