Linux 通过sh运行ddl文件

Linux 通过sh运行ddl文件,linux,oracle,shell,unix,Linux,Oracle,Shell,Unix,在一台服务器上通过sh运行ddl脚本文件,但在另一台服务器上执行良好时,我遇到了问题。脚本如下所示 sqlplus mgr/$1@$2 @export_all_tables_mgr.ddl if [ $? != 0 ]; then echo 'ERROR exporting MGR data, Refer to .CSV and .CTL files for detail.' | tee -a MGR_ExtractionLog.log fi 它使用sqlplus来运行ddl文件,但在ro

在一台服务器上通过sh运行ddl脚本文件,但在另一台服务器上执行良好时,我遇到了问题。脚本如下所示

sqlplus mgr/$1@$2 @export_all_tables_mgr.ddl
if [ $? != 0 ];
then
echo 'ERROR exporting MGR data, Refer to .CSV and .CTL files for detail.'   | tee -a MGR_ExtractionLog.log
fi
它使用sqlplus来运行ddl文件,但在rogue服务器上,它只会连接到sqlplus,不会做任何事情

oracle@dbsdev55z2 $ export_all_tables_mgr.sh password servicename

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jan 24 08:39:18 2013

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, Data Mining and Real Application Testing options

SQL> 
这里要提到的是,我在这里使用的是Oracle 10g。导出\u所有\u表\u mgr.ddl文件如下

      alter session set nls_date_format = 'DDMMYYYYHH24MISS';

      @drop_table_temp_extraction_counts.ddl

      @create_table_temp_extraction_counts.ddl

      WHENEVER SQLERROR EXIT -1
      WHENEVER OSERROR EXIT -1

      SET HEADING OFF
      SET FEEDBACK OFF
      SET VERIFY OFF

      SPOOL MGR_ExtractionLog.log
      SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'), '- Start extract process' FROM dual;
      SPOOL OFF

      define TableName=TABLE1
      @ExportTable

      define TableName=TABLE2
      @ExportTable

      SPOOL MGR_ExtractionLog.log append
      SELECT TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'), '- End extract process' FROM dual;
      SPOOL OFF

      EXIT 0

我猜这是一个shell问题,请尝试添加以下内容作为shell脚本的第一行,告诉它使用哪个解释器:

#!/bin/sh

查看
.ddl
文件可能会有所帮助,至少它是如何启动的。
sqlplus
是位于提示符处的服务器上的别名还是包装函数,例如,它作为特定用户自动连接?您是否可以检查您是否以
mgr
的身份连接?(只需一个简单的
select user from dual
即可)。我已使用.ddl文件更新了问题,是的,我已连接为MGR。如果您仅从命令行执行
sqlplus
,它是否提示您输入凭据,或者您是否自动登录?这是我能马上想到的文件会被忽略的唯一原因。您也可以将其作为
sqlplus-mgr/$1@$2
运行,即使它有别名也应该可以运行。@AlexPoole如果我只键入
sqlplus
,它会要求提供凭证。我还授予了文件的所有权限。它是否会假脱机日志文件?我正在以
sh script.sh password username
的身份运行脚本。在这种情况下,在文件顶部添加shell bang会有所不同吗?我不确定-您必须进行测试it@Junaid-可能是您正在另一个shell中运行登录会话,并在运行脚本时切换到
sh
;在这种情况下,环境脚本(例如
.profile
)可能会导致问题。(在我看来,这仍然像是将
sqlplus
定义为一个函数)。如果您以
$SHELL script.sh password username
的形式运行它,可能不会出现相同的问题?