2013-01-24 41 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密碼用戶名'運行它可能不會有同樣的問題? –