将 C# 中的"alter system"用于 ORACLE 10g 数据库



出于某种原因,我需要更改并显示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;

值得注意的是,您现在将通过用户输入动态执行系统更改。。。确保首先对输入进行消毒。

最新更新