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