如何消除在solaris shell脚本/perl程序中连接Oracle/DB2数据库时出现密码过期错误



我连接到Oracle/DB2数据库通过shell脚本/Perl程序。数据库,我正在连接将需要密码更改每60天。这是我们的安全政策,不能更改。但是,当通过shell脚本或perl程序连接到数据库时,这是创建问题。要连接到oracle数据库,我们使用下面的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 "nn---------------------------->>`date`extraction successfulnn---------------------------->>"  >> $log
else
echo "nn---------------------------->>`date` Error with  extraction from Tablenn---------------------------->>" >> $log
exit -5
fi

但是保存数据库连接部分日志的SITE_SQL.log中出现了以下错误信息

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

使脚本失败。但是连接发生在数据库中,我们在spool文件中获得所需的数据。当脚本检查日志文件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_Statementn$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;
    }

在这里,因为我们得到密码过期警报错误消息subeexecutesql函数返回" error "作为返回值,这是使perl脚本失败。

DBA不同意设置密码不过期选项,因为它违反了安全策略。密码设置为每60天修改一次。因此,这个错误信息将开始弹出并导致失败。

请让我知道我如何才能抑制这个错误信息从获取/登录到日志文件

Thanks in advance

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

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

ie:

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

首先验证它是否与示例文件一起工作:并非所有版本的grep都支持s。如果没有,请使用[ t]代替(是的,空格字符必须在那里,这不是打字错误)。

相关内容

  • 没有找到相关文章

最新更新