簡體   English   中英

在solaris Shell腳本/ perl程序中連接到Oracle / DB2數據庫時,如何清除密碼到期錯誤消息?

[英]How to get rid off Password expiry error message when connecting to Oracle/DB2 Database in solaris shell script/perl program?

我正在通過shell腳本/ Perl程序連接到Oracle / DB2數據庫。 我連接的數據庫每60天需要更改一次密碼 這是根據我們的安全政策,無法更改。 但這通過shell腳本或perl程序連接到數據庫時造成了問題 要連接到Oracle DB,我們在下面通過shell腳本使用:

sqlplus -s ${USER_NAME}/${PASSWD}@${DATABASE_NAME} <<EOF > $SQL_LOG/SITE_SQL.log
set echo off
set trimspool on
set pages 0
set linesize 1500
set feedback off
set head off

spool ${ETL_DIR}/SITE.txt
select LTRIM(RTRIM(COLUMN1))||'|'||LTRIM(RTRIM(COLUMN2)) from TABLE where COLUMN2 IN      (${SITES});
exit
EOF

grep -i 'error' $SQL_LOG/SITE_SQL.log
if [ $? -ne 0 ]
then
echo "\n\n---------------------------->>`date`extraction successful\n\n---------------------------->>"  >> $log
else
echo "\n\n---------------------------->>`date` Error with  extraction from Table\n\n---------------------------->>" >> $log
exit -5
fi

但是保存數據庫連接部分日志的SITE_SQL.log正在下面出現錯誤消息。

ERROR:
ORA-28002: the password will expire within 13 days

這使腳本失敗。 但是連接發生在數據庫上,並且我們在后台打印文件中獲得了所需的數據。 當腳本在日志文件SITE_SQL.log中檢查錯誤時,它就會失敗。 我不想更改錯誤處理部分,但是不想顯示此消息/將其記錄到日志文件中,因此腳本將不會在日志文件中看到此錯誤消息。

同樣,我們也遇到了一個Perl腳本,它也面臨着同樣的問題。

my $l_Var_SQL_Statement="Select to_date('$Var_Data_Date_1','YYYY-MM-DD')-max(load_date)     from TABLE where LOAD_STATUS='Success'";

   $RetVal=SubExecuteSQL($Var_REP_TMP,$Var_USER_DB,$Var_USER_DBUSER,$Var_USER_DBPASSWORD,$l_Var_SQL_Statement);
if($RetVal eq "ERROR") {
    $system_date=`date`;
    chomp($system_date);
    $Message="$system_date:Error Executing Query   :$l_Var_SQL_Statement\n$system_date:Database Details:DB=$Var_USER_DB,Use
    r ID=$Var_USER_DBUSER, Password= $Var_USER_DBPASSWORD  for $my_filename Repository";
    SubWriteLogMsg("$Var_REP_LOG","$Var_REP_LOGFILE","$Message");
    $Message="Error Executing Query :$l_Var_SQL_Statement. Check log file for        connection details.";
    SubWriteMailMsg("$Var_INFA_MAILFOLDER","$Var_INFA_MAILFILE","$Message");
           SubLogLoadAbort("$Var_REP_LOG","$Var_REP_LOGFILE","$Var_INFA_MAILFOLDER","$Var_INFA_MAILFILE");
    exit -1;
    }

在這里,由於我們收到了密碼到期警報錯誤消息,因此SubExecuteSQL函數返回“ ERROR”作為返回值,這會使perl腳本失敗。

DBA不同意將密碼設置為“不過期”選項,因為它違反了安全策略。 密碼設置為每60天更改一次。 因此此錯誤消息將開始彈出並導致失敗。

請讓我知道如何抑制獲取/登錄日志文件的錯誤消息。

提前致謝

在重定向到日志文件之前,請將grep命令放在管道中,例如:

| grep -v '^\\s*\\(ERROR:$\\|ORA-\\)'

即:

sqlplus -s ${USER_NAME}/${PASSWD}@${DATABASE_NAME} <<EOF | grep -v '^\s*\(ERROR:|ORA-)' > $SQL_LOG/SITE_SQL.log

首先驗證它是否適用於示例文件:並非所有版本的grep支持\\s 如果您的密碼不正確,請改用[ \\t] (是的,空格必須在其中,不是錯字)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM