Pengembang terus mencari tempat di mana string koneksi, URL JDBC, atau entri tnsnames.ora memilih VPN. Tempat seperti itu tidak ada. Terowongan dibangun oleh sistem operasi atau klien vendor yang mendaftarkan adaptor virtual, dan setiap pustaka basis data di atasnya memakai lapisan soket yang dihasilkan. String koneksi menyebut host, port, dan kredensial, dan itulah seluruh kosakatanya.

Mitos: string koneksi bisa memilih terowongan

Driver membuka soket TCP ke host dan port. Ia tidak punya API untuk menaikkan terowongan, tidak punya bidang untuk profil terowongan, dan tidak punya cara untuk mengautentikasi ke gateway VPN.

Itulah sebabnya alat berperilaku sama begitu rute ada. SSMS, DBeaver, Eclipse Data Tools, dan sqlcmd biasa bertindak seolah server berada di jaringan lokal, karena dari sudut pandang soket memang begitu. Adaptor virtual membuat subnet basis data dapat dijangkau, dan driver tidak pernah tahu bagaimana caranya.

Ini juga menjelaskan mengapa string koneksi tidak bisa memperbaiki terowongan yang putus. Saat tautan mati, driver melaporkan waktu tunggu habis atau kesalahan jaringan umum, dan kode aplikasi yang menganggapnya masalah kueri mengulang lapisan yang salah selamanya.

Naikkan terowongan sebelum driver berjalan

Hubungkan VPN di tingkat sistem operasi, mengikuti instruksi penyedia atau tim jaringan, dan baru setelah itu buka alatnya. Dalam praktiknya itu berarti rute ke subnet basis data sudah ada sebelum driver menyelesaikan nama host.

Jauhkan pengawasan terowongan dari aplikasi. Layanan PHP atau Java yang mencoba menaikkan tautan sendiri menanamkan perilaku satu penyedia ke dalam kode bisnis, dan setiap failover menjadi rilis aplikasi. Pengawas yang memiliki terowongan, memantaunya, dan menyalakannya kembali adalah urusan terpisah dari jalur kueri.

Periksa rute sebelum menyalahkan driver: jika host tidak terselesaikan atau port tidak menjawab dari shell, tidak ada string koneksi yang akan mengubahnya.

Mitos: kegagalan autentikasi Windows berarti rutenya rusak

Autentikasi Windows melalui VPN sering gagal dengan kesalahan yang tampak seperti gangguan jaringan, padahal rutenya baik. Ketika akun milik domain lain dan laptop tidak dapat bergabung dengannya, jalankan klien dengan kredensial eksplisit alih-alih identitas sesi desktop.

runas /noprofile /netonly /user:CORP\dbreader "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe"

Sakelar /netonly menyimpan kredensial itu hanya untuk autentikasi jarak jauh. Pastikan apa yang benar-benar diterima server dengan SELECT SUSER_SNAME() alih-alih memercayai dialog koneksi. Dilaporkan bahwa menyimpan kredensial untuk alamat server di Windows Credential Manager berfungsi untuk SSMS tetapi tidak selalu untuk layanan yang berjalan di bawah akun lain, jadi periksa identitas mana yang dipakai proses sebelum mengubah login.

Latensi mengubah kursor sisi server menjadi waktu tunggu habis

Kursor sisi server meminta basis data menahan hasil dan mengambilnya secara bertahap, yang mengubah satu hasil besar menjadi banyak perjalanan pulang-pergi kecil. Di LAN itu murah. Lewat terowongan dengan tambahan latensi puluhan milidetik, kueri yang sama bisa melampaui waktu tunggu perintah tanpa hampir mentransfer data.

Beralihlah ke kursor sisi klien, atau naikkan ukuran pengambilan dan kelompokkan barisnya, dan jumlah perjalanan pulang-pergi turun. Hambatannya adalah jumlah pertukaran, bukan kecepatan tautan nominal, jadi mengukur throughput akan menyesatkan Anda sementara mengukur perjalanan pulang-pergi tidak. Uji dengan kumpulan hasil terbesar yang benar-benar diambil pengguna Anda, bukan dengan kueri satu baris yang langsung kembali. Jika waktu tunggu bergeser tetapi tidak hilang, naikkan waktu tunggu perintah dan ukuran pengambilan bersama-sama lalu ukur lagi.

Aritmetika yang sama berlaku untuk ORM yang banyak bicara dan untuk klien apa pun yang mengeluarkan satu pernyataan per baris. Jika rencana kueri baik dan transfernya kecil, hitung pertukaran jaringan sebelum menyetel basis data.

Periksa port, instans, dan filter lokal

Instans bernama mendengarkan pada port dinamis, jadi pastikan portnya alih-alih mengasumsikan 1433. Pada instans default nilainya dapat dibaca dari nilai registri TcpPort di bawah kunci SuperSocketNetLib instans tersebut. Untuk Oracle, pastikan host di tnsnames.ora terselesaikan, alamatnya menjawab, dan port listener diizinkan; 1521 adalah default umum, bukan jaminan.

Lalu singkirkan daftar akses terowongan itu sendiri dan, akhirnya, antivirus lokal atau firewall host yang memblokir koneksi bahkan ketika klien dan server berada di mesin yang sama. Catat tahap yang gagal sebelum mengubah konfigurasi, karena resolusi nama, keterjangkauan TCP, dan TLS atau login masing-masing gagal dengan pesan berbeda.

Tulis tahapnya di tiket. Kalau tidak, orang berikutnya akan mengulang pencarian string koneksi yang sama yang memulai semua ini.

Artikel terkait