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