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

Bagaimana mengatasi ORA-29913 dengan tabel eksternal

ORA-29913 adalah salah satu kesalahan umum saat bekerja dengan tabel eksternal di database Oracle. Kami akan mencari berbagai cara untuk menghasilkan kesalahan dan apa yang dapat dilakukan untuk mengatasi kesalahan

(1) File Eksternal tidak ditemukan atau izin salah

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

Saat menganalisis tabel, Anda mendapatkan pesan serupa:

SQL> jalankan sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');
BEGIN sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE'); END;
*
ERROR pada baris 1:
ORA-29913:kesalahan dalam menjalankan pemanggilan ODCIEXTTABLEOPEN
ORA-29400:kesalahan kartrid data
KUP-04040:file test1 .dat di TEST_DIR tidak ditemukan
ORA-06512:pada “SYS.DBMS_STATS”, baris 7161
ORA-06512:pada “SYS.DBMS_STATS”, baris 7174
ORA-06512:pada baris 1

Atau secara umum

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

Alasan

File eksternal telah dipindahkan dari lokasi yang benar

SQL> select * from dba_directories ;

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

Periksa Nama File yang terkait dengan tabel eksternal

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

Sekarang memeriksa di tingkat OS
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
Tidak ada file atau direktori seperti itu

Jadi file tidak ada di lokasi yang benar

Kedua pertanyaan di atas dapat digabungkan seperti di bawah ini juga

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';

Resolusi:
Pindahkan kembali kedua file ke lokasi aslinya

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

Sekarang
Kedua pernyataan di bawah ini akan berhasil

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

(2) Format data salah dalam file eksternal

KESALAHAN pada baris 1:
ORA-29913:kesalahan dalam menjalankan pemanggilan ODCIEXTTABLEFETCH
ORA-30653:batas penolakan tercapai
ORA-06512:pada “SYS.ORACLE_LOADER”, baris 14
ORA-06512:pada baris 1

Alasan

(i) File eksternal mungkin memiliki baris kosong
(ii) Periksa pembatas TAB atau pembatas HEX

sebuah. Pembatas TAB '\t', yang digunakan oleh Oracle, diwakili oleh nilai HEX '09'
b. Nilai HEX dalam datafile harus sesuai dengan nilai HEX yang ditentukan dalam
pernyataan CREATE
c. Spesifikasi HEX dalam pernyataan CREATE akan terlihat seperti 0X'gt;' atau 0x''
(iii) Jika kolom yang ditambahkan ke tabel eksternal, hal yang sama harus ada di file eksternal

Resolusi
Periksa kesalahan di log dan perbaiki masalah yang sesuai

(3) Kesalahan dengan kolom Null

KESALAHAN pada baris 1:
ORA-29913:kesalahan dalam menjalankan pemanggilan ODCIEXTTABLEOPEN
ORA-29400:kesalahan kartrid data
KUP-04043:kolom tabel tidak ditemukan di sumber eksternal:

Alasan
File eksternal memang memiliki nilai null untuk kolom terakhir yang awalnya berupa kolom angka. Ketika kita mengubah null menjadi angka 0, maka query berhasil.

Resolusi
Untuk memuat nilai NULL, kita perlu menyertakan pembatas ENCLOSED BY dalam definisi tabel.

rekaman dibatasi oleh baris baru
bidang diakhiri dengan ','
secara opsional diapit oleh ' ' <<<======
nilai bidang tidak ada adalah nol

(4) ORA-29913 juga dapat terjadi jika Oracle tidak dapat membuat file log juga. Jadi periksa izin direktori

(5) Kesalahan direktori tabel eksternal
Kesalahan ORA-29913 juga dapat terjadi pada tabel eksternal saat Anda tidak memberikan izin baca dan tulis ke direktori:

BUAT ATAU GANTI DIRECTORY extdir AS ‘/u01/oradata/testdir’;
GRANT READ ON DIRECTORY testdir TO ;
GRANT WRITE ON DIRECTORY testdir TO ;

Berikut adalah beberapa informasi bagus tentang Tabel Eksternal, Anda harus  memeriksa

Apa itu TABEL EKSTERNAL di Oracle?

(1) Tabel eksternal adalah tabel hanya-baca di mana data disimpan dalam file datar di luar database

(2) Anda dapat menggunakan fitur tabel eksternal untuk mengakses file eksternal seolah-olah mereka adalah tabel di dalam database.

(3)   Saat membuat tabel eksternal, Anda menentukan struktur dan lokasinya dengan di oracle. Pada dasarnya Anda hanya menyimpan metadata di dalam oracle

(4) Saat Anda membuat kueri tabel, Oracle membaca tabel eksternal dan mengembalikan hasilnya seolah-olah data telah disimpan dalam database.

(5) Server oracle menyediakan dua driver oracle utama untuk membaca file datar

  • Oracle_loader:Ini digunakan untuk membaca file datar menggunakan teknologi oracle loader. Ini pada dasarnya memungkinkan untuk membaca file yang dapat ditafsirkan menggunakan teknologi sql loader
  • Oracle_datapump:Ini digunakan untuk mengimpor dan mengekspor data menggunakan format platform independen

Artikel Terkait
Tabel Eksternal Oracle :Lihat posting ini untuk informasi tentang penggunaan tabel eksternal di oracle dengan contoh, cara membuat tabel eksternal, cara menggunakannya
Oracle Create tabel :Tabel adalah unit dasar penyimpanan data di Oracle Database.kami membahas cara menggunakan perintah Oracle create table untuk membuat tabel dengan foreign key /primary key
ORA-00936 missing expression :Pelajari troubleshooting ORA-00936 missing expression di Oracle SQL. kita dapat menghindarinya, bug Oracle untuk kesalahan ini
ORA-01017:username/password tidak valid; logon ditolak :Pelajari kemungkinan resolusi nama pengguna/kata sandi ORA-01017 yang tidak valid; masuk ditolak. Bagaimana mengatasinya dengan cepat tanpa banyak usaha
ORA-00001 unique constraint melanggar :Lihat posting ini untuk solusi yang mungkin untuk kesalahan oracle ORA-00001 unique constraint dilanggar. Cara mengatasi dan memperbaikinya
ORA-00911:karakter tidak valid :Posting ini untuk penyebab umum ORA-00911:karakter tidak valid di oracle dengan contoh dan resolusi untuk membantu Anda menyelesaikan pekerjaan
ORA-00900 :Posting ini untuk berbagai solusi untuk pernyataan sql yang tidak valid ORA-00900.Alasan kesalahan.Cara men-debug dan menyelesaikannya dengan cepat,
ORA-03113:end-of-file pada saluran komunikasi:Lihat metode untuk menyelesaikan ORA -03113:akhir file pada saluran komunikasi. Kesalahan ini dapat terjadi saat memulai basis data, menjalankan program
Dokumentasi Oracle

Kursus yang Direkomendasikan

Berikut adalah Kursus Udemy yang bagus untuk Oracle SQL
Oracle-Sql-Step-by-step :Kursus ini mencakup sql dasar, bergabung, Membuat Tabel dan memodifikasi strukturnya, Membuat Tampilan, Union, Union -semua dan banyak hal lainnya . Kursus yang bagus dan kursus yang harus dimiliki untuk pemula SQL
Kursus Sertifikasi Oracle SQL Lengkap :Ini adalah kursus yang bagus untuk siapa saja yang ingin siap kerja untuk keterampilan pengembang SQL. Kursus yang dijelaskan dengan baik
Pengembang Oracle SQL:Esensi, Kiat, dan Trik :Alat pengembang Oracle Sql sedang digunakan oleh banyak pengembang. Kursus ini memberi kita trik dan pelajaran tentang cara menggunakannya secara efektif dan menjadi pengembang sql yang produktif
Oracle SQL Performance Tuning Masterclass 2020 :Penyetelan kinerja adalah salah satu keterampilan yang penting dan paling dicari. Ini adalah kursus yang bagus untuk mempelajarinya dan mulai melakukan penyetelan kinerja 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. ORA-01219:basis data tidak terbuka:kueri diizinkan hanya pada tabel/tampilan tetap

  2. Temukan tahun berturut-turut maksimum untuk setiap ID dalam tabel (Oracle SQL)

  3. cd:-M:opsi tidak valid

  4. Cara Memasukkan String Panjang ke Tipe Data CLOB di Oracle

  5. Kueri SQL untuk menerjemahkan daftar angka yang cocok dengan beberapa rentang, ke daftar nilai