Oracle-11g

從另一台機器更新數據庫表

  • November 4, 2018

我正在嘗試使用批處理文件更新我的數據庫。批處理文件位於機器上,比如說 ABC,它應該從 ABC 的本地目錄中選擇一個文本文件,然後將該文件上傳到位於 XYZ 機器上的數據庫中。

我收到一個錯誤

If you are using a remote database server, verify it has access to remote_basedir.

ERROR>:   Error is: [Oracle][ODBC][Ora]ORA-29913: error in executing    ODCIEXTTABLEOPEN callout
ERROR>: ORA-29400: data cartridge error
ERROR>: KUP-04040: file testfile.txt in TEST_9F86D0818 not found

我正在呼叫在 NAVICAT 中創建的計劃以將 .txt 文件上傳到數據庫。

有與您的錯誤消息相關的 Oracle 支持說明ORA-29913:執行 ODCIEXTTABLEOPEN 標註時出錯(文件 ID 458620.1) 。您有一個外部表 (ORGANIZATION EXTERNAL),其數據位於 Oracle 目錄“TEST_9F86D0818”中的文件“testfile.txt”中。

支持說明說,如果包含文件 testfile.txt 的 os 目錄沒有適當的權限,就會發生這種情況。

因此,讓我們檢查該文件是否不存在,或者該文件或它所在的 os 目錄的 os 權限是否存在問題。

  1. 找出Oracle目錄“TEST_9F86D0818”的路徑
select directory_path
from all_directories
where directory_name='TEST_9F86D0818';
  1. 假設 1 中的 directory_path 檢索是 ‘/u01/app/oracle/data’ 或 ‘C:\u01\app\oracle\data’ 如果您在 Windows 系統上。然後登錄數據庫伺服器並檢查’/u01/app/oracle/data/testfile.txt’(C:\u01\app\oracle\data\testfile.txt)是否存在。
  2. 假設在您的數據庫伺服器上執行您的 Oracle 軟體的使用者是oracle. 通常這是在 Linux 伺服器上的情況。然後檢查此使用者是否可以讀取 testfile.txt:
head /u01/app/oracle/data/testfile.txt > /dev/null

或者

type C:\u01\app\oracle\data\testfile.txt > NUL

如果您使用的是 Windows 系統。如果這會生成錯誤消息,那麼這就是您必須消除問題的原因。 4. 使用有權訪問目錄並可以執行 UTIL_FILE 包的使用者(例如 dba 使用者)使用 sqlplus 連接到數據庫並執行以下命令:

DECLARE 
 V1 VARCHAR2(32767); 
 F1 UTL_FILE.FILE_TYPE; 
BEGIN 
 F1 := UTL_FILE.FOPEN('TEST_9F86D0818','testfile.txt','R'); 
 UTL_FILE.GET_LINE(F1,V1); 
 UTL_FILE.FCLOSE(F1);
exception 
 when others then
   dbms_output.put_line('ERROR: ' || SQLCODE 
     || ' - ' || SQLERRM);
   raise;
END;
/

如果出現錯誤,這就是您必須消除問題的原因。如果沒有出現錯誤,請向我們展示您的外部表的創建語句。

引用自:https://dba.stackexchange.com/questions/221705