Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách giải quyết ORA-29913 với bảng bên ngoài

ORA-29913 là một trong những lỗi phổ biến khi làm việc với các bảng bên ngoài trong cơ sở dữ liệu Oracle. Chúng tôi sẽ xem xét các cách khác nhau có thể tạo ra lỗi và những gì có thể được thực hiện để giải quyết lỗi

(1) Không tìm thấy tệp bên ngoài hoặc quyền không chính xác

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

Khi phân tích bảng, bạn nhận được một thông báo tương tự:

SQL> thực thi sys.dbms_stats.gather_table_stats (‘SCOTT’, ’EXAMPLE_EXTERNAL_TABLE’);
BEGIN sys.dbms_stats.gather_table_stats (‘SCOTT’, ’EXAMPLE_EXTERNAL_TABLE’); END;
*
ERROR ở dòng 1:
ORA-29913:lỗi thực thi chú thích ODCIEXTTABLEOPEN
ORA-29400:lỗi hộp dữ liệu
KUP-04040:file test1 .dat trong TEST_DIR không tìm thấy
ORA-06512:tại “SYS.DBMS_STATS”, dòng 7161
ORA-06512:tại “SYS.DBMS_STATS”, dòng 7174
ORA-06512:tại dòng 1

Hay nói chung

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

Lý do

Các tệp bên ngoài đã được di chuyển khỏi vị trí chính xác

SQL> select * from dba_directories ;

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

Kiểm tra Tên tệp được liên kết với bảng bên ngoài

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

Hiện đang kiểm tra ở cấp hệ điều hành
$ cd / u01 / oradata / external_files
$ ls test [1-2] / dat
Không có tệp hoặc thư mục nào như vậy

Vì vậy, các tệp không có ở vị trí chính xác

Cả hai truy vấn trên cũng có thể được kết hợp như bên dưới

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

Độ phân giải:
Di chuyển cả hai tệp về vị trí ban đầu

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

Bây giờ
Cả hai câu lệnh dưới đây sẽ thành công

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

(2) Định dạng dữ liệu không chính xác trong tệp bên ngoài

ERROR ở dòng 1:
ORA-29913:lỗi khi thực thi chú thích ODCIEXTTABLEFETCH
ORA-30653:đạt đến giới hạn từ chối
ORA-06512:tại “SYS.ORACLE_LOADER”, dòng 14
ORA-06512:tại dòng 1

Lý do

(i) Tệp bên ngoài có thể có các dòng trống
(ii) Kiểm tra dấu phân cách TAB hoặc dấu phân cách HEX

một. Dấu phân tách TAB ‘\ t’, được Oracle sử dụng, được biểu thị bằng giá trị HEX ’09’
b. Giá trị HEX trong tệp dữ liệu phải khớp với giá trị HEX được chỉ định trong
câu lệnh CREATE
c. Đặc tả HEX trong câu lệnh CREATE phải trông giống như 0X ' gt;' hoặc 0x ''
(iii) Nếu cột được thêm vào bảng bên ngoài, cột tương tự phải có trong tệp bên ngoài

Độ phân giải
Kiểm tra lỗi trong nhật ký và khắc phục sự cố cho phù hợp

(3) Lỗi với cột Null

ERROR ở dòng 1:
ORA-29913:lỗi khi thực thi chú thích ODCIEXTTABLEOPEN
ORA-29400:lỗi hộp dữ liệu
KUP-04043:không tìm thấy cột bảng trong nguồn bên ngoài:

Lý do
Tệp bên ngoài có giá trị null cho cột cuối cùng vốn là cột số. Khi chúng tôi thay đổi null thành một số 0, thì truy vấn sẽ thành công.

Độ phân giải
Để tải một giá trị NULL, chúng ta cần đưa dấu phân cách ENCLOSED BY vào định nghĩa bảng.

Các bản ghi
được phân tách bằng các trường
dòng mới được kết thúc bởi ','
tùy chọn được bao quanh bởi '' <<<=====
các giá trị trường bị thiếu không có giá trị nào

(4) ORA-29913 cũng có thể xảy ra nếu Oracle cũng không thể tạo các tệp nhật ký. Vì vậy, hãy kiểm tra quyền của các thư mục

(5) Lỗi thư mục bảng bên ngoài
Lỗi ORA-29913 cũng có thể xảy ra trong các bảng bên ngoài khi bạn không cấp quyền đọc và ghi cho thư mục:

TẠO HOẶC THAY THẾ extdir DirectORY AS ‘/ u01 / oradata / testdir’;
CẤP PHÉP ĐỌC TRÊN GIÁO TRÌNH testdir ĐẾN ;
CẤP PHÉP VIẾT TRÊN CHỈ ĐƯỜNG testdir ĐẾN ;

Dưới đây là một số thông tin tốt về Bảng ngoài, Bạn nên xem qua

BẢNG BÊN NGOÀI trong Oracle là gì?

(1) Bảng bên ngoài là bảng chỉ đọc trong đó dữ liệu được lưu trữ trong các tệp phẳng bên ngoài cơ sở dữ liệu

(2) Bạn có thể sử dụng tính năng bảng bên ngoài để truy cập các tệp bên ngoài như thể chúng là các bảng bên trong cơ sở dữ liệu.

(3) Khi bạn tạo một bảng bên ngoài, bạn xác định cấu trúc và vị trí của nó với trong oracle. Về cơ bản, bạn chỉ cần lưu trữ siêu dữ liệu bên trong oracle

(4) Khi bạn truy vấn bảng, oracle đọc bảng bên ngoài và trả về kết quả giống như thể dữ liệu đã được lưu trữ trong cơ sở dữ liệu.

(5) Máy chủ oracle cung cấp hai trình điều khiển oracle chính để đọc các tệp phẳng

  • Oracle_loader:Công cụ này được sử dụng để đọc các tệp phẳng bằng công nghệ trình tải oracle. Về cơ bản, nó cho phép đọc các tệp có thể được giải thích bằng công nghệ trình tải sql
  • Oracle_datapump:Điều này được sử dụng để nhập và xuất dữ liệu bằng định dạng độc lập với nền tảng

Các bài viết có liên quan
Bảng bên ngoài của Oracle:Xem bài đăng này để biết thông tin về cách sử dụng bảng bên ngoài trong oracle với ví dụ, cách tạo bảng bên ngoài, cách sử dụng nó
Oracle Tạo bảng:Bảng là đơn vị lưu trữ dữ liệu cơ bản trong Cơ sở dữ liệu Oracle. chúng tôi trình bày cách sử dụng lệnh tạo bảng của Oracle để tạo bảng có khóa ngoại / khóa chính
ORA-00936 bị thiếu biểu thức:Tìm hiểu cách khắc phục sự cố ORA-00936 bị thiếu biểu thức trong SQL oracle. các giải pháp khác nhau là gì, cách thực hiện chúng ta có thể tránh nó, lỗi của Oracle đối với lỗi này
ORA-01017:tên người dùng / mật khẩu không hợp lệ; đăng nhập bị từ chối:Tìm hiểu cách giải quyết có thể có của tên người dùng / mật khẩu không hợp lệ ORA-01017; Đăng nhập đã bị từ chối. Cách giải quyết vấn đề này nhanh chóng mà không cần nỗ lực
vi phạm ràng buộc duy nhất ORA-00001:Hãy xem bài đăng này để biết giải pháp khả thi cho lỗi oracle ORA-00001 vi phạm ràng buộc duy nhất. Cách giải quyết và sửa lỗi
ORA-00911:ký tự không hợp lệ:Bài đăng này dành cho các nguyên nhân phổ biến của ORA-00911:ký tự không hợp lệ trong oracle với các ví dụ và cách giải quyết để giúp bạn hoàn thành công việc
ORA-00900:Bài đăng này cho các giải pháp khác nhau cho câu lệnh sql không hợp lệ ORA-00900. Lý do cho lỗi. Cách gỡ lỗi và giải quyết nó nhanh chóng,
ORA-03113:end-of-file trên kênh liên lạc:Kiểm tra phương pháp để giải quyết ORA -03113:end-of-file trên kênh liên lạc. Lỗi này có thể xảy ra khi khởi động cơ sở dữ liệu, đang chạy chương trình
tài liệu Oracle

Các khóa học được đề xuất

Đây là Khóa học Udemy hay dành cho Oracle SQL
Oracle-Sql-Step-by-step:Khóa học này bao gồm sql cơ bản, các phép nối, Tạo Bảng và sửa đổi cấu trúc của nó, Tạo Dạng xem, Liên minh, Liên hợp-tất cả và nhiều thứ khác . Một khóa học tuyệt vời và phải có cho người mới bắt đầu sử dụng SQL
Khóa học chứng chỉ SQL hoàn chỉnh của Oracle :Đây là một khóa học tốt cho những ai muốn sẵn sàng tìm việc cho các kỹ năng của nhà phát triển SQL. Một khóa học được giải thích thú vị
Oracle SQL Developer:Cơ bản, Mẹo và Thủ thuật :Công cụ dành cho nhà phát triển Oracle Sql đang được nhiều nhà phát triển sử dụng. Khóa học này cung cấp cho chúng ta các thủ thuật và bài học về cách sử dụng nó một cách hiệu quả và trở thành một nhà phát triển sql hiệu quả
Oracle SQL Performance Tuning Masterclass 2020 :Điều chỉnh hiệu suất là một trong những kỹ năng quan trọng và được tìm kiếm nhiều nhất. Đây là một khóa học tốt để tìm hiểu về nó và bắt đầu thực hiện điều chỉnh hiệu suất 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. Mệnh đề SQL IN 1000 giới hạn mục

  2. Truy vấn kiểm tra kích thước bảng trong cơ sở dữ liệu Oracle

  3. Hàm SOUNDEX () trong Oracle

  4. Làm cách nào để chuyển đổi hiệu quả văn bản thành số trong Oracle PL / SQL với NLS_NUMERIC_CHARACTERS không mặc định?

  5. Cách chuyển đổi hàng thành cột trong bảng Oracle