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

Posted

技术标签:

【中文标题】将 C# 中的“alter system”用于 ORACLE 10g 数据库【英文标题】:Use "alter system" from C# for ORACLE 10g database 【发布时间】:2013-11-23 13:30:36 【问题描述】:

出于某种原因,我需要从 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】:

为什么不创建一个小程序来改变系统:

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;

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

【讨论】:

很好,但你能告诉我如何将 X 设置为参数以及如何从 SQL+ 创建它 我已经更新了我的答案@DigitalFox。要创建只需运行然后在下一个喜欢添加/。如果您想查看错误,只需在此之后输入 show errors... 我非常感谢 Ben 先生。太棒了:)

以上是关于将 C# 中的“alter system”用于 ORACLE 10g 数据库的主要内容,如果未能解决你的问题,请参考以下文章

postgresql: alter system

alter database和alter system和alter session的区别

Oracle中alter system命令参数之scope

使用alter system set修改参数不生效

Oracle 18C新特性:ALTER SYSTEM CANCEL SQL

从 C# 中的标准 I/O 进行非阻塞读取 [关闭]