2013-01-24 40 views
0

我在通过服务器上的某个服务器运行ddl脚本文件但在另一服务器上正常运行时遇到问题。该脚本如下通过sh运行ddl文件

sqlplus mgr/[email protected]$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文件,但一个流氓服务器,它只是连接到SQL Plus中并不会做任何事情。

[email protected] $ 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。 export_all_tables_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 
+0

查看'.ddl'文件可能会有所帮助,至少它是如何启动的。 sqlplus是位于提示符处的服务器上的别名或包装函数,例如所以它会自动连接为特定用户?你可以检查你是否真的连接为'mgr'? (只是一个简单的'从双选择用户'会做)。 –

+0

我用.ddl文件更新了这个问题,而且我的连接是mgr – Junaid

+0

如果你只是从命令行执行'sqlplus',它会提示输入凭据,还是自动登录?这是我可以想到的文件将被忽略的唯一原因。你也可以将它作为'sqlplus mgr/$ 1 @ $ 2

回答

0

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

#!/bin/sh 
+0

我正在将脚本作为'sh script.sh password username'运行。在这种情况下,它会不同地在文件顶部添加shell轰炸吗? – Junaid

+0

我不确定 - 你必须测试它 – ninesided

+0

@Junaid - 它可能是你在另一个shell中运行你的登录会话,并在运行脚本时切换到'sh';在这种情况下,环境脚本(例如'.profile')可能会导致问题。 (它仍然听起来像是在定义'sqlplus'作为函数)。如果将它作为'$ SHELL script.sh密码用户名'运行它可能不会有同样的问题? –