בדף הזה מוסבר איך להגדיר מכונה של Cloud SQL לפרסום למנוי שנמצא מחוץ ל-Cloud SQL או בתוך Cloud SQL. רפליקציה חיצונית ב-Cloud SQL ל-SQL Server משתמשת ברפליקציה טרנזקציונלית, שבה Cloud SQL פועל כמפרסם למנוי.
שכפול טרנזקציות תומך בפרסום של כמה סוגי אובייקטים, כמו שמתואר על ידי מיקרוסופט. בנוסף, המגבלות על התכונה הזו ב-Cloud SQL דומות לאלה שמתועדות על ידי מיקרוסופט.
הנה כמה מהאובייקטים הנתמכים:
- Tables
- נהלים מאוחסנים
- תצוגות
- תצוגות אינדקס
- פונקציות בהגדרת המשתמש (UDF)
בדף הזה יש דוגמאות לתהליך הפרסום, אבל מומלץ לעיין במאמר Publish Data and Database Objects במסמכי התיעוד של Microsoft כדי לקבל פרטים נוספים. כדאי להשתמש ב-SQL Server Management Studio (SSMS) בתהליך הפרסום, כי האפשרויות הזמינות עשויות להיות ברורות יותר ב-SSMS.
הטמעת רפליקציה של טרנזקציות
מכונה של Cloud SQL יכולה לפעול כמפיצה וכמפרסמת למנוי חיצוני, באמצעות שכפול טרנזקציות.
כדי להגדיר שכפול טרנזקציות, אתם יכולים:
- שימוש בפרוצדורות מאוחסנות שסופקו על ידי Cloud SQL. הקידומת של השמות האלה היא:
gcloudsql_transrepl_ - שיפור הרפליקציה באמצעות תהליכים מאוחסנים שסופקו על ידי Microsoft
מגבלות ודרישות מוקדמות
כשמתכננים רפליקציה של טרנזקציות, כדאי לעיין בקטע הזה.
מגבלות
- למכונות שמשתמשות בזמינות גבוהה (HA) אין כתובת IP עקבית לתעבורה יוצאת. מכונות כאלה לא יכולות להיות בעלי תוכן דיגיטלי אם הן משתמשות בקישוריות של כתובת IP ציבורית. לכן, אם במכונה נעשה שימוש בזמינות גבוהה, צריך להשתמש בקישוריות דרך IP פרטי.
- אם אתם משתמשים ב-Private Service Connect, ודאו שהקישוריות החוצה מוגדרת במכונה של בעל התוכן הדיגיטלי.
- כדי להגדיר מאמר, עיינו בקטע Define an Article במסמכי התיעוד של Microsoft, כולל המגבלות וההגבלות.
- הפרוצדורות המאוחסנות ש-Cloud SQL מספק תומכות רק במינוי דחיפה.
- אי אפשר להגדיר רפליקציה חיצונית במכונה שמוגדרת עם רפליקציה.
דרישות מוקדמות
צריך להגדיר קישוריות דו-כיוונית לרשת בין מכונה של Cloud SQL לבין המכונה של המנוי. המנוי יכול להיות חיצוני, למשל מנוי מקומי, או פנימי ב-Cloud SQL.
במכונות Cloud SQL שמשתמשות בכתובות IP ציבוריות, Cloud SQL משתמש בכתובת IP שונה בנתיבי תעבורת הנתונים הנכנסת והיוצאת. ברפליקה צריך להוסיף לרשימת ההיתרים את כתובת ה-IP היוצאת של המכונה הראשית. אפשר לאחזר את הכתובת באמצעות הפקודה gcloud:
gcloud sql instances describe [PRIMARY_NAME] --format="default(ipAddresses)"
כדי להשתמש בכתובת IP פרטית של Cloud SQL עם מכונה מקומית, צריך להגדיר גישה לשירותים פרטיים. לשם כך נדרש קישור בין רשתות שכנות (peering) בין ה-VPC של Cloud SQL לבין ה-VPC של הלקוח, בטווח כתובות IP בהתאמה אישית שצריך לפרסם.
כדי להשתמש ב-Cloud SQL עם Private Service Connect, קראו את המאמר הגדרת Private Service Connect. כשמשתמשים ב-Private Service Connect, צריך לוודא שהקישוריות היוצאת מוגדרת במכונה של המפרסם כדי לאפשר תקשורת עם המנוי.
כשמתחברים מהמקום הפיזי, חומת האש במקום הפיזי צריכה לאפשר חיבורים נכנסים ויוצאים. באופן ספציפי, חומת האש המקומית צריכה לאפשר חיבורים כאלה ביציאה 1433 לטווח של רשת המשנה של הגישה לשירותים פרטיים, שמשמשת לשירות הספציפי של Google Cloud (במקרה הזה, ל-Cloud SQL). כדאי לאפשר טווח של רשת משנה במקום כתובת IP ספציפית לכל מכונה שנוצרת.
מידע נוסף בנושא:
- הגדרת כתובת IP פרטית (כולל קישור להגדרת גישה לשירותים פרטיים)
- הגדרת Private Service Connect
- גישה לשירותים פרטיים
- הגדרת גישה לשירותים פרטיים
הרשאות ותפקידים
בקטעים הבאים מפורטות ההרשאות והתפקידים.
הרשאות בחבילה
הפרוצדורות המאוחסנות ש-Cloud SQL מספק כוללות את ההרשאות שנדרשות לרפליקציה של טרנזקציות. אלה תהליכים מאוחסנים של wrapper שלפעמים קוראים לתהליך מאוחסן אחד או יותר של Microsoft. מידע נוסף על הפרוצדורות המאוחסנות של Microsoft זמין במאמרי העזרה של Microsoft.
התפקיד הנדרש
החשבונות שבהם משתמשים (כולל סוכן קורא היומנים) צריכים את התפקיד db_owner, כמו במקרה של המשתמש sqlserver. למידע נוסף, קראו את המאמר מודל האבטחה של סוכן הרפליקציה.
שימוש בתהליכים מאוחסנים לפרסום, להפצה ולהרשמה
בקטע הזה מפורטים השלבים המומלצים להגדרת שכפול טרנזקציות.
למשתמש sqlserver יש פרוצדורות מאוחסנות להגדרת המכונה של Cloud SQL כך שתפעל כמפיץ. למידע נוסף, קראו את המאמר פרוצדורות מאוחסנות ב-Cloud SQL.
הכנה לרפליקציה של טרנזקציות באמצעות מסד נתונים לבדיקה
לפני שמגדירים שכפול טרנזקציות למסד נתונים בסביבת הייצור, אפשר להגדיר את המכונה כמפרסמת של אובייקטים של מסד נתונים לבדיקה. בדף הזה, מסד הנתונים לבדיקה נקרא מסד הנתונים pub_demo.
מתחברים למכונה של Cloud SQL באמצעות המשתמש sqlserver ויוצרים מסד נתונים למטרות בדיקה. לדוגמה:
Create Database pub_demo;
GO
USE pub_demo;
CREATE TABLE Employee(employeeId INT primary key);
INSERT INTO Employee([employeeId]) VALUES (1);
INSERT INTO Employee([employeeId]) VALUES (2);
-- Add procedure
CREATE OR ALTER PROCEDURE dbo.p_GetDate
AS
SELECT getdate()
-- Add view
CREATE OR ALTER VIEW dbo.v_GetDbs
AS
SELECT name from sys.databases
-- Function
CREATE OR ALTER FUNCTION dbo.fn_ListDbFiles(@id int)
RETURNS TABLE
AS
RETURN
(
select * from sys.master_files where database_id = @id
)
הגדרת מסד הנתונים של ההפצה
במסד הנתונים של ההפצה, אתם יכולים להשתמש ב-msdb.dbo.gcloudsql_transrepl_setup_distribution, שהוא פרוצדורה מאוחסנת של wrapper לפרוצדורות המאוחסנות הבאות של מיקרוסופט:
לדוגמה:
EXEC msdb.dbo.gcloudsql_transrepl_setup_distribution @login='sqlserver', @password='<password>'
הפעלת מסד נתונים לפרסום
כדי להפעיל או להשבית את אפשרות הפרסום של מסד נתונים, אפשר להשתמש ב-msdb.dbo.gcloudsql_transrepl_replicationdboption. הפרוצדורה המאוחסנת הזו חלה על אפשרות הפרסום של בעל התוכן הדיגיטלי שמשתמש ב-sp_replicationdboption.
לדוגמה:
EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption @db='pub_demo', @value='true'
הוספת סוכן לקריאת יומנים
אתם יכולים להגדיר סוכן לקריאת יומנים למסד נתונים שמשתמש ב-sp_addlogreader_agent.
לדוגמה:
EXEC msdb.dbo.gcloudsql_transrepl_addlogreader_agent @db='pub_demo', @login='sqlserver', @password='<password>'
יצירת הפרסום של מסד הנתונים
אפשר להשתמש ב-msdb.dbo.gcloudsql_transrepl_addpublication כדי ליצור פרסום טרנזקציונלי למסד הנתונים שציינתם. התהליך המאוחסן הזה כולל את sp_addpublication.
לדוגמה:
EXEC msdb.dbo.gcloudsql_transrepl_addpublication @db='pub_demo', @publication='pub1'
יצירת סוכן תמונת מצב לפרסום שצוין
כדי ליצור סוכן snapshot למסד הנתונים של המפרסם, אפשר להשתמש ב-msdb.dbo.gcloudsql_transrepl_addpublication_snapshot, שעוטף את sp_addpublication_snapshot.
לדוגמה:
EXEC msdb.dbo.gcloudsql_transrepl_addpublication_snapshot @db='pub_demo', @publication='pub1', @login='sqlserver', @password='<password>'
יצירת מאמר והוספה שלו לאתר החדשות
אתם יכולים ליצור מאמר מתוך מסד הנתונים של אתר החדשות ולהוסיף אותו לאתר החדשות. כמשתמש sqlserver, משתמשים ב-sp_addarticle.
אפשר גם להוסיף מאמרים באמצעות SSMS. מידע נוסף זמין במאמר הוספת מאמרים לאתר חדשות והסרת מאמרים ממנו.
לדוגמה:
USE pub_demo;
GO
EXEC sp_addarticle @publication = 'pub1',
@article = 'csql_dbo.employee',
@source_owner = 'dbo',
@source_object = 'Employee',
@description = N'cloudsql_article_table',
@schema_option = 0x000000000903409D,
@identityrangemanagementoption = N'manual',
@destination_table = 'Employee',
@destination_owner = 'dbo';
-- add function
use [pub_demo]
exec sp_addarticle @publication = N'pub1',
@article = N'fn_ListDbFiles',
@source_owner = N'dbo',
@source_object = N'fn_ListDbFiles',
@type = N'func schema only',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008000001,
@destination_table = N'fn_ListDbFiles',
@destination_owner = N'dbo',
@status = 16
-- add procedure
use [pub_demo]
exec sp_addarticle @publication = N'pub1',
@article = N'p_GetDate',
@source_owner = N'dbo',
@source_object = N'p_GetDate',
@type = N'proc schema only',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008000001,
@destination_table = N'p_GetDate',
@destination_owner = N'dbo',
@status = 16
-- add view
use [pub_demo]
exec sp_addarticle @publication = N'pub1',
@article = N'v_GetDbs',
@source_owner = N'dbo',
@source_object = N'v_GetDbs',
@type = N'view schema only',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000008000001,
@destination_table = N'v_GetDbs',
@destination_owner = N'dbo',
@status = 16
הוספת המינוי לאתר החדשות
מתוך מסד הנתונים, אתם יכולים להוסיף את המינוי לאתר החדשות. כמשתמש sqlserver, מגדירים את סטטוס המנוי באמצעות sp_addsubscription.
לדוגמה:
Use pub_demo;
GO
EXEC sp_addsubscription @publication ='pub1',
@subscriber = N'10.10.100.1,1433',
@destination_db = pub_demo,
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0
התחברות למנוי ויצירת מסד נתונים של מינויים
אתם יכולים להתחבר למנוי וליצור מסד נתונים של מינויים כדי לאכלס נתונים משוכפלים.
לדוגמה:
Create Database pub_demo
הוספת משימה חדשה של סוכן מתוזמן כדי לסנכרן את מינוי הדחיפה
אפשר להוסיף משימה חדשה של סוכן מתוזמן כדי לסנכרן את מינוי הדחיפה עם הפרסום. לדוגמה, במסד הנתונים של המפרסם, מריצים פקודה שדומה לפקודה הבאה. בפקודה הזו נעשה שימוש ב-msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent, פרוצדורה מאוחסנת של wrapper בשביל sp_addpushsubscription_agent:
EXEC msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent
@db='pub_demo',
@publication = 'pub1',
@subscriber_db= 'pub_demo',
@subscriber_login='sqlserver',
@subscriber_password='<password>',
@subscriber='11.11.111.1,1433'
הפעלת משימה של סוכן תמונת מצב של פרסום
כדי להפעיל משימה של סוכן תמונת מצב של פרסום:
USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'
מתן גישה לחשבון כדי להשתמש ב-Replication Monitor
אתם יכולים להשתמש ב-msdb.dbo.gcloudsql_transrepl_addmonitoraccess כדי:
- מתן גישה ל-Replication Monitor ב-SSMS
- הרצת שאילתות על טבלאות במסד הנתונים של ההפצה
כך, הפרוצדורה המאוחסנת הזו מאפשרת לכם להשתמש בהצהרת SELECT בטבלאות שקשורות לרפליקציה של מסד הנתונים של ההפצה, כמו הטבלה MSrepl_errors:
EXEC msdb.dbo.gcloudsql_transrepl_addmonitoraccess
@login = 'sqlserver'
שינוי מאפיין של מסד נתונים להפצה
אפשר לשנות את heartbeat_interval. משתמשים בפרוצדורה msdb.dbo.gcloudsql_transrepl_changedistributor_property, שעוטפת את sp_changedistributor_property.
מידע נוסף מופיע במאמרי העזרה של sp_changedistributor_property. במסמכי התיעוד האלה מופיע גם מידע נוסף על הערך heartbeat_interval.
לדוגמה:
EXEC msdb.dbo.gcloudsql_transrepl_changedistributor_property
@property = N'heartbeat_interval',
@value = 90
שימוש ב-Replication Monitor
לוחצים לחיצה ימנית על צומת הרפליקציה ב-SSMS ובוחרים באפשרות Launch Replication Monitor.
אם לוחצים על הכרטיסייה Agents, אמורה להופיע תצוגה דומה לזו:

שימוש בתהליכים מאוחסנים להסרת רפליקציה
בקטע הזה מפורטים השלבים המומלצים להסרת רפליקציה טרנזקציונלית.
ביטול המינוי
כדי לבטל את המינוי, משתמשים בפרוצדורה המאוחסנת sp_dropsubscription.
דוגמה לפקודות להסרת המינוי:
USE pub_demo;
GO
EXEC sp_dropsubscription
@publication = 'csql_pub_pub_demo',
@article = N'all',
@subscriber = N'11.11.111.1,1433'
הסרת המנוי
כדי להסיר את המנוי, משתמשים בתהליך המאוחסן msdb.dbo.gcloudsql_transrepl_dropsubscriber:
EXEC msdb.dbo.gcloudsql_transrepl_dropsubscriber
@subscriber = N'11.11.111.1,1433'
הסרת אתר החדשות
כדי להסיר את הפרסום, משתמשים בתהליך המאוחסן msdb.dbo.gcloudsql_transrepl_droppublication:
EXEC msdb.dbo.gcloudsql_transrepl_droppublication
@db = 'pub_demo', @publication='pub1'
השבתת מסד הנתונים של הפרסום
כדי להשבית את מסד הנתונים של הפרסום, משתמשים בפרוצדורה המאוחסנת msdb.dbo.gcloudsql_transrepl_replicationdboption:
EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption
@db='pub_demo',
@value=N'false'
הסרת מסד הנתונים של ההפצה
כדי להסיר את מסד הנתונים של ההפצה, משתמשים בפרוצדורה המאוחסנת msdb.dbo.gcloudsql_transrepl_remove_distribution:
EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution
טיפים ושלבים לפתרון בעיות
בקטעים הבאים מפורטים נושאים נפוצים לפתרון בעיות.
הפעלת פרוצדורות מאוחסנות ממסד הנתונים הנכון
יכול להיות שתקבלו את השגיאה הבאה כשאתם מריצים את sp_addarticle, sp_addsubscription או sp_startpublication_snapshot:
Only members of the sysadmin fixed server role or db_owner fixed database role can perform this operation.
בנוסף, יכול להיות שתופיע השגיאה הבאה כשמריצים את sp_dropsubscription:
This database is not enabled for publication.
אם השגיאות האלה מתרחשות, שימו לב שאתם צריכים להריץ את הפרוצדורות המאוחסנות האלה מתוך מסד הנתונים שעליו הן חלות. כדי לוודא שהם מופעלים ממסד הנתונים הנכון, אפשר להשתמש בפקודה הבאה:
USE <database_name>;
GO
<Run stored proc>
רפליקציה
שגיאות רפליקציה מופיעות ביומני השגיאות של SQL ובמקומות אחרים. אתם יכולים לשלוח שאילתות ישירות לחלק מהטבלאות במסד הנתונים של ההפצה כדי לחפש שגיאות בשכפול. לדוגמה:
select * from [cloudsql_distribution]..msrepl_errors
select * from [cloudsql_distribution]..MSreplication_monitordata
באתר של מיקרוסופט יש דוגמאות נוספות לחיפוש שגיאות באמצעות Replication Monitor. לדוגמה, יכול להיות שלמשתמש sqlserver אין גישה לפקודה.
משימות של סוכן שכפול
אחרי שמגדירים את הרפליקציה, המשימות החדשות של סוכן SQL לא מוצגות ב-SSMS למשתמש sqlserver. עם זאת, אפשר לראות אותם בדרכים הבאות:
USE msdb
select * from dbo.sysjobs
חסרים בעלי תוכן דיגיטלי ב-Replication Monitor
אתם יכולים להשתמש ב-Replication monitor כדי לראות את סטטוס הרפליקציה ולפתור בעיות ברפליקציה.
לדוגמה, כשמגדירים רפליקציה ומכונת Cloud SQL של המפרסם משתמשת בכתובת IP, יכול להיות ש-SSMS לא יצליח למצוא את המפרסם. הסיבה לכך היא שהמערכת לא יודעת את המיפוי בין שם המארח לבין כתובת ה-IP.
ב-Replication Monitor יש כרטיסיית Publications ריקה:

כדי לעקוף את הבעיה, אפשר ליצור כינויים ב-SQL Server Configuration Manager בין שם המארח של SQL Server של בעל התוכן הדיגיטלי לבין כתובת ה-IP שמשמשת להתחברות מ-SSMS:
מפעילים את SQL Server Configuration Manager.

מוצאים את הצומת Aliases ובוחרים בו.

לוחצים לחיצה ימנית על התיבה שמתחת ל-Alias name כדי ליצור שם סודי חדש. התהליך זהה גם לשם סודי של 32 ביט וגם לשם סודי של 64 ביט:

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

בחלון של כתובת האימייל החלופית, ממלאים את השדות הבאים לפני שלוחצים על אישור:
Alias Name: מזינים את שם השרת מהשאילתה בשלב 4.
מספר יציאה: מציינים את יציאה 1433.
פרוטוקול: משאירים את ערך ברירת המחדל של TCP/IP.
שרת: כתובת ה-IP של המכונה של Publisher.

מתחברים באמצעות השם החלופי החדש ומפעילים את Replication Monitor:

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

למידע נוסף על פתרון בעיות ברפליקציה, ראו פותר בעיות: איתור שגיאות ברפליקציה טרנזקציונלית של SQL Server.
הערכת הגודל של המאמרים שצריך לשכפל
כשמשתמשים במכונה של Cloud SQL בתור בעל תוכן דיגיטלי, צריך ליצור תמונת מצב ראשונית של המאמרים כדי להתחיל את השכפול. תמונת המצב הזו מאוחסנת באופן מקומי. דרישות האחסון עשויות להשתנות בהתאם למספר המאמרים, לגודל שלהם ולסוג הנתונים. הפרוצדורה המאוחסנת sp_spaceused מספקת רק הערכה גסה של המקום בכונן שנדרש למאמר.
תמונת המצב כוללת קבצים שבהם מאוחסנים סכימות ונתונים.