בעיה ב-Imp בסביבת 11gR2 בגלל התכונה deferred_segment_creation - ilDBA Portal

בעיה ב-Imp בסביבת 11gR2 בגלל התכונה deferred_segment_creation

30/12/2010 | פורסם על ידי

ברשומה זו אספר לכם על בעיה שנתקלתי בה בסביבת 11gR2 בעקבות תכונה חדשה – Deferred Segment Creation.

מי שעוד לא מכיר את התכונה החדשה בגרסת 11gR2, מוזמן לקפוץ לסרטון באתר המסביר עליה:

התכונה החדשה הזו גורמת לטבלאות ריקות (ללא שורות) בבסיס הנתונים להיווצר ללא Segment (גם האובייקטים הנלווים לטבלה כמו אינדקסים ו-lob segments ייווצרו ללא segments), עד אשר השורה הראשונה תיכנס לטבלה. לתכונה יש כל מיני יתרונות, כאשר היתרון המרכזי הוא חיסכון של הרבה מקום ב-DB.

לאחרונה נתקלתי אצל מספר לקוחות שעברו לעבוד בסביבת 11gR2 בבעיות שנבעו מאותה תכונה חדשה שמופעלת בבסיסי הנתונים כברירת מחדל (הפרמטר deferred_segment_creation = True בעת התקנת DB חדש).

אותם לקוחות משתמשים בצורה תדירה עם export/import (לא data pump) לצורך ייצוא וייבוא של סכמות האפליקציה בזמן הפיתוח.

הגיעה אלי תלונה שביצוע import רגיל וסטנדרטי שנעשה כבר עשרות פעמים בעבר פתאום נכשל.
הוא הראה לי שלמרות פעולת ה-Export הסתיימה בצורה חלקה וללא שגיאות, ה-Import נכשל.

הודעות השגיאה בקובץ הלוג של ה-import הצביעו על שגיאות בעת יצירת Foreign-keys לטבלאות. יצירת ה-constraint נכשל בגלל שהטבלה שאליה מצביעים לא הייתה קיימת.

דוגמא לשגיאות בקובץ הלוג של פעולת ה-import:

IMP-00017: following statement failed with ORACLE error 942:
"ALTER TABLE "ENGINEERS" ADD CONSTRAINT "FK_27_250_" FOREIGN KEY ("COMP"
"ANY") REFERENCES "COMPANIES" ("KEY") ENABLE NOVALIDATE"
IMP-00003: ORACLE error 942 encountered
ORA-00942: table or view does not exist
IMP-00017: following statement failed with ORACLE error 942:
"ALTER TABLE "TASKS" ADD CONSTRAINT "FK_63_60_" FOREIGN KEY ("CUSTOMERR"
"EFERENCE") REFERENCES "CUSTOMERS" ("KEY") ENABLE NOVALIDATE"
IMP-00003: ORACLE error 942 encountered
ORA-00942: table or view does not exist

עיון מעמיק יותר בקובץ הלוג של ה-Export העלה שפעולת ה-Export לא ייצאה את כל אותן טבלאות שהיו מעורבות בשגיאות בקובץ הלוג.

זה היה מאוד מוזר, כי ב-DB המקור הטבלאות הללו היו קיימות.

בגלל שבדיוק שבוע לפני כן הכנתי את הסרטון שמסביר על התכונה Deferred segment Creation עלתה בי מחשבה שיכול להיות קשר בין הדברים, ואכן כך היה.

כאמור, כאשר התוכנה הזו פעילה ב-DB, כאשר נוצרות טבלאות ריקות ב-DB, יצירת ה-Segment שלהן מושהה עד אשר השורה הראשונה נכנסת לטבלה.

פעולת ה-Export מדלגת על טבלאות שאין להם סגמנטים ב-DB ולא מייצאת אותן.

דוגמא של התקלה:

ניכנס כ-SYS ונבדוק אם התכונה מופעלת בDB.

SQL> conn / as sysdba
Connected.

SQL> show parameter def
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation            boolean     TRUE

ניצור יוזר לצורך ההדגמה.

SQL> create user test identified by test;
User created.
SQL> grant resource, connect  to test;
Grant succeeded.

נתחבר עם היוזר וניצור טבלה ללא שורות

SQL> conn test/test
Connected.

SQL> create table TableWithNoRows (name varchar2(10));
Table created.

SQL> select count(*) from TableWithNoRows;

COUNT(*)
----------
0

SQL> exit

נייצא את הסכמה עם exp

C:\Users\Roni>exp test/test file=c:\TableWithNoRows.dmp log=c:\TableWithNoRows.log owner=test
Export: Release 11.2.0.1.0 - Production on Thu Dec 30 14:27:19 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Real Application Testing options
Export done in WE8MSWIN1252 character set and UTF8 NCHAR character set
server uses IW8ISO8859P8 character set (possible charset conversion)
. exporting pre-schema procedural objects and actions
. exporting foreign function library names for user TEST
. exporting PUBLIC type synonyms
. exporting private type synonyms
. exporting object type definitions for user TEST
About to export TEST's objects ...
. exporting database links
. exporting sequence numbers
. exporting cluster definitions
. about to export TEST's tables via Conventional Path ...
. exporting synonyms
. exporting views
. exporting stored procedures
. exporting operators
. exporting referential integrity constraints
. exporting triggers
. exporting indextypes
. exporting bitmap, functional and extensible indexes
. exporting posttables actions
. exporting materialized views
. exporting snapshot logs
. exporting job queues
. exporting refresh groups and children
. exporting dimensions
. exporting post-schema procedural objects and actions
. exporting statistics
Export terminated successfully without warnings.

כמו שניתן לראות, ה-Export הסתיים ללא תקלות, אבל בפועל, הטבלה לא יוצאה.  ניכנס לDB בתור יוזר TEST ונזרוק את הטבלה. לאחר מכן ננסה לייבאה מחדש. מקובץ הexport:

C:\Users\Roni>sqlplus test/test
SQL*Plus: Release 11.2.0.1.0 Production on Thu Dec 30 14:31:36 2010Copyright (c) 1982, 2010, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Real Application Testing options

SQL> drop table TableWithNoRows;
Table dropped.

SQL>exit

C:\Users\Roni>imp '"/ as sysdba"' file=c:\TableWithNoRows.dmp log=c:\TableWithNoRows.log fromuser=test touser=test

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Real Application Testing options
Export file created by EXPORT:V11.02.00 via conventional path

Warning: the objects were exported by TEST, not by you
import done in WE8MSWIN1252 character set and UTF8 NCHAR character set
import server uses IW8ISO8859P8 character set (possible charset conversion)
importing TEST's objects into TEST
Import terminated successfully without warnings.

נתחבר ליוזר ובאמת נראה שלא יובאה הטבלה….

C:\Users\Roni>sqlplus test/test

SQL*Plus: Release 11.2.0.1.0 Production on Thu Dec 30 14:35:47 2010
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining
and Real Application Testing options

SQL> select * from user_tables;
no rows selected

מה הפיתרון ?

  1. לעבור להשתמש ב-Expdp/Impdp. הדור החדיש יותר של תוכנת הייבוא/ייצוא הותיקה מתמודד עם טבלאות חסרות סגמנטים ומייצא אותם.
  2. לבטל את התכונה ב-DB על ידי הרצת הפקודה:

<

p style="text-align: left;">

Alter system set deferred_segment_creation=False;

לאחר ביטול התכונה, מעתה והלאה כל הטבלאות הריקות שיווצרו ב-DB ייצרו יחד עם כל הסגמנטים שלהן (התנהגות מוכרת בסביבות קודמות ל- 11gR2).

עם זאת, יש לציין שטבלאות קיימות לא ישתנו ובמידה ואין להן שורות, עדיין לא יהיה להן סגמנטים.

ה-Note הבא ב-Metalink מכיל מידע נוסף בנושא: 960216.1
נ.ב
אמנם זה לא קשור ישירות לבעיה שתוארה לעיל, אך חשוב לאמר שה-Import utility עדיין נתמך, אך השימוש ב-Export utility אינו נתמך יותר בגרסת 11.2. רק Import/ Export Datapump נתמכים במלואם.
ציטוט מהתיעוד:
Original Export is desupported for general use as of Oracle Database 11g. The only supported use of original Export in Oracle Database 11g is backward migration of XMLType data to Oracle Database 10g release 2 (10.2) or earlier .

3 תגובות ל- “בעיה ב-Imp בסביבת 11gR2 בגלל התכונה deferred_segment_creation”

דוד יצחק | 11/01/2011 בשעה 04:53
commenter

אגב אם מנסים לייבא מ- oracle 10 ל- Oracle 11R2 מקבלים את הודעת השגיאה הבאה :
IMPDP SYSTEM/xxxxx DIRECTORY=dpdata1 DUMPFILE=USER_DEV.DMP LOGFILE=USER_DEV.LOG REMAP_SCHEMA=USER1_DEV:USER_DEV SCHEMAS=USER1_DEV
Import: Release 11.2.0.2.0 – Production on Sun Jan 9 16:13:46 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 – 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
ORA-39002: invalid operation
ORA-31694: master table "SYSTEM"."SYS_IMPORT_SCHEMA_01" failed to load/unload
ORA-02354: error in exporting/importing data
ORA-39776: fatal Direct Path API error loading table "SYSTEM"."SYS_IMPORT_SCHEMA_01"
ORA-00600: internal error code, arguments: [klaprs_75], [1171], [], [], [], [], [], [], [], [], [], []
הנושא בטיפול מול תמיכת Oracle
דוד יצחק

דוד יצחק | 27/01/2011 בשעה 02:49
commenter

אחת הבעיות הכואבות היא יצוא יבוא של נתונים ספטיאלים בין instances שונים של oracle . בקרוב כמה טיפים .

דוד יצחק | 20/02/2011 בשעה 07:45
commenter

10. יבוא ויצוא נתונים ספטיאלים

ביצוע יצוא ויבוא של נתונים יעשה ע"י expdp ו- impdp בהתאמה שהינם utilities חדשים של Oracle 10G . ל- utilities הללו יתרונות רבים לעומת ה- Export וה- Import הישנים . לא אפרט אותם כאן . פירוט מלא ניתן למצוא בספרות של Oracle .

שימוש ב- expdp ו- impdp לצורך יצוא ויבוא נתונים יעשה כאשר נרצה להעביר סכימה עם אובייקטים גיאוגרפיים בן Oracle Database גרסאות 10.2.0.4 ל-10.2.0.4 בלבד ומעלה.

שימוש ב- exp ו- imp , שהינם ה- utilities הישנים, יעשה לצורך יצוא ויבוא נתונים עם אובייקטים גיאוגרפיים בן Oracle Database גרסאות 10.2.0.3 ל- 10.2.0.4 , אן בן Oracle database גרסה 10.2.0.3 ל- 10.2.0.3 בלבד כפי שנתקלנו אצל לקוחות .

אני מדגים את חלק מהמצבים להלן .

בדוגמא הבאה אני מייבא את המשתמש user_new למשתמש user_prod (REMAP_SCHEMA) . אני מייבא את הסכימה של user_new מה- tablspace הבאים: USER_OPR_TS , USER_TEST_TS ל- tablespace בשם USER_PROD_TS.

impdp userid=dev_admin/xxxxx directory=dpdata1 REMAP_TABLESPACE=USER_OPR_TS:USER_PROD_TS,USER_TEST_TS:USER_PROD_TS REMAP_SCHEMA=USER_new:user_prod dumpfile=RECCE_M_DUMP_23_10_08.DMP logfile=imp.log
הנתונים מכילים מידע גיאוגרפי . בגרסת Oracle 10.2.0.3 קיבלנו הודעות שגיאה מסוג כאשר השתמשנו ב- impdp :
ORA-02354: error in exporting/importing data
ORA-26065: check constraint cannot reference column, SYS_NC00009$, in diprojt path load

ORA-31693: Table data object "user_table_PROD"."proj_SCAN_TABLE " failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-26065: check constraint cannot reference column, SYS_NC00009$, in diprojt path load
ORA-31693: Table data object "user_table_PROD"."proj_TARGET" failed to load/unload and is being skipped due to
error:
ORA-02354: error in exporting/importing data
ORA-26065: check constraint cannot reference column, SYS_NC00008$, in diprojt path load
ORA-31693: Table data object "user_table_PROD"."proj_TABLE " failed to load/unload and is being skipped
due to error:
ORA-02354: error in exporting/importing data
ORA-26065: check constraint cannot reference column, SYS_NC00008$, in diprojt path load

הפתרון של תמיכת Oracle היה שדרוג לגרסה 10.2.04 שם היבוא עובד ללא תקלות (ראה SR 7244282.992) .פתרון נוסף ללא צורך בשדרוג הוא להשתמש ב- exp ן- imp (ולא data pump) באופן הבא עבור המשתמש USER_OPR . יצא את הנתונים ע"י exp . הקפד להשתמש בפרמטר statistics=none . אחרת בעת יבוא הנתונים יכשל בגלל " questionable statistics " .
exp system/xxxxx file=d:\temp\d.dmp owner=USER_OPR log=d.log statistics=none

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

Baruch Osoveskiy

תיקון מהיר לדיסק איטי

  רציתי לשתף אתכם בתקלה שהיתה לי ובפיתרון שלה. לפעמים אני רוצה לבדוק גירסה חדשה או יכולת שלא מתועדת מספיק בספרות, ואז אני מסתפק בהקמה של סביבה ווירטואלית בדרך כלל על חומרה זולה (לפעמים זולה [...]
OS

OS Background operations

אורי לרנר בטיפ קצר ושימושי על העברת פעולות לרקע במערכת [...]
רשימת

רשימת הפיצ'רים החדשים של אורקל 12.1

אורקל פרסמו את הספרות הרשמית לגרסה 12.1 שיצאה לאחרונה וזמינה להורדה. בין שאר הספרים (החשובים כל אחד שלעצמו), פורסם הספר המסקרן ביותר בעיני – Oracle Database 12c Release 1 (12.1) New Features. זהו ספר שראוי שכל DBA [...]
גרסת

גרסת אורקל 12c זמינה להורדה

בשעה טובה ולאחר המתנה סופר ארוכה, גרסת אורקל 12c (גרסה 12.1) זמינה סוף סוף להורדה רשמית מהאתר של אורקל. הגרסה החדשה מנסה לתת פתרונות לעולם ה"ענן" – ומוסיפה פיצ'רים חדשים שבאים לתת מענה בדיוק [...]
Copyright 2019 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: