בדף הזה מוסבר איך להגדיר מופע של Cloud SQL לפרסום למנוי שנמצא מחוץ ל-Cloud SQL או בתוך Cloud SQL. שכפול חיצוני ב-Cloud SQL ל-SQL Server משתמש בשכפול טרנזקציוני, שבו Cloud SQL פועל כמוציא לאור עבור מנוי.
שכפול טרנזקציונלי תומך בפרסום של כמה סוגי אובייקטים, כפי שמתואר במסמכי התיעוד של מיקרוסופט. בנוסף, ב-Cloud SQL, המגבלות על התכונה הזו דומות למגבלות שמפורטות במסמכים של מיקרוסופט.
אלה חלק מהאובייקטים הנתמכים:
- Tables
- נהלים מאוחסנים
- תצוגות
- תצוגות באינדקס
- פונקציות בהגדרת המשתמש
בדף הזה יש דוגמאות לתהליך הפרסום, אבל פרטים נוספים זמינים במאמר פרסום נתונים ואובייקטים של מסד נתונים במסמכי העזרה של Microsoft. מומלץ להשתמש ב-SQL Server Management Studio (SSMS) בתהליך הפרסום, כי האפשרויות הזמינות עשויות להיות ברורות יותר ב-SSMS.
אפשר גם לעיין במאמר מידע על רפליקציה ב-Cloud SQL.
הטמעה של שכפול טרנזקציות
מכונת Cloud SQL יכולה לשמש כמוציא לאור וכמפיץ עבור מנוי חיצוני, באמצעות שכפול טרנזקציות.
כדי להגדיר שכפול טרנזקציות, אפשר:
- שימוש בפרוצדורות מאוחסנות שסופקו על ידי Cloud SQL. הן מתחילות בקידומת:
gcloudsql_transrepl_ - שיפור השכפול באמצעות תהליכים מאוחסנים שסופקו על ידי מיקרוסופט
מגבלות ודרישות מוקדמות
כשמתכננים שכפול טרנזקציות, כדאי לעיין בקטע הזה.
מגבלות
- למופעים שמשתמשים בזמינות גבוהה (HA) אין כתובת IP עקבית ליוצא. אם מכונות כאלה משתמשות בקישוריות של כתובות IP ציבוריות, הן לא יכולות להיות בעלות תוכן דיגיטלי. לכן, אם נעשה שימוש ב-HA במופע, צריך להשתמש בקישוריות של כתובות IP פרטיות.
- הסבר על הגדרת מאמר מופיע במאמר Define an Article במסמכי התיעוד של מיקרוסופט, כולל הסבר על המגבלות וההגבלות.
- התהליכים המאוחסנים שמוצעים על ידי Cloud SQL תומכים רק במינוי מסוג push.
- אי אפשר להגדיר שכפול חיצוני במופע שהוגדר עם שכפול.
דרישות מוקדמות
צריך להגדיר קישוריות דו-כיוונית בין מופע 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) בין ה-Cloud SQL VPC לבין ה-VPC של הלקוח באמצעות טווח כתובות IP מותאם אישית שצריך לפרסם.
כשמתחברים משרת מקומי, חומת האש המקומית צריכה לאפשר חיבורים נכנסים ויוצאים. ספציפית, חומת האש המקומית צריכה לאפשר חיבורים כאלה ביציאה 1433 לטווח תת-הרשתות של הגישה לשירותים פרטיים שמשמשים לשירות הספציפי Google Cloud (במקרה הזה, ל-Cloud SQL). מומלץ לאפשר טווח של רשתות משנה במקום כתובת IP ספציפית לכל מופע שנוצר.
מידע נוסף בנושאים קשורים:
- הגדרת כתובת IP פרטית (כולל קישור להגדרת גישה לשירותים פרטיים)
- גישה לשירותים פרטיים
- הגדרת גישה לשירותים פרטיים
הרשאות ותפקידים
בקטעים הבאים מוסבר על הרשאות ותפקידים.
הרשאות ארוזות
הפרוצדורות המאוחסנות שסופקו על ידי Cloud SQL כוללות את ההרשאות שנדרשות לשכפול טרנזקציות. אלה נהלים מאוחסנים של עטיפה שלפעמים קוראים לנהלים מאוחסנים של מיקרוסופט. מידע על הפרוצדורות המאוחסנות של מיקרוסופט זמין במסמכי התיעוד של מיקרוסופט.
התפקיד הנדרש
החשבונות שבהם נעשה שימוש (כולל החשבון של סוכן קריאת היומן) צריכים להיות בעלי תפקיד 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, שהוא עוטף של פרוצדורה מאוחסנת עבור הפרוצדורות המאוחסנות האלה של מיקרוסופט:
לדוגמה:
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
הוספת משימת סוכן מתוזמנת חדשה כדי לסנכרן את מינוי הפוש
אפשר להוסיף משימה חדשה של סוכן מתוזמן כדי לסנכרן את המינוי ל-Push עם הפרסום. לדוגמה, במסד הנתונים של בעל התוכן הדיגיטלי, מריצים פקודה שדומה לפקודה שבהמשך. הפקודה הזו משתמשת ב-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'
הענקת גישה לחשבון כדי להשתמש בכלי למעקב אחר שכפול
אפשר להשתמש ב-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
שימוש בכלי למעקב אחר שכפול
לוחצים לחיצה ימנית על צומת השכפול ב-SSMS ובוחרים באפשרות הפעלת כלי המעקב אחר שכפול.
אם לוחצים על הכרטיסייה 'סוכנים', אמור להופיע תצוגה דומה לזו שבהמשך:

שימוש בנהלים מאוחסנים להסרת שכפול
בקטע הזה מפורטים שלבים מומלצים להסרת שכפול טרנזקציות.
ביטול המינוי
כדי לבטל את המינוי, משתמשים בהליך המאוחסן 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
ב-Microsoft יש דוגמאות נוספות לחיפוש שגיאות באמצעות הכלי למעקב אחר שכפול. לדוגמה, יכול להיות שלמשתמש sqlserver אין גישה לפקודה.
משימות של סוכן שכפול
אחרי שמגדירים שכפול, המשתמש sqlserver לא יכול לראות את המשימות החדשות של SQL Agent ב-SSMS. עם זאת, אפשר לצפות בהם באמצעות:
USE msdb
select * from dbo.sysjobs
מוציאים לאור שחסרים בכלי למעקב אחר שכפול
אתם יכולים להשתמש בכלי למעקב אחרי שכפול כדי לראות את סטטוס השכפול ולפתור בעיות שקשורות לשכפול.
לדוגמה, כשמגדירים שכפול ומופע Cloud SQL של המפרסם משתמש בכתובת IP, יכול להיות ש-SSMS לא יוכל למצוא את המפרסם. הסיבה לכך היא שהמערכת לא יודעת מה המיפוי בין שם המארח לכתובת ה-IP.
הכרטיסייה Publications (פרסומים) בכלי Replication Monitor (מעקב אחר שכפול) ריקה:

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

מחפשים את הצומת Aliases (כינויים) ובוחרים אותו.

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

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

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

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

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

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