Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara mengatasi ORA-29285:kesalahan penulisan file

ORA-29285:kesalahan penulisan file adalah salah satu kesalahan yang mungkin terjadi saat melakukan operasi penanganan file di database oracle

Operasi penanganan file adalah membuat file baru di Sistem Operasi, memperbarui atau memodifikasinya. Fungsi ini cukup sering digunakan di PLSQL untuk manipulasi file

Alasan dan Resolusi untuk ORA-29285

(1) Sistem File Unix /Linux tempat Anda menulis file sudah penuh yaitu 100% digunakan.

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

Resolusi

Kosongkan ruang di /u500  dan kita dapat memeriksa kembali blok PLSQL

Jadi pada dasarnya Anda perlu menghapus file yang tidak perlu dalam sistem file yang digunakan. Harap pastikan Anda tidak menghapus file apa pun yang sedang digunakan. Jika Anda menghapus file yang aktif, maka ruang tidak akan dibebaskan

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) Ketika file dibuka oleh FOPEN kecuali jika nilai ditentukan untuk parameter MAX_LINESIZE, maka defaultnya adalah 1024. Jadi kesalahan ini juga terjadi jika Anda memasukkan lebih dari 1024 karakter dalam satu baris

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

Resolusi

Kami dapat mencegah kesalahan ini dengan menentukan ukuran garis maksimum

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.

Parameter MAX_LINESIZE dapat mencapai 32767. Jika Anda memiliki garis yang lebih panjang dari 32K, maka data harus ditulis sebagai biner.

(3)  Kesalahan ini dapat terjadi saat  Memanggil UTL_FILE.PUT_LINE berulang kali dalam satu lingkaran saat menulis secara kumulatif lebih dari 1024  karakter. Alasannya salah Pengaturan ORA_NLS10 atau variabel ORA_NLS10 tidak disetel

Contoh

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

Resolusi

Harap pastikan ORA_NLS10 diatur di database oracle dan lingkungan pendengar

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.

Saya harap Anda menyukai posting terperinci ini di ORA-29285. Silakan suka dan berikan umpan balik

Artikel Terkait
ORA-29280:jalur direktori tidak valid
ORA-29283 :operasi file tidak valid
ORA-00942 tabel atau tampilan tidak ada
ORA-29913
FND_FILE di aplikasi oracle
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. Bagaimana cara menghilangkan jam tidak bekerja di Oracle

  2. Perintah CREATE TABLE Oracle di PL/SQL dengan 10 Contoh

  3. Fungsi COMPOSE() di Oracle

  4. Bagaimana cara menjatuhkan tabel di oracle

  5. Pernyataan Kasus Oracle Dijelaskan dengan Tip dan Contoh