2012-02-07 25 views
3

這裏,我想從我的服務器上運行,以防止排序查詢的例子:可打如何禁用PL/SQL在Oracle中查詢

begin 
    While True 
    LOOP 
    dbms_output.put_line('tst'); 
    END LOOP; 
end 

這個查詢(或其他類似的)我Oracle服務器通過Oracle JDBC瘦驅動程序。我願意阻止此查詢在JDBC配置級別,數據庫服務器配置級別或通過架構內的用戶權限運行。我希望用戶繼續能夠運行正常的選擇/插入/更新/刪除查詢。老實說,如果沒有PL/SQL類型的命令可用,我會很開心,而只有標準的SQL。

更新

我還要提到的是我希望用戶繼續能夠在他們的SQL查詢中使用的標準功能。我真的不希望他們做任何看起來像程序編程的東西(並且不得不擔心這種事情的陷阱,如上所述)。

+0

我假設這是一個prod服務器,那麼這是相當有限的? – Ben 2012-02-07 19:22:11

+0

@Ben限制對我來說很好,但是這是一個產品服務器。這是一臺服務器,我想保持和運行,就好像它是生產服務器一樣,但它可以說是一個服務器,可以說它始終處於積極的「開發」狀態。如果你願意,它幾乎是一個「生產」開發服務器。 – 2012-02-07 19:25:01

+1

和邪惡笛卡爾連接怎麼樣,你想要禁用所有連接?我認爲分離產品和開發實例,做代碼評論可能是一個更好的開始。 – tbone 2012-02-07 19:34:14

回答

7

您不能阻止人們針對您的服務器編寫程序性PL/SQL代碼。然而,根據您嘗試解決的問題的確切性質,您可能有其他選擇。有兩個選項值得思考...

您可以create a profile與執行各種資源限制的數據庫用戶關聯。因此,您可以限制一次調用可消耗的CPU數量或其可以執行的讀取次數。這可以讓你自動終止會執行類似編碼無限循環的會話。請注意,初始化參數RESOURCE_LIMIT需要設置爲TRUE,以便Oracle強制執行配置文件中的資源限制。

您可以使用Oracle Resource Manager來優先訪問資源,以降低開發人員的錯誤將佔用服務器上所有可用資源並使重要生產流程捱餓的風險。

+0

我很害怕。實際上,我已經在使用配置文件的CPU_PER_CALL資源限制(設置爲3),但似乎並沒有阻止上面的示例查詢綁定進程並無限期地運行。所以,這似乎是一個真正的問題。 – 2012-02-07 20:06:48

+0

我想我應該提一下,這是Oracle 11g XE - 也許快車版不會強制實施此配置文件限制?我也試着在這個配置文件下運行一些巨大的交叉連接,並且它在三秒鐘後不停止運行。 – 2012-02-07 20:12:48

+0

似乎資源管理器僅適用於Oracle企業版。 – 2012-02-07 20:18:33