Dukungan Klien Asli SQL Server untuk Ketersediaan Tinggi, Pemulihan Bencana
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Penting
SQL Server Native Client (SNAC) tidak dikirim dengan:
- SQL Server 2022 (16.x) dan versi yang lebih baru
- SQL Server Management Studio 19 dan versi yang lebih baru
SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru.
Untuk proyek baru, gunakan salah satu driver berikut:
Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.
Topik ini membahas dukungan Klien Asli SQL Server (ditambahkan di SQL Server 2012 (11.x)) untuk grup ketersediaan AlwaysOn. Untuk informasi selengkapnya tentang grup ketersediaan AlwaysOn, lihat Pendengar Grup Ketersediaan, Konektivitas Klien, dan Failover Aplikasi (SQL Server), Pembuatan dan Konfigurasi Grup Ketersediaan (SQL Server), Pengklusteran Failover, dan Grup Ketersediaan AlwaysOn (SQL Server), dan Sekunder Aktif: Replika Sekunder yang Dapat Dibaca (Grup Ketersediaan AlwaysOn).
Anda dapat menentukan pendengar grup ketersediaan dari grup ketersediaan tertentu di string koneksi. Jika aplikasi Klien Asli SQL Server terhubung ke database dalam grup ketersediaan yang gagal, koneksi asli rusak, dan aplikasi harus membuka koneksi baru untuk melanjutkan pekerjaan setelah failover.
Jika Anda tidak tersambung ke pendengar grup ketersediaan, dan jika beberapa alamat IP dikaitkan dengan nama host, Klien Asli SQL Server akan melakukan iterasi secara berurutan melalui semua alamat IP yang terkait dengan entri DNS. Ini bisa memakan waktu jika alamat IP pertama yang dikembalikan oleh server DNS tidak terikat ke kartu antarmuka jaringan (NIC). Saat menyambungkan ke pendengar grup ketersediaan, SQL Server Native Client mencoba membuat koneksi ke semua alamat IP secara paralel dan jika upaya koneksi berhasil, driver akan membuang upaya koneksi yang tertunda.
Catatan
Meningkatkan batas waktu koneksi dan menerapkan logika coba lagi koneksi akan meningkatkan probabilitas bahwa aplikasi akan terhubung ke grup ketersediaan. Selain itu, karena koneksi dapat gagal karena failover grup ketersediaan, Anda harus menerapkan logika coba lagi koneksi, mencoba kembali koneksi yang gagal sampai koneksi kembali tersambung.
Menyambungkan dengan MultiSubnetFailover.
Selalu tentukan MultiSubnetFailover=Ya saat menyambungkan ke listener grup ketersediaan SQL Server 2012 atau Instans Kluster Failover SQL Server 2012. MultiSubnetFailover memungkinkan failover yang lebih cepat untuk semua Grup Ketersediaan dan instans kluster failover di SQL Server 2012 dan akan secara signifikan mengurangi waktu failover untuk topologi Always On tunggal dan multi-subnet. Selama failover multi-subnet, klien akan mencoba koneksi secara paralel. Selama failover subnet, SQL Server Native Client akan secara agresif mencoba kembali koneksi TCP.
Properti koneksi MultiSubnetFailover menunjukkan bahwa aplikasi sedang disebarkan dalam grup ketersediaan atau Instans Kluster Failover, dan SQL Server Native Client akan mencoba menyambungkan ke database pada instans SQL Server utama dengan mencoba menyambungkan ke semua alamat IP. Ketika MultiSubnetFailover=Ya ditentukan untuk koneksi, klien mencoba kembali koneksi TCP mencoba lebih cepat daripada interval transmisi ulang TCP default sistem operasi. Ini memungkinkan koneksi ulang yang lebih cepat setelah failover Grup Ketersediaan AlwaysOn atau Instans Kluster Failover AlwaysOn, dan berlaku untuk Grup Ketersediaan tunggal dan multi-subnet dan Instans Kluster Failover.
Untuk informasi selengkapnya tentang kata kunci string koneksi, lihat Menggunakan Kata Kunci String Koneksi dengan Klien Asli SQL Server.
Menentukan MultiSubnetFailover=Ya saat menyambungkan ke sesuatu selain pendengar grup ketersediaan atau Instans Kluster Failover dapat mengakibatkan dampak performa negatif, dan tidak didukung.
Gunakan panduan berikut untuk menyambungkan ke server dalam grup ketersediaan atau Instans Kluster Failover:
Gunakan properti koneksi MultiSubnetFailover saat menyambungkan ke satu subnet atau multi-subnet; ini akan meningkatkan performa untuk keduanya.
Untuk menyambungkan ke grup ketersediaan, tentukan pendengar grup ketersediaan grup ketersediaan sebagai server di string koneksi Anda.
Menyambungkan ke instans SQL Server yang dikonfigurasi dengan lebih dari 64 alamat IP akan menyebabkan kegagalan koneksi.
Perilaku aplikasi yang menggunakan properti koneksi MultiSubnetFailover tidak terpengaruh berdasarkan jenis autentikasi: Autentikasi SQL Server, Autentikasi Kerberos, atau Autentikasi Windows.
Anda dapat meningkatkan nilai loginTimeout untuk mengakomodasi waktu failover dan mengurangi upaya coba lagi koneksi aplikasi.
Transaksi terdistribusi tidak didukung.
Jika perutean baca-saja tidak berlaku, menyambungkan ke lokasi replika sekunder dalam grup ketersediaan akan gagal dalam situasi berikut:
Jika lokasi replika sekunder tidak dikonfigurasi untuk menerima koneksi.
Jika aplikasi menggunakan ApplicationIntent=ReadWrite (dibahas di bawah) dan lokasi replika sekunder dikonfigurasi untuk akses baca-saja.
Koneksi akan gagal jika replika utama dikonfigurasi untuk menolak beban kerja baca-saja dan string koneksi berisi ApplicationIntent=ReadOnly.
Memutakhirkan untuk Menggunakan Kluster Multi-Subnet dari Pencerminan Database
Kesalahan koneksi akan terjadi jika kata kunci koneksi MultiSubnetFailover dan Failover_Partner ada di string koneksi. Kesalahan juga akan terjadi jika MultiSubnetFailover digunakan dan SQL Server mengembalikan respons mitra failover yang menunjukkan bahwa itu adalah bagian dari pasangan pencerminan database.
Jika Anda meningkatkan aplikasi Klien Asli SQL Server yang saat ini menggunakan pencerminan database ke skenario multi-subnet, Anda harus menghapus properti koneksi Failover_Partner dan menggantinya dengan MultiSubnetFailover diatur ke Ya dan mengganti nama server di string koneksi dengan pendengar grup ketersediaan. Jika string koneksi menggunakan Failover_Partner dan MultiSubnetFailover=Ya, driver akan menghasilkan kesalahan. Namun, jika string koneksi menggunakan Failover_Partner dan MultiSubnetFailover=No (atau ApplicationIntent=ReadWrite), aplikasi akan menggunakan pencerminan database.
Driver akan mengembalikan kesalahan jika pencerminan database digunakan pada database utama dalam grup ketersediaan, dan jika MultiSubnetFailover=Ya digunakan dalam string koneksi yang tersambung ke database utama alih-alih ke pendengar grup ketersediaan.
Tentukan niat aplikasi
Anda dapat menentukan kata kunci ApplicationIntent
di string koneksi Anda. Nilai yang dapat ditetapkan adalah ReadWrite
(default) atau ReadOnly
.
Saat Anda mengatur ApplicationIntent=ReadOnly
, klien meminta beban kerja baca saat menyambungkan. Server memberlakukan niat pada waktu koneksi, dan selama USE
pernyataan database.
Kata ApplicationIntent
kunci tidak berfungsi dengan database baca-saja lama.
Target ReadOnly
Saat koneksi memilih ReadOnly
, koneksi ditetapkan ke salah satu konfigurasi khusus berikut yang mungkin ada untuk database:
Selalu Aktif. Database dapat mengizinkan atau melarang beban kerja baca pada database grup ketersediaan yang ditargetkan. Pilihan ini dikendalikan dengan menggunakan
ALLOW_CONNECTIONS
klausaPRIMARY_ROLE
pernyataan Transact-SQL danSECONDARY_ROLE
.
Jika tidak ada target khusus yang tersedia, database reguler dibaca.
Kata ApplicationIntent
kunci memungkinkan perutean baca-saja.
Perutean baca-saja
Perutean baca-saja adalah fitur yang dapat memastikan ketersediaan replika database baca-saja. Untuk mengaktifkan perutean baca-saja, semua hal berikut ini berlaku:
Anda harus tersambung ke pendengar grup ketersediaan AlwaysOn.
Kata
ApplicationIntent
kunci string koneksi harus diatur keReadOnly
.Administrator database harus mengonfigurasi grup ketersediaan untuk mengaktifkan perutean baca-saja.
Beberapa koneksi yang masing-masing menggunakan perutean baca-saja mungkin tidak semuanya tersambung ke replika baca-saja yang sama. Perubahan sinkronisasi database atau perubahan konfigurasi perutean server dapat mengakibatkan koneksi klien ke replika baca-saja yang berbeda.
Anda dapat memastikan bahwa semua permintaan baca-saja tersambung ke replika baca-saja yang sama dengan tidak meneruskan pendengar grup ketersediaan ke Server
kata kunci string koneksi. Sebagai gantinya, tentukan nama instans baca-saja.
Perutean baca-saja mungkin memakan waktu lebih lama daripada menyambungkan ke primer. Ini karena perutean baca-saja pertama kali terhubung ke primer, lalu mencari sekunder yang dapat dibaca terbaik yang tersedia. Karena beberapa langkah ini, Anda harus meningkatkan batas waktu anda login
menjadi setidaknya 30 detik.
ODBC
Dua kata kunci string koneksi ODBC ditambahkan untuk mendukung grup ketersediaan AlwaysOn di SQL Server Native Client:
ApplicationIntent
MultiSubnetFailover
Untuk informasi selengkapnya tentang odbc string koneksi kata kunci di SQL Server Native Client, lihat Menggunakan Kata Kunci String Koneksi dengan Klien Asli SQL Server.
Properti koneksi yang setara adalah:
SQL_COPT_SS_APPLICATION_INTENT
SQL_COPT_SS_MULTISUBNET_FAILOVER
Untuk informasi selengkapnya tentang properti koneksi ODBC di SQL Server Native Client, lihat SQLSetConnectAttr.
Fungsionalitas kata kunci ApplicationIntent dan MultiSubnetFailover akan diekspos di Administrator Sumber Data ODBC untuk DSN yang menggunakan driver Klien Asli SQL Server, dimulai di SQL Server 2012 (11.x).
Aplikasi ODBC SQL Server Native Client dapat menggunakan salah satu dari tiga fungsi untuk membuat koneksi:
Fungsi | Deskripsi |
---|---|
SQLBrowseConnect | Daftar server yang dikembalikan oleh SQLBrowseConnect tidak akan menyertakan VPN. Anda hanya akan melihat daftar server tanpa indikasi jika server adalah server mandiri, atau server utama atau sekunder dalam kluster Windows Server Failover Clustering (WSFC) yang berisi dua atau beberapa instans SQL Server yang telah diaktifkan untuk grup ketersediaan AlwaysOn. Jika Anda tersambung ke server dan mengalami kegagalan, mungkin karena Anda telah tersambung ke server, dan pengaturan ApplicationIntent tidak kompatibel dengan konfigurasi server. Karena SQLBrowseConnect tidak mengenali server dalam kluster Windows Server Failover Clustering (WSFC) yang berisi dua atau beberapa instans SQL Server yang telah diaktifkan untuk grup ketersediaan AlwaysOn, SQLBrowseConnect mengabaikan kata kunci multiSubnetFailover string koneksi. |
SQLConnect | SQLConnect mendukung ApplicationIntent dan MultiSubnetFailover melalui nama sumber data (DSN) atau properti koneksi. |
SQLDriverConnect | SQLDriverConnect mendukung ApplicationIntent dan MultiSubnetFailover melalui kata kunci string koneksi, properti koneksi, atau DSN. |
OLE DB
OLE DB di SQL Server Native Client tidak mendukung kata kunci MultiSubnetFailover .
OLE DB di SQL Server Native Client akan mendukung niat aplikasi. Niat aplikasi akan bertingkah sama untuk aplikasi OLE DB seperti aplikasi ODBC (lihat di atas).
Satu kata kunci string koneksi OLE DB ditambahkan untuk mendukung grup ketersediaan AlwaysOn di SQL Server Native Client:
- Niat Aplikasi
Untuk informasi selengkapnya tentang kata kunci string koneksi di Klien Asli SQL Server, lihat Menggunakan Kata Kunci String Koneksi dengan Klien Asli SQL Server.
Properti koneksi yang setara adalah:
SSPROP_INIT_APPLICATIONINTENT
DBPROP_INIT_PROVIDERSTRING
Aplikasi SQL Server Native Client OLE DB dapat menggunakan salah satu metode untuk menentukan niat aplikasi:
IDBInitialize::Initialize
IDBInitialize::Initialize menggunakan kumpulan properti yang dikonfigurasi sebelumnya untuk menginisialisasi sumber data dan membuat objek sumber data. Tentukan niat aplikasi sebagai properti penyedia atau sebagai bagian dari string properti yang diperluas.
IDataInitialize::GetDataSource
IDataInitialize::GetDataSource mengambil string koneksi input yang dapat berisi kata kunci Niat Aplikasi.
IDBProperties::GetProperties
IDBProperties::GetProperties mengambil nilai properti yang saat ini diatur pada sumber data. Anda dapat mengambil nilai Niat Aplikasi melalui properti DBPROP_INIT_PROVIDERSTRING dan properti SSPROP_INIT_APPLICATIONINTENT.
IDBProperties::SetProperties
Untuk mengatur nilai properti ApplicationIntent , panggil IDBProperties::SetProperties yang melewati properti SSPROP_INIT_APPLICATIONINTENT dengan nilai "ReadWrite" atau "ReadOnly" atau properti DBPROP_INIT_PROVIDERSTRING dengan nilai yang berisi "ApplicationIntent=ReadOnly" atau "ApplicationIntent=ReadWrite".
Anda dapat menentukan niat aplikasi di bidang Properti Niat Aplikasi dari tab Semua dalam kotak dialog Properti Tautan Data.
Ketika koneksi implisit dibuat, koneksi implisit akan menggunakan pengaturan niat aplikasi dari koneksi induk. Demikian pula, beberapa sesi yang dibuat dari sumber data yang sama akan mewarisi pengaturan niat aplikasi sumber data.
Lihat Juga
Fitur Klien Asli SQL Server
Menggunakan Kata Kunci String Koneksi dengan SQL Server Native Client