DBD :: Oracle :: db DESTROY не удалось: ORA-03135: соединение потеряло контакт - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь прочитать файл из одной базы данных и обновить значение в другой базе данных, когда я делаю что-то без Parallel :: ForkManager, с другой стороны, это работает нормально, когда я использую Parallel :: ForkManager, который я испытываю нижеошибка

ошибка:

Session ID: 271 Serial number: 28379 (DBD ERROR: OCISessionEnd) during global destruction.
DBD::Oracle::db DESTROY failed: ORA-03135: connection lost contact
Process ID: 0

код:

use Parallel::ForkManager;  
$pm = Parallel::ForkManager->new(10);

$DB_CONN_ST = DBI->connect("dbi:Oracle:xxxx",xxxx,xxxx, {RaiseError => 1});

$STH_ST = $DB_CONN_ST->prepare("SELECT SUPP_OTLT_IDS,OTLT_PRF_IDS,PAY_FND_TYPE_CODE,CL_YR_MTH_NUMBER,DATA_DT FROM KUDA_TABLE WHERE DATA_DT>= '25-MAY-2018'");
$STH_ST->execute();
@row = $STH_ST->fetchrow_array();
$STH_ST->finish();
$DB_CONN_ST->disconnect();

INCREMENT:
while(($SUPP_OTLT_IDS,$OTLT_PRF_IDS,$PAY_FND_TYPE_CODE,$CL_YR_MTH_NUMBER,$DATA_DT) = @row) {
        $pm-> start and next INCREMENT;
        $SUPP_OTLT_IDS=sprintf("%07d",$SUPP_OTLT_IDS);
        $OTLT_PRF_IDS=sprintf("%02d",$OTLT_PRF_IDS);
        $CL_YR_MTH_NUMBER="M".$CL_YR_MTH_NUMBER;

        $DB_CONN_UD = DBI->connect("dbi:Oracle:xxxx",xxxx,xxxx, {RaiseError => 1});
        $STH_UD = $DB_CONN_UD->prepare("UPDATE JPRX_DETL SET UDA_PROC_STA_TS='$DATA_DT',UDA_PROC_STA_ID=1,UPD_TS=SYSTIMESTAMP WHERE PHA_OLET_CODE='$SUPP_OTLT_IDS' AND PHA_OLET_PREF_CODE='$OTLT_PRF_IDS' AND DAT_PAY_FUND_TYPE=$PAY_FND_TYPE_CODE AND DAT_FILE_MONTH='$CL_YR_MTH_NUMBER'");
        $STH_UD->execute();
        $DB_CONN_UD->disconnect;
        $pm->finish;
}
$pm->wait_all_children;

Подскажите, пожалуйста, как мне преодолеть вышеуказанную ошибку.

...