Menghubungkan ke database Azure SQL
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk