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

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)Oracle → ORA-01940錯(cuò)誤的解決過(guò)程

ORA-01940錯(cuò)誤的解決過(guò)程

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

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

  OS:linux

  Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

  SQL> drop user test cascade;

  drop user test cascade

  *

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

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

  解決:

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

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

  下面的ORA-01940錯(cuò)誤的復(fù)現(xiàn)過(guò)程:

  創(chuàng)建測(cè)試表

  drop table test1

  select * from test1

  create table test1 (datetime date);

  創(chuàng)建一個(gè)自定義過(guò)程

  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分鐘運(yùn)行test過(guò)程一次

  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

  運(yùn)行JOB

  SQL> begin

  2 sys.dbms_job.run(241);

  3 end;

  4 /

  PL/SQL procedure successfully completed

  此時(shí)需要?jiǎng)h除用戶(hù)daimin時(shí),就會(huì)報(bào)下面的錯(cuò)誤

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

  --查看daimin用戶(hù)下的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

  查看正在運(yùn)行的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#副標(biāo)題#e#

  查看daimin用戶(hù)的活動(dòng)會(huì)話

  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用戶(hù)下來(lái)刪除daimin用戶(hù),會(huì)報(bào)下面的錯(cuò)誤

  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

  分析錯(cuò)誤:因?yàn)橐詓ys用戶(hù)來(lái)刪除daimin用戶(hù)下的JOB,所以會(huì)報(bào)錯(cuò)

  解決方法:

  1、殺掉執(zhí)行JOB任務(wù)的會(huì)話進(jìn)程;

  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、通過(guò)設(shè)置在初始文件中設(shè)置初始參數(shù)JOB_QUEUE_PROCESSES=0來(lái)使Oracle會(huì)殺掉CJQ0及相應(yīng)job進(jìn)程;

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

  修改過(guò)初始參數(shù) 設(shè)置JOB_QUEUE_PROCESSES=0之后,重新啟動(dòng)數(shù)據(jù)庫(kù)之后,進(jìn)行邏輯備份的導(dǎo)入操作,先刪除用戶(hù),此時(shí)刪除成功!

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

關(guān)鍵詞標(biāo)簽:ORA-01940錯(cuò)誤

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

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

相關(guān)下載

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