בדף הזה מוסבר איך להגן על אובייקטים של סכימות, כמו טבלאות, אינדקסים ועמודות, מפני מחיקה מקרית.
הסבר על בטיחות בהסרת אובייקטים מסכימה
ההגנה של Spanner מפני השמטת אובייקטים בסכימה מסתמכת על נתונים סטטיסטיים של גישה לאובייקטים בסכימה כדי לקבוע אם אפשר להשמיט אובייקט בצורה בטוחה. אם המערכת קובעת שהאובייקט לא בטוח, היא דוחה את בקשת המשתמש להסיר את אובייקט הסכימה. הסרת אובייקט כזה עלולה לגרום לכשל בעבודות של לקוחות שעדיין ניגשים לאובייקט. בנוסף, קשה מאוד או בלתי אפשרי לשחזר אובייקט שנמחק בלי לגרום לאובדן נתונים.
לשם כך, מערכת Spanner עוקבת אחרי נתוני הגישה של כל אובייקט סכימה. הגישה הזו כוללת הוספות, עדכונים או מחיקות של DML, שאילתות SQL, כתיבות API וקריאות API. בעזרת נתוני הגישה האלה, Spanner קובע אם אובייקט סכימה עדיין נמצא בשימוש. אם בוצעה גישה לאובייקט לאחרונה, סביר להניח שהאובייקט עדיין בשימוש.
הפעלה של הגנה מפני מחיקה של אובייקטים של סכימה
כדי להפעיל את ההגנה מפני נטישה, צריך להגדיר את משך הזמן של חוסר הפעילות להגנה מפני נטישה לערך משך זמן שאינו אפס, כמו '24 שעות' או 'יומיים'. משך הזמן המינימלי הוא 0 שניות והמקסימלי הוא 7 ימים. כדאי להגדיר את משך הזמן ללא פעילות ל-24 שעות או יותר.
אם מגדירים את משך חוסר הפעילות ל-24 שעות, אפשר להשליך אובייקט סכימה רק אם לא הייתה גישה לאובייקט ב-24 השעות האחרונות.
GoogleSQL
מידע נוסף זמין במאמר בנושא ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period="DURATION" )'
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_NAME: השם של מסד הנתונים.
- INSTANCE_ID: המזהה של מופע מסד הנתונים.
- DURATION: בין '0s' (כולל) לבין '7d' (כולל). מומלץ: 24h.
PostgreSQL
מידע נוסף זמין במאמר בנושא ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME" SET spanner.schema_drop_protection_inactivity_period="DURATION" '
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_NAME: השם של מסד הנתונים.
- INSTANCE_ID: המזהה של מופע מסד הנתונים.
- DURATION: בין '0s' (כולל) לבין '7d' (כולל). מומלץ: 24h.
השבתה של הגנה מפני מחיקה של אובייקטים של סכימה
כדי להשבית את ההגנה מפני נפילות, מגדירים את משך חוסר הפעילות לערך משך אפס, '0s', או מגדירים את ערך האפשרות ל-null.
GoogleSQL
מידע נוסף זמין במאמר בנושא ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period=null )'
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_NAME: השם של מסד הנתונים.
- INSTANCE_ID: המזהה של מופע מסד הנתונים.
PostgreSQL
מידע נוסף זמין במאמר בנושא ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_inactivity_period=null'
מחליפים את מה שכתוב בשדות הבאים:
- DATABASE_NAME: השם של מסד הנתונים.
- INSTANCE_ID: המזהה של מופע מסד הנתונים.
נקודות שחשוב לדעת
הגנה מפני השמטה של אובייקט סכימה לא מופעלת בתרחישים הבאים:
- יצרתם את מסד הנתונים בשעה האחרונה.
- לאובייקט יש גישות קריאה בתדירות נמוכה (פחות מ-10 בשעה).
יצרתם את אובייקט הסכימה במהלך תקופת חוסר הפעילות. המשמעות היא שאם אובייקט סכימה נוצר לאחרונה, כלומר בפרק זמן קצר יותר מהמשך שצוין ב-
schema_drop_protection_inactivity_period, הוא לא מוגן מפני מחיקה. לדוגמה, אםschema_drop_protection_inactivity_periodהוא7d, אפשר להשליך כל טבלה שנוצרה ב-7 הימים האחרונים, גם אם הייתה אליה גישה לאחרונה.ההתנהגות הזו מאפשרת לבצע בדיקות: אם ההגנה הייתה חלה על אובייקטים שנוצרו לאחרונה, לא הייתה אפשרות ליצור טבלה זמנית, לבדוק אותה ולהסיר אותה באופן מיידי, והיה צריך לחכות 7 ימים עד שתקופת חוסר הפעילות תסתיים כדי שאפשר יהיה לנקות אותה.
סף ברירת המחדל לגישת קריאה הוא 10 לשעה, אבל אפשר לשנות את ברירת המחדל באמצעות אפשרות מסד הנתונים הבאה:
GoogleSQL
מידע נוסף זמין במאמר בנושא ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_usage_lowerbound=<threshold> )'
PostgreSQL
מידע נוסף זמין במאמר בנושא ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_usage_lowerbound=<threshold> '
הנתונים הסטטיסטיים של הגישה לא נאספים במקרים הבאים:
- גישות שנכשלו (שאילתות, DML וכו') לא נספרות בגישת המשתמש.
- גישות למערכת לא נספרות.
- המערכת מתעלמת מגישות כתיבה (כולל הוספות ועדכונים של DML) לאינדקסים.
- המערכת מתעלמת מגישות כתיבה לעמודות שנוצרו ונשמרו.
פתרון בעיות
אם לא ניתן להסיר אובייקט סכימה ולא ניתן לזהות מה ניגש אליו, כדאי לעיין במאמרים הבאים:
המאמרים הבאים
איך מונעים מחיקה של מסד נתונים