ניהול שרתים מקושרים

בדף הזה מוסבר איך לנהל שרתים מקושרים במופע Cloud SQL, כולל רישום מופע, הוספת שרת מקושר וביצוע שאילתה בשרת מקושר.

רישום המופע כדי לאפשר שרתים מקושרים

כדי להוסיף את הדגל cloudsql enable linked servers למכונה, משתמשים בפקודה הבאה:

gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=on

מחליפים את INSTANCE_NAME בשם המכונה שרוצים להשתמש בה לקישור שרתים.

מידע נוסף זמין במאמר בנושא הגדרת דגלים של מסד נתונים.

הוספת שרת מקושר

כדי להוסיף שרת מקושר, מריצים את הפקודה sp_addlinkedserver של Transact-SQL:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'MSOLEDBSQL',
    @datasrc=N'TARGET_SERVER_ID'

מחליפים את מה שכתוב בשדות הבאים:

  • LINKED_SERVER_NAME בשם השרת המקושר שרוצים ליצור.
  • TARGET_SERVER_ID עם שם הרשת, שם ה-DNS או כתובת ה-IP של השרת המקושר. לשם המופע, משתמשים בפורמט servername\instancename. אם המופע שלכם משתמש ביציאה לא סטנדרטית, מוסיפים את מספר היציאה. לדוגמה, servername\instancename, 8080.

כדי להוסיף מיפוי משתמש למשתמש שמחובר, מריצים את הפקודה הבאה:

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @useself=N'True'

מחליפים את LINKED_SERVER_NAME בשם של השרת המקושר.

כדי ליצור או לעדכן את הסיסמה והכניסה המרוחקת שמוגדרות כברירת מחדל, ולהחיל אותן על כל הכניסות המקומיות, מריצים את הפקודה הבאה:

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @useself=N'False',
    @locallogin=N'LOGIN',
    @rmtuser=N'USER_ID',
    @rmtpassword='PASSWORD';

מחליפים את מה שכתוב בשדות הבאים:

  • LINKED_SERVER_NAME בשם של השרת המקושר.
  • LOGIN עם פרטי הכניסה לשרת המקומי. ‫locallogin הוא sysname, עם ברירת מחדל של NULL. הערך NULL מציין שהערך הזה חל על כל ההתחברויות המקומיות שמתחברות אל rmtsrvname. אם הערך לא NULL, ‏ locallogin הוא פרטי התחברות ל-SQL Server או פרטי התחברות ל-Windows. אם אתם משתמשים בהתחברות ל-Windows, צריכה להיות לה גישה ל-SQL Server באופן ישיר, או דרך החברות שלה בקבוצת Windows שיש לה גישה.
  • USER_ID מחליפים במשתמש שמתחבר.
  • PASSWORD מחליפים בסיסמה של המשתמש.

הוספת שרת מקושר עם חיבור מוצפן

כדי להוסיף שרת מקושר באמצעות חיבור מוצפן, מריצים את הפקודה Transact-SQL sp_addlinkedserver:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'MSOLEDBSQL',
    @datasrc=N'TARGET_SERVER_ID,
    @provstr=N'Encrypt=yes;'

מחליפים את מה שכתוב בשדות הבאים:

  • LINKED_SERVER_NAME בשם השרת המקושר שרוצים ליצור.
  • TARGET_SERVER_ID מחליפים בשם של שרת היעד, או בכתובת ה-IP ובמספר היציאה של שרת היעד.

אם שם השרת שונה מהשם באישור, צריך לציין ששרת ה-SQL יכול לסמוך על אישור השרת. כדי לעדכן את מחרוזת הספק, מריצים את הפקודה הבאה:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'MSOLEDBSQL',
    @datasrc=N'TARGET_SERVER_ID,
    @provstr=N'Encrypt=yes;TrustServerCertificate=yes;'

מחליפים את מה שכתוב בשדות הבאים:

  • LINKED_SERVER_NAME בשם השרת המקושר שרוצים ליצור.
  • TARGET_SERVER_ID מחליפים בשם של שרת היעד, או בכתובת ה-IP ובמספר היציאה של שרת היעד.

שאילתות של שרתים מקושרים

‫Cloud SQL תומך בשימוש בשמות בני ארבעה חלקים כדי להריץ שאילתות על שרתים מקושרים (שם השרת, שם מסד הנתונים, שם הסכימה ושם האובייקט), בנוסף לפקודות הבאות:

  • OPENQUERY מבצעת שאילתה בשרת ספציפי.
  • EXECUTE מאפשרת להריץ SQL דינמי מול שרת מקושר.

מידע נוסף זמין במאמר השוואה בין אפשרויות להרצת שאילתות מרחוק.

הפעלת קריאות לפרוצדורות מרוחקות בשרת מקושר

קריאות לפרוצדורות מרוחקות (RPC) מאפשרות להריץ פרוצדורות מאוחסנות בשרתים מקושרים. כדי להוסיף RPC, מריצים את פקודת Transact-SQL‏ sp_serveroption עם ארגומנט RPC. יש שני ארגומנטים של RPC:

  • rpc מאפשר RPC מהשרת שצוין.
  • rpc out מאפשרת RPC לשרת שצוין.

משתמשים בפקודה sp_serveroption הבאה עם הארגומנט rpc כדי להפעיל RPC מ-LINKED_SERVER_NAME:

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc',
    @optvalue='TRUE'

מחליפים את LINKED_SERVER_NAME בשם של השרת המקושר.

משתמשים בפקודה sp_serveroption הבאה עם הארגומנט rpc out כדי להפעיל את ה-RPC:

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc out',
    @optvalue='TRUE'

מחליפים את LINKED_SERVER_NAME בשם של השרת המקושר.

הסרת מיפוי המשתמשים לשרת מקושר

כדי להסיר מיפוי משתמש שהוספתם קודם, מריצים את הפקודה הבאה:

EXEC master.dbo.sp_droplinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @locallogin=N'LOGIN';

מחליפים את מה שכתוב בשדות הבאים:

  • LINKED_SERVER_NAME בשם השרת המקושר שרוצים להסיר.
  • LOGIN עם פרטי הכניסה לשרת המקומי. ‫locallogin הוא sysname, עם ברירת מחדל של NULL. הערך NULL מציין שהערך הזה חל על כל ההתחברויות המקומיות שמתחברות אל rmtsrvname. אם הערך לא NULL, ‏ locallogin הוא פרטי התחברות ל-SQL Server או פרטי התחברות ל-Windows. אם אתם משתמשים בהתחברות ל-Windows, צריכה להיות לה גישה ל-SQL Server באופן ישיר, או דרך החברות שלה בקבוצת Windows שיש לה גישה.

הסרה של מופע רשום מהרשאת קישור שרתים

כדי להסיר שרתים מקושרים:

  • מבטלים את הקישור של השרתים הקיימים באמצעות הפרוצדורה המאוחסנת sp_dropserver של Transact-SQL.
  • מסירים את הדגל cloudsql enable linked servers כדי להסיר מכונה רשומה.

    gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=off

    מחליפים את INSTANCE_NAME בשם המכונה שרוצים להסיר ממנה את השרתים המקושרים.

    לחלופין, אפשר להריץ את הפקודה הבאה כדי לנקות את כל הדגלים של מסד הנתונים:

    gcloud sql instances patch INSTANCE_NAME --clear-database-flags

    מחליפים את INSTANCE_NAME בשם המכונה שרוצים להסיר ממנה את השרתים המקושרים.

פתרון בעיות

שגיאה פתרון בעיות
Msg 7411, Level 16, State 1, Line 25

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
האפשרות DataAccess מושבתת. מריצים את הפקודה הבאה כדי להפעיל את הגישה לנתונים:
EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='data access',
    @optvalue='TRUE'

מחליפים את LINKED_SERVER_NAME בשם של השרת המקושר.

Access to the remote server is denied because no login-mapping exists. (Microsoft SQL Server, Error: 7416) אם הבעיה הזו מתרחשת בזמן יצירת חיבור מוצפן, צריך לנסות דרך אחרת לספק את מזהה המשתמש כשניגשים לשרת המקושר. כדי לעשות זאת, מריצים את הפקודה הבאה:
EXEC master.dbo.sp_addlinkedserver
   @server = N'LINKED_SERVER_NAME',
   @srvproduct= N'',
   @provider= N'MSOLEDBSQL',
   @datasrc= N'TARGET_SERVER_ID',
   @provstr= N'Encrypt=yes;TrustServerCertificate=yes;User ID=USER_ID'

מחליפים את מה שכתוב בשדות הבאים:

  • LINKED_SERVER_NAME בשם של השרת המקושר.
  • TARGET_SERVER_ID עם שם שרת היעד, או כתובת ה-IP ומספר היציאה של שרת היעד.
  • USER_ID מחליפים במשתמש שמתחבר.
התנהגות לא צפויה אם אתם נתקלים בהתנהגות לא צפויה, ודאו שאתם משתמשים בספק נתמך. מידע נוסף זמין במסמכי העזרה של Microsoft.

המאמרים הבאים