首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 8i 遷移 10g 實戰:Job Queue ID 衝突(SYSMAN 佔用 ID=1)排查與解決

     編輯:Oracle 資料庫相關知識

遷移環境

  • 源:Sun Solaris 8 + Oracle 8.1.7.4,字符集 ZHS16GBK
  • 目標:IBM AIX 5.2 + Oracle 10.1.0.5,字符集 ZHS16GBK
  • 方式:User-level Export/Import

錯誤現象

IMP-00017: ... ORACLE error 1:
"BEGIN dbms_job.isubmit(job=>1, what=>'esupport.P_TM_close2;', ...)
ORA-00001: unique constraint (SYS.I_JOB_JOB) violated
ORA-06512: at SYS.DBMS_JOB, line 97"

根因分析

  1. 源庫 DBA_JOBS 中用戶 XXXX 佔用 JOB=1。
  2. 目標庫 10g 預設安裝後,SYSMAN 佔用 JOB=1 執行 EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS(Enterprise Manager 維護職務)。
  3. Import 時嘗試以相同 ID 重建 Job,觸發唯一約束違規。

解決方案

方法一:手動指定新 Job ID 重建(推薦)

BEGIN
  DBMS_JOB.ISUBMIT(
    job => 23,  -- 指定未使用的 ID
    what => 'esupport.P_TM_close2;',
    next_date => TO_DATE('4000-01-01:00:00:00','YYYY-MM-DD:HH24:MI:SS'),
    interval => 'SYSDATE + 1/24',
    no_parse => TRUE
  );
END;
/
-- 驗證後可移除測試用 Job
BEGIN DBMS_JOB.REMOVE(23); END; /

方法二:Import 前刪除源端 Job(參考 Metalink 336206.995)

在源庫 Export 前先 DBMS_JOB.REMOVE(1),避免匯出 Job 定義。

後續檢查項目

  • DB Link / TNSNAMES 修改
  • Job 定義完整性
  • MQ 相關配置

小結

10g 引入 SYSMAN 自動佔用 Job ID=1 是遷移常見衝突點。掌握 DBMS_JOB.ISUBMIT 指定 ID 重建技巧,可快速解決而不影響 EM 功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved