Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

बाहरी तालिकाओं के साथ ORA-29913 को कैसे हल करें

ORA-29913 Oracle डेटाबेस में बाहरी तालिकाओं के साथ काम करते समय एक सामान्य त्रुटि है। हम विभिन्न तरीकों को देख रहे होंगे कि त्रुटि उत्पन्न की जा सकती है और त्रुटि को हल करने के लिए क्या किया जा सकता है

(1) बाहरी फ़ाइल नहीं मिली या अनुमति गलत है

SQL> select * from Scott.example_external_table;
select * from example_external_table
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file test1.dat in TEST_DIR not found
ORA-06512: at "SYS.ORACLE_LOADER", line 14
ORA-06512: at line 1

तालिका का विश्लेषण करते समय, आपको एक समान संदेश मिलता है:

SQL> निष्पादित sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');
BEGIN sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE'); END;
*
पंक्ति 1 पर त्रुटि:
ORA-29913:ODCIEXTTABLEOPEN कॉलआउट निष्पादित करने में त्रुटि
ORA-29400:डेटा कार्ट्रिज त्रुटि
KUP-04040:फ़ाइल test1 TEST_DIR में .dat नहीं मिला
ORA-06512:"SYS.DBMS_STATS" पर, लाइन 7161
ORA-06512:"SYS.DBMS_STATS" पर, लाइन 7174
ORA-06512:लाइन पर 1

या सामान्य तौर पर

ORA-20011: Approximate NDV failed:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file <file_name> in <directory_name> not found

कारण

बाहरी फ़ाइलों को सही स्थान से स्थानांतरित कर दिया गया है

SQL> select * from dba_directories ;

OWNER DIRECTORY_NAME DIRECTORY_PATH
------ -------------- -----------------------
SYS TEST_DIR /u01/oradata/external_files

बाहरी तालिका से जुड़े फ़ाइल नामों की जाँच करें

select * from dba_external_locations
where table_name='EXAMPLE_EXTERNAL_TABLE';OWNER TABLE_NAME LOCATION DIRECTORY_OWNER DIRECTORY_NAME
----- ------------- -------- --------------- ---------------
SYS EXAMPLE_EXTERNAL_TABLE test1.dat SYS TEST_DIR
SYS EXAMPLE_EXTERNAL_TABLE test2.dat SYS TEST_DIR

अब OS स्तर पर जाँच हो रही है
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
ऐसी कोई फ़ाइल या निर्देशिका नहीं

इसलिए फ़ाइलें सही स्थान पर मौजूद नहीं हैं

उपरोक्त दोनों प्रश्नों को नीचे के रूप में भी जोड़ा जा सकता है

select TABLE_NAME, DIRECTORY_PATH||'/'||LOCATION file_name from DBA_EXTERNAL_LOCATIONS loc, dba_directories dir
where loc.DIRECTORY_OWNER=dir.OWNER
and loc.DIRECTORY_NAME=dir.DIRECTORY_NAME
and loc.OWNER='&1' and loc.TABLE_NAME='&2';

संकल्प:
दोनों फाइलों को मूल स्थान पर वापस ले जाएं

$ mv /u02/oradata/external_files/test2.dat /u01/oradata/external_files
$ mv /u02/oradata/external_files/test1.dat /u01/oradata/external_files

अब
नीचे दिए गए दोनों कथन सफल होंगे

select * from Scott.example_external_table;
execute sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');

(2) बाहरी फ़ाइल में गलत डेटा प्रारूप

पंक्ति 1 पर त्रुटि:
ORA-29913:ODCIEXTTABLEFETCH कॉलआउट निष्पादित करने में त्रुटि
ORA-30653:अस्वीकार करने की सीमा पूरी हो गई
ORA-06512:"SYS.ORACLE_LOADER" पर, लाइन 14
ORA-06512:लाइन 1 पर

कारण

(i) बाहरी फ़ाइल में खाली लाइनें हो सकती हैं
(ii) TAB सीमांकक या HEX सीमांकक की जाँच करें

ए। Oracle द्वारा प्रयुक्त TAB सीमांकक '\t', एक HEX मान '09'
b द्वारा दर्शाया जाता है। डेटाफ़ाइल में HEX मान
CREATE कथन
c में निर्दिष्ट HEX मान से मेल खाना चाहिए। क्रिएट स्टेटमेंट में एचईएक्स विनिर्देश 0X'gt;' या 0x''
(iii) जैसा दिखना चाहिए यदि कॉलम बाहरी तालिका में जोड़ा गया है, तो वही होना चाहिए बाहरी फ़ाइल

संकल्प
लॉग में त्रुटि की जांच करें और तदनुसार समस्या को ठीक करें

(3) नल कॉलम में त्रुटि

पंक्ति 1 पर त्रुटि:
ORA-29913:ODCIEXTTABLEOPEN कॉलआउट निष्पादित करने में त्रुटि
ORA-29400:डेटा कार्ट्रिज त्रुटि
KUP-04043:टेबल कॉलम बाहरी स्रोत में नहीं मिला:

कारण
बाहरी फ़ाइल में अंतिम कॉलम के लिए शून्य मान हैं जो मूल रूप से एक संख्या कॉलम है। जब हम शून्य को संख्या 0 में बदलते हैं, तो क्वेरी सफल होती है।

संकल्प
एक NULL मान लोड करने के लिए, हमें तालिका परिभाषा में ENCLOSED BY delimiter शामिल करना होगा।

न्यूलाइन द्वारा सीमांकित रिकॉर्ड
',' द्वारा समाप्त फ़ील्ड
वैकल्पिक रूप से ' ' द्वारा संलग्न <<<====
अनुपलब्ध फ़ील्ड मान शून्य हैं

(4) ORA-29913 अगर Oracle लॉग फाइल भी नहीं बना पाता है तो भी हो सकता है। तो निर्देशिकाओं की अनुमति के लिए जाँच करें

(5) बाहरी तालिका निर्देशिका त्रुटि
ORA-29913 त्रुटि बाहरी तालिकाओं में भी हो सकती है जब आप निर्देशिका को पढ़ने और लिखने की अनुमति नहीं देते हैं:

डायरेक्टरी एक्सटेंशन को '/u01/oradata/testdir' के रूप में बनाएं या बदलें;
डायरेक्टरी टेस्टडीआईआर पर <यूजर नेम> को ग्रांट रीड करें;
डायरेक्टरी टेस्टडिर पर राइट राइट टू <यूजर नेम>;

यहां बाहरी तालिका के बारे में कुछ अच्छी जानकारी दी गई है, आपको  चेक आउट करना चाहिए

Oracle में बाहरी टेबल क्या हैं?

(1)बाहरी टेबल केवल पढ़ने योग्य टेबल हैं जहां डेटा डेटाबेस के बाहर फ्लैट फाइलों में संग्रहीत किया जाता है

(2) आप बाहरी फाइलों को एक्सेस करने के लिए यूजर एक्सटर्नल टेबल फीचर का इस्तेमाल कर सकते हैं जैसे कि वे डेटाबेस के अंदर टेबल हों।

(3)   जब आप एक बाहरी तालिका बनाते हैं, तो आप इसकी संरचना और स्थान को oracle के साथ परिभाषित करते हैं। मूल रूप से आप केवल मेटाडेटा को ऑरैकल के अंदर संग्रहीत करते हैं

(4) जब आप तालिका को क्वेरी करते हैं, तो ओरेकल बाहरी तालिका को पढ़ता है और परिणाम देता है जैसे कि डेटा डेटाबेस में संग्रहीत किया गया था।

(5) ऑरेकल सर्वर फ्लैट फाइलों को पढ़ने के लिए दो प्रमुख ओरेकल ड्राइवर प्रदान करता है

  • Oracle_loader:इसका उपयोग oracle लोडर तकनीक का उपयोग करके फ़्लैट फ़ाइलों को पढ़ने के लिए किया जाता है। यह मूल रूप से उन फ़ाइलों को पढ़ने की अनुमति देता है जिन्हें sql लोडर तकनीक का उपयोग करके व्याख्या किया जा सकता है
  • Oracle_datapump:इसका उपयोग प्लेटफ़ॉर्म स्वतंत्र प्रारूप का उपयोग करके डेटा के आयात और निर्यात दोनों के लिए किया जाता है

संबंधित लेख
Oracle बाहरी तालिकाएँ :oracle में बाहरी तालिका के उपयोग के बारे में जानकारी के लिए इस पोस्ट को देखें, उदाहरण के साथ, बाहरी तालिका कैसे बनाएं, इसका उपयोग कैसे करें
Oracle तालिका बनाएँ:तालिकाएँ डेटा संग्रहण की मूल इकाई हैं Oracle डेटाबेस में। हम विदेशी कुंजी /प्राथमिक कुंजी
ORA-00936 लापता अभिव्यक्ति के साथ तालिका बनाने के लिए Oracle क्रिएट टेबल कमांड का उपयोग करने के तरीके को कवर करते हैं:Oracle SQL में ORA-00936 लापता अभिव्यक्ति का निवारण सीखें। विभिन्न समाधान क्या हैं, कैसे हम इससे बच सकते हैं, इस त्रुटि के लिए Oracle बग्स
ORA-01017:अमान्य उपयोगकर्ता नाम/पासवर्ड; लॉगऑन अस्वीकृत:ORA-01017 अमान्य उपयोगकर्ता नाम/पासवर्ड के संभावित समाधान को जानें; लॉगऑन अस्वीकृत। अत्यधिक प्रयासों के बिना इसे जल्दी से कैसे हल करें
ORA-00001 अद्वितीय बाधा का उल्लंघन किया गया :ऑरैकल त्रुटि के संभावित समाधान के लिए इस पोस्ट को देखें ORA-00001 अद्वितीय बाधा का उल्लंघन किया गया। इसे कैसे हल करें और इसे ठीक करें
ORA-00911:अमान्य वर्ण:यह पोस्ट ORA-00911 के सामान्य कारणों के लिए है:उदाहरण और संकल्प के साथ ओरेकल में अमान्य चरित्र आपको कार्य पूरा करने में मदद करता है
ORA-00900 :ORA-00900 अमान्य sql स्टेटमेंट के लिए विभिन्न समाधानों के लिए यह पोस्ट। त्रुटि के कारण। कैसे डिबग करें और इसे जल्दी से हल करें,
ORA-03113:संचार चैनल पर फ़ाइल का अंत:ORA को हल करने के लिए विधि की जाँच करें -03113:संचार चैनल पर फ़ाइल का अंत। यह त्रुटि डेटाबेस स्टार्टअप, प्रोग्राम चलाने में हो सकती है
Oracle प्रलेखन

अनुशंसित पाठ्यक्रम

यहाँ Oracle SQL के लिए अच्छा Udemy कोर्स है
Oracle-Sql-Step-by-step :इस कोर्स में बेसिक sql, जॉइन, टेबल बनाना और इसकी संरचना को संशोधित करना, व्यू, यूनियन, यूनियन -ऑल और बहुत कुछ शामिल है। . SQL स्टार्टर के लिए एक बढ़िया कोर्स और अनिवार्य कोर्स
पूर्ण Oracle SQL प्रमाणन पाठ्यक्रम :यह उन लोगों के लिए एक अच्छा कोर्स है जो SQL डेवलपर कौशल के लिए नौकरी के लिए तैयार होना चाहते हैं। एक अच्छा समझाया गया कोर्स
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql डेवलपर टूल का उपयोग कई डेवलपर्स द्वारा किया जा रहा है। यह कोर्स हमें प्रभावी ढंग से इसका उपयोग करने और एक उत्पादक sql डेवलपर बनने के तरीके के बारे में ट्रिक्स और सबक देता है
Oracle SQL प्रदर्शन ट्यूनिंग मास्टरक्लास 2020 :प्रदर्शन ट्यूनिंग एक महत्वपूर्ण और सर्वाधिक मांग वाला कौशल है। इसके बारे में जानने और sql प्रदर्शन ट्यूनिंग शुरू करने के लिए यह एक अच्छा कोर्स है


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में बूलियन फील्ड

  2. R12.2 संस्करण निर्धारण और सेटअप

  3. Oracle का उपयोग करके Django में स्वचालित परीक्षण बनाते समय ORA-65096 त्रुटि को ठीक करना

  4. oracle sql में ज्वाइन कीवर्ड और इनर जॉइन कीवर्ड में क्या अंतर है?

  5. इकाई फ्रेमवर्क के साथ ऑरैकल पैकेज के अंदर संग्रहीत प्रक्रिया को कैसे कॉल करें?