Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell脚本Oracle架构刷新生成错误_Shell_Unix_Aix - Fatal编程技术网

Shell脚本Oracle架构刷新生成错误

Shell脚本Oracle架构刷新生成错误,shell,unix,aix,Shell,Unix,Aix,我正在使用一个已经成功运行了相当长时间的AIXKornshell脚本,它删除一个模式并从.dmp文件重新创建它。它最近在出现错误后开始挂起,而且似乎没有使用正确的语法。我希望有人能帮我,或者给我指出正确的方向。该脚本包含以下代码: echo "Dropping user objects" sqlplus $T_USERID/$T_PASSWD@$T_ORACLE_SID << SQL_START_STOP set feedback off set heading off set te

我正在使用一个已经成功运行了相当长时间的AIXKornshell脚本,它删除一个模式并从.dmp文件重新创建它。它最近在出现错误后开始挂起,而且似乎没有使用正确的语法。我希望有人能帮我,或者给我指出正确的方向。该脚本包含以下代码:

echo "Dropping user objects"
sqlplus $T_USERID/$T_PASSWD@$T_ORACLE_SID << SQL_START_STOP
set feedback off
set heading off
set termout off
set echo off
set pagesize 0
set linesize 100
spool /tmp/drop_objects.sql

select 'connect $T_USERID/$T_PASSWD@$T_ORACLE_SID' from dual;

select 'drop '||object_type||' '||object_name||' cascade constraints purge;'
from dba_objects
where object_type = 'TABLE'
  and owner = 'STSC';

select 'drop '||object_type||' '||object_name||' purge;'
from dba_objects
where object_type NOT IN ('TABLE', 'INDEX','TRIGGER')
  and owner = 'STSC'
order by object_type, object_name;

select 'connect $T_CSMUSERID/$T_CSMPASSWD@$T_ORACLE_SID' from dual;

select 'drop '||object_type||' '||object_name||' cascade constraints purge;'
from dba_objects
where object_type = 'TABLE'
  and owner = 'CSMMGR';

select 'drop '||object_type||' '||object_name||' purge;'
from dba_objects
where object_type NOT IN ('TABLE', 'INDEX','TRIGGER')
  and owner = 'CSMMGR'
order by object_type, object_name;

select 'commit;' from dual;
select 'exit;' from dual;

spool off

set feed on
set termout on
@/tmp/drop_objects.sql

SQL_START_STOP
因此,它似乎在以下几行之后出错:

select 'commit;' from dual;
select 'exit;' from dual;
可能在这一行:

SQL_START_STOP
在我看来,语法是关闭的,但我不确定,因为我很少编写shell脚本

更新:在检查生成的SQL之后,我可以看到错误发生在哪里,但我无法确定原因

以下是生成的SQL文件中的错误行:

(在最顶端)

(靠近底部)


更新:我发现生成的SQL文件包含Windows行尾字符(
CR LF
)。我目前正在研究如何将SQL Plus设置为spool到UNIX行尾字符(只需
LF

可能不重要,但我会放一个#/bin/ksh位于顶部,以确保您获得ksh。(或/bin/sh或任何您想要使用的shell)。可能是默认shell已更改,这就是它不再工作的原因。生成的/tmp/drop_objects.sql脚本看起来合理吗?我想知道是否有CR-NL行结尾?在发生这种情况时,DB上的版本是否发生了变化?祝你好运。我在WinSCP会话中找到了生成的SQL脚本,而不是PuTTY。它在SQL中确实有一些无效语法,我将在这里讨论如何解析和发布这些语法。谢谢大家!您可能希望运行
sqlplus-s
以禁用“SQL>”提示,这似乎是在生成脚本后运行脚本时产生错误的原因
SQL_START_STOP
SQL> 
SQL> select 'connect stsc/stsc123@USTST641' from dual;
connect stsc/stsc123@USTST641                                                                       
SQL> 
SQL> select 'drop '||object_type||' '||object_name||' cascade constraints purge;'
  2  from dba_objects
  3  where object_type = 'TABLE'
  4    and owner = 'STSC';
drop TABLE DFU_jan13 cascade constraints purge;                                                     
SQL> 
SQL> select 'drop '||object_type||' '||object_name||' purge;'
  2  from dba_objects
  3  where object_type NOT IN ('TABLE', 'INDEX','TRIGGER')
  4    and owner = 'STSC'
  5  order by object_type, object_name;
SQL> 
SQL> select 'commit;' from dual;
commit;                                                                                             
SQL> select 'exit;' from dual;
exit;