เซิร์ฟเวอร์ที่ลงทะเบียน SSMS พร้อมเจตนาการใช้งานแบบอ่านอย่างเดียว


10

เรากำลังดำเนินการทดสอบ SQL Server 2014 POC กับ AlwaysOn และหนึ่งในผู้ใช้ถามเกี่ยวกับการบันทึกการกำหนดค่าของ SSMS ด้วยเจตนาแบบอ่านอย่างเดียวโดยใช้เซิร์ฟเวอร์ที่ลงทะเบียนในกลุ่มเซิร์ฟเวอร์ท้องถิ่น วิธีนี้พวกเขาไม่จำเป็นต้องพิมพ์ชื่อนามแฝงทุกครั้งที่พวกเขาต้องการเข้าถึงReadOnly replica

น่าเสียดายที่ไม่มีตัวเลือกภายในเซิร์ฟเวอร์ที่ลงทะเบียนเพื่อเพิ่มตัวเลือก ApplicationIntent ซึ่งแตกต่างจากนักสำรวจวัตถุปกติ

ฉันเจอบทความนี้จาก Microsoft เกี่ยวกับการเปลี่ยนสตริงการเชื่อมต่อใน RegSrvr.xml

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

ฉันลองใช้คำแนะนำของพวกเขาและมันไม่ได้เชื่อมต่อกับโหนดจำลองที่ถูกต้องเมื่อเชื่อมต่อผ่านเซิร์ฟเวอร์ท้องถิ่นในเซิร์ฟเวอร์ที่ลงทะเบียน

อ่านได้อย่างเดียวตัวเลือกที่ทำงานได้ดีจากวัตถุสำรวจเมื่อใช้ตัวเลือกในหน้าต่างการเชื่อมต่อ> พารามิเตอร์การเชื่อมต่อเพิ่มเติม แต่จะไม่บันทึกการเปลี่ยนแปลงที่เกิดขึ้นกับการเชื่อมต่อ

ไม่มีใครรู้วิธีแก้ปัญหาทางเลือกใด ๆ ในการบันทึกการกำหนดค่าด้วยคุณสมบัติการอ่านอย่างเดียวกับ SSMS ขอบคุณล่วงหน้าสำหรับความช่วยเหลือของ.

คำตอบ:


3

SQL Management Studio (รุ่นก่อนหน้า 2016)

น่าเสียดายที่มีข้อแม้บางประการที่ทำให้การใช้แอปพลิเคชันแสดงเจตนาใน SQL Management Studio ค่อนข้างเจ็บปวด:

ในการเชื่อมต่อด้วยตนเองด้วยเจตนาแบบอ่านอย่างเดียวหลังจากเปิดกล่องโต้ตอบเชื่อมต่อไปยังเซิร์ฟเวอร์จาก Object Explorer ผู้ใช้จะต้องจำไว้ว่า:

  1. คลิกตัวเลือก >>
  2. ไปที่แท็บพารามิเตอร์การเชื่อมต่อเพิ่มเติม
  3. ป้อนพารามิเตอร์เพิ่มเติมเป็น ApplicationIntent = ReadOnly;
  4. (หมายเหตุ: ผู้ใช้จะต้องไม่คลิกปุ่มตัวเลือก <<หลังจากป้อนพารามิเตอร์การเชื่อมต่อเพิ่มเติมมิฉะนั้นพารามิเตอร์จะหายไป)
  5. คลิกConnect
  6. เรียกใช้หน้าต่างคิวรีเสมอโดยการคลิกขวาบนฐานข้อมูลที่ต้องการในมุมมองObject ExplorerและเลือกNew Queryเพื่อหลีกเลี่ยงการทำงานใน # 3 caveat ด้านล่าง

คำเตือนที่ใช้มีดังนี้:

  1. แม้ว่าคุณสามารถให้ SQL Management Studio เชื่อมต่อกับ Read Only Intent ได้ แต่จะไม่เก็บพารามิเตอร์การเชื่อมต่อเพิ่มเติมเมื่อมีการเพิ่มการเชื่อมต่อไปยังเซิร์ฟเวอร์ที่ลงทะเบียน
  2. พฤติกรรมเมื่อมือแก้ไขเซิร์ฟเวอร์ที่ลงทะเบียนในเครื่องในไฟล์ RegSrvr.xml เพื่อเพิ่ม Application Intent นั้นมีความไม่สอดคล้องกันอย่างมากและจะถูกเขียนทับเมื่อใดก็ตามที่มีการเปลี่ยนแปลงผ่าน GUI ทำให้การแก้ไขปัญหานี้ไม่น่าเชื่อถือ
  3. ต้องเลือกฐานข้อมูล Always On ก่อนที่จะเปิดหน้าต่างแบบสอบถาม มิฉะนั้นการเชื่อมต่อจะถูกส่งไปยังเซิร์ฟเวอร์หลัก หากคุณพยายามเลือกฐานข้อมูลโดยใช้ดรอปดาวน์ของหน้าต่างแบบสอบถามหลังจากหน้าต่างคิวรีถูกเปิดไปยังฐานข้อมูลที่ไม่ได้เปิดทุกครั้งคุณจะได้รับกล่องโต้ตอบข้อผิดพลาด หากคุณพยายามที่จะเปลี่ยนฐานข้อมูลเป็นฐานข้อมูล Always On ด้วยคำสั่ง USE หลังจากหน้าต่างคิวรีถูกเปิดไปยังฐานข้อมูล Non-Always On ผลลัพธ์จะมีลักษณะเช่นนี้เมื่อคุณพยายามเรียกใช้คิวรี 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 (เวอร์ชั่น 2016 หรือใหม่กว่า)

SQL Server Management Studio 2016 หรือสูงกว่าสามารถเชื่อมต่อกับ Read Only Application Intent (ใช้ 6 ขั้นตอนเดียวกับเวอร์ชั่นก่อนหน้านี้) และจะเก็บพารามิเตอร์การเชื่อมต่อเพิ่มเติม ยังมีคำเตือนอยู่บ้าง:

  1. มุมมอง Object Explorer จะไม่ระบุตารางหรือวัตถุอื่นใดในฐานข้อมูล AlwaysOn ความพยายามในการขยายผลลัพธ์ในข้อความปฏิเสธการเข้าถึง
  2. คุณไม่สามารถเปิดการเชื่อมต่อแบบอ่านอย่างเดียวและไม่ใช่แบบอ่านอย่างเดียวกับผู้ฟังรายเดียวกันในเวลาเดียวกัน
  3. Intellisense สำหรับชื่อวัตถุในฐานข้อมูลไม่ทำงาน (ผิดปกติพอวัตถุได้รับการระบุในการออกแบบ Query ที่คุณสามารถเปิดใช้โดยใช้Design Query ใน Editor ...จากเมนูคลิกขวา)
  4. Caveat 3 จาก caveats รุ่นก่อนยังคงมีผลบังคับใช้

ผลิตภัณฑ์ของบุคคลที่สาม

LinqPadเก็บสตริงการเชื่อมต่อทั้งหมดรวมถึง Application Intent และฐานข้อมูลเมื่อคุณบันทึกการเชื่อมต่อดังนั้นจึงอาจเป็นตัวเลือกที่ใช้การได้สำหรับการดำเนินการแบบสอบถามแบบอ่านอย่างเดียวกับฐานข้อมูล Always On เสมอ


0

คุณอาจพลาดส่วนสำคัญของจิ๊กซอว์หรืออย่างน้อยฉันก็ไม่เห็นมันในคำถามของคุณ:

ApplicationIntent=readonlyคือครึ่งหนึ่งของสมการ MultiSubnetFailover=Trueนอกจากนี้คุณยังจะต้องผ่านพารามิเตอร์

ตัวอย่างเช่นในแท็บพารามิเตอร์การเชื่อมต่อเพิ่มเติมคุณต้องการป้อนข้อมูลต่อไปนี้:

MultiSubnetFailover=True;ApplicationIntent=readonly;

ขอบคุณ Tony แต่นี่ไม่ใช่ปัญหาที่ฉันมี
DBAuser

0

คุณลองใช้สคริปต์ PowerShell แต่ใช้การสะกดคำอื่น (มีที่ว่าง) เพื่อจุดประสงค์ของแอปพลิเคชันหรือไม่ หรือว่าฉันมีวิธีการเชื่อมต่อรวมกัน?

Server=$regsrv ; integrated security=true;Initial Catalog=dbname;
Application Intent=ReadOnly"); 

เชื่อมต่อกับ SQL Server โดยใช้ Application Intent Read-Only


0

เป็นไปได้หรือไม่ที่คุณสร้างไฟล์กำหนดค่าจากนั้นสร้างเซิร์ฟเวอร์ที่ลงทะเบียนที่จำเป็นใน SSMS โดยอัตโนมัติ? เช่นเดียวกับที่กล่าวไว้ในบทความ MSSQLTips ของฉัน:

ทำการลงทะเบียนและดูแลเซิร์ฟเวอร์โดยอัตโนมัติใน SQL Server Management Studio (SSMS)


สวัสดี jyao ขอบคุณสำหรับการตอบกลับของคุณ คุณโพสต์สคริปต์ PowerShell ที่สนใจในบทความนั้น แต่น่าเสียดายที่ไม่สามารถใช้งานได้กับคุณสมบัติของ ApplicationIntent ฉันเปลี่ยน PS เพื่อใช้สิ่งต่อไปนี้: รายการใหม่ - ชื่อ $ (encode-sqlname $ g.value) -path "sqlserver: \ SQLRegistration \ $ ($ choice) \ $ ($ g.parentfolder)" -ItemType $ g .type -Value ("เซิร์ฟเวอร์ = $ regsrv; การรักษาความปลอดภัยแบบรวม = true; Initial Catalog = dbname; ApplicationIntent = ReadOnly"); ไม่มีโชค! หากใช้งานได้ฉันจะมีความสุขมากกว่าที่จะใช้สิ่งนี้เป็นตัวเลือก ขอบคุณอีกครั้ง.
DBAuser

0

สิ่งนี้ได้รับการแก้ไขใน SQL 2016 SSMS เมื่อใช้กับเซิร์ฟเวอร์ที่ลงทะเบียน ฉันสามารถลงทะเบียนการเชื่อมต่อ ReadOnly Intent เป็นส่วนหนึ่งของกลุ่มเซิร์ฟเวอร์ในพื้นที่และเปิดการเชื่อมต่อที่บันทึกไว้สำหรับใช้ในอนาคต ขอบคุณสำหรับความช่วยเหลือในสิ่งนี้


0

ฉันไม่สามารถแสดงความคิดเห็นได้ แต่กำลังเพิ่มคำตอบของ DBAUser

ฉันไม่เห็นตัวเลือกในการเพิ่ม Application Intent ใน GUI เมื่อตั้งค่าการเชื่อมต่อภายในพื้นที่เซิร์ฟเวอร์ที่ลงทะเบียน

ฉันต้องเชื่อมต่อโดยใช้ object explorer (ใช้Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly) จากนั้นลงทะเบียนเซิร์ฟเวอร์เมื่อฉันเชื่อมต่อ

หรือเพิ่มลงInitial Catalog=<Database>;ApplicationIntent=ReadOnlyในสตริงการเชื่อมต่อในไฟล์. regsrvr


คุณจะต้องลงทะเบียนเซิร์ฟเวอร์ readOnly ใน object explorer เพื่อดูสิ่งนี้เป็นส่วนหนึ่งของกลุ่มเซิร์ฟเวอร์โลคัลในเซิร์ฟเวอร์ที่ลงทะเบียน ใน object explorer เมื่อคุณสร้างการเชื่อมต่อ readly เฉพาะกับเซิร์ฟเวอร์ด้วย applicationintent ให้คลิกขวาบนเซิร์ฟเวอร์และคลิกที่ Register จากนั้นเปลี่ยนชื่อเซิร์ฟเวอร์ที่ลงทะเบียนเป็นชื่อที่คุณต้องการ สิ่งนี้จะถูกบันทึกเป็นส่วนหนึ่งของเซิร์ฟเวอร์ภายในเครื่องในเซิร์ฟเวอร์ที่ลงทะเบียน หวังว่านี่จะช่วยได้!
DBAuser
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.