Menghubungkan ke database Azure SQL

Unduh driver JDBC

Artikel ini membahas masalah saat Anda menggunakan Driver Microsoft JDBC untuk SQL Server untuk menyambungkan ke Azure SQL Database. Untuk informasi selengkapnya untuk menyambungkan ke Azure SQL Database, lihat:

Detail

Untuk menyambungkan ke Azure SQL Database, Anda harus menyambungkan ke database master untuk memanggil SQLServerDatabaseMetaData.getCatalogs.
Azure SQL Database tidak mendukung pengembalian seluruh kumpulan katalog dari database pengguna. SQLServerDatabaseMetaData.getCatalogs menggunakan tampilan sys.databases untuk mendapatkan katalog. Lihat diskusi izin dalam sys.databases (Transact-SQL) untuk memahami perilaku SQLServerDatabaseMetaData.getCatalogs pada Azure SQL Database.

Batas waktu masuk

Saat menyambungkan ke database Azure SQL, default loginTimeout yang disarankan adalah 30 detik. Jika Anda tersambung ke instans tanpa server, disarankan untuk menggunakan loginTimeout lebih dari 60 detik atau lebih. Jika instans tanpa server telah menganggur, mungkin perlu waktu untuk bangun pada koneksi awal. Untuk informasi selengkapnya tentang cara mengatur loginTimeout, lihat Mengatur properti koneksi.

Koneksi dihilangkan

Saat Anda tersambung ke Azure SQL Database, koneksi diam dapat dihentikan oleh komponen jaringan (seperti firewall) setelah periode tidak aktif. Ada dua jenis koneksi diam, dalam konteks ini:

  • Menganggur di lapisan TCP, di mana koneksi dapat dihilangkan oleh sejumlah perangkat jaringan.

  • Menganggur oleh Azure SQL Gateway, di mana pesan keepalive TCP mungkin terjadi (yang membuat koneksi tidak menganggur dari perspektif TCP), tetapi tidak memiliki kueri aktif dalam 30 menit. Dalam skenario ini, Gateway akan menentukan bahwa koneksi TDS menganggur pada 30 menit dan mengakhiri koneksi.

Untuk mengatasi poin kedua dan menghindari Gateway mengakhiri koneksi diam, Anda dapat:

  • Gunakan kebijakan Alihkankoneksi untuk mengonfigurasi sumber data Azure SQL Anda.

  • Menjaga koneksi tetap aktif melalui aktivitas ringan. Metode ini tidak disarankan dan hanya boleh digunakan jika tidak ada opsi lain yang mungkin.

Untuk mengatasi titik pertama dan menghindari hilangnya koneksi diam oleh komponen jaringan, atur pengaturan registri berikut atau setara non-Windows pada sistem operasi tempat driver dimuat:

Pengaturan Registri Nilai yang Direkomendasikan
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 \ TcpMaxDataRetransmissions 10

Mulai ulang komputer agar setelan registri berlaku.

Nilai KeepAliveTime dan KeepAliveInterval berada dalam milidetik. Pengaturan ini menyebabkan koneksi tidak responsif terputus dalam waktu 10 hingga 40 detik. Jika tidak ada respons yang diterima setelah paket tetap hidup dikirim, paket tersebut akan dicoba ulang setiap detik hingga 10 kali. Jika tidak ada respons yang diterima selama waktu tersebut, soket sisi klien terputus. Bergantung pada lingkungan Anda, Anda mungkin ingin meningkatkan KeepAliveInterval untuk mengakomodasi gangguan yang diketahui (misalnya, migrasi komputer virtual), yang mungkin menyebabkan server tidak responsif selama lebih dari 10 detik.

Catatan

TcpMaxDataRetransmissions tidak dapat dikontrol pada Windows Vista atau Windows 2008 dan yang lebih tinggi.

Untuk mengonfigurasi ini di Azure VM, buat tugas startup untuk menambahkan kunci registri. Misalnya, tambahkan tugas Startup berikut ke file definisi layanan:

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

Kemudian tambahkan file AddKeepAlive.cmd ke proyek Anda. Atur pengaturan "Salin ke Direktori Output" ke Salin selalu. Skrip berikut adalah contoh file 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  

Tambahkan nama server ke userId di string koneksi

Sebelum Versi 4.0 Driver Microsoft JDBC untuk SQL Server, untuk menyambungkan ke Azure SQL Database, Anda diharuskan menambahkan nama server ke UserId di string koneksi. Misalnya, user@servername. Mulai versi 4.0 dari Microsoft JDBC Driver untuk SQL Server, tidak perlu lagi menambahkan @servername ke UserId di string koneksi.

Menggunakan enkripsi memerlukan pengaturan hostNameInCertificate

Sebelum versi 7.2 Driver Microsoft JDBC untuk SQL Server, untuk menyambungkan ke Azure SQL Database, Anda harus menentukan hostNameInCertificate jika Anda menentukan encrypt=true (Jika nama server di string koneksi adalah shortName.domainName, atur properti hostNameInCertificate ke *.domainName.). Properti ini bersifat opsional pada driver versi 7.2.

Misalnya:

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

Baca juga

Koneksi ke SQL Server dengan driver JDBC