2016-08-30 135 views
2

如果這太含糊,我很抱歉,但這是隨許多類型語句出現的隨機問題。谷歌和堆棧溢出搜索失敗了我。這是我所經歷的,我希望那裏的人看到或至少聽說過這種情況,並且可能知道有解決方案。PL/SQL Developer語句有時不會提交或「粘貼」

有時候,沒有明顯的韻律或原因,我通過PL/SQL Developer對我們的Oracle數據庫運行的語句不「粘」。上週我在表A上運行了一個更新,提交了更新語句,然後在表B上截斷了一個表,然後在表B上插入了一個表,然後是另一個提交。一切似乎都正常,因爲我沒有收到任何錯誤。當然,我可以查詢這些變化並查看它們是否成立。但是,在註銷並返回時,這些更改尚未提交。即使截斷命令也沒有「卡住」 - 截斷不需要執行提交。

一些細節可能有幫助:我通過PL/SQL在共享帳戶上登錄數據庫服務器,我的團隊只使用共享帳戶訪問模式(每個服務器上有多個模式,每個模式有一個共享登錄/ PW)。在我的團隊中,我是唯一一個遇到這個問題的人。我已要求我們的數據庫管理團隊調查我的個人資料設置,並被告知我的個人資料看起來與我的隊友個人資料相同。我們被迫通過Citrix連接到我們的生產數據庫服務器。我只能通過Citrix隨時打開一個PL/SQL實例,所以我通常將PL/SQL連接到多個模式,但我從來沒有同時在多個模式上運行SQL。我甚至不確定這是否可能,但我想我會提到它。我通常在PL/SQL中打開3-4個窗口,每個窗口連接到不同的模式。

我的經理直接參與了發生類似事件的案例。我運行了四個更新命令,並將其中的每一個都提交給它們;然後他運行一條select語句只是爲了發現我的更新沒有實際提交。

我希望我的一位同伴Overflowers'已經看到或聽說過這個問題,或者至少可以爲我提供一個指引,試圖揭示這個問題。

+0

分享你的問題的一些例子。 – XING

+0

@MKowalski:爲什麼不嘗試使用命令提示符下的sqlplus,然後才能責怪PL/SQL Developer? –

+0

如果你指責PL/SQL Developer(無論是對還是錯)並繼續使用它,那麼最終你會被指責。前兩種Oracle開發環境(imo)是[Toad](https://software.dell.com/products/toad-for-oracle/software-downloads.aspx)和Oracle的[SQL Developer](http:// www .oracle.com/technetwork/developer-tools/sql-developer/overview/index.html)。我會從免費的SQL Developer開始。 – tbone

回答

3

「它已經開始反映在我身上不好,損害了我在公司的聲譽。」

什麼會真正反映你很糟糕,你會認爲Oracle RDBMS是一個神奇的或隨機的設備,或者更糟糕的是,感覺和對你的個人仇恨。電腦可能看起來是鬥氣,但這總是我們投射到他們身上;-)

打磨你的聲譽的方式將通過情況的知情調查。數據庫不會隨機丟失事務。那麼發生了什麼?

可能的罪魁禍首:

  1. 觸發器:不表A有一個UPDATE觸發器這抑制了你的一些SQL的?
  2. 同義詞:是表AB真的是你認爲他們的表嗎?
  3. 所有權:是否在啓用了行級安全性的其他架構中使用這些表(儘管如果您違反策略,應該通過錯誤消息)?
  4. PL/SQL Developer配置:是IDE隱藏錯誤消息還是你沒有發現它們?
  5. 對象類型:表AB真的表嗎?他們可以用INSTEAD OF觸發器來抑制你的一些SQL嗎?
  6. 對象類型:或可能AB是物化視圖,您的會話有QUERY_REWRITE_INTEGRITY=stale_tolerated

如果最後一個看起來有點類似的深奧的解釋,涉及數據閃回,流水線功能和其他malarky。這表明一個同事的一個解釋類別正在惡作劇。

如何進行:

  1. 嘗試不同的工具。 SQL * Plus(或new SQL Command Line)可能會產生不同的結果。排除PL/SQL Developer。
  2. 寫一些測試用例。力爭建立可重現的測試用例:給定一定的設置,此SQL語句總是會導致給定的結果(SQL始終保持不變或始終不變)。
  3. 消除用於檢查結果的查詢中的錯誤或「漏洞」。
  4. 使用數據字典瞭解麻煩表的特徵和關聯對象。您需要了解導致不同結果的原因。 UPDATE持有的行與不行的行有什麼區別?
+0

不錯的可能性列表,尤其是觸發器 – tbone

+0

謝謝你的詳細寫作。無論我們中的哪一個運行它,我們運行的SQL始終都在相同的表中運行。這個問題隻影響到我,而且非常隨意。我可以在有一天運行SQL,並且工作正常。第二天,相同的SQL顯然會正常運行,但變化不會持續。我再也沒有成功複製這個問題。我有我們的開發團隊檢查我的IDE設置,它和他們的一樣。聲譽影響與我把事情標記爲完整有關,但是命令不會持續。 「他們」認爲我故意不做我的工作。 – MKowalski

+0

我們的數據庫由我們母公司的數據庫管理員進行管理,所以我甚至不知道我可以找出他們是如何建立的。我不是想象中的任何SQL開發人員。我只是運行那些知道如何編寫它的代碼。這些對象絕對是桌子。弄清楚爲什麼會發生的最大問題是我永遠不知道什麼時候會發生。我現在運行的SQL可能無法正常工作,但如果在五分鐘後從同一個窗口運行相同的SQL,它將起作用。非常令人沮喪。 – MKowalski

1

我已經使用了PL/SQL Developer十多年了,我從來不知道它在靜默中取消了成功的truncate操作。如果可以這樣做,AA應該將其添加爲菜單項。您似乎更可能運行鍼對錯誤的數據庫連接的命令。

+0

這裏的每個人都在使用PL/SQL多年。從來沒有人見過這種情況發生過。我責怪PL/SQL的唯一原因是因爲我不知道它可能是什麼。我們已經重置了我的SQL配置文件,我們重置了PL/SQL,甚至重置了我的Citrix配置文件,儘管這個問題早於我們的母公司強制Citrix加入我們。我希望它就像登錄到錯誤的數據庫一樣簡單。 – MKowalski

+0

對不起 - 我應該說「我公司的每個人都在使用PL/SQL多年。」 – MKowalski

+1

甚至,「我公司的每個人都使用_PL/SQL Developer_多年。「 –

1

我能感覺到你的沮喪,對不起,你正在經歷這個。然而,我很驚訝,在一家大公司,你的變更控制過程就是這樣。我不爲一家大型跨國公司工作,但對生產數據庫所做的任何更改首先由管理層批准並由DBA(或您的案例,您的團隊)運行。每個運行的腳本都會執行一些操作:

  1. 列出其連接到的數據庫實例信息。例如:

    從v $ instance中選擇host_name,instance_name,version,startup_time;

  2. 線軸輸出到文件(數據庫管理員通常使用sqlplus中,但我敢肯定,PL/SQL開發人員可以做同樣的)

  3. 顯示當前日期和時間(在開始和結束腳本)

  4. 輸出文件被保存到變更控制服務器(目錄結構可以很容易地爲某個給定的實例和/或特定期限)對任何錯誤

  5. 退出任何改變:

    WHENEVER SQLERROR EXIT SQL。SQLCODE

  6. 需要運行後腳本的任何額外的檢查(選擇計數等)

  7. 顯示正在運行的每個命令(組回波上),包括提交!

所有這一切都將允許您不僅驗證腳本是否已成功運行,而且還允許您啓用CYOA。也許你可以和你的團隊討論在你自己的環境中使用這些方法。希望有所幫助。

0

我無法知道我的問題是否已解決,但以下是我所做的: 1.我聯繫了我們公司的思傑團隊,要求他們給我的團隊提供幾個實例PL/SQL打開。這已經完成,因此將消除對具有多個DB連接的一個實例的需要。 2.我聯繫了DBA,讓他們刪除我的舊配置文件,然後用新的用戶名創建一個新配置文件。

到目前爲止,我在這些新條件下運行的所有SQL都很好。但是,我無法重現我遇到的問題,所以我只是繼續關注我的業務並希望獲得最好的結果。

我應該從幾個月後再找到我沒有再次遇到這個問題,我會更新這個帖子,以防其他人遇到它。

謝謝大家對操作員錯誤的指責(截圖證明這不是操作員錯誤,但爲什麼當我的同事指責我僞造屏幕截圖時,您應該相信我)以及道義上的支持。