Server Terdaftar SSMS dengan Intent Aplikasi ReadOnly

10

Kami sedang mengerjakan pengujian POC SQL Server 2014 dengan AlwaysOn dan salah satu pengguna bertanya tentang menyimpan konfigurasi SSMS dengan ReadOnly Intent menggunakan server terdaftar di grup server lokal. Dengan cara ini mereka tidak perlu mengetik nama alias setiap kali mereka perlu mengakses replika ReadOnly .

Sayangnya tidak ada opsi dalam server terdaftar untuk menambahkan Opsi ApplicationIntent tidak seperti penjelajah objek biasa.

Saya menemukan artikel ini dari Microsoft tentang mengubah string koneksi di RegSrvr.xml.

https://connect.microsoft.com/SQLServer/feedback/details/786323/ssms-sql-server-management-studio-2012-missing-connection-properties-for-available-groups

Saya mencoba saran mereka dan itu tidak terhubung ke simpul replika yang tepat ketika menghubungkan melalui server lokal di server terdaftar.

The ReadOnly pilihan bekerja dengan baik dari objek explorer ketika menggunakan opsi di jendela connect> Parameter Connection tambahan. Tapi itu tidak menyimpan perubahan yang dilakukan pada koneksi.

Adakah yang tahu solusi alternatif untuk menghemat konfigurasi dengan properti ReadOnly Intent dengan SSMS? Terima kasih sebelumnya atas bantuan Anda.

DBAuser
sumber

Jawaban:

3

SQL Management Studio (versi sebelum 2016)

Sayangnya, ada beberapa peringatan yang membuat penggunaan Application Intent di SQL Management Studio agak menyakitkan:

Untuk terhubung secara manual dengan niat ReadOnly, setelah membuka dialog Connect to Server dari Object Explorer, pengguna harus ingat untuk:

  1. Klik Opsi >> .
  2. Buka tab Parameter Koneksi Tambahan .
  3. Masukkan parameter tambahan sebagai ApplicationIntent = ReadOnly;
  4. (Catatan: Pengguna tidak boleh mengklik tombol Pilihan << setelah memasukkan Parameter Koneksi Tambahan atau parameter akan hilang.)
  5. Klik Hubungkan .
  6. Selalu luncurkan jendela kueri dengan mengklik kanan pada database yang diinginkan dalam tampilan Object Explorer dan memilih Query Baru untuk menghindari berlari ke peringatan # 3 di bawah ini.

Peringatan yang berlaku adalah sebagai berikut:

  1. Meskipun Anda bisa mendapatkan SQL Management Studio untuk terhubung dengan Read Only Intent, itu tidak menyimpan Parameter Koneksi Tambahan ketika koneksi ditambahkan ke Server Terdaftar.
  2. Perilaku ketika mengedit tangan server yang terdaftar secara lokal di file RegSrvr.xml untuk menambahkan Application Intent sangat tidak konsisten dan akan ditimpa setiap kali perubahan dilakukan melalui GUI sehingga penyelesaian masalah ini tidak dapat diandalkan.
  3. Database Selalu Aktif harus dipilih sebelum jendela kueri dibuka; jika tidak, koneksi akan dialihkan ke server utama. Jika Anda mencoba untuk memilih database menggunakan drop-down jendela query setelah jendela query telah dibuka ke database Non-Selalu Aktif, Anda akan mendapatkan dialog kesalahan. Jika Anda mencoba mengubah database ke database Always On dengan pernyataan USE setelah jendela kueri dibuka ke database non-Selalu Di, hasilnya terlihat seperti ini ketika Anda mencoba untuk mengeksekusi query SQL:
      Msg 979, Level 14, State 1, Line 1
      The target database ('AlwaysOnDatabase') is in an availability group 
      and currently does not allow read only connections. For more 
      information about application intent, see SQL Server Books Online.

SQL Management Studio (versi 2016 atau lebih baru)

SQL Server Management Studio 2016 atau lebih tinggi dapat terhubung dengan Intent Aplikasi Hanya Baca (menggunakan 6 langkah yang sama dengan versi sebelumnya) dan itu menyimpan Parameter Koneksi Tambahan. Masih ada beberapa peringatan:

  1. Tampilan Obyek Explorer tidak akan menghitung tabel atau objek lain dalam database AlwaysOn. Mencoba mengembangkannya menghasilkan pesan yang ditolak akses.
  2. Anda tidak bisa memiliki koneksi Read Only dan non-Read Only ke pendengar yang sama terbuka secara bersamaan.
  3. Intellisense untuk nama objek di database tidak berfungsi. (Anehnya, Objek didata dengan baik di Query Designer yang dapat Anda luncurkan menggunakan Design Query di Editor ... dari menu klik kanan.)
  4. Peringatan 3 dari peringatan versi sebelumnya masih berlaku.

Produk Pihak Ketiga

LinqPad menyimpan seluruh string koneksi termasuk Application Intent dan database saat Anda menyimpan koneksi dan karenanya mungkin merupakan opsi yang layak untuk melakukan kueri Read Only terhadap database Always On.

JamieSee
sumber
0

Anda mungkin kehilangan bagian penting dari teka-teki atau setidaknya saya tidak melihatnya di mana pun dalam pertanyaan Anda:

ApplicationIntent=readonlyadalah setengah dari persamaan. Anda juga harus melewati parameter MultiSubnetFailover=True.

Misalnya, di tab Parameter Koneksi Tambahan, Anda ingin memasukkan yang berikut ini:

MultiSubnetFailover=True;ApplicationIntent=readonly;
Tony Castro
sumber
Terima kasih Tony tetapi ini bukan masalah yang saya alami.
DBAuser
0

Apakah mungkin Anda membuat file konfigurasi dan kemudian Anda secara otomatis membuat server terdaftar yang diperlukan di SSMS? Seperti yang disebutkan dalam artikel MSSQLTips saya:

Otomatis Mendaftarkan dan Memelihara Server di SQL Server Management Studio (SSMS)

jyao
sumber
Hai jyao, Terima kasih atas balasan Anda. Anda telah memposting skrip PowerShell yang tertarik pada artikel itu tetapi sayangnya tidak bekerja dengan properti ApplicationIntent. Saya mengubah PS untuk menggunakan yang berikut: Item Baru -Nama $ (encode-sqlname $ g.value) -path "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("Server = $ regsrv; keamanan terpadu = benar; Katalog Awal = dbname; ApplicationIntent = ReadOnly"); Tidak berhasil! Jika ini berhasil, saya akan dengan senang hati menggunakan ini sebagai opsi. Terima kasih lagi.
DBAuser
0

Ini telah diperbaiki di SQL 2016 SSMS saat menggunakan dengan server terdaftar. Saya dapat mendaftarkan koneksi ReadOnly Intent sebagai bagian dari grup server lokal dan membuka koneksi yang disimpan untuk penggunaan di masa mendatang. Terima kasih atas bantuannya.

DBAuser
sumber
0

Saya tidak bisa berkomentar tetapi saya menambahkan jawaban DBAUser.

Saya tidak bisa melihat opsi untuk menambahkan Intent Aplikasi di GUI ketika mengatur koneksi dalam area server terdaftar.

Saya harus terhubung menggunakan objek explorer (menggunakan Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly) kemudian mendaftarkan server setelah saya terhubung.

Atau tambahkan Initial Catalog=<Database>;ApplicationIntent=ReadOnlyke string koneksi dalam file .regsrvr.

marclancy
sumber
Anda harus mendaftarkan server readOnly di objek explorer untuk melihatnya sebagai bagian dari grup server lokal di server terdaftar. Di objek explorer, Setelah Anda membuat koneksi readOnly ke server dengan applicationintent, klik kanan pada server dan klik pada Register. Kemudian ubah Nama Server terdaftar menjadi yang Anda inginkan. Ini akan disimpan sebagai bagian dari server lokal di server terdaftar. Semoga ini membantu!
DBAuser