הגדרת מסד נתונים של Oracle בניהול עצמי ל-CDC

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

אתם יכולים להגדיר את מסד הנתונים של Oracle בניהול עצמי כך שיפעל עם שיטות ה-CDC הבאות:

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

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

הגדרת מסד נתונים של Oracle בניהול עצמי עבור קורא יומנים בינאריים

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

  1. בוחרים אחת מהשיטות הבאות כדי לגשת לקובצי היומן:

    • ניהול אחסון אוטומטי (ASM): אם בוחרים באפשרות הזו, צריך ליצור חיבור ASM ייעודי ולספק את הפרטים שלו כשיוצרים את פרופיל החיבור. לחשבון המשתמש שמשמש לחיבור ASM צריכה להיות ההרשאה SYSASM.

      כדי ליצור משתמש חדש ב-ASM עם הרשאת SYSASM, מריצים את הפקודות הבאות:

      CREATE USER ASM_USER_NAME IDENTIFIED BY ASM_PASSWORD;
      GRANT SYSASM TO ASM_USER_NAME;

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

      • ASM_USER_NAME: השם של משתמש ASM.
      • ASM_PASSWORD: הסיסמה של משתמש ASM.
    • ספריות של מסדי נתונים: אם בוחרים באפשרות הזו, צריך ליצור אובייקטים של ספריות מסדי נתונים שמפנים לקבצים של יומן Redo ולקבצים של היומן שנשמר בארכיון, ולהעניק למשתמש במסד הנתונים הרשאת גישה לספריות:READ

    CREATE DIRECTORY DIRECTORY_NAME_1 as 'ONLINE_REDO_LOGS_PATH';
    CREATE DIRECTORY DIRECTORY_NAME_2 as 'ARCHIVED_REDO_LOGS_PATH';
    GRANT READ ON DIRECTORY DIRECTORY_NAME_1 to USER_NAME;
    GRANT READ ON DIRECTORY DIRECTORY_NAME_2 to USER_NAME;

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

    • DIRECTORY_NAME_1: השם של הספרייה של קובצי יומן הרישום של הפעולות החוזרות אונליין.
    • DIRECTORY_NAME_2: השם של הספרייה שבה נמצאים קובצי יומן הפעולות החוזרות בארכיון.
    • ONLINE_REDO_LOGS_PATH: הנתיב לספרייה שבה יישמרו קובצי יומן הרישום של פעולות חוזרות אונליין.
    • ARCHIVED_REDO_LOGS_PATH: הנתיב לספרייה שבה יישמרו קובצי יומן בארכיון.
    • USER_NAME: השם של משתמש מסד הנתונים שרוצים להעניק לו גישת READ.

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

  2. מוודאים שמסד הנתונים פועל במצב ARCHIVELOG.

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

    SELECT LOG_MODE FROM V$DATABASE;

    1. אם התוצאה היא ARCHIVELOG, עוברים לשלב הבא.
    2. אם התוצאה היא NOARCHIVELOG, צריך להפעיל את מצב ARCHIVELOG במסד הנתונים.
    3. מריצים את הפקודות הבאות כשמחוברים בתור SYSDBA:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    4. קובצי יומן שנשמרו בארכיון תופסים מקום בדיסק, ולכן כדאי להגדיר את הפרמטר DB_RECOVERY_FILE_DEST_SIZE במסד הנתונים. הפרמטר הזה מאפשר לציין (בבייט) את המגבלה הקשיחה על הנפח הכולל של הקבצים לשחזור מסד הנתונים של היעד. הגדרת הפרמטר הזה מאפשרת לכם לנהל את האיזון בין הגנה על מסד הנתונים מפני מצב שבו לא נשאר יותר מקום בדיסק לבין מצב שבו הסטרימינג נכשל בגלל אובדן של מיקום ביומן.

  3. מגדירים מדיניות לשמירת נתונים במסד הנתונים על ידי הפעלת הפקודות הבאות של Oracle Recovery Manager ‏ (RMAN):

    TARGET /
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

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

  4. חוזרים להנחיית ה-SQL של כלי מסד הנתונים שבו משתמשים כדי להגדיר את מדיניות הרוטציה של קובץ היומן של Oracle. מומלץ להגדיר גודל מקסימלי של קובץ יומן של עד 512MB.

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

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

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

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

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

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

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

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

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  6. מעניקים את ההרשאות המתאימות ישירות לחשבון המשתמש שמשמש לחיבור למסד הנתונים. שימו לב שההרשאות האלה לא פועלות כשמקצים אותן לתפקיד, למשל. כדי לעשות זאת, מריצים את הפקודות הבאות:

    GRANT SELECT ON GV_$LOG TO USER_NAME;
    GRANT SELECT ON GV_$LOGFILE TO USER_NAME;
    GRANT SELECT ON GV_$ARCHIVED_LOG TO USER_NAME;
    GRANT SELECT ON GV_$INSTANCE TO USER_NAME;
    GRANT SELECT ON GV_$STANDBY_LOG TO USER_NAME;
    GRANT SELECT ON V_$INSTANCE TO USER_NAME;
    GRANT SELECT ON V_$PDBS TO USER_NAME;
    GRANT SELECT ON V_$TRANSPORTABLE_PLATFORM TO USER_NAME;
    GRANT SELECT ON V_$DATABASE TO USER_NAME;
    GRANT SELECT ON V_$PARAMETER TO USER_NAME;
    GRANT SELECT ON COL$ TO USER_NAME;
    GRANT SELECT ON DBA_OBJECTS TO USER_NAME;
    GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
    GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
    
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;
    GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME;
    GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;

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

הגדרת מסד נתונים של Oracle בניהול עצמי ל-LogMiner

  1. מוודאים שמסד הנתונים פועל במצב ARCHIVELOG.

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

    SELECT LOG_MODE FROM V$DATABASE;

    1. אם התוצאה היא ARCHIVELOG, עוברים לשלב 2.
    2. אם התוצאה היא NOARCHIVELOG, צריך להפעיל את מצב ARCHIVELOG במסד הנתונים.
    3. מריצים את הפקודות הבאות כשמחוברים בתור SYSDBA:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    4. קובצי יומן שנשמרו בארכיון תופסים מקום בדיסק, ולכן כדאי להגדיר את הפרמטר DB_RECOVERY_FILE_DEST_SIZE במסד הנתונים. הפרמטר הזה מאפשר לציין (בבייט) את המגבלה הקשיחה על הנפח הכולל של הקבצים לשחזור מסד הנתונים של היעד. הגדרת הפרמטר הזה מאפשרת לכם לנהל את האיזון בין הגנה על מסד הנתונים מפני מצב שבו לא נשאר יותר מקום בדיסק לבין מצב שבו הסטרימינג נכשל בגלל אובדן של מיקום ביומן.

  2. מגדירים מדיניות לשמירת נתונים במסד הנתונים על ידי הפעלת הפקודות הבאות של Oracle Recovery Manager ‏ (RMAN):

    TARGET /
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

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

  3. חוזרים להנחיית ה-SQL של כלי מסד הנתונים שבו משתמשים כדי להגדיר את מדיניות הרוטציה של קובץ היומן של Oracle. מומלץ להגדיר גודל מקסימלי של קובץ יומן של עד 512MB.

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

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

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

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

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

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

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

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

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  5. מעניקים את ההרשאות המתאימות ישירות לחשבון המשתמש שמשמש לחיבור למסד הנתונים. שימו לב שההרשאות האלה לא פועלות כשמקצים אותן לתפקיד, למשל. כדי לעשות זאת, מריצים את הפקודות הבאות:

    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOG TO USER_NAME; -- for primary databases
    GRANT SELECT ON SYS.V_$STANDY_LOG TO USER_NAME; -- for standby databases
    GRANT SELECT ON SYS.V_$LOGFILE TO USER_NAME;
    GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME;
    GRANT SELECT ON SYS.V_$PARAMETER TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME;
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;

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

    GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
    GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;

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

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

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

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

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