出于某种原因,我需要更改并显示C#中ORACLE 10g数据库的db_cahce_size大小(使用ODP.NET)我在SQL+上使用以下命令
"alter system set db_cache_size = Xm scope=both;
"
以及显示当前值的命令
"show parameter db_cache_size;
"
但当我试图通过ODP.NET命令对象从C#发出该命令时,我得到了错误[ORA-00900:无效SQL语句]
它似乎不接受这样的命令,那么该怎么办呢?
为什么不创建一个小过程来更改系统:
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;
值得注意的是,您现在将通过用户输入动态执行系统更改。。。确保首先对输入进行消毒。