2013-11-23 39 views
0

我需要一些理由來改變並顯示db_cahce_size的大小從C#(使用ODP.NET)我用SQL +使用「更改系統」從C#爲Oracle 10g數據庫

以下命令Oracle 10g數據庫

alter system set db_cache_size = Xm scope=both;

和命令來顯示它的電流值

show parameter db_cache_size;

,但是當我試圖問題是通過ODP.NET命令對象從C#命令我得到的錯誤 [ORA-00900:無效的SQL語句]

看來,它不接受這類命令,該怎麼做的請辦呢?

回答

1

爲什麼不創建一個小程序來改變系統:

create or replace procedure change_cache_size (Px in number) is 
begin 
    execute immediate 'alter system set db_cache_size = Xm scope=both'; 
end; 

然後,您可以從C#調用它。

爲了找到在SQL參數的當前值,您可以查詢V$PARAMETER

select value 
    from v$parameter 
where name = 'db_cache_size' 

然後可以正常查詢。或者,您可以使用OUT參數將它們組合爲一個。

create or replace procedure change_cache_size (Psize out varchar2) is 
begin 
    execute immediate 'alter system set db_cache_size = Xm scope=both'; 

    select value into Psize 
    from v$parameter 
    where name = 'db_cache_size'; 
end; 

我將極其警惕以這種方式的應用程序改變的初始化參數的。這很好地表明你的數據庫中有些東西需要改變。我希望能夠提供一種適用於所有使用數據庫的應用程序的緩存大小,而不是根據某個時刻的需求來更改緩存大小。

如果你想X是可變的,然後只是讓這另一個參數:

create or replace procedure change_cache_size (PX in number, Psize out varchar2) is 
begin 
    execute immediate 'alter system set db_cache_size = ' || X || 'm scope=both'; 

    select value into Psize 
    from v$parameter 
    where name = 'db_cache_size'; 
end; 

值得一提的是,你現在可以執行系統與用戶輸入的動態變化......確保你第一次淨化輸入。

+0

不錯,但你能告訴我如何設置X作爲參數,以及如何從SQL + – DigitalFox

+0

創建此更新我更新了我的答案@DigitalFox。要創建簡單的運行,然後在下一個像添加一個'/'。如果你想查看錯誤,只需在那之後輸入'show errors' ... – Ben

+0

我很感謝你,本先生。驚人 :) – DigitalFox