יצירת Data Guard באורקל 11 – הדרך המהירה (דמו משבוע אורקל 2011)

כמו שהבטחתי, הנה החלק הראשון בדמו של יצירת מערך Data Guard באורקל 11. אם יש למישהו הערות, אני אשמח לשמוע. בנוסף, אני מצרף את הקובץ של ה-demo שהשתמשנו בו בפועל ואין כמעט הסברים – כל ההסברים הנדרשים יהיו פה או במצגת.

הערה קטנה לפני שנתחיל – אנחנו נשתמש בשיטה שקיימת רק באורקל 11 וזה שכפול הסביבה on-line דרך RMAN מבלי לקחת גיבוי לקבצים קודם. ניתן להשתמש בשיטה הזו אם בסיס הנתונים קטן יחסית או אם הרשת בין השרתים מספיק חזקה כדי לבצע כזו פעולה של שכפול בסיס הנתונים. זו השיטה הפשוטה ביותר שאני מכיר להקים כזו סביבה והיא גם אחת המהירות שבהן. אם תהיה דרישה אני אעלה גם הסבר איך מקימים Data Guard בקונפיגורציות אחרות (לדוגמה לא דרך DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE או באורקל 10).

כמו שמוסבר במצגת, הקמת הסביבה מתחלקת לשישה שלבים:

  1. הכנת שרת ה-Primary.
  2. הכנת פרמטרים בבסיס הנתונים הראשי.
  3. קונפיגורציית רשת של אורקל בשני השרתים.
  4. העלאת בסיס הנתונים המשני בקוניפגורציה מינימלית.
  5. יצירת בסיס הנתונים המשני (on-line).
  6. הפעלת ה-Data Guard לגילגול Archive-ים.

הסביבה

נתחיל במשהו שלטעמי חסר בהרבה step by step של יצירת Oracle Data Guard – הסבר על הסביבה. בהמשך אני אעלה גם הסבר איך מקימים סביבה כזו ב-Amazon EC2 (שזה מה שעשינו בכנס) אבל בעקרון זה לא משהו שהוא חובה ואתם מוזמנים להתחיל להשתמש בדמו גם בלי הדוגמה.
השרתים שלנו הם image-ים של Linux 64 bit עם Oracle 11.2.0.1 בגרסת 64 ביט. מבחינת חומרה עם 4 מעבדים, 8 ג’יגה זכרון ו-50 גיגה דיסק כל אחד (קונפיגורצית large של אמזון). מיקום ה-Oracle Home:

/u01/app/oracle/product/11.2.0/db_1

שרת “היצור”

שם השרת: srvprod.
לשרת יש שם ברירת מחדל שניתן לו על ידי אמזון, אבל שמתי בקובץ ה-hosts את השם הזה כדי שיהיה יותר פשוט לעבוד איתו.
שם בסיס הנתונים: ghorcl.
זהו בסיס נתונים שנוצר על ידי אמזון והוא בגודל של כ-5 ג’יגה אאל”ט.
מיקום בסיס הנתונים:

/u01/oradata/ghorcl/

כתובת השרת: 10.0.0.100.
זוהי הכתובת הפנימית ויש לשרת גם כתובת חיצונית כדי שיהיה אפשר להתחבר אליה מרחוק שלא כל כך משנה לנו לצורך הדוגמה.

שרת ה-DR שלנו:

שם השרת: srvstby
שם בסיס הנתונים: ghorcldg.
בסיס הנתונים לא קיים שם וזה השם שניתן לבסיס הנתונים שניצור.
מיקום בסיס הנתונים:

/u01/app/oradata/ghorcldg/

מיקום בסיס הנתונים שונה למיקום שונה מהיצור כדי להדגים כמה מהפרמטרים של ה-convert מאוחר יותר.
כתובת השרת: 10.0.0.101.

הכנת שרת ה-Primary

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

archive log list;

בנוסף, מומלץ מאוד להשתמש ב-force logging כדי שלא לגרום לחוסר סנכון של בסיס הנתונים במקרה של הכנסה ישירה של נתונים לטבלאות על ידי שימוש ב-sql loader או ב-hint של append וטבלה שנמצאת ב-nologging:

alter database force logging;

מומלץ להפעיל את בסיס הנתונים גם בתצורה של flashback database. הדבר יהיה מועיל במקרה שבו נצטרך לבצע reinstate אחרי ביצוע failover.

alter database flashback on;

בשלב הבא נבדוק כמה קבצי online redo logs יש לנו (ומה גודלם):

select group#,member,type from v$logfile;

select bytes/1024/1024 from v$log;

ניצור standby redo logs – יש ליצור לפחות את אותה הכמות ועוד אחד (כלומר, אם יש לנו 3 קבצי online, יש ליצור 4 קבצי standby:

ALTER DATABASE ADD STANDBY LOGFILE '/u01/oradata/ghorcl/srl01.log' SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE '/u01/oradata/ghorcl/srl02.log' SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE '/u01/oradata/ghorcl/srl03.log' SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE '/u01/oradata/ghorcl/srl04.log' SIZE 50M;

הכנת פרמטרים בבסיס הנתונים הראשי

נבדוק מהו ה-unique name של בסיס הנתונים שלנו:

select * from V$DATAGUARD_CONFIG;

נוסיף לשרת ה-Primary שלנו הגדרה של סביבת ה-data guard. השם הראשון תמיד יהיה השם של בסיס הנתונים הנוכחי ואחרי השמות של ה-standby בסביבה.

alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ghorcl,ghorcldg)';

נוסיף הגדרה לאן יש “לשדר” את ה-redo. הגדרה זו עדיין לא אומרת הרבה כי עדיין לא קינפגנו את ה-net אבל זה יסתדר מאוחר יותר, כאשר הסביבה השנייה תעלה בפעם הראשונה. בכל מקרה, לגבי הפרטים של הפרמטר ניתן לקרוא במצגת.

alter system set log_archive_dest_2='SERVICE=ghorcldg VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ghorcldg';

נוודא שהפרמטר של ה-dest נמצא במצב של enable:

show parameter log_archive_dest_state_2

נגדיר את שרת ה-FAL ואת ה-client של ה-FAL בשרת הראשי (פרטים נוספים במצגת):

alter system set FAL_SERVER=ghorcldg;
alter system set FAL_CLIENT=ghorcl;

נוודא שבסיס הנתונים שלנו עובד במצב של קובץ סיסמאות exclusive. מצב זה נדרש כדי שיהיה ניתן להתחבר עם היוזר sys מרחוק.

show parameter remote_login_passwordfile

הדבר האחרון בחלק זה הוא להעתיק את קובץ הסיסמאות לשרת המשני שלנו:

scp -i /root/GlassHouseOVM.pem /u01/app/oracle/product/11.2.0/db_1/dbs/orapwghorcl srvstby:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwghorcldg

ושינוי השייכות שלו ליוזר של אורקל (בשרת המשני):

chown oracle:oinstall /u01/app/oracle/product/11.2.0/db_1/dbs/orapwghorcl

קונפיגורציית רשת של אורקל

נערוך את קובץ ה-tnsnames.ora בשני השרתים ונוסיף את השורות הבאות שיצביעו על שני השרתים במערך שלנו:

GHORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = srvprod)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ghorcl_dgmgrl)))

GHORCLDG =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = srvstby)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ghorcldg_dgmgrl)))

נערוך את קובץ ה-listner.ora בשרת הראשי ונוסיף בו כניסות סטטיות של בסיס הנתונים שלנו:

SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
      (GLOBAL_DBNAME = ghorcl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = ghorcl)
   )
   (SID_DESC =
      (GLOBAL_DBNAME = ghorcl_dgmgrl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = ghorcl)
      (SERVICE_NAME = ghorcl)
   )
 )

נעלה מחדש את ה-listner שלנו (ישנם מקרים שבהם זה לא מספיק וצריך להפעיל את ה-listner מחדש. אני מצרף את שתי הפקודות):

lsnrctl reload
or
lsnrctl stop;lsnrctl start

נתחבר לשרת המשני ונקנפג את ה-listner גם שם:

SID_LIST_LISTENER = 
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ghorcldg)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = ghorcldg)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ghorcldg_dgmgrl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = ghorcldg)
      (SERVICE_NAME = ghorcldg)
    )
  )

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

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

echo DB_NAME=ghorcldg > /u01/app/oracle/product/11.2.0/db_1/dbs/initghorcldg2.ora

cat /u01/app/oracle/product/11.2.0/db_1/dbs/initghorcldg2.ora

ניצור את עץ הספריות הבסיסי כדי שנוכל להקים את בסיס הנתונים:

#--create adump folder
mkdir -p /u01/app/admin/ghorcldg/adump

#--create data files folder -
mkdir -p /u01/app/oradata/ghorcldg

#--create recovery_area folder
mkdir -p /u01/app/flash_recovery_area

נעלה את בסיס הנתונים שלנו למצב nomount באמצעות שימוש בקובץ ה-pfile שהגדרנו (אין לנו שום דבר פרט להגדרה כללית של בסיס נתונים):

sqlplus / as sysdba
startup nomount pfile=/u01/app/oracle/product/11.2.0/db_1/dbs/initghorcldg.ora

יצירת בסיס הנתונים המשני

נתחבר ל-rman בשרת הראשי ונתחבר לשני בסיסי הנתונים שלנו:

connect target sys/oracle
connect auxiliary sys/[email protected]

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

run
{
   allocate channel c1 type disk;
   allocate channel c2 type disk;
   allocate channel c3 type disk;
   allocate auxiliary channel a1 type disk;
   allocate auxiliary channel a2 type disk;
   allocate auxiliary channel a3 type disk;
    duplicate TARGET DATABASE
    FOR STANDBY
    FROM ACTIVE DATABASE
    SPFILE
       parameter_value_convert 'ghorcl','ghorcldg'
       SET control_files='/u01/app/oradata/ghorcldg/control01.ctl', '/u01/app/oradata/ghorcldg/control02.ctl'
       SET DB_UNIQUE_NAME= 'ghorcldg'
       SET instance_name= 'ghorcldg'
       set db_file_name_convert='/u01/oradata/ghorcl/','/u01/app/oradata/ghorcldg/'
       set log_file_name_convert='/u01/oradata/ghorcl/','/u01/app/oradata/ghorcldg/'
	   set db_recovery_file_dest='/u01/app/flash_recovery_area/'
       set audit_file_dest= '/u01/app/admin/ghorcldg/adump/'
       SET FAL_CLIENT="ghorcldg" COMMENT "Is standby"
       SET FAL_SERVER="ghorcl" COMMENT "Is primary"
	   set standby_file_management='AUTO'
       set log_archive_dest_2='SERVICE=ghorcl VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ghorcl';
}

לאחר כ-5 דקות בסיס הנתונים שלנו ישוכפל – קבצי ה-control, קבצי ה-log ואפילו קובץ ה-spfile יועברו לסביבה החדשה ללא צורך בהתערבות שלנו.

הפעלת ה-Data Guard לגילגול Archive-ים

השלב האחרון בהקמה הוא להפעיל את הגלגול האוטומטי של קבצי ה-redo:

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

ובדיקה שבסיסי הנתונים שלנו עובדים כראוי
בסביבת ה-dr:

select process,status,sequence# from V$MANAGED_STANDBY;

בסביבת היצור:

alter system switch logfile;

בסביבת ה-dr שוב – אם הכל בסדר, המספר שלנו יתקדם:

select process,status,sequence# from V$MANAGED_STANDBY;

ולא יהיה הודעות שגיאה או lag כאן:

SELECT name, value, time_computed FROM v$dataguard_stats;

עד כאן הקמת ה-data guard באורקל 11. מחר אני אפרסם גם את החלק של יצירת ה-broker.

1 תגובה

השאירו תגובה

Want to join the discussion?
Feel free to contribute!

השאר תגובה

This site uses Akismet to reduce spam. Learn how your comment data is processed.