Dukungan Klien Asli SQL Server untuk Ketersediaan Tinggi, Pemulihan Bencana

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Penting

SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server atau Microsoft ODBC Driver terbaru untuk SQL Server ke depannya. 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 dalam 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 SQL Server Native Client.

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 dalam 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:

  1. Jika lokasi replika sekunder tidak dikonfigurasi untuk menerima koneksi.

  2. 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 dalam 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 SQL Server Native Client 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 dalam string koneksi dengan listener 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 dalam 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 klausa PRIMARY_ROLE pernyataan Transact-SQL dan SECONDARY_ROLE .

  • Replikasi geografis

  • Peluasan skala

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 ke ReadOnly.

  • 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 kata kunci string koneksi ODBC di Klien Asli SQL Server, 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 string koneksi MultiSubnetFailover .
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