ORA-29285:lỗi ghi tệp là một trong những lỗi có thể mắc phải khi thực hiện thao tác xử lý tệp trong cơ sở dữ liệu oracle
Các thao tác xử lý tệp là tạo một tệp mới trên Hệ điều hành, cập nhật hoặc sửa đổi tệp đó. Hàm này được sử dụng khá thường xuyên trong PLSQL để thao tác với tệp
Lý do và giải pháp cho ORA-29285
(1) Hệ thống tệp Unix / Linux nơi bạn đang ghi tệp đã đầy đủ i, e nó được sử dụng 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
Độ phân giải
Giải phóng dung lượng trong / u500 và chúng tôi có thể kiểm tra lại khối PLSQL
Vì vậy, về cơ bản bạn cần xóa các tệp không cần thiết trong hệ thống tệp đang được sử dụng. Hãy đảm bảo rằng bạn không xóa bất kỳ tệp nào hiện đang được sử dụng. Nếu bạn xóa bất kỳ tệp nào đang hoạt động, thì dung lượng sẽ không được giải phóng
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) Khi một tệp được FOPEN mở trừ khi một giá trị được chỉ định cho tham số MAX_LINESIZE, nó sẽ mặc định là 1024. Vì vậy, lỗi này cũng xảy ra nếu bạn đặt nhiều hơn 1024 ký tự vào dòng
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
Độ phân giải
Chúng tôi có thể ngăn lỗi này bằng cách chỉ định kích thước dòng tối đa
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.
Tham số MAX_LINESIZE có thể lên đến 32767. Nếu bạn có dòng dài hơn 32K thì dữ liệu phải được viết dưới dạng nhị phân.
(3) Lỗi này có thể xảy ra khi Gọi UTL_FILE.PUT_LINE liên tục trong một vòng lặp khi viết tích lũy hơn 1024 ký tự. Nguyên nhân là do Cài đặt ORA_NLS10 không chính xác hoặc biến ORA_NLS10 không được đặt
Ví dụ
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
Độ phân giải
Hãy đảm bảo ORA_NLS10 được đặt trong môi trường trình nghe và cơ sở dữ liệu oracle
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.
Tôi hy vọng bạn thích bài đăng chi tiết này trên ORA-29285. Hãy thích nó và cung cấp phản hồi
Các bài viết có liên quan
ORA-29280:đường dẫn thư mục không hợp lệ
ORA-29283:hoạt động tệp không hợp lệ
ORA-00942 bảng hoặc chế độ xem không tồn tại
ORA-29913
FND_FILE trong ứng dụng thần kỳ
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e29250.htm