2010-11-12 50 views
5

我試圖重新初始化一個Oracle DB和我看到下面的錯誤用戶:不能刪除當前連接

[sql] Failed to execute: drop user conns cascade 
    [sql] java.sql.SQLException: ORA-01940: cannot drop a user that is currently connected 
    [sql] Failed to execute: create user conns identified by conns default tablespace tbs_conns temporary tablespace temp1 
    [sql] java.sql.SQLException: ORA-01920: user name 'CONNS' conflicts with another user or role name 

的問題是,NO ONE連接:這是一個實例在我的本地計算機上,沒有外部連接和我只是重新啓動,並沒有運行任何其他。我唯一能想到的是,Oracle可能有一些背景(清理?)任務正在運行導致此問題,但我不知道如何查找/管理該問題。有任何想法嗎?

更新:這個腳本實際上下降並重新初始化了一堆表格,並試圖重新運行了幾次後,我得到了同樣的錯誤消息,但在不同的Failed to execute: drop user csmy cascade。經過幾次嘗試後,它又移動到另一個用戶:Failed to execute: drop user deb cascade。似乎是按照字母順序逐個鎖定這些表格!

更新2:在重新運行腳本大約15次後 - 每次在表格中稍微進一步沿着字母表失敗 - 它已經完成並且一切正常。我仍然很想知道發生了什麼 - 我最好的猜測是一些後臺Oracle進程,但我不知道如何檢查。

更新3:我上次再次運行腳本時遇到了同樣的問題,這次在用戶「cap」上失敗。爲了嘗試新的東西,我激活了sqlplus並手動運行了drop user cap cascade命令,並且看,它工作得很好。我試了一下腳本,然後就完成了。因此,由於手動丟棄用戶不需要工作,所以我強烈懷疑腳本本身就是責任。

+1

如果'drop user cap cascade'命令有效(大概來自sql * plus),並且腳本有問題,那麼查看腳本會很有用。 – 2010-11-30 13:49:10

回答

1

腳本是否使用相同的連接?它是否嘗試同時下載多個用戶?

它看起來像是遇到錯誤,只是繼續下一步。

在不同模式中的對象之間可能存在依賴關係,這可能會阻止模式A中的對象被刪除,直到模式B中的對象被刪除。因此,如果最初可能無法刪除模式A,但如果模式B已被刪除,則成功執行重試。

+0

它試圖放棄用戶總是失敗,所以我不明白依賴關係如何。在隨後在字母表中隨機移動到另一個之前,它也會在同一用戶上多次失敗。我會查看腳本以查看連接發生了什麼,以及是否有任何同時發生的請求。 – 2010-11-13 04:48:46

1

您是否從v $ session查詢過,看看誰連接了?您可能會有一個應用程序在某處自動重新連接。您可以始終以受限模式啓動數據庫,或者不要啓動偵聽器並從本地連接運行腳本。

0
  1. 檢查是否所有連接都正確關閉以防異常。

  2. 查看JDBC連接屬性。 如果連接池或緩存啓用了來自之前運行的某些連接,則可能仍然存在。

0

沒有看到您的腳本,很難確切地說出發生了什麼。但我可以向你保證,數據庫本身永遠不會連接到特定的用戶。

您可以做的就是讓您的代碼登錄(我假設您的代碼以DBA用戶身份運行)並循環遍歷所有要刪除的用戶。對於每一個,發出REVOKE CREATE SESSION FROM 禁用登錄,因此任何神祕的代碼將無法連接。

+0

感謝您的建議。下次我會給你一個鏡頭。 – 2010-11-21 20:36:01

0

也許,如果你嘗試了

ALTER SYSTEM DISCONNECT SESSION '<sid>,<serial#>' IMMEDIATE 

(你嘗試刪除用戶的每個會話)丟棄用戶之前,它會工作?

只是猜測。