none
פונקציה לקבלת Listener Name? RRS feed

  • שאלה

  • היייש לי ארבעה שרתים שבהם אני רוצה להכניס מנגנון של Resource governor

    חשבתי כיצד ליצור את הClasification function והכי הגיוני כמובן ליצור אותה לפי Listener name.

    שלושת השרתים מחולקים באופן הבא:

    - שני שרתים ביניהם AlwaysOn כאשר לכל AVG קיים Listener.

    - שני שרתים ביניהם קיים Cluster - ללא AlwaysOn. כאשר אנחנו התקנו בקלאסטר Services באופן ידני עבור כל מערכת כדי לדמות Listener כמו ב-AlwaysOn. (טוב למקרה שבו אין לי צורך בAlwaysOn אבל אני עדיין רוצה להעביר מערכת בין השרת הראשון לשני מבלי לשנות את הConnectionString באפליקציה)

    השאלה שלי היא כיצד ניתן (אם בכלל) להפעיל פונקצייה שבה אני מקבל את שם ה-Listener שדרכו ה-Session הנוכחי התחבר. זאת על מנת להפנות אותו ל-Resource pool מתאים. אני מניח שבשיטה הראשונה של AlwaysOn זה קצת יותר פשוט, אך מה לגבי השנייה?

    תודה!

    יום שישי 31 ינואר 2014 09:36

תשובות

  • הי קדאפי,

    אין דרך ישירה לקבל את ה-Listener Name בתוך ה-Classifier Function. הדבר הכי קרוב לזה הוא להסתמך על שם ה-Database, אבל גם את זה אתה לא יכול לקבל בתוך ה-Classifier Function, כי ההתחברות ל-Database מתבצעת רק אחרי ה-Classification.

    אופציה אחת לעקוף את הבעיה היא להשתמש ב-Default Database של ה-Login. בשביל זה אתה צריך להקפיד על שיוך בין Login ל-Database, וכן להקפיד לבחור את ה-Default Database של ה-Login. בתוך ה-Classifier Function, אתה יכול לבדוק מה ה-Default Database לפי ה-Login.

    אופציה אחרת היא להסתמך על ה-Login Name או על ה-Application Name.

    מקווה שעזרתי...

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • הוצע כתשובה על-ידי Eran Sharvit יום שני 03 פברואר 2014 13:25
    • סומן כתשובה על-ידי Eran Sharvit יום ראשון 09 פברואר 2014 12:50
    יום ראשון 02 פברואר 2014 07:40
    מנחה דיון

כל התגובות

  • הי קדאפי,

    אין דרך ישירה לקבל את ה-Listener Name בתוך ה-Classifier Function. הדבר הכי קרוב לזה הוא להסתמך על שם ה-Database, אבל גם את זה אתה לא יכול לקבל בתוך ה-Classifier Function, כי ההתחברות ל-Database מתבצעת רק אחרי ה-Classification.

    אופציה אחת לעקוף את הבעיה היא להשתמש ב-Default Database של ה-Login. בשביל זה אתה צריך להקפיד על שיוך בין Login ל-Database, וכן להקפיד לבחור את ה-Default Database של ה-Login. בתוך ה-Classifier Function, אתה יכול לבדוק מה ה-Default Database לפי ה-Login.

    אופציה אחרת היא להסתמך על ה-Login Name או על ה-Application Name.

    מקווה שעזרתי...

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • הוצע כתשובה על-ידי Eran Sharvit יום שני 03 פברואר 2014 13:25
    • סומן כתשובה על-ידי Eran Sharvit יום ראשון 09 פברואר 2014 12:50
    יום ראשון 02 פברואר 2014 07:40
    מנחה דיון
  • אני לא יודע עד כמה הפתרון הזה חכם. לדעתי 50% מהאנשים מתחברים לשרת תחת MASTER. (אני רוצה להגביל גם אנשים שמתחברים דרך SSMS).

    מסתבר שניתן למצוא את ה-IP של ה-LISTENER המקורי [ותודה לברזיס] באמצעות שליפה מ-dm_exec_connections, הבעייה שגם פה, ה-Classification function לא מאפשר זאת (ועדיין לא מצאתי סיבה מספיק טובה למה לא)

    כרגע אנחנו שוקלים לנסות "לעבוד עליו" באמצעות שימוש בפונקציית CLR שתקבל SESSION ID ותחזיר את ה-LISTENER אבל אני פסימי בנושא הזה.

    יום ראשון 02 פברואר 2014 18:11
  • הי,

    אם אתה יכול לעשות הפרדה ברורה של Login או כמה Logins לכל Availability Group, אז אין לך שום בעיה לקבל את ה-Listener Name לפי ה-Login. וזה לא משנה עם איזה אפליקציה המשתמש מתחבר (כולל SSMS), וזה גם לא משנה לאיזה Database הוא מתחבר. כל מה שאתה צריך לעשות זה לבדוק מה ה-Login, וממנו להסיק מה השם של ה-Listener.

    את זה אתה יכול לבצע בשתי דרכים:

    1. להגדיר Default Database ל-Login ששייך ל-Availability Group הרלוונטי, ואז לפי שם ה-Database לחלץ מתוך sys.availability_databases_cluster את ה-ID של ה-Availability Group, ואז לחלץ מתוך sys.availability_group_listeners את השם של ה-Listener.

    2. להחזיק טבלת ניהול משלך שמשייכת כל Login ל-Availability Group ול-Listener Name.

    למעשה, אם אתה משתמש ב-Login בשביל למפות את ה-Availability Group, אז אתה אפילו לא צריך את ה-Listener Name. הוא לא באמת מעניין. ואז הפתרונות שתיארתי למעלה אפילו יותר פשוטים.

    אבל כל זה מתאים רק אם אתה יכול לשייך כל Login ל-Availability Group, שזה בסך הכל נשמע לי הגיוני...

    בהצלחה!

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • הוצע כתשובה על-ידי Eran Sharvit יום רביעי 05 פברואר 2014 10:09
    יום שני 03 פברואר 2014 10:43
    מנחה דיון