对于ORACLE 10g数据库,请使用C#中的“alter system”

时间:2013-11-23 13:30:37

标签: c#-4.0 oracle10g odp.net

我需要出于某种原因来改变并显示来自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语句 ]

似乎它不接受这样的命令所以请该做什么呢?

1 个答案:

答案 0 :(得分: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;

值得注意的是,您现在正在通过用户输入动态执行系统更改...确保首先清理输入。