ההשפעה של no logging על data guard

כבר כתבתי בעבר על הקמה של data guard ואחד הדברים שציינו במפורש זה שרצוי מאוד להשתמש ב-force logging כדי להימנע מבעיות של טבלאות שנטענות ב-no logging.

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

כדי להדגים מה קורה, בואו נבצע את זה בפועל.

בשלב הראשון, לקחתי סביבת Data Guard שהייתה לי והורדתי ממנה את ה-Force Logging

SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PRIMARY

SQL> alter database no force logging
  2  /

Database altered.

לאחר מכן, יצרתי טבלה זמנית בשם TT עם no logging והכנסתי אליה נתונים:

SQL> create table tt nologging as select * From dba_objects;

Table created.

ביצעתי switchover לשרת השני:

[[email protected] trace]$ dgmgrl sys/[email protected]
DGMGRL for Linux: Version 11.2.0.2.0 - Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected.
DGMGRL> show configuration;

Configuration - my_dg

  Protection Mode: MaxPerformance
  Databases:
    orcldg - Primary database
    orcl   - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

DGMGRL> switchover to orcl
Performing switchover NOW, please wait...
New primary database "orcl" is opening...
Operation requires shutdown of instance "orcldg" on database "orcldg"
Shutting down instance "orcldg"...
ORACLE instance shut down.
Operation requires startup of instance "orcldg" on database "orcldg"
Starting instance "orcldg"...
ORACLE instance started.
Database mounted.
Database opened.
Switchover succeeded, new primary is "orcl"
DGMGRL> exit

לאחר מכן, התחברתי ל-primary החדש ושלפתי מהטבלה:

SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PRIMARY

SQL> conn zohar/zohar
Connected.
SQL> select * From tt;
select * From tt
              *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 4, block # 29651)
ORA-01110: data file 4: '/home/oracle/app/oracle/oradata/orcl/users01.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option

נוצרה בעיה – הטבלה הייתה ב-no logging אז המידע בה לא נכנס ל-archive logs ולכן לא עבר ל-standby. זה אומר שהמידע שלה לא תקין. מבחינת בסיס הנתונים הבלוקים של הטבלה הזו הם soft corrupted – כלומר יש שם מיני corruption אבל כזה שניתן לתקן באמצעות truncate table  פשוט:

SQL> truncate table tt;

Table truncated.

SQL> select * from tt;

no rows selected

שווה לציין שגם ב-alert log יצויין שהיה לנו corruption (וזה ירשם גם ב-ADR):

[[email protected] trace]$ adrci

ADRCI: Release 11.2.0.2.0 - Production on Mon Feb 23 16:06:28 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/home/oracle/app/oracle"
adrci> show homes
ADR Homes: 
diag/rdbms/orcl/orcl
adrci> set home diag/rdbms/orcl/orcl
adrci> show incidents

ADR Home = /home/oracle/app/oracle/diag/rdbms/orcl/orcl:
*************************************************************************
INCIDENT_ID          PROBLEM_KEY                                                 CREATE_TIME                              
-------------------- ----------------------------------------------------------- ---------------------------------------- 
219969               ORA 1578                                                    2015-02-23 15:44:11.243000 +02:00       
219970               ORA 1578                                                    2015-02-23 15:44:13.294000 +02:00       
2 rows fetched

סיכום

ראינו שאי שימוש ב-force logging עלול ליצור לנו בעיה של corruptions. לא מדובר פה במשהו יחודי ל-data guard – גם גיבוי אינקרמנטלי או כל גלגול של archive-ים יצור לנו את אותה הבעיה ולכן חשוב מאוד שנבין מה המשמעות של שימוש ב-no logging.

אם אנחנו מודעים באופן מלא למשמעות של השימוש ב-no logging ומוכנים לאבד את הנתונים במידה ונבצע שחזור (או במקרה שלנו switchover) אין שום בעיה להמשיך ולעבוד ככה. מה שחשוב זה להבין את המשמעות.

0 תגובות

השאירו תגובה

Want to join the discussion?
Feel free to contribute!

השאר תגובה

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