Files
comun/docs/depanare-pack-update.md
2026-08-03 09:36:59 +03:00

4.6 KiB

Depanare actualizare ROA (CONTAFIN_ORACLE.PACK_UPDATE)

Actualizarea automata a aplicatiilor si a bazei ruleaza din jobul CONTAFIN_ORACLE.UPDATEROA_ZILNIC -> PACK_UPDATE.UpdateROA, in 3 etape secventiale: UpdateApp (descarca arhivele programelor) -> UpdateScripts (umple UPD_DATABASE) -> UpdateDatabaseSqlPlus (aplica scripturile pe scheme). O etapa esuata le opreste pe toate urmatoarele.

Unde te uiti, in ordine

Ce Unde
pana unde a ajuns fiecare rulare UPD_ISTORIC (stare: 0=start, 1=aplicatii, 2=scripturi, 3=aplicare, 4=incheiat; dataora_end gol = neincheiata)
cauza reala a esecului UPD_LOG (dataora_start = rularea, secventa+dataora = ordinea; explicatie e CLOB)
ce a raportat jobul dba_scheduler_job_run_details (log_date, status, additional_info)
ce versiuni s-au descarcat UPD_PROGRAME
scripturi disponibile / aplicate UPD_DATABASE.script_date vs <schema>.VERSIUNE.data_script

Un sir de rulari oprite la aceeasi stare da direct etapa vinovata, iar prima zi din sir da data de la care s-a schimbat ceva.

Capcane

  • UPD_LOG se goleste la fiecare rulare. Nu ai istoric: iei log-ul rularii curente, altfel relansezi ca sa-l reproduci.
  • Eroarea din additional_info a jobului e de obicei falsa. Pe orice esec se apeleaza EmailLog, iar daca SMTP-ul e picat ridica ORA-20000 care inlocuieste eroarea originala. Cauza adevarata e in UPD_LOG.
  • UpdateApp abandoneaza tot la primul program nedescarcat (exit din bucla, CT_INSUCCES) — deci si programele de dupa el in lista, si ambele etape de baza de date. Un singur fisier indisponibil blocheaza actualizarile la infinit, tacut.
  • GetStare refuza o rulare noua cat timp precedenta e neincheiata si nu a trecut o ora. Se deblocheaza cu exec contafin_oracle.pack_update.IncheiereActualizare.
  • Programele %USERREPORTS% merg toate in directorul UPD_USERREPORTS, nu in UPD_<nume_program>.

Descarcarea (UpdateApp)

Cu server_info.POWERSHELLDOWNLOAD = '1', PACK_UTILS.DownloadFileOS scrie un .ps1 cu curl in DMPDIR, il lanseaza cu sys.ExecuteScriptOS si asteapta aparitia fisierului in directorul Oracle UPD_<PROGRAM>. Daca folderul de pe disc lipseste, curl esueaza mut si in log apare doar Fisierul NU s-a salvat pe disc. — verifica intai directorul, nu reteaua.

Verificari rapide (read-only, din contafin_oracle):

-- calea configurata
select directory_name, directory_path from all_directories where directory_name like 'UPD%';
-- fisierul chiar exista pe disc?
select dbms_lob.fileexists(bfilename('UPD_ROACONT','ROACONT-2.11.70.zip')) from dual;
-- directorul exista si e scriibil? ORA-29283 = cale OS inexistenta sau fara drept de scriere
declare f utl_file.file_type; begin
  f := utl_file.fopen('UPD_USERREPORTS','__probe.txt','W'); utl_file.fclose(f);
  utl_file.fremove('UPD_USERREPORTS','__probe.txt');
end;
/

URL-ul se testeaza direct cu curl de pe orice masina (optiuni.UPD_URL_APP, cu |CUSTOMERID| inlocuit din sys.auth_detalii.detalii); daca da 200, problema e local pe server.

Comenzi OS pe serverul de baze de date

sys.ExecuteScriptOS(<powershell>, <cale .ps1>) creeaza un job scheduler executableasincron, deci rezultatul se verifica prin polling, nu imediat. Scriptul se scrie cu pack_utils_file.clob2fileX(<clob>, 'DMPDIR', '<nume>.ps1'). Utila cand ai doar acces Oracle (ex. tunel SSH), fara RDP:

declare lcPS server_info.value%type; begin
  select value into lcPS from server_info where upper(name)='POWERSHELLPATH';
  pack_utils_file.filedelete('DMPDIR','x.ps1');
  pack_utils_file.clob2fileX('New-Item -ItemType Directory -Force -Path ''D:\...'' | Out-Null',
                             'DMPDIR','x.ps1');
  sys.ExecuteScriptOS(lcPS, 'C:\DMPDIR\x.ps1');
end;
/

Configurare (CONTAFIN_ORACLE)

  • server_info: POWERSHELLDOWNLOAD, POWERSHELLPATH, POWERSHELLTIMEOUT, CURLPATH, SQLPLUSPATH, EMAIL_METHOD/EMAIL_SMTP/EMAIL_PORT/EMAIL_USERNAME/EMAIL_PASSWORD/ EMAIL_FROM/EMAIL_TO.
  • optiuni: UPD_URL_APP, UPD_URL_DATABASE, UPD_URL_BULETININF (daca lipsesc, pachetul foloseste URL-uri implicite din cod).

Conectare la serverul unui client

Tunel SSH pe 1521 + alias TNS pe 127.0.0.1 in D:\ROA\instantclient_19_18\tnsnames.ora (ex. ROA_ROMCONSTRUCT), utilizator contafin_oracle. Vezi oracle_export.md pentru client si capcana de encoding; parolele stau in docs/local/ al proiectului, neversionat.

Serverele de client pot fi Oracle 10g: unele coloane din dba_scheduler_* lipsesc (dba_scheduler_running_jobs.last_start_date) — foloseste dba_scheduler_job_run_details.