<label id="uuajl"></label>

    IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉貼|軟件發(fā)布

    您當前所在位置: 首頁數(shù)據(jù)庫Oracle → ORA-01940錯誤的解決過程

    ORA-01940錯誤的解決過程

    時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

      在將每天的DMP邏輯備份導入到一個數(shù)據(jù)庫的過程中,在導數(shù)據(jù)之前的不能刪除用戶操作出現(xiàn)下面的錯誤:

      OS:linux

      Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

      SQL> drop user test cascade;

      drop user test cascade

      *

      第 1 行出現(xiàn)錯誤:

      ORA-01940: cannot drop a user that is currently connected

      解決:

      查找原因,是由于在原來DMP邏輯備份中test用戶下的數(shù)據(jù)中存在job,由于在導入數(shù)據(jù)時這些job已經(jīng)開始執(zhí)行,所以造成在進程中存在

      該test用戶執(zhí)行JOB任務的會話,說明該用戶正在被使用,所以該用戶是不能被drop掉的

      下面的ORA-01940錯誤的復現(xiàn)過程:

      創(chuàng)建測試表

      drop table test1

      select * from test1

      create table test1 (datetime date);

      創(chuàng)建一個自定義過程

      create or replace procedure MYPROC as

      begin

      for i in 1..100000 loop

      insert into TEST1(datetime) values(sysdate);

      end loop;

      end;

      PL/SQL procedure successfully completed

      創(chuàng)建JOB,每天1440分鐘,即每5分鐘運行test過程一次

      declare

      job number;

      begin

      sys.dbms_job.submit

      (job => job,

      what =>’MYPROC;’,

      next_date => sysdate,

      interval => ’sysdate+(1/1440)*5’);

      commit;

      end;

      PL/SQL procedure successfully completed

      運行JOB

      SQL> begin

      2 sys.dbms_job.run(241);

      3 end;

      4 /

      PL/SQL procedure successfully completed

      此時需要刪除用戶daimin時,就會報下面的錯誤

      以sys登陸系統(tǒng),刪除daimin用戶

      --查看daimin用戶下的job

      SQL> select job,what,interval,to_char(next_date, ’yyyy-mm-dd hh24:mi:ss ’)

      2 from dba_jobs where schema_user=’DAIMIN’;

      JOB WHAT INTERVAL TO_CHAR(NEXT_DATE,’YYYY-MM-DDH

      241 MYPROC; sysdate+(1/1440)*5 2008-12-16 10:10:03

      查看正在運行的JOB

      SQL> select * from dba_jobs_running;

      SID JOB FAILURES LAST_DATE LAST_SEC THIS_DATE THIS_SEC INSTANCE

      1619 241 2008-12-16 10:25:51 0

    #p#副標題#e#

      查看daimin用戶的活動會話

      SQL> select sid,serial#,username,program,machine,status

      2 from v$session

      3 where username=’DAIMIN’

      4 AND STATUS=’ACTIVE’;

      SID SERIAL# USERNAME PROGRAM MACHINE STATUS

      1619 2360 DAIMIN plsqldev.exe STAPLES\DELLF98P-10QC ACTIVE

      --以sys用戶下來刪除daimin用戶,會報下面的錯誤

      SQL> drop user daimin cascade;

      drop user daimin cascade

      ORA-01940: cannot drop a user that is currently connected

      試圖刪除job

      SQL> begin

      2 FOR r_job IN (select job,what,interval,to_char(next_date, ’yyyy-mm-dd hh24:mi:ss ’)

      3 from dba_jobs where schema_user=’DAIMIN’

      4 ) LOOP

      5 dbms_job.REMOVE(r_job.job);

      6 end loop;

      7 commit;

      8 end;

      9 /

      begin

      FOR r_job IN (select job,what,interval,to_char(next_date, ’yyyy-mm-dd hh24:mi:ss ’)

      from dba_jobs where schema_user=’DAIMIN’

      ) LOOP

      dbms_job.REMOVE(r_job.job);

      end loop;

      commit;

      end;

      ORA-23421: job number 241 is not a job in the job queue

      ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86

      ORA-06512: at "SYS.DBMS_IJOB", line 529

      ORA-06512: at "SYS.DBMS_JOB", line 171

      ORA-06512: at line 5

      分析錯誤:因為以sys用戶來刪除daimin用戶下的JOB,所以會報錯

      解決方法:

      1、殺掉執(zhí)行JOB任務的會話進程;

      alter system disconnect session ’sid,serial#’ immediate;

      或者Alter system kill session ’sid,serial#’;

      或者

      SQL> drop user aa;

      drop user aa

      *

      ERROR at line 1:

      ORA-01940: cannot drop a user that is currently connected

      SQL> select sid,serial# from v$session

      2? where username='AA';

      SID??? SERIAL#

      ---------- ----------

      136?? 33

      SQL> alter system kill session '136,33';

      System altered.

      2、通過設置在初始文件中設置初始參數(shù)JOB_QUEUE_PROCESSES=0來使Oracle會殺掉CJQ0及相應job進程;

      修改init.ora文件,然后重新啟動數(shù)據(jù)庫,或者執(zhí)行ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;

      修改過初始參數(shù) 設置JOB_QUEUE_PROCESSES=0之后,重新啟動數(shù)據(jù)庫之后,進行邏輯備份的導入操作,先刪除用戶,此時刪除成功!

      原文地址 http://it.kswchina.com/Oracle/zh/445448.html

    關鍵詞標簽:ORA-01940錯誤

    相關閱讀

    文章評論
    發(fā)表評論

    熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實例的控制文件 誤刪Oracle數(shù)據(jù)庫實例的控制文件 為UNIX服務器設置Oracle全文檢索 為UNIX服務器設置Oracle全文檢索

    相關下載

      人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法