Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TM9Cxpzrn9wBSkyBNr22Qc
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_LOGse goleste la fiecare rulare. Nu ai istoric: iei log-ul rularii curente, altfel relansezi ca sa-l reproduci.- Eroarea din
additional_infoa jobului e de obicei falsa. Pe orice esec se apeleazaEmailLog, iar daca SMTP-ul e picat ridicaORA-20000care inlocuieste eroarea originala. Cauza adevarata e inUPD_LOG. UpdateAppabandoneaza tot la primul program nedescarcat (exitdin 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.GetStarerefuza o rulare noua cat timp precedenta e neincheiata si nu a trecut o ora. Se deblocheaza cuexec contafin_oracle.pack_update.IncheiereActualizare.- Programele
%USERREPORTS%merg toate in directorulUPD_USERREPORTS, nu inUPD_<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 executable — asincron,
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.