我正在通过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 天更改一次。因此此错误消息将开始弹出并导致失败。
请让我知道如何从获取/登录到日志文件中抑制此错误消息。
提前致谢