使用立即执行调整数据文件 oracle 的大小

Posted

技术标签:

【中文标题】使用立即执行调整数据文件 oracle 的大小【英文标题】:Resize datafile oracle using execute immediate 【发布时间】:2015-05-14 10:57:38 【问题描述】:

我需要调整这个数据文件'+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919'的大小,为什么这个简单的过程是错误的?

还有其他选择吗?

SQL> begin
      2  execute immediate 'alter database datafile '+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919' resize 732M';
      3  exit;
      4  /
    execute immediate 'alter database datafile '+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919' resize 732M';


                                                                                *

第 2 行出现错误: ORA-06550:第 2 行,第 87 列: PLS-00103:在预期以下情况之一时遇到符号“.269”: . ( * @ % & = - + ; at in 是 mod 余数不是 rem return 返回 或 != 或 ~= >= and or like like2 like4 likec 在使用 || 之间大部分 成员子集

【问题讨论】:

How to anticipate and escape ' in oracle 的可能重复项 【参考方案1】:

你需要用双引号('')转义单引号(')

begin
      execute immediate 'alter database datafile ''+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919'' resize 732M';
end;
/

但是你为什么要使用动态sql呢?你可以写

alter database datafile '+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919' resize 732M';

在 sqlplus 中?

【讨论】:

您不能用双引号(引号)转义单引号(也称为撇号) - 您使用两个撇号,一个接一个。代码是正确的,但解释令人困惑。 是的,在sqlplus中,我正在做一个维护表空间的过程,将是自动的。 但是,这个说法有问题。 SQL> begin 2 execute immediate 'alter database datafile ''+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919'' resize 8500M'; 3个出口; 4 / 退出; * 第 3 行出现错误:ORA-06550:第 3 行,第 5 列:PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:(开始案例声明结束异常退出 goto if loop mod null pragma raise return select update while with @SandyRamirez - 你的第 3 行是 exit; 而不是 end; 这不适合 PL/SQL 块?

以上是关于使用立即执行调整数据文件 oracle 的大小的主要内容,如果未能解决你的问题,请参考以下文章

Oracle基本使用

Oracle测试环境参数调整.

oracle归档日志老满怎么办

XML文件大小问题

vertica数据库客户端调整字体大小

如何查看oracle数据文件大小