首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

expdp 導出報 ORA-39064 無法寫入日誌文件:NLS_LANG 字符集不匹配解決方案

     編輯:DB2 教學

expdp 導出報 ORA-39064 無法寫入日誌文件:NLS_LANG 字符集不匹配解決方案

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

根因分析(MOS Doc ID 1321034.1)

  • DataPump 內部使用 UTL_FILE 寫日誌,**日誌編碼固定為資料庫字符集**。
  • 若客戶端環境變數 NLS_LANG 設定的字符集與資料庫不同(例如資料庫 AL32UTF8,客戶端 ZHS16GBK),UTL_FILE 在 NLS 轉換時返回錯誤字符,導致寫入失敗。
  • 官方文檔已註明:NLS_LANG 應與資料庫字符集一致,否則日誌中的表名顯示可能異常。

解決方案

將環境變數 NLS_LANG 設定為資料庫字符集。

步驟

  1. 查詢資料庫字符集:
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
  1. 設定客戶端 NLS_LANG(格式:語言_地區.字符集):
# Linux/Unix (假設資料庫為 AL32UTF8)
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

# Windows CMD
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

# Windows 永久:系統環境變數新增 NLS_LANG
  1. 重新執行 expdp,錯誤消失。

補充說明

  • 同理 impdp 導入也需保持一致。
  • 若無法修改環境變數,可嘗試在參數文件指定 LOGFILE=xxx.log 並確保目錄可寫,但根治仍是字符集對齊。
  • Bug 6136923 標記為「Not a Bug」,屬於配置問題而非產品缺陷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved