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

בדף הזה מוסבר איך להגדיר את מסד הנתונים של Oracle כמקור להעברה רציפה באמצעות Database Migration Service.

Database Migration Service משתמש ב-Oracle LogMiner API, שהוא חלק מ-Oracle Database, כדי לשלוח שאילתות לקבצים של יומני Redo בארכיון. קבצים של יומן Redo מכילים מידע על היסטוריית הפעילות במסד נתונים. מידע נוסף על אופן הפעולה של Database Migration Service עם קובצי היומן האלה זמין במאמר מידע על זרימת נתונים בהעברות של Oracle.

הגדרת מסד הנתונים של Oracle כמקור

כדי להשתמש ב-Database Migration Service כדי לשלוף נתונים ממסד נתונים של Oracle, צריך להגדיר את מסד הנתונים באופן הבא:

  • הגדרת רישום ביומן של הארכיון כדי לעקוב אחרי שינויים במסד הנתונים, כמו הפעולות INSERT, UPDATE, DELETE ו-RENAME.

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

    כברירת מחדל, Database Migration Service מנסה לגשת לכל ההגדרות של האובייקטים דרך DBA_VIEWS. הגישה אל DBA_VIEWS ניתנת עם ההרשאה SELECT ANY DICTIONARY. אם חשבון המשתמש להעברה לא יכול לגשת לתצוגות DBA, Database Migration Service חוזר ל- ALL_VIEWS. הגישה הזו מאפשרת לכם גמישות רבה בהגדרת מודל אבטחה שתואם בצורה הטובה ביותר לדרישות שלכם.

    אם רוצים ש-Database Migration Service יקבל גישה רק לקבוצת משנה מסוימת של הגדרות האובייקט, צריך להקצות למשתמש ההעברה תפקיד עם הגדרת הרשאות מפורטת יותר במקום SELECT ANY DICTIONARY.

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

‫Database Migration Service פועל עם סוגי מסדי הנתונים הבאים של Oracle:

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

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

    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. מומלץ להגדיר גודל מקסימלי של קובץ יומן של עד 512MB. מידע נוסף על ניהול החלפת היומנים זמין במאמר עבודה עם קובצי יומן של מסד נתונים של Oracle.

  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 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_$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('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;
    GRANT SELECT ANY DICTIONARY TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

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

    GRANT LOGMINING TO USER_NAME;

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

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

    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):

    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 CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ON SYS.V_$DATABASE 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_$LOGMNR_LOGS 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;
    GRANT SELECT ANY DICTIONARY TO USER_NAME;
    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

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

    GRANT LOGMINING TO USER_NAME;

הגדרת מסד נתונים של Oracle שאפשר לחבר (pluggable) ומתארח באופן עצמאי

Database Migration Service תומך בארכיטקטורת מולטי-טננט של Oracle, שבה מסד נתונים של קונטיינר (CDB) אחד מכיל מסד נתונים אחד או יותר שניתן להוספה (PDB). כל מסד נתונים ניתן לחיבור הוא מסד נתונים עצמאי עם מזהה ושם ייחודיים, ואפשר לנהל אותו באופן עצמאי.

כדי להגדיר מסד נתונים של Oracle שאפשר לחבר (pluggable) שמתארח באופן עצמאי, כך שתוכלו להשתמש בו עם Database Migration Service, צריך לבצע את השלבים הבאים:

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

    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) מהקונטיינר CDB$ROOT:

    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

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

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

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

    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. יוצרים משתמש רגיל. למשתמש רגיל יש את אותה זהות במאגר CDB$ROOT ובמסדי הנתונים הניתנים לחיבור. משתמש רגיל יכול להתחבר למסד הנתונים הראשי ולבצע בו פעולות, וגם להתחבר לכל מסד נתונים שאפשר להוסיף לו תוספים ולבצע בו פעולות, אם יש לו הרשאות לכך. שם המשתמש הנפוץ חייב להתחיל ב-C## או ב-c##.

  6. מעניקים את ההרשאות המתאימות למשתמש הרגיל שישמש לחיבור למסד הנתונים. צריך הרשאות שונות ברמת הקונטיינר של CDB$ROOT וברמת מסד הנתונים הניתן לחיבור.

    • מתחברים למאגר CDB$ROOT ומריצים את הפקודות הבאות:

      GRANT CREATE SESSION TO USER_NAME;
      GRANT SET CONTAINER TO USER_NAME;
      GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME;
      GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME;
      GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME;
      GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME;
      GRANT LOGMINING TO USER_NAME;
      GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    • מתחברים למסד הנתונים הניתן לחיבור ומריצים את הפקודות הבאות:

      GRANT CREATE SESSION TO USER_NAME;
      GRANT SET CONTAINER TO USER_NAME;
      GRANT SELECT ANY TABLE TO USER_NAME;
      GRANT SELECT ANY DICTIONARY TO USER_NAME;
      GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME;
      GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME;
      GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO USER_NAME;
      GRANT SELECT ON DBA_EXTENTS TO USER_NAME;