![](/img/trans.png)
[英]Need Perl one-liner regex to get rid of the if condition syntax error from a shell script file
[英]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.