הגדרת מסד נתונים של Amazon RDS Oracle ל-CDC

בדף הזה מוסבר איך להגדיר לכידת נתונים משתנים (CDC) כדי להזרים נתונים ממסד נתונים של Amazon RDS Oracle אל יעד נתמך, כמו BigQuery או Cloud Storage.

אתם יכולים להגדיר את מסד הנתונים של Oracle כמקור לשימוש בשיטות הבאות של CDC:

מידע נוסף על הכלי לקריאת יומן בינארי ועל LogMiner API זמין במאמר בנושא עבודה עם קובצי יומן Redo של מסד נתונים של Oracle.

הוראות מפורטות להגדרת מסד הנתונים של Oracle כמקור לכל אחת מהשיטות האלה מופיעות בקטעים הבאים.

הגדרת מסד נתונים של Amazon RDS Oracle לקריאת יומן בינארי

במקורות Amazon RDS, ‏ Datastream תומך רק באובייקטים של ספריית מסד נתונים כשיטת הגישה ליומן עבור קורא היומן הבינארי. צריך ליצור את ספריות מסד הנתונים שמפנות לקבצי יומן Redo של הפעולות שבוצעו אונליין ולקבצי יומן הרישום של הפעולות שבוצעו בארכיון. השמות של הספריות האלה הם קבועים ואי אפשר לשנות אותם אחר כך. צריך לספק את השמות האלה ל-Datastream כשיוצרים את הזרם.

  1. מתחברים למופע המקור של Amazon RDS.

  2. בטרמינל או באמצעות מרכז הבקרה של Amazon RDS, מריצים את הפקודות הבאות:

    BEGIN
    rdsadmin.rdsadmin_master_util.create_archivelog_dir;
    END;
    BEGIN
    rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
    END;
    COMMIT;
    GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME;
    GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;
  3. מוודאים שמסד הנתונים פועל במצב ARCHIVELOG. כדי לעשות זאת, נכנסים למסד הנתונים של Oracle ומריצים את הפקודה הבאה בשורת הפקודה של SQL:

    SELECT LOG_MODE FROM V$DATABASE;

    1. אם התוצאה היא ARCHIVELOG, עוברים לשלב ג'.
    2. אם התוצאה היא NOARCHIVELOG, צריך להפעיל את מצב ARCHIVELOG במסד הנתונים.
    3. קובצי יומן שנשמרו בארכיון תופסים מקום בדיסק, ולכן כדאי להגדיר את הפרמטר DB_RECOVERY_FILE_DEST_SIZE במסד הנתונים. הפרמטר הזה מאפשר לציין (בבייט) את המגבלה הקשיחה על הנפח הכולל של הקבצים לשחזור מסד הנתונים של היעד. הגדרת הפרמטר הזה מאפשרת לכם לנהל את האיזון בין הגנה על מסד הנתונים מפני מצב שבו לא נשאר יותר מקום בדיסק לבין מצב שבו הסטרימינג נכשל בגלל אובדן של מיקום ביומן.
    4. מגדירים מדיניות לשמירת נתונים במסד הנתונים באמצעות הפקודה הבאה:
      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
      מומלץ לשמור גיבויים ולתייק יומנים למשך 4 ימים לפחות, ועדיף למשך 7 ימים.
    5. מגדירים את מדיניות הרוטציה של קובץ היומן של Oracle. מומלץ להגדיר את הגודל המקסימלי של קובץ היומן לערך שקטן מ-1GB.
  4. מפעילים את האפשרות נתוני יומן משלימים. כדי לעשות זאת, קודם מפעילים רישום משלים מינימלי ברמת מסד הנתונים על ידי הפעלת הפקודה הבאה:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');

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

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

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

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

    • SCHEMA: השם של הסכימה שמכילה את הטבלה.
    • TABLE: שם הטבלה שרוצים לרשום את השינויים שנעשים בה.

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

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
  5. מעניקים למשתמש במסד הנתונים את ההרשאות הבאות:

    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$LOGFILE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$ARCHIVED_LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$INSTANCE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$STANDBY_LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$INSTANCE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PDBS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSPORTABLE_PLATFORM','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('COL$','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_OBJECTS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_ENCRYPTED_COLUMNS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_EXTENTS','USER_NAME','SELECT');
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;

    מחליפים את USER_NAME בשם של חשבון המשתמש שבו רוצים להשתמש כדי להתחבר למסד הנתונים.

הגדרת מסד נתונים של Amazon RDS Oracle ל-LogMiner

  1. מוודאים שמסד הנתונים פועל במצב ARCHIVELOG. כדי לעשות זאת, נכנסים למסד הנתונים של Oracle ומריצים את הפקודה הבאה בשורת הפקודה של SQL:

    SELECT LOG_MODE FROM V$DATABASE;
    
    1. אם התוצאה היא ARCHIVELOG, עוברים לשלב ג'.
    2. אם התוצאה היא NOARCHIVELOG, צריך להפעיל את מצב ARCHIVELOG במסד הנתונים.

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

    3. קובצי יומן שנשמרו בארכיון תופסים מקום בדיסק, ולכן כדאי להגדיר את הפרמטר DB_RECOVERY_FILE_DEST_SIZE במסד הנתונים. הפרמטר הזה מאפשר לציין (בבייטים) את המגבלה העליונה על הנפח הכולל של הקבצים שמשמשים לשחזור מסד הנתונים של היעד. הגדרת הפרמטר הזה מאפשרת לנהל את האיזון בין הגנה על מסד הנתונים מפני מצב שבו לא יישאר מקום בדיסק, לבין מצב שבו הסטרימינג ייכשל בגלל אובדן של מיקום ביומן.

    4. מגדירים מדיניות לשמירת נתונים במסד הנתונים על ידי הפעלת הפקודה הבאה:

      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
      

      מומלץ לשמור גיבויים ולתייק יומנים למשך 4 ימים לפחות, ועדיף למשך 7 ימים.

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

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
    

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

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

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    

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

    • SCHEMA: השם של הסכימה שמכילה את הטבלה.
    • TABLE: שם הטבלה שרוצים לרשום את השינויים שנעשים בה.

    כדי לשכפל את רוב הטבלאות במסד הנתונים או את כולן, כדאי להפעיל את הרישום ביומן לכל מסד הנתונים.

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

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
    
  3. הענק את ההרשאות המתאימות לחשבון המשתמש שישמש לחיבור למסד הנתונים. כדי לעשות זאת, מריצים את הפקודות הבאות:

    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG','USER_NAME','SELECT'); -- for primary databases
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG','USER_NAME','SELECT'); -- for standby databases
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','USER_NAME','EXECUTE');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR_D','USER_NAME','EXECUTE');
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;

    אם במסד הנתונים שלכם נעשה שימוש בהצפנת נתונים שקופה (TDE), צריך להעניק את ההרשאות הבאות:

    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_ENCRYPTED_COLUMNS','USER_NAME','SELECT');

    אם הארגון שלכם לא מאפשר להעניק את ההרשאה GRANT SELECT ANY TABLE, תוכלו להשתמש בפתרון שמתואר בקטע Oracle change data capture (CDC) בדף השאלות הנפוצות בנושא Datastream.

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

    GRANT LOGMINING TO USER_NAME;
  4. מעניקים לחשבון המשתמש SELECT גישה לתצוגה DBA_EXTENTS במסד הנתונים. הרשאה זו מאפשרת לכם להשתמש בROWID למילוי חוסרים במקור Oracle:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

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