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

ORA-29285 कैसे हल करें:फ़ाइल लिखने में त्रुटि

ORA-29285:फ़ाइल लेखन त्रुटि उन त्रुटियों में से एक है जो oracle डेटाबेस में फ़ाइल प्रबंधन कार्य करते समय हो सकती है

फाइल हैंडलिंग ऑपरेशन ऑपरेटिंग सिस्टम पर एक नई फाइल बना रहे हैं, इसे अपडेट या संशोधित कर रहे हैं। इस फ़ंक्शन का उपयोग अक्सर PLSQL में फ़ाइल हेरफेर के लिए किया जाता है

ORA-29285 के कारण और समाधान

(1) यूनिक्स/लिनक्स फाइल सिस्टम जहां आप फाइल लिख रहे हैं, वह पूर्ण है, अर्थात इसका 100% उपयोग किया जाता है।

df -h /u500

/u500  100 0

declare
fileHandler UTL_FILE.FILE_TYPE;
begin
fileHandler := UTL_FILE.FOPEN('/u500', 'tech', 'W');
UTL_FILE.PUT_LINE(fileHandler, 'This is the file for test');
UTL_FILE.FCLOSE(fileHandler);
end;
/

DECLARE
*
ERROR at line 1:
ORA-29285: file write error
ORA-06512: at "SYS.UTL_FILE", line 4
ORA-06512: at "SYS.UTL_FILE", line 1169
ORA-06512: at line 6

संकल्प

/u500 में जगह खाली करें और हम फिर से PLSQL ब्लॉक की जांच कर सकते हैं

तो मूल रूप से आपको उपयोग की जा रही फ़ाइल सिस्टम में अनावश्यक फ़ाइलों को साफ़ करने की आवश्यकता है। कृपया सुनिश्चित करें कि आप वर्तमान में उपयोग में आने वाली किसी भी फाइल को नहीं हटाते हैं। यदि आप कोई सक्रिय फाइल हटाते हैं, तो स्थान खाली नहीं होगा

df -h /u500

/u500  80 20

declare
fileHandler UTL_FILE.FILE_TYPE;
begin
fileHandler := UTL_FILE.FOPEN('/u500', 'tech', 'W');
UTL_FILE.PUT_LINE(fileHandler, 'This is the file for test');
UTL_FILE.FCLOSE(fileHandler);
end;
/
  2    3    4    5    6
PL/SQL procedure successfully completed.

(2) जब कोई फ़ाइल FOPEN द्वारा खोली जाती है, जब तक कि MAX_LINESIZE पैरामीटर के लिए कोई मान निर्दिष्ट नहीं किया जाता है, तो यह डिफ़ॉल्ट रूप से 1024 हो जाएगा। इसलिए यह त्रुटि तब भी होती है जब आप लाइन में 1024 से अधिक वर्ण डाल रहे हों

DECLARE
  file_name VARCHAR2(256) := 'test.lst';
  file_text VARCHAR2(100) := '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890....<2000 character>';
  file_id UTL_FILE.file_type;
BEGIN
  file_id := UTL_FILE.fopen('/tmp', file_name, 'W');
  UTL_FILE.put_line(file_id, file_text);
  UTL_FILE.fclose(file_id);

END;
/
DECLARE
*
ERROR at line 1:
ORA-29285: file write error
ORA-06512: at "SYS.UTL_FILE", line 2
ORA-06512: at "SYS.UTL_FILE", line 1169
ORA-06512: at line 6

संकल्प

हम अधिकतम लाइन आकार निर्दिष्ट करके इस त्रुटि को रोक सकते हैं

DECLARE
file_name VARCHAR2(256) := 'test.lst';
file_text VARCHAR2(100) := '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890....<2000 character>';
file_id UTL_FILE.file_type;
BEGIN
file_id := UTL_FILE.fopen('/tmp', file_name, 'W',5000);
UTL_FILE.put_line(file_id, file_text);
UTL_FILE.fclose(file_id);

END;
/

2 3 4 5 6 PL/SQL procedure successfully completed.

MAX_LINESIZE पैरामीटर 32767 तक हो सकता है। यदि आपके पास 32K से अधिक लंबी लाइनें हैं तो डेटा को बाइनरी के रूप में लिखा जाना चाहिए।

(3)  यह त्रुटि तब हो सकती है जब UTL_FILE.PUT_LINE को बार-बार लूप में कॉल करते समय 1024 वर्णों से अधिक संचयी रूप से लिखते समय। कारण गलत है ORA_NLS10 की सेटिंग या चर ORA_NLS10 सेट नहीं है

उदाहरण

unset ORA_NLS10

sqlplus / as sysdba

shutdown immediate

startup

sqlplus "/ as sysdba"

DECLARE
file_name VARCHAR2(256) := 'test.lst';
file_text VARCHAR2(100) := '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
file_id UTL_FILE.file_type;
BEGIN
file_id := UTL_FILE.fopen('/tmp', file_name, 'W');
FOR x IN 1..11 LOOP -- write 11 records
UTL_FILE.put_line(file_id, file_text);
END LOOP;

UTL_FILE.fclose(file_id);

END;

/

ORA-29285: file write error

संकल्प

कृपया सुनिश्चित करें कि ORA_NLS10 ऑरैकल डेटाबेस और श्रोता परिवेश में सेट है

ORACLE_SID=TEST

ORA_NLS10=< >

sqlplus / as sysdba

shutdown

immediate

startup

lsnrctl stop TEST

lsnrctl start TEST

sqlplus / as sysdba

DECLARE
file_name VARCHAR2(256) := 'test.lst';
file_text VARCHAR2(100) := '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
file_id UTL_FILE.file_type;
BEGIN
file_id := UTL_FILE.fopen('/tmp', file_name, 'W');
FOR x IN 1..11 LOOP -- write 11 records
UTL_FILE.put_line(file_id, file_text);
END LOOP;

UTL_FILE.fclose(file_id);

END;

/

PL/SQL procedure successfully completed.

मुझे उम्मीद है कि आपको ORA-29285 पर यह विस्तृत पोस्ट पसंद आई होगी। कृपया इसे पसंद करें और प्रतिक्रिया दें

संबंधित लेख
ORA-29280:अमान्य निर्देशिका पथ
ORA-29283 :अमान्य फ़ाइल संचालन
ORA-00942 तालिका या दृश्य मौजूद नहीं है
ORA-29913
Oracle ऐप्स में FND_FILE
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e29250.htm


  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. मैं इस त्रुटि को कैसे ठीक कर सकता हूं:गैर समर्थित SQL92?

  3. लिफाफा प्राप्त करें। यानी ओवरलैपिंग टाइम स्पैन

  4. oci8.so को Ubuntu सर्वर 17.04 php 7 और apache2 के साथ लोड करने में त्रुटि

  5. ओरेकल में राउनम की तरह मैसकल में पंक्ति संख्या प्राप्त करने का कोई तरीका है?