DataPump 導出遇到 ORA-39064: unable to write to log file + ORA-29285: file write error,經查證為 **客戶端 NLS_LANG 字符集與資料庫字符集不一致**,導致 UTL_FILE 寫入日誌時字符轉換失敗。
. . exported "USER_XXXX"."TAB_YYYY" 0 KB 0 rows
ORA-39064: unable to write to log file
ORA-29285: file write error
UTL_FILE 寫日誌,**日誌編碼固定為資料庫字符集**。NLS_LANG 設定的字符集與資料庫不同(例如資料庫 AL32UTF8,客戶端 ZHS16GBK),UTL_FILE 在 NLS 轉換時返回錯誤字符,導致寫入失敗。NLS_LANG 應與資料庫字符集一致,否則日誌中的表名顯示可能異常。將環境變數 NLS_LANG 設定為資料庫字符集。
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
NLS_LANG(格式:語言_地區.字符集):# Linux/Unix (假設資料庫為 AL32UTF8)
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
# Windows CMD
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
# Windows 永久:系統環境變數新增 NLS_LANG
expdp,錯誤消失。impdp 導入也需保持一致。LOGFILE=xxx.log 並確保目錄可寫,但根治仍是字符集對齊。