העברת טבלאות ללא מפתחות ראשיים

בדף הזה מוסבר איך להעביר טבלאות Oracle שאין להן מפתחות ראשיים.

סקירה כללית על יצירה אוטומטית של מפתחות ראשיים

טבלאות בלי מפתחות ראשיים לא מבטיחות רפליקציה עקבית. ‫Database Migration Service מעביר רק טבלאות שיש להן מפתחות ראשיים. אם מסד הנתונים של המקור כולל טבלאות שאין בהן מפתחות ראשיים, Database Migration Service יכול לטפל בהן בדרכים הבאות:

  • כש ממירים את קוד המקור והסכימה, שירות Database Migration Service יכול ליצור באופן אוטומטי את המפתחות הראשיים החסרים על ידי הוספת עמודות ROWID בטבלאות היעד. כדי שהתהליך האוטומטי הזה יפעל, טבלאות המקור צריכות:
    • אין להם עדיין מפתחות ראשיים.
    • אל תגדירו אילוץ UNIQUE בלי עמודות שניתנות לאיפוס.
    • אל תשתמשו באינדקס UNIQUE בלי עמודות שניתנות לאיפוס.
    אם הטבלאות לא עומדות בדרישות האלה, צריך להוסיף באופן ידני את המפתחות הראשיים החסרים לטבלאות בסכימת PostgreSQL שהומרה.
  • בסביבות עבודה מדור קודם להמרת מסדי נתונים, Database Migration Service לא יוצר מפתחות ראשיים באופן אוטומטי. אם אתם משתמשים בסביבת עבודה להמרת מסדי נתונים מדור קודם, אתם צריכים להוסיף באופן ידני את המפתחות הראשיים החסרים לטבלאות בסכימת PostgreSQL שהומרה.

הוספה ידנית של מפתחות ראשיים חסרים

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

  1. משתמשים בסביבת עבודה להמרת מסדי נתונים כדי להמיר את קוד המקור והסכימה.
  2. מתחברים למכונה של Cloud SQL ביעד באמצעות לקוח SQL. אפשר להשתמש בשיטות הבאות:
    • psql client. אתם יכולים להשתמש בשיטה הזו כדי להתחבר לכתובת ה-IP הפרטית של המכונה, אבל יכול להיות שתצטרכו ליצור מכונה וירטואלית של Compute Engine.
    • gcloud sql connect. הפקודה הזו פועלת רק במכונות של Cloud SQL שמופעלת בהן כתובת IP ציבורית.
  3. יוצרים את האילוצים החסרים של המפתח הראשי בטבלאות. מידע נוסף על מפתחות ראשיים זמין במאמר מפתחות ראשיים במסמכי התיעוד של PostgreSQL.

    אפשר גם להרחיב את הקטעים הבאים כדי לראות פקודות SQL לדוגמה:

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

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

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME);

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

    • ‫TABLE_NAME בשם הטבלה שאין לה מפתח ראשי.
    • COLUMN_NAME בשם של עמודה עם אינדקס או אילוץ ייחודי שאפשר להשתמש בהם כמפתח ראשי.

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

    אם אין לכם אילוץ קיים שיכול לשמש כמפתח ראשי, צרו מפתחות ראשיים באמצעות כל העמודות בטבלה. חשוב לוודא שלא חורגים מהאורך המקסימלי של המפתח הראשי שמותר במכונה של PostgreSQL.

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

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);

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

    • ‫TABLE_NAME בשם הטבלה שאין לה מפתח ראשי.
    • ‫COLUMN_NAME_1,‏ COLUMN_NAME_2 וכו' בשמות של העמודות שבהן רוצים להשתמש כדי ליצור את המפתח הראשי.

    יצירת אילוץ ייחודי באמצעות העמודה המדומה ROWID

    מסדי נתונים של Oracle משתמשים בעמודה המדומה ROWID כדי לאחסן את המיקום של כל שורה בטבלה. כדי להעביר טבלאות Oracle שאין להן מפתחות ראשיים, אפשר להוסיף עמודת ROWID במסד הנתונים של PostgreSQL ביעד. ‫Database Migration Service מאכלס את העמודה בערכים המספריים התואמים מהעמודה המדומה ROWID של Oracle במקור.

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

    ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL;
    CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid;
    ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq');
    ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);

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

    • ‫TABLE_NAME בשם הטבלה שבה רוצים להוסיף את העמודה.
    • ‫CONSTRAINT_DISPLAY_NAME במזהה של האילוץ PRIMARY KEY.

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