הכנת מסד הנתונים הראשי של 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 |
יכול להיות שתצטרכו לשנות את הנתיבים של משתני הסביבה בהתאם להגדרה שלכם.
הגדרת מסד הנתונים הראשי
מתחברים לשרת הראשון של Bare Metal Solution שמארח את מסד הנתונים הראשי.
בקובץ
/etc/oratab, מוסיפים רשומה כדי שהפקודהoraenvתוכל להגדיר משתני סביבה למסד הנתונים הראשי. משנים את שם המופע כך שיתאים למופע הפועל בכל צומת, ומציינים את הנתיב המלא לתיקיית הבסיס של מסד הנתונים של Oracle:DBDG_SITE11:ORACLE_HOME:Nמגדירים את משתנה הסביבה
ORACLE_SIDכדי להתחבר למסד הנתונים הראשי:source oraenv <<< "DBDG_SITE11"אמורה להתקבל התשובה
The Oracle base has been set to /apps/oracle/oracle_base.
הגדרת רישום ביומן של מסד הנתונים והפעלת האפשרות 'שחזור מסד נתונים'
מפעילים את SQL*Plus, ואז מפעילים את
force loggingכדי שמרחבי הטבלאותnologgingשנוספו למסד הנתונים יתועדו ביומן:sqlplus / as sysdbaALTER DATABASE FORCE LOGGING;מוודאים שהאפשרויות
archivelog modeו-flashback databaseמופעלות:ARCHIVE LOG LIST; SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;אם האפשרויות
archivelog modeו-flashback databaseמושבתות, מפעילים אותן באמצעות פקודות ה-SQL הבאות:מפסיקים את מסד הנתונים המאוגד כדי לבצע את השינויים הנדרשים:
srvctl stop database -dמריצים את פקודות ה-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;מפעילים מחדש את מסד הנתונים באשכול:
srvctl start database -d DBDG_SITE1
הכנת מסד הנתונים ל-Data Guard
מתחברים לשרת הראשון של Bare Metal Solution שמארח את מסד הנתונים הראשי ומגדירים את משתנה הסביבה
ORACLE_SIDכדי להתחבר למסד הנתונים הראשי:source oraenv <<< "DBDG_SITE11"אמורה להתקבל התשובה
The Oracle base has been set to /apps/oracle/oracle_base.מפעילים את SQL*Plus, ואז משנים את פרמטרים של אתחול מסד הנתונים שנדרשים להגדרת Data Guard ולשירותים:
sqlplus / as sysdbaALTER 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;בודקים אם קיימים יומני פעולות חוזרות במצב המתנה במסד הנתונים. לכל שרשור צריך להיות עוד קבוצה אחת של יומן 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אם יש מספיק קבוצות של יומני 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;מוודאים שיומני ה-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יוצאים מ-SQL*Plus:
EXIT;
העתקת קובצי הסיסמה והפרמטרים של מסד הנתונים לשרתי ההמתנה
יוצרים קובץ פרמטרים של מסד נתונים ומעתיקים אותו לשרת הגיבוי:
יוצרים תיקייה לקובץ הפרמטרים של מסד הנתונים במצב המתנה (
pfile):mkdir /home/oracle/backupמפעילים את SQL*Plus, ואז יוצרים את מסד הנתונים במצב המתנה
pfile:sqlplus / as sysdbaCREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;יוצאים מ-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
חשוב לוודא שהסיסמה להתחברות מרחוק ל-SYS נשמרת בצורה מאובטחת. אם אתם לא יודעים מה הסיסמה, אתם יכולים לאפס אותה.
מעתיקים את קובץ הסיסמה לאשכול ההמתנה:
כדי לאתר את המיקום של קובץ הסיסמאות, משתמשים בפקודה
srvctl:srvctl config database -db DBDG_SITE1 | grep -i passwordהפלט הבא מציג את המיקום של מאגר קובצי סיסמאות ב-ASM:
Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663יוצרים עותק זמני של קובץ הסיסמאות במערכת הקבצים המקומית באמצעות הפקודה
asmcmd:asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21מעתיקים את קובץ הסיסמאות לשרת הראשון של 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.