将 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 数据库的主要内容,如果未能解决你的问题,请参考以下文章
alter database和alter system和alter session的区别