הכנת מסד הנתונים הראשי של Data Guard

כדי להשתמש ב-Data Guard, צריך מסד נתונים ראשי ומסד נתונים אחד לפחות במצב המתנה. לפני שמגדירים את Data Guard ב-Bare Metal Solution, צריך ליצור את מסד הנתונים הראשי.

בדוגמאות הבאות נעשה שימוש לאורך המדריך הזה:

שם ייחודי של מסד הנתונים שמות מארחים של שרתים שמות של מכונות RAC תפקיד
DBDG_SITE1 site1db1, site1db2 DBDG_SITE11, DBDG_SITE12 ראשי
DBDG_SITE2 site2db1, site2db2 DBDG_SITE21, DBDG_SITE22 מצב המתנה

השרתים של Bare Metal Solution שבהם פועל Oracle במדריך הזה מוגדרים עם משתני הסביבה הבאים:

שם משתנה הסביבה ערך
ORACLE_BASE /apps/oracle/oracle_base
ORACLE_HOME /apps/oracle/19.0.0/db_home1

יכול להיות שתצטרכו לשנות את הנתיבים של משתני הסביבה בהתאם להגדרה שלכם.

הגדרת מסד הנתונים הראשי

  1. מתחברים לשרת הראשון של Bare Metal Solution שמארח את מסד הנתונים הראשי.

  2. בקובץ /etc/oratab, מוסיפים רשומה כדי שהפקודה oraenv תוכל להגדיר משתני סביבה למסד הנתונים הראשי. משנים את שם המופע כך שיתאים למופע הפועל בכל צומת, ומציינים את הנתיב המלא לתיקיית הבסיס של מסד הנתונים של Oracle:

    DBDG_SITE11:ORACLE_HOME:N
    
  3. מגדירים את משתנה הסביבה ORACLE_SID כדי להתחבר למסד הנתונים הראשי:

    source oraenv <<< "DBDG_SITE11"
    

    אמורה להתקבל התשובה The Oracle base has been set to /apps/oracle/oracle_base.

הגדרת רישום ביומן של מסד הנתונים והפעלת האפשרות 'שחזור מסד נתונים'

  1. מפעילים את SQL*Plus, ואז מפעילים את force logging כדי שמרחבי הטבלאות nologging שנוספו למסד הנתונים יתועדו ביומן:

    sqlplus / as sysdba
    
    ALTER DATABASE FORCE LOGGING;
    
  2. מוודאים שהאפשרויות archivelog mode ו-flashback database מופעלות:

    ARCHIVE LOG LIST;
    SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
    

    אם האפשרויות archivelog mode ו-flashback database מושבתות, מפעילים אותן באמצעות פקודות ה-SQL הבאות:

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

       srvctl stop database -d 
      
    2. מריצים את פקודות ה-SQL הנדרשות כדי להפעיל את archivelog mode ואת flashback database:

       STARTUP MOUNT;
       ALTER DATABASE ARCHIVELOG;
       ALTER DATABASE FLASHBACK ON;
       ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SID='*' SCOPE=BOTH;
       ALTER DATABASE OPEN;
       SHUTDOWN IMMEDIATE;
       EXIT;
      
    3. מפעילים מחדש את מסד הנתונים באשכול:

       srvctl start database -d DBDG_SITE1
      

הכנת מסד הנתונים ל-Data Guard

  1. מתחברים לשרת הראשון של Bare Metal Solution שמארח את מסד הנתונים הראשי ומגדירים את משתנה הסביבה ORACLE_SID כדי להתחבר למסד הנתונים הראשי:

    source oraenv <<< "DBDG_SITE11"
    

    אמורה להתקבל התשובה The Oracle base has been set to /apps/oracle/oracle_base.

  2. מפעילים את SQL*Plus, ואז משנים את פרמטרים של אתחול מסד הנתונים שנדרשים להגדרת Data Guard ולשירותים:

    sqlplus / as sysdba
    
    ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=8 SID='*' SCOPE=BOTH;
    ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*' SCOPE=BOTH;
    
  3. בודקים אם קיימים יומני פעולות חוזרות במצב המתנה במסד הנתונים. לכל שרשור צריך להיות עוד קבוצה אחת של יומן Redo במצב המתנה, מעבר למספר הקבוצות של יומן Redo במצב אונליין.

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    בדוגמה הבאה יש ארבעה יומני Redo אונליין לכל שרשור, ולא נוצרו קבוצות של יומני Redo במצב המתנה. מכיוון שיש ארבע קבוצות של יומני Redo אונליין, צריך ליצור חמש קבוצות של יומני Redo במצב המתנה לכל שרשור:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    
  4. אם יש מספיק קבוצות של יומני Redo במצב המתנה, אפשר לדלג על השלב הזה. גודלן של קבוצות יומני Redo במצב המתנה חייב להיות זהה לגודלן של קבוצות יומני Redo במצב אונליין. יוצרים את המספר הנדרש של קבוצות יומני Redo במצב המתנה באמצעות קוד PL/SQL הבא:

    SET FEEDBACK OFF
    SET SERVEROUTPUT ON
    DECLARE
      CURSOR cur_thread IS
        SELECT THREAD# THREAD, COUNT(*) COUNT FROM V$LOG GROUP BY THREAD#;
      standbylog_count NUMBER := 0;
      standbylog_group NUMBER := 0;
      standbylog_size NUMBER := 0;
      last_group_number NUMBER;
      sqlstmt VARCHAR2(200);
    BEGIN
      SELECT MAX(GROUP#), MAX(BYTES)
    INTO last_group_number, standbylog_size
    FROM V$LOG;
      standbylog_group := last_group_number + 1;
      FOR rec_thread IN cur_thread LOOP
    standbylog_count := rec_thread.count + 1;
    FOR i IN 1..standbylog_count LOOP
      sqlstmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' || rec_thread.thread || ' GROUP ' || TO_CHAR(standbylog_group) || ' SIZE ' || standbylog_size || ';';
      DBMS_OUTPUT.PUT_LINE( sqlstmt);
      standbylog_group := standbylog_group + 1;
    END LOOP;
      END LOOP;
    END;
    /
    SET FEEDBACK ON
    

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

    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP  9 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 14 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 15 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 16 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 17 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 18 SIZE 2147483648;
    
  5. מוודאים שיומני ה-redo של הגיבוי מוגדרים בצורה נכונה בהתאם להגדרה שלכם:

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    בפלט הבא יש ארבע קבוצות של יומני Redo אונליין לכל שרשור וחמש קבוצות של יומני Redo במצב המתנה לכל שרשור:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    Standby logfile groups in thread 1: 5
    Standby logfile groups in thread 2: 5
    
  6. יוצאים מ-SQL*Plus:

    EXIT;
    

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

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

    1. יוצרים תיקייה לקובץ הפרמטרים של מסד הנתונים במצב המתנה (pfile):

      mkdir /home/oracle/backup
      
    2. מפעילים את SQL*Plus, ואז יוצרים את מסד הנתונים במצב המתנה pfile:

      sqlplus / as sysdba
      
      CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
      
    3. יוצאים מ-SQL*Plus, ואז מעתיקים את pfile לשרת הראשון של Bare Metal Solution במיקום ההמתנה:

      EXIT;
      
      scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
      
  2. חשוב לוודא שהסיסמה להתחברות מרחוק ל-SYS נשמרת בצורה מאובטחת. אם אתם לא יודעים מה הסיסמה, אתם יכולים לאפס אותה.

  3. מעתיקים את קובץ הסיסמה לאשכול ההמתנה:

    1. כדי לאתר את המיקום של קובץ הסיסמאות, משתמשים בפקודה srvctl:

      srvctl config database -db DBDG_SITE1 | grep -i password
      

      הפלט הבא מציג את המיקום של מאגר קובצי סיסמאות ב-ASM:

        Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
      
    2. יוצרים עותק זמני של קובץ הסיסמאות במערכת הקבצים המקומית באמצעות הפקודה asmcmd:

      asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
      
    3. מעתיקים את קובץ הסיסמאות לשרת הראשון של Bare Metal Solution במיקום ההמתנה, ואז מוחקים את העותק הזמני משרת Bare Metal Solution במיקום הראשי:

      scp /tmp/orapwDBDG_SITE21 ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21
      rm /tmp/orapwDBDG_SITE21
      

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

עורכים את הקובץ $ORACLE_HOME/network/admin/tsnames.ora בכל שרת Bare Metal Solution במיקום של מסד הנתונים הראשי כדי לעדכן את הגדרת שירות הרשת. יש שלושה רשומות בקובץ: אחת לכל מסד נתונים, ורשומה זמנית שמשמשת במהלך שכפול מסד הנתונים ותימחק בהמשך:

DBDG_SITE1 =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE1) (UR=A)
      )
  )

DBDG_SITE2 =
 (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE2) (UR=A)
      )
  )

DBDG_SITE2_FOR_DUPLICATION =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = site2db1)(PORT = 1523))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (INSTANCE_NAME = DBDG_SITE21) (UR=A)
      )
  )

מסד הנתונים הראשי מוכן עכשיו לשימוש בהגדרת Data Guard.

השלבים הבאים

בשלב הבא, יוצרים מסד נתונים במצב המתנה של Data Guard.