2008-09-18 9 views
33
  • मैं एक Oracle डाटाबेस बैकअप फ़ाइल (.dmp) expdp से बनाया गया था कि है।
  • .dmp फ़ाइल एक संपूर्ण डेटाबेस का निर्यात था।
  • मुझे इस डंप फ़ाइल के भीतर से 1 स्कीमा को पुनर्स्थापित करने की आवश्यकता है।
  • मुझे इस डंप फ़ाइल के अंदर स्कीमा के नाम नहीं पता हैं।
  • डेटा आयात करने के लिए impdp का उपयोग करने के लिए मुझे लोड करने के लिए स्कीमा का नाम चाहिए।

तो, मुझे .dmp फ़ाइल का निरीक्षण करने और इसमें सभी स्कीमा सूचीबद्ध करने की आवश्यकता है, मैं यह कैसे कर सकता हूं?कैसे एक Oracle डाटा पम्प निर्यात अंदर स्कीमा निर्धारित करने के लिए दायर


अद्यतन (2008-09-18 13:02) - अधिक विस्तृत जानकारी:

impdp आदेश मैं का उपयोग कर मौजूदा कर रहा हूँ है:

impdp user/[email protected] directory=DPUMP_DIR 
     dumpfile=EXPORT.DMP logfile=IMPORT.LOG 

और DPUMP_DIR है सही ढंग से विन्यस्त।

SQL> SELECT directory_path 
2 FROM dba_directories 
3 WHERE directory_name = 'DPUMP_DIR'; 

DIRECTORY_PATH 
------------------------- 
D:\directory_path\dpump_dir\ 

और हाँ, निर्यात। डीएमपी फ़ाइल उस फ़ोल्डर में बरकरार है।

मैं जब मैं चलाने impdp आदेश है त्रुटि संदेश:

Connected to: Oracle Database 10g Enterprise Edition ... 
ORA-31655: no data or metadata objects selected for job 
ORA-39154: Objects from foreign schemas have been removed from import 

यह त्रुटि संदेश ज्यादातर की उम्मीद है। मैं जरूरत impdp आदेश हो:

impdp user/[email protected] directory=DPUMP_DIR dumpfile=EXPORT.DMP 
     SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA 

कि, मैं स्रोत स्कीमा की जरूरत है ऐसा करने के लिए लेकिन।

उत्तर

11

यदि आप एक संपादक के साथ डीएमपी फ़ाइल खोलते हैं जो बड़ी फ़ाइलों को संभाल सकता है, तो आप उन क्षेत्रों का पता लगाने में सक्षम हो सकते हैं जहां स्कीमा नामों का उल्लेख किया गया है। बस कुछ भी नहीं बदला सुनिश्चित करें। यदि आप मूल डंप की एक प्रति खोले तो यह बेहतर होगा।

+0

मेरे लिए काम किया 100% – theo231022

5

मान लीजिए कि आपके पास पहली जगह फ़ाइल उत्पन्न करने वाले एक्सपैड जॉब से लॉग फ़ाइल नहीं है, तो शायद सबसे आसान विकल्प SQLFILE parameter का उपयोग करना होगा ताकि डीडीएल की फाइल उत्पन्न हो सके (पूर्ण आयात के आधार पर)। फिर आप उस फ़ाइल से स्कीमा नामों को पकड़ सकते हैं। आदर्श रूप से आदर्श नहीं है, क्योंकि impdp को डीडीएल निकालने के लिए पूरी डंप फ़ाइल को पढ़ना पड़ता है और फिर फिर से उस स्कीमा को प्राप्त करने के लिए आपको अपनी रुचि रखने के लिए, और आपको विभिन्न CREATE USER कथनों की खोज करने के लिए कुछ टेक्स्ट फ़ाइल करना पड़ता है , लेकिन यह करने योग्य होना चाहिए।

+0

मैंने SQLFILE पैरामीटर का उपयोग करने का प्रयास किया था, लेकिन यह .sql आउटपुट फ़ाइल में एक पंक्ति के साथ विफल रहा: "- कनेक्ट करें MYSCHEMA"। मुझे लगता है कि यह काम करने के थोड़ा और प्रयास के साथ, यह समाधान पैदा कर सकता था। – KyleLanser

9

अद्यतन (2008/09/19 10:05) - समाधान:

मेरे समाधान: सोशल इंजीनियरिंग, मैं असली मुश्किल खोदा और कोई है जो स्कीमा नाम पता था कि पाया।
तकनीकी समाधान: .dmp फ़ाइल की खोज स्कीमा नाम उत्पन्न करती है।
एक बार मुझे स्कीमा नाम पता था, मैंने डंप फ़ाइल की खोज की और उसे यह कहां सीखा।

स्कीमा नाम स्थान पर देखा गया था।DMP फ़ाइल:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> यह प्रत्येक तालिका नाम/परिभाषा से पहले देखा गया था।

  • SCHEMA_LIST 'SOURCE_SCHEMA' यह .dmp के अंत के पास देखा गया था।

दिलचस्प बात यह SCHEMA_LIST 'SOURCE_SCHEMA' खंड के आसपास है, यह भी आदेश डंप बनाने के लिए इस्तेमाल लाइन का इस्तेमाल किया निर्देशिका, बराबर उपयोग की गई फ़ाइलों, खिड़कियां संस्करण उस पर चलाया गया था था, और निर्यात सत्र सेटिंग (भाषा, तिथि प्रारूप)।

तो, समस्या हल हो :)

68

impdp फाइल में एक dmp बैकअप का निर्यात करता है DDL अगर आप SQLFILE parameter का उपयोग करें। उदाहरण के लिए, एक पाठ फ़ाइल

impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt 

में डाल तो टेबलस्पेस, उपयोगकर्ताओं, और बैकअप में स्कीमा के लिए ddl_dump.txt की जाँच करें।

प्रलेखन के अनुसार, यह वास्तव में डेटाबेस को संशोधित नहीं करता है:

एसक्यूएल वास्तव में निष्पादित नहीं है, और लक्ष्य प्रणाली अपरिवर्तित रहता है।

+10

उत्सुक क्यों डाउनवोट, मैंने सचमुच स्कीमा निर्धारित करने के लिए कई बार इस विधि का उपयोग किया है, और यह "सोशल इंजीनियरिंग" के अन्य उत्तरों की तुलना में बहुत आसान है या "एक डीएमपी के आसपास खोदना " –

+4

कौन इसे कम करेगा? यह मुझे एक विशाल डंप पार्स करने की कोशिश से बचाया। – sreimer

+0

शायद उन्हें "ओआरए -39145: निर्देशिका ऑब्जेक्ट पैरामीटर निर्दिष्ट किया जाना चाहिए और गैर-शून्य" –

4

एक एसक्यूएलफ़ाइल बनाने के लिए impdp कमांड चला रहा है, तो आपको इसे ऐसे उपयोगकर्ता के रूप में चलाने की आवश्यकता होगी जिसमें DATAPUMP_IMP_FULL_DATABASE भूमिका हो।

या ... इसे कम विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में चलाएं और MASTER_ONLY = YES विकल्प का उपयोग करें, फिर मास्टर टेबल का निरीक्षण करें। जैसे

select value_t 
from SYS_IMPORT_TABLE_01 
where name = 'CLIENT_COMMAND' 
and process_order = -59; 

col object_name for a30 
col processing_status head STATUS for a6 
col processing_state head STATE for a5 
select distinct 
    object_schema, 
    object_name, 
    object_type, 
    object_tablespace, 
    process_order, 
    duplicate, 
    processing_status, 
    processing_state 
from sys_import_table_01 
where process_order > 0 
and object_name is not null 
order by object_schema, object_name 
/

http://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/oow2011_dp_mastering.pdf

2

मेरे समाधान (एक यूनिक्स बॉक्स पर) (KyleLanser के जवाब के समान):

strings dumpfile.dmp | grep SCHEMA_LIST 
3

चरण 1: यहाँ एक सरल उदाहरण है। आपको SQLFILE विकल्प का उपयोग कर डंप फ़ाइल से SQL फ़ाइल बनाना है।

चरण 2: Grep उत्पन्न एसक्यूएल फ़ाइल में CREATE USER (यहाँ tables.sql)

यहाँ उदाहरण के लिए:

$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp logfile=imp_exp_user1_tab sqlfile=tables.sql 

आयात: रिलीज 11.2.0.3.0 - पर शुक्र अप्रैल उत्पादन 26 08:29:06 2013

कॉपीराइट (सी) 1 9 82, 2011, ओरेकल और/या इसके सहयोगी। सर्वाधिकार सुरक्षित।

प्रयोक्ता नाम:/sysdba के रूप में

प्रसंस्करण ऑब्जेक्ट प्रकार SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA नौकरी "SYS"।"SYS_SQL_FILE_FULL_01" सफलतापूर्वक 08:29:12

$ grep "CREATE USER" tables.sql 

में पूरा उपयोगकर्ता बनाएं "USER1" के आधार पर मानों पहचान 'एस: 270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103' datapump विकल्पों में से

लॉट यहाँ समझाया http://www.acehints.com/p/site-map.html

0

आपको OWNER_NAME की खोज करने की आवश्यकता है।

cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u 

cat -v डंपफाइल को दृश्यमान पाठ में बदल दें।

ग्रेप -ओ केवल मैच से पता चलता तो हम वास्तव में लंबी लाइनों

uniq -u डुप्लिकेट लाइनों को हटा ताकि आप कम उत्पादन को देखने नहीं दिख रहा।

यह बड़ी डंप फ़ाइलों पर भी बहुत अच्छी तरह से काम करता है, और एक स्क्रिप्ट में उपयोग के लिए tweaked किया जा सकता है।