【发布时间】:2021-07-13 21:02:20
【问题描述】:
我正在尝试使用以下代码在 oracle 表空间中添加数据文件,但出现错误:ORA-02140:无效的表空间名 请参考 output3 创建数据文件:
for i in `echo $output1 | tr ' ' '\n' | tr '\n' ' '`;
do
echo $i; **#Its printing tablespace name like SYSTEM**
output2=`sqlplus -s usr/pwd as sysbackup <<END2
set serveroutput on;
set linesize 200
set head off;
SELECT TABLESPACE_NAME ||','|| ROUND (SUM (BYTES) / 1048576) FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = '${i}' GROUP BY TABLESPACE_NAME;
exit;
END2`
**#output2 is printing tablespace name and total tablespace size like SYSAUX 2048**
echo $output2 | tr ' ' '\n' > test.csv
while IFS=',' read -r col1 col2
do
echo $col2
fiftin_per=$((col2/15))
echo $fiftin_per **#Feteched column2 from csv file which contains total tablespace space and calculated 15 per of it**
if [[ "${fiftin_per}" -gt "${avail_space}" ]];
then
echo "Assign to manual queue as required space is not available on mount point."
else
var='/'
dfname=".data00"
random_val=`shuf -i 100000000-1000000000 -n 1`
ext=".dbf"
fname="'$mount_name$var${i}$random_val$ext'"
echo $fname **#printing datafilename like \oradata\fname\.dbf**
echo ${i}
output3=`sqlplus -s usr/pwd as sysbackup <<END2
set serveroutput on;
set linesize 200
set head off;
DECLARE
var varchar(50);
BEGIN
dbms_output.put_line("Value of i"||${i});
END;
/
exit;
END2`
echo $output3 **#Trying to add datafile but getting error ORA-02140**
fi
done < test.csv
done
我得到低于输出,我无法在选择命令中传递 linux 变量。请参考 output2 相同。但是,当我尝试从 linux for 循环传递相同的变量以更改命令或 dbms_output.put_line 时出现错误:PLS-00357: Table,View Or Sequence reference 'SYSAUX' not allowed in this context ORA-06550: line 4, column 1 : PL/SQL: 语句被忽略
Output :
/oradata01/POCDB/data/system01.dbf
/oradata01/POCDB/data
208958
SYSAUX TEST5
SYSAUX
2048
136
' /oradata01/POCDB/data/SYSAUX465368588.dbf'
dbms_output.put_line('Value of i'||SYSAUX);
PLS-00357: Table,View Or Sequence reference 'SYSAUX' not allowed in this context ORA-06550: line 4, column 1: PL/SQL: Statement ignored
【问题讨论】:
-
请在您的问题中发布控制台输出和输出文件的示例。不要发布屏幕截图;请复制/粘贴并格式化文本。
-
@pmdba : 添加输出
-
我指的是 实际 输出,而不是输出描述。您的错误表明存在无效的表空间名称 (${i}),但您没有向我们展示正在创建的实际表空间名称。如果看不到实际执行的 DDL 命令,我们就无法告诉您出了什么问题。
-
附带说明,您可以删除
alter tablespace||' '||${i}||' add datafile '||$fname||' size '||${fiftin_per}||'m autoextend off maxsize 30720m';命令的'||$fname||'部分,Oracle 将为您选择一个唯一的文件名。您真的希望单个数据文件增长到 30,720 MB 左右吗? -
@MarkStewart :我尝试这样做,但文件名无效。(ORA-02236)