मैं आपको एक नियंत्रण फ़ाइल का एक उदाहरण दिखाता हूँ जिसका उपयोग मैं एक बहुत बड़ी फ़ाइल लोड करने के लिए करता हूँ (प्रत्येक दिन 120 मिलियन रिकॉर्ड)
OPTIONS (SKIP=0, ERRORS=500, PARALLEL=TRUE, MULTITHREADING=TRUE, DIRECT=TRUE, SILENT=(ALL))
UNRECOVERABLE
LOAD DATA
CHARACTERSET WE8ISO8859P1
INFILE '/path_to_your_file/name_of_the_file.txt'
BADFILE '/path_to_your_file/name_of_the_file.bad'
DISCARDFILE '/path_to_your_file/name_of_the_file.dsc'
APPEND
INTO TABLE yourtablename
TRAILING NULLCOLS
(
COLUMN1 POSITION(1:4) CHAR
,COLUMN2 POSITION(5:8) CHAR
,COLUMN3 POSITION(9:11) CHAR
,COLUMN4 POSITION(12:18) CHAR
....
....)
कुछ विचार
- यह हमेशा सीमांकक का उपयोग करने की तुलना में स्थिति के अनुसार तेजी से लोड हो रहा है
PARALLELके विकल्पों का उपयोग करें ,MULTITHREADINGऔरDIRECTलोडिंग प्रदर्शन को अनुकूलित करने के लिए।UNRECOVERABLEयह भी एक अच्छी सलाह है यदि डेटाबेस को पुनर्प्राप्त करने के लिए आपको हमेशा फ़ाइल की आवश्यकता होती है, तो आपको डेटा को फिर से लोड करना होगा।- उपयुक्त वर्ण सेट का प्रयोग करें।
- ट्रेलिंग NULLCOLS क्लॉज SQL*Loader को बताता है कि रिकॉर्ड में मौजूद किसी भी अपेक्षाकृत स्थित कॉलम को नल कॉलम के रूप में माना जाए।
- स्थिति का अर्थ है कि प्रत्येक पंक्ति में बिना किसी सीमांक के डेटा होता है, इसलिए आप तालिका में प्रत्येक फ़ील्ड की स्थिति को लंबाई से जान सकते हैं।
AAAAABBBBBBCCCCC19828733UUUU
- यदि आपकी txt या csv फ़ाइल में फ़ील्ड सेपरेटर है, मान लें कि अर्धविराम, तो आपको
FIELDS DELIMITED BYका उपयोग करना होगा
इसे एक नियंत्रण फ़ाइल में संग्रहीत किया जाता है, आमतौर पर एक्सटेंशन ctl के साथ एक टेक्स्ट फ़ाइल। फिर आप कमांड लाइन से आह्वान करते हैं
sqlldr userid=youuser/example@sqldat.com_string control=/path_to_control_file/control_file.ctl