Я подключаюсь к базам данных Oracle / DB2 через сценарий оболочки / программу Perl . Для баз данных, к которым я подключаюсь, потребуется смена пароля каждые 60 дней . Это соответствует нашей политике безопасности и не может быть изменено. Но это создает проблему при подключении к базам данных через сценарий оболочки или программу perl. Для подключения к oracle DB мы используем нижеприведенный сценарий оболочки:
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 возвращает «ОШИБКУ» в качестве возвращаемого значения, что приводит к сбою сценария perl.
Администраторы БД, не согласные установить пароль, не имеют срока действия, поскольку это противоречит политике безопасности. Пароль устанавливается каждые 60 дней. поэтому это сообщение об ошибке начнет всплывать и вызывать ошибку.
Пожалуйста, дайте мне знать, как я могу отключить это сообщение об ошибке от входа / входа в файл журнала.
Заранее спасибо