From a290a51276a7d67dfce3673f27aecdcb6fe397f7 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Mon, 3 Aug 2026 10:46:08 +0300 Subject: [PATCH] docs: emailurile actualizarii si compatibilitatea scripturilor cu 10g/11g Log-ul de actualizare (PACK_UPDATE.EmailLog, din baza) si buletinul informativ (trimis de serverul de update) sunt doua fluxuri diferite, cu destinatari configurati in locuri diferite. Scripturile de migrare se scriu la nivelul Oracle 10.2 si trebuie sa ruleze si pe 11.x; tabel cu versiunea minima a constructiilor uzuale si limitele XE. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01TM9Cxpzrn9wBSkyBNr22Qc --- docs/depanare-pack-update.md | 25 ++++++++++++++++++++++++ docs/scripturi-migrare-db.md | 37 +++++++++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/docs/depanare-pack-update.md b/docs/depanare-pack-update.md index d88202e..2901113 100644 --- a/docs/depanare-pack-update.md +++ b/docs/depanare-pack-update.md @@ -98,6 +98,31 @@ end; / ``` +## Emailuri: log de actualizare vs buletin informativ + +Sunt **doua emailuri diferite, trimise de doua masini diferite** — se confunda usor. + +| | Log de actualizare | Buletin informativ | +|---|---|---| +| Cine trimite | baza de date, `PACK_UPDATE.EmailLog` (`UTL_SMTP` direct catre `EMAIL_SMTP:EMAIL_PORT`, `AUTH LOGIN`) | **serverul de update** (ASP.NET); baza doar face un GET pe `optiuni.UPD_URL_BULETININF` (cu `|CUSTOMERID|`) prin `PACK_UTILS.URL2Clob`, din `UpdateApp` | +| Destinatari | `server_info.EMAIL_TO` + `EMAIL_CC` | configurati pe serverul de update, **nu** in `server_info` (ex. `office@romfast.ro`) | +| Subiect / continut | `Actualizare ROA dd.mm.yyyy hh24:mi:ss`; liniile din `UPD_LOG`, text simplu separat cu TAB | compus de serverul de update | +| In `UPD_LOG` | erorile SMTP: `EROARE: utl_smpt ERROR CODE ...` | raspunsul HTTP, verbatim (ex. `ERR-1-BULETIN INFORMATIV NU S-A TRIMIS. MOTIVUL: Error: 1429`) | + +Detalii care conteaza la depanare: + +- **`EMAIL_CC` nu produce un antet `Cc:`.** Codul il concateneaza cu virgula la `EMAIL_TO` si trimite + `RCPT TO` pentru toti; antetul e un singur `To: `. Deci un email primit *in Cc* nu vine de la + `EmailLog`. +- **`EMAIL_FROM` e per server de client** (`roaupdate-@romfast.ro`) si difera de contul + autentificat, care e acelasi peste tot (`EMAIL_USERNAME = roaupdate@romfast.ro`). Expeditorul e + singurul indiciu din email despre serverul care l-a trimis. Daca `EMAIL_FROM` lipseste, se compune + din `UTL_INADDR.get_host_name`. +- **Un buletin esuat nu opreste nimic**: raspunsul `ERR-1-...` e text normal, se scrie in `UPD_LOG` si + actualizarea merge mai departe. Doar exceptiile HTTP ajung ca `ERR: ...`. +- **Un SMTP picat, in schimb, opreste tot** — `EmailLog` ridica `ORA-20000` care mascheaza eroarea + reala (vezi „Capcane" mai sus). E singurul loc din lantul de email care are voie sa arunce. + ## Configurare (CONTAFIN_ORACLE) - `server_info`: `POWERSHELLDOWNLOAD`, `POWERSHELLPATH`, `POWERSHELLTIMEOUT`, `CURLPATH`, diff --git a/docs/scripturi-migrare-db.md b/docs/scripturi-migrare-db.md index 44a58c5..d015b12 100644 --- a/docs/scripturi-migrare-db.md +++ b/docs/scripturi-migrare-db.md @@ -27,17 +27,36 @@ Reguli confirmate de Marius (24.07.2026): ## Compatibilitate cu serverele clientilor Serverul de dezvoltare e mai nou decat serverele clientilor, deci un script care trece local poate -pica la client si opri actualizarea. **ROMCONSTRUCT e singurul client ramas pe Oracle 10.2** — el da -masura pentru orice se pune in comune. +pica la client si opri actualizarea. -Constructii care merg pe dev si pica pe 10g: +Parcul de servere (03.08.2026): **un client pe Oracle 10.2** (ROMCONSTRUCT), cativa pe **XE 11 si +11g** standard, restul pe **XE 18/19/21 si 18/21**. -| Constructie | Ce iese pe 10g | -|---|---| -| identificator peste 30 de caractere (tabela, index, constrangere, coloana) | `ORA-00972` (12.2+ accepta 128) | -| `REGEXP_COUNT` (functie din 11g) | `ORA-00904` in SQL / `PLS-00201` in PL/SQL | -| `CONTINUE` (instructiune PL/SQL din 11g) | `PLS-00201: identificatorul 'CONTINUE' trebuie declarat` | -| `FORALL` cu campuri de record din colectie (`S(i).camp`) | `PLS-00436` / `PLS-00382` | +**Regula: orice script care ajunge in comune se scrie la nivelul Oracle 10.2 si trebuie sa ruleze pe +10.2 si pe 11.x.** Numitorul comun e 10.2 — nu se folosesc facilitati 11g si cu atat mai putin 12c+, +oricat de comod ar fi pe dev. Proba inainte de publicare se face pe serverul cel mai vechi +(ROMCONSTRUCT), nu pe dev. + +Constructii care merg pe dev si pica mai jos: + +| Constructie | Disponibila de la | Ce iese sub ea | +|---|---|---| +| identificator peste 30 de caractere (tabela, index, constrangere, coloana) | 12.2 | `ORA-00972` | +| `REGEXP_COUNT` | 11.1 | `ORA-00904` in SQL / `PLS-00201` in PL/SQL | +| `CONTINUE` (instructiune PL/SQL) | 11.1 | `PLS-00201: identificatorul 'CONTINUE' trebuie declarat` | +| `LISTAGG` | 11.2 | `ORA-00904` | +| `PIVOT` / `UNPIVOT` | 11.1 | eroare de sintaxa | +| trigger compus (`COMPOUND TRIGGER`) | 11.1 | eroare de compilare | +| `secventa.NEXTVAL` direct intr-o atribuire PL/SQL | 11.1 | `PLS-00357` (pe 10g: `select ... into` din `dual`) | +| `FETCH FIRST n ROWS`, `CROSS APPLY`, `LATERAL` | 12.1 | eroare de sintaxa (pe 10g/11g: `rownum`) | +| `IDENTITY`, `DEFAULT ON NULL`, coloane invizibile | 12.1 | eroare de sintaxa | +| `VALIDATE_CONVERSION`, `CAST ... DEFAULT ON CONVERSION ERROR` | 12.2 | `ORA-00904` | +| `FORALL` cu campuri de record din colectie (`S(i).camp`) | 11.1 | `PLS-00436` / `PLS-00382` | + +Editiile **XE** adauga limite proprii, independent de sintaxa: XE 11.2 nu are partitionare, executie +paralela si nici masina virtuala Java in baza; XE 18/19/21 au setul de facilitati al editiei mari, +dar plafonate pe resurse (12 GB de date, 2 GB RAM, 2 fire de executie). Deci nimic care sa depinda de +partitionare sau de Java in baza, si nicio operatie care sa presupuna spatiu/memorie de server mare. Plus, independent de versiune: **un obiect nu se poate referi la ceva creat de un script ulterior.** Pe dev obiectul exista deja, deci pachetul compileaza; la client scriptele se aplica in ordine si