From 015cd797a19cfa2ad7d67704b08088d0b84c3634 Mon Sep 17 00:00:00 2001 From: Marius Date: Sat, 8 Aug 2026 17:38:54 +0300 Subject: [PATCH] fix(oracle): SYS.INFO iese din SYSTEM + job de purjare + diagnostic spatiu clienti SYS.INFO e log de aplicatie (SYS.pINFO din AUTH_PACK scrie ~7 randuri la fiecare conectare, ~13.500 randuri / ~2 MB pe luna) si nimic din baza nu-l citeste. Creat de installer in tablespace-ul SYSTEM si nepurjat niciodata, a umplut SYSTEM la doi clienti si a oprit actualizarea cu ORA-01653 - eroarea apare pe orice script, pentru ca AUTH_PACK scrie acolo la conectare. SIGMA 03.08.2026 - ff_2026_07_29_02_COMUN_TVA11 picat pe MARCU AUTOMOTIVE 08.08.2026 - 552.581 randuri / 80 MB, SYSTEM cu 5 MB liberi Installer: - sys-objects.sql: SYS.INFO (tabela + segment LOB) se creeaza in tablespace-ul ROA, cu fallback pe SYSTEM daca ROA inca nu exista - scheduler-jobs.sql: job nou SYS.SYSINFO_PURJARE_ZILNIC, zilnic 03:30, retentie 90 zile, stergere in transe de 10.000 randuri; creat ENABLED, pentru ca nu are nimic de configurat iar uitat dezactivat reproduce chiar problema pe care o rezolva. In schema SYS: privilegiile ANY nu se aplica pe obiectele SYS cat timp O7_DICTIONARY_ACCESSIBILITY=FALSE - uninstall-roa.sql: dezinstalarea sterge si jobul - 00-INSTALL-ORACLE-XE.md / -SE.md: pas post-instalare pentru plafonul SYSTEM (maxsize 2000M) si mutarea SYS.INFO la instalarile vechi Documentatie noua (docs/diagnostic-spatiu-clienti.md): jobul DIAGSPATIU_ZILNIC si pragurile lui, formatul emailurilor de alerta si cum se citesc din mbox-urile Thunderbird, procedura de tunel SSH catre serverul unui client, triajul alertelor si starea la 08.08.2026 pe fiecare client. Reparatia la AUTOMOTIVE e deja aplicata in productie (plafon 600 -> 2000 MB, truncate SYS.INFO): SYSTEM a trecut de la 65 MB la 1545 MB de crestere posibila. Scriptul de livrare pentru ceilalti clienti e scris, dar nepublicat: COMUN sys_2026_08_08_02_SYS_INFO_TABLESPACE_PURJARE.sql Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Rft5ofNa4Ux5VEh4YnhJRC --- CLAUDE.md | 1 + docs/diagnostic-spatiu-clienti.md | 337 ++++++++++++++++++ proxmox/lxc108-oracle/clienti/README.md | 1 + .../docs/00-INSTALL-ORACLE-SE.md | 29 ++ .../docs/00-INSTALL-ORACLE-XE.md | 39 ++ .../roa-windows-setup/sql/scheduler-jobs.sql | 87 ++++- .../roa-windows-setup/sql/sys-objects.sql | 20 +- .../roa-windows-setup/sql/uninstall-roa.sql | 6 + 8 files changed, 505 insertions(+), 15 deletions(-) create mode 100644 docs/diagnostic-spatiu-clienti.md diff --git a/CLAUDE.md b/CLAUDE.md index 267fed0..16c193f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -47,6 +47,7 @@ input/ # Oracle DMP files for import - **Disaster recovery**: `proxmox/vm109-windows-dr/README.md` - **ROA Windows setup scripts (XE/SE 21c)**: `proxmox/lxc108-oracle/roa-windows-setup/README.md` - **VM 302 test environment for ROA setup**: `proxmox/vm302-oracle-test/README.md` +- **Diagnostic spațiu Oracle la clienți (job zilnic + emailuri)**: `docs/diagnostic-spatiu-clienti.md` - **Cazuri clienți (depanare DB)**: `proxmox/lxc108-oracle/clienti/README.md` - **ROMPETROL ENERGY — recreare PDB Oracle XE 21c după ORA-12954**: `proxmox/lxc108-oracle/clienti/oracle-xe-21c/README.md` diff --git a/docs/diagnostic-spatiu-clienti.md b/docs/diagnostic-spatiu-clienti.md new file mode 100644 index 0000000..5dfa0bf --- /dev/null +++ b/docs/diagnostic-spatiu-clienti.md @@ -0,0 +1,337 @@ +# Diagnostic spatiu Oracle la clienti — unde sunt lucrurile si cum se citesc + +Nota de referinta, ca sa nu se mai caute nimic de la zero. Sursa efectiva a scripturilor e repo-ul +**COMUN**; aici stau doar pointerii + cum se citesc emailurile + cum se interpreteaza alertele. + +## 1. Unde sunt scripturile (repo COMUN) + +| | | +|---|---| +| Remote | `git@gitea.romfast.ro:romfast/comun.git` | +| Clona locala | `D:\roa\roagest\comun` | + +| Fisier | Ce e | +|---|---| +| `docs\depanare-spatiu-oracle.md` | **documentul de baza** — jobul, mecanismele reutilizabile, ce umple spatiul in ordinea frecventei, cazuri, capcane | +| `docs\PACK_DIAG_SPATIU.pck` | sursa de referinta a pachetului rulat in baza clientului | +| `docs\email-thunderbird.md` | cum se citesc mbox-urile Thunderbird | +| `docs\depanare-pack-update.md` | actualizarea blocata de spatiu (punctul de plecare cand PACK_UPDATE cade) | +| `utile\diag_spatiu.ps1` | diagnosticul manual, din afara: `powershell -File COMUN\utile\diag_spatiu.ps1 -Alias [-Disc] [-SysPassword ] [-Top 30]` — strict read-only in afara lui `-Disc`, curatarea e doar **sugerata** | +| `utile\citeste_email.ps1` | listare/citire mesaje din mbox | + +## 2. Jobul automat din baza clientului + +`DIAGSPATIU_ZILNIC` — ruleaza **zilnic la 06:00** la fiecare client, e echivalentul in baza al lui +`diag_spatiu.ps1`. + +- tabela de istoric `DIAG_SPATIU_LOG` (purjata la 90 zile), pachetul `PACK_DIAG_SPATIU` +- scripturi de livrare: `co_2026_08_03_02` (tabela), `co_2026_08_03_03` (pachet), + `co_2026_08_03_04` (jobul), `sys_2026_08_03_05` (granturi directe — rolurile nu se aplica in + pachete cu drepturi de definitor) +- corectii ulterioare: `co_2026_08_06_01_DIAG_SPATIU_PACK` (praguri + log complet in email), + `co_2026_08_06_08_DIAG_SPATIU_PACK` + `sys_2026_08_06_07_DIAG_SPATIU_GRANT3` (tabela/coloana de + provenienta la top segmente) + +### Praguri (exact, din pachet) + +`tnPragTsMb = 2048` MB absolut, `tnPragFraPct = 75` %, `CT_PRAG_REL_PCT = 15` %. + +Pentru fiecare tablespace se calculeaza **cat mai poate creste**: + +``` +poate_creste = liber_in_datafile + (maxbytes - alocat) +``` + +si se alerteaza cand `poate_creste` scade sub: + +``` +max <= 2048 MB -> 15% din max (doar garda relativa) +max > 2048 MB -> GREATEST(2048 MB, 15% din max) +``` + +Pragul absolut se **sare** pe tablespace-urile cu maximul sub el (UNDO, SYSTEM mic) — altfel ar +alerta zilnic prin definitie. Asta e fix-ul din `co_2026_08_06_01`; **un client care alerteaza pe +un tablespace cu max <= 2048 MB si mult spatiu liber nu are inca acest script aplicat.** + +Alte doua verificari cu prag: **FRA** (`percent_space_used >= 75`) si **plafonul editiei XE** +(4/11/12 GB dupa versiune, numarand doar datele de utilizator — fara SYSTEM/SYSAUX/UNDO/TEMP; +alerta sub `GREATEST(2048 MB, 15% din plafon)`). + +Sectiunile informative (recyclebin, UNDO, TEMP, istoric statistici/scheduler, top segmente, audit +SYS, disc) se scriu **doar cand exista deja o alerta** — dau context, nu alerteaza singure. + +## 3. Emailurile + +- destinatar: **`marius.mutu@romfast.ro`** +- expeditor: **cate unul per client** — `roaupdate_acn@`, `roaupdate-sigma@`, + `roaupdate-clever@`, `roaupdate-automotive@` … (`roaupdate[-_]@romfast.ro`) +- subiect: `Diagnostic spatiu Oracle ` (`` = numele bazei: + `XE`, `ROA`, `XEPDB1` — **nu** numele clientului; clientul se ia din expeditor) +- corp: liniile de alerta, apoi (dupa `co_2026_08_06_01`) tot logul rularii cu `!` pe randurile + peste prag, plafonat la 30000 de caractere + +Linia de tablespace se citeste asa: + +``` +TABLESPACE SYSTEM: 65 - alocat=540MB max=600MB liber=5MB + ^^ ^^^ + | liber in datafile-ul deja alocat + cat mai poate creste = 5 + (600-540) = 65 MB +``` + +**Emailul vine doar la prag depasit. Tacere = totul in regula** — dar tacerea inseamna si "jobul +nu a rulat", deci la un client care alerta si s-a oprit brusc se confirma cu ultima `dataora` din +`DIAG_SPATIU_LOG`, nu se presupune ca s-a rezolvat. + +## 4. Cum se citesc emailurile (Thunderbird Portable, local) + +Conectorul Gmail din Claude vede **doar** `mmarius28@gmail.com`. Conturile de lucru se citesc din +mbox-urile Thunderbird Portable: + +``` +D:\UTIL\portable\PortableApps\ThunderbirdPortable\Data\profile\ImapMail\mail.romfast.ro\INBOX +``` + +- `mail.romfast.ro` = **`marius.mutu@romfast.ro`** (server3 in `prefs.js`) — contul cautat +- `mail.romfast-1.ro` = `office@romfast.ro` (server8) +- restul conturilor sunt vechi de ani +- profilul din `%APPDATA%\Thunderbird\Profiles` e gol si induce in eroare — **instalarea folosita e + cea portabila de pe D:**; se confirma cu `Get-Process thunderbird | Select Path` + +Varianta cu scriptul din COMUN: + +```powershell +powershell -File D:\roa\roagest\comun\utile\citeste_email.ps1 -Cauta 'Diagnostic spatiu' -Ultimele 10 +powershell -File D:\roa\roagest\comun\utile\citeste_email.ps1 -Nr [-Linii 200] +``` + +Varianta fara script, care extrage direct toate diagnosticele (expeditor + subiect + alerte): + +```powershell +$f='D:\UTIL\portable\PortableApps\ThunderbirdPortable\Data\profile\ImapMail\mail.romfast.ro\INBOX' +$from='' +Get-Content $f -ReadCount 0 | ForEach-Object { $_ } | ForEach-Object { + if ($_ -like 'From: *') { $from = $_.Substring(6) } + elseif ($_ -like 'Subject: Diagnostic spatiu*') { "`n### $($_.Substring(9)) [$from]" } + elseif ($_ -like 'TABLESPACE *') { " $_" } +} +``` + +Capcane la citire: + +- **nu da `Grep`/ripgrep pe folderul de mail** — `INBOX.sbd\Sent` are ~2.5 GB si cautarea expira; + tinteste fisierul `INBOX` direct +- numerotarea liniilor difera intre unelte (mbox-ul are linii cu `\r` singur) — pentru `-Nr` + foloseste numarul dat de `citeste_email.ps1` +- Thunderbird tine fisierul deschis → citire doar cu `FileShare::ReadWrite` +- mesajele sunt in ordine cronologica, **cel mai nou la sfarsitul fisierului**, separator + `From - ` + +## 5. Triaj: ce fac cand vine o alerta + +1. **Verifica intai daca alerta e reala.** `max <= 2048 MB` + `poate_creste` peste 15% din max = + fals pozitiv din pragul absolut → clientul n-are `co_2026_08_06_01`. Se stinge singura la + urmatoarea actualizare, nu se atinge baza. +2. **Alerta reala pe SYSTEM/SYSAUX plafonat mic** — tiparul SIGMA: blocheaza `PACK_UPDATE`. + Continua cu `COMUN\docs\depanare-pack-update.md`. +3. **Alerta reala pe tablespace-ul de date** — cere contextul (top segmente cu `DetaliuSegment`, + disc) din email sau din `DIAG_SPATIU_LOG`, apoi: + - segmente `TEMPORARY` orfane intr-un tablespace permanent → `v$sort_usage` gol? curatare + fortata ca `SYS` (vezi capcanele din `depanare-spatiu-oracle.md`) + - LOB umflat → `alter table t move lob (col) store as (...)`, **nu** `shrink space` pe MSSM + (`ORA-10635`) + - tabele de log ale aplicatiei crescute nelimitat +4. **Nu se vede din SQL** (fisiere `.aud`, alert log, trace): `diag_spatiu.ps1 -Disc`, doar pe + servere Windows. +5. **Intai ridici plafonul, apoi cureti** — curatenia insasi poate esua din lipsa de spatiu. + +## 6. Tunel SSH catre serverul unui client + +Regula din `COMUN\docs\local\oracle.md`: tunelul spre productie se foloseste **doar cand acel +server e chiar subiectul investigatiei, si atunci strict read-only**. Testele se fac pe +`ROA_CENTRAL`, nu prin tunel. + +Profilele Bitvise SSH Client stau in **`D:\GoogleDrive\.tlp`** (ex. `sigma.tlp` → +`romfast@82.137.26.46:22122`). Profilul are parola si cheia gazdei salvate si primeste regulile de +forwarding **de la server** (`ROA Oracle` = `127.0.0.1:1521`, `ROA Update` = `127.0.0.1:80` — +a doua esueaza cu Windows error 10013, e normal si nu incurca). + +```powershell +# 0. verifica intai ca nu e deja un tunel deschis spre ALT client +Get-NetTCPConnection -State Listen -LocalPort 1521 + +# 1. deschide tunelul (fara -c2s: regulile vin de la server; `--%` opreste parsarea PowerShell) +& 'C:\Program Files (x86)\Bitvise SSH Client\stnlc.exe' --% -profile=d:\GoogleDrive\sigma.tlp -noRegistry=y + +# 2. conecteaza-te (alias TNS pe 127.0.0.1, SQL-ul dintr-un fisier, nu prin pipe) +& 'D:\ROA\instantclient_19_18\sqlplus.exe' -L -S 'contafin_oracle/ROMFASTSOFT@ROA_SIGMA' '@diag.sql' + +# 3. INCHIDE tunelul cand ai terminat +Get-Process stnlc | Stop-Process -Force +``` + +Capcane: + +- `-profile=` si un host pozitional **nu merg impreuna** (`ERROR: The host and -profile parameters + cannot be used together`) — daca dai si `-c2s=`, scrie regulile cu **virgula**, nu cu doua puncte. +- aliasurile de client din `D:\ROA\instantclient_19_18\tnsnames.ora` tintesc toate + `127.0.0.1:1521` (`ROA_SIGMA` → `SID=XE`), deci **un tunel gresit te duce tacut la alt client** — + de aici verificarea de la pasul 0 si `select instance_name, host_name from v$instance` ca prima + interogare. +- serverele de client pot fi Oracle **11.2 XE** (SIGMA e `11.2.0.2` pe `DESKTOP-ETLNAPG`) — plafonul + editiei e 11 GB, iar unele coloane din `dba_scheduler_*` lipsesc. + +## 7. Situatia la 08.08.2026 (din INBOX) + +Primele diagnostice in INBOX sunt din 05.08.2026 (jobul a fost livrat pe 03.08). + +| Data | Client (expeditor) | Baza | Alerta | Verdict | +|---|---|---|---|---| +| 05–08.08 | `automotive` | XE | `SYSTEM: 65 - alocat=540MB max=600MB liber=5MB` | **reala, cronica, neschimbata 4 zile** | +| 05–06.08 | `automotive` | XE | `UNDOTBS1: ~487 / max 500MB` | fals pozitiv; **dispare din 07.08** = pack nou aplicat | +| 05.08 | `acn` | ROA | `ROA: 2141.81 / max 32767.98MB` (6.5%) | reala | +| 06.08 | `acn` | ROA | `ROA: 1716.81 / max 32767.98MB` (5.2%) | reala, −425 MB/zi; rulare manuala repetata la 10:48 | +| 07–08.08 | `acn` | — | tacere | probabil curatenia din 06.08 (segmente `TEMPORARY` orfane + `move lob`) — **de confirmat** | +| 06–07.08 | `sigma` | XE | `SYSTEM: ~1481 / max 2000MB` (74% liber), `UNDOTBS1: ~480 / max 500MB` | fals pozitiv; **verificat prin tunel — nimic de facut** (vezi mai jos) | +| 05–06.08 | `clever` | XEPDB1 | `UNDOTBS2: ~2013 / max 2048MB` (98% liber) | fals pozitiv; **dispare din 07.08** | + +**Singura problema reala ramasa: `automotive`, `SYSTEM` plafonat la 600 MB.** Nu se misca de 4 +zile, deci nimeni n-a intervenit; e exact tiparul care blocheaza actualizarea. + +### AUTOMOTIVE — verificat prin tunel, 08.08.2026 (read-only) + +`xe 11.2.0.2` pe host `SERVER` (`78.96.115.213`, profil `automotive.tlp`). **Alerta e reala si +cauza e identificata** — acelasi tipar ca la SIGMA pe 03.08: + +| | | +|---|---| +| Datafile | `E:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF` | +| Dimensiune / plafon | 540 MB / **600 MB**, `autoextend YES next 10M` | +| Liber in datafile | **5 MB, o singura extenta** (+60 MB pana la plafon) | +| Cel mai mare segment din `SYSTEM` | **`SYS.INFO` = 80 MB**, peste `IDL_UB1$` (62) si `SOURCE$` (56) | +| `SYS.INFO` | **552.576 randuri** din 18.03.2023, ~13.578 randuri/luna (~2 MB/luna) | +| `AUD$` / `FGA_LOG$` / recyclebin | goale (.06 MB / .06 MB / 0) | + +Restul e sanatos: `ROA` 5440/32768 MB, `SYSAUX` 940/32768, `UNDOTBS1` 380/500, `USERS` 100/11264. +`DIAGSPATIU_ZILNIC` a rulat azi 06:00 cu **o singura alerta** (chiar `SYSTEM`), lantul de +actualizare e sanatos (`UPD_ISTORIC` `stare = 4` zilnic), iar scripturile `CO_2026_08_06_01/08` + +`SYS_2026_08_06_07` sunt deja in `UPD_DATABASE`. + +Deci nu e fals pozitiv si nu se rezolva de la sine: `SYS.INFO` creste ~2 MB/luna intr-un tablespace +cu 5 MB liberi. **Primul script care cere o extenta noua pica cu `ORA-01653`**, exact ca +`ff_2026_07_29_02_COMUN_TVA11.SQL` pe MARCU la SIGMA — `AUTH_PACK` scrie in `SYS.INFO` la fiecare +conectare. + +**Reparatie aplicata 08.08.2026**, in ordine (**intai plafonul, apoi curatenia** — curatenia poate +esua din lipsa de spatiu): + +```sql +-- 1. ca contafin_oracle (are ALTER DATABASE, verificat in session_privs - nu cere SYSDBA) +alter database datafile 'E:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF' + autoextend on next 50M maxsize 2000M; + +-- 2. ca SYSDBA (sys/romfastsoft@ROA_AUTOMOTIVE as sysdba) - privilegiile ANY nu se aplica pe +-- schema SYS cat timp O7_DICTIONARY_ACCESSIBILITY=FALSE +truncate table sys.info; -- 552.581 randuri, 80 MB -> 0.06 MB +``` + +Rezultat: `SYSTEM` 540 MB alocati / **2000 MB** plafon, 84.94 MB liberi in datafile, +**1544.94 MB de crestere (77.2%)** — mult peste pragul de alerta (15% din 2000 = 300 MB), deci +jobul tace de maine. In `SYSTEM` au ramas doar segmente de dictionar (`IDL_UB1$` 62 MB, `SOURCE$` +56 MB, `IDL_UB2$` 25 MB), de neatins fara export/import si fara crestere semnificativa. + +Plafonul de 11 GB al lui XE 11g e pe **date utilizator** — `SYSTEM` nu intra la socoteala, deci +ridicarea la 2000 MB nu apropie baza de limita editiei. + +### SIGMA — verificat prin tunel, 08.08.2026 (read-only) + +`xe 11.2.0.2` pe `DESKTOP-ETLNAPG`. **Nu e nimic de reparat**, alarma s-a stins singura: + +- toate tablespace-urile sanatoase: `SYSTEM` 650/2000 MB (1481 MB de crestere, 74%), `ROA` + 2048/32768, `SYSAUX` 840/32768, `UNDOTBS1` 430/500, `USERS` 100/11264; plafonul XE 11 GB e + folosit doar 2.1 GB +- `DIAGSPATIU_ZILNIC` a rulat azi 06:00 `SUCCEEDED`, 169 randuri in `DIAG_SPATIU_LOG`, **toate cu + `prag_depasit = 0`** → de aceea n-a venit email azi +- `PACK_DIAG_SPATIU` recompilat de lantul de actualizare (`UPD_ISTORIC` are `stare = 4` in fiecare + zi); `CO_2026_08_06_01`, `CO_2026_08_06_08` si `SYS_2026_08_06_07` sunt in `UPD_DATABASE` si + aplicate — corectia de praguri a ajuns intre rularea din 07.08 si cea din 08.08 +- **cauza incidentului din 03.08 e curatata**: `SYS.INFO` are acum 0.44 MB. `SYSTEM` e ocupat de + dictionar real (`IDL_UB1$` 79 MB, `SOURCE$` 72 MB, `IDL_UB2$` 30 MB …), de neatins fara + export/import — dar nici nu deranjeaza la plafonul de 2000 MB +- de urmarit, nu de reparat: `DBA_SCHEDULER_JOBS.FAILURE_COUNT = 47` pe `UPDATEROA_ZILNIC`, desi + toate rularile din ultimele 7 zile sunt `SUCCEEDED` si `UPD_ISTORIC` ajunge la `stare = 4` — pare + contor istoric, dinainte de 01.08 + +## 8. Plafoane si limitari de pus la instalare (ca sa nu se repete) + +Ambele incidente reale de pana acum (SIGMA 03.08, AUTOMOTIVE 08.08) au **aceeasi cauza structurala**, +si e una pe care o produce chiar instalarea noastra: `SYS.INFO` — logul de login al ROA — se creeaza +**in tablespace-ul `SYSTEM`** si nu se purja niciodata, intr-un `SYSTEM` plafonat mic la instalarea +Oracle. + +`proxmox/lxc108-oracle/roa-windows-setup/sql/sys-objects.sql:93` + +```sql +CREATE TABLE SYS.INFO ( + INFO CLOB, DATAORA TIMESTAMP(6) DEFAULT SYSTIMESTAMP, LOCATIA VARCHAR2(200) NULL +) TABLESPACE SYSTEM -- <-- aici +``` + +`SYS.pINFO` (`sys-objects.sql:131`) scrie in ea la fiecare conectare, din `AUTH_PACK` — ~7 randuri +per login, **~13.500 randuri/luna ≈ 2 MB/luna** (masurat la AUTOMOTIVE: 552.581 randuri / 80 MB +acumulate din 18.03.2023). Nimic din baza nu o citeste si nimic nu o goleste. + +### Valori de referinta + +| Ce | Valoare | De ce | +|---|---|---| +| `SYSTEM.DBF` maxsize | **2000M**, `autoextend on next 50M` | 600 MB (implicit la unele instalari) se umple in ~2 ani doar din `SYS.INFO`; dictionarul singur ocupa ~200 MB | +| `SYS.INFO` | purjare periodica, sau creata in `ROA` | fara asta, orice plafon se atinge in cele din urma | +| Tablespace `ROA` | `SIZE 1000M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED` (`sql/create-tablespace.sql:59`) | deja bine — dar pe XE limita editiei taie oricum la 11/12 GB | +| `SYSAUX`, audit, AWR | vezi „Preventie ORA-12954" din `docs/00-INSTALL-ORACLE-XE.md` | auto tasks + audit policies + AWR umflu `SYSAUX` pana la limita | + +```sql +-- de rulat ca SYSDBA la instalare, dupa crearea bazei +alter database datafile '\SYSTEM.DBF' autoextend on next 50M maxsize 2000M; +``` + +### Ce s-a schimbat in installer (08.08.2026) + +| Fisier | Modificare | +|---|---| +| `sql/sys-objects.sql` | `SYS.INFO` se creeaza in tablespace-ul `ROA` (tabela **si** segmentul LOB), nu in `SYSTEM`; daca `ROA` inca nu exista, cade inapoi pe `SYSTEM` cu avertisment si comanda de mutare | +| `sql/scheduler-jobs.sql` | job nou `SYS.SYSINFO_PURJARE_ZILNIC` — zilnic la 03:30, retentie 90 zile, stergere in transe de 10.000 de randuri ca sa nu umfle UNDO. **Creat `ENABLED`** (spre deosebire de jobul de actualizare): nu are nimic de configurat, iar uitat dezactivat reproduce exact problema pe care o rezolva | +| `sql/uninstall-roa.sql` | dezinstalarea sterge si jobul | +| `docs/00-INSTALL-ORACLE-XE.md`, `docs/00-INSTALL-ORACLE-SE.md` | pas post-instalare pentru plafonul `SYSTEM` + mutarea `SYS.INFO` la instalarile vechi | + +Jobul e in schema `SYS` pentru ca privilegiile `ANY` nu se aplica pe obiectele `SYS` cat timp +`O7_DICTIONARY_ACCESSIBILITY = FALSE` — din `CONTAFIN_ORACLE` ar iesi `ORA-01031`. + +### Livrarea catre clientii existenti + +`D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\08\sys_2026_08_08_02_SYS_INFO_TABLESPACE_PURJARE.sql` +(repo COMUN / SVN) face acelasi lucru pe bazele deja instalate, in trei pasi: purjare la 90 de zile +→ `alter table sys.info move tablespace ROA lob (info) store as (tablespace ROA)` → crearea jobului. + +Pasii 1 si 2 au `EXCEPTION WHEN OTHERS THEN NULL` **intentionat**: o eroare acolo (lipsa de spatiu +in `ROA`, tabela blocata) nu are voie sa opreasca lantul de actualizare al clientului, iar ce nu s-a +facut se vede a doua zi in alerta `DIAGSPATIU_ZILNIC`. Scris la nivel Oracle 10.2, idempotent, CRLF. + +**Nepublicat inca** — publicarea se face cu `COMUN\utile\publicare_scripturi.ps1` si e o actiune +catre toti clientii. + +Pointeri incrucisati: [`00-INSTALL-ORACLE-XE.md`](../proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md) +si [`00-INSTALL-ORACLE-SE.md`](../proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md). + +## 9. Legaturi in acest repo + +| Document | Ce e | +|---|---| +| [`diagnostic-ora-65114-spatiu.md`](diagnostic-ora-65114-spatiu.md) | `ROA_CENTRAL`, 02.08.2026 — `ORA-65114`, topologia 10.0.20.121, ce trebuie masurat | +| [`curatenie-spatiu-oracle.sql`](curatenie-spatiu-oracle.sql) | SQL-uri gata scrise de curatenie tintita | +| [`../proxmox/lxc108-oracle/clienti/oracle-xe-21c/`](../proxmox/lxc108-oracle/clienti/oracle-xe-21c/) | ROMPETROL ENERGY — `ORA-12954`, recreare PDB (13.5 GB → 3 GB) | +| [`../proxmox/lxc108-oracle/clienti/README.md`](../proxmox/lxc108-oracle/clienti/README.md) | indexul cazurilor de client | + +--- + +**Ultima actualizare:** 08.08.2026 diff --git a/proxmox/lxc108-oracle/clienti/README.md b/proxmox/lxc108-oracle/clienti/README.md index cb32dc6..853a5af 100644 --- a/proxmox/lxc108-oracle/clienti/README.md +++ b/proxmox/lxc108-oracle/clienti/README.md @@ -15,6 +15,7 @@ scripturile reutilizabile generate din fiecare caz. | Procedură | Fișier | |-----------|--------| | Import DMP client pentru teste în LXC 108 | [`import-test-lxc108.md`](import-test-lxc108.md) | +| Diagnostic spațiu — job zilnic `DIAGSPATIU_ZILNIC`, praguri, citirea emailurilor de alertă, triaj | [`../../../docs/diagnostic-spatiu-clienti.md`](../../../docs/diagnostic-spatiu-clienti.md) | ## Convenție diff --git a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md index d4fca28..3c6dcc4 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md +++ b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md @@ -173,6 +173,35 @@ $env:PATH = "$env:ORACLE_HOME\bin;$env:PATH" sqlplus system/romfastsoft@localhost:1521/ROA ``` +### Plafonul SYSTEM și creșterea SYS.INFO (OBLIGATORIU!) + +Standard Edition nu are limita de date a lui XE, dar `SYSTEM` are aceeași problemă: `SYS.INFO` — +logul de login al ROA — crește ~13.500 rânduri (~2 MB) pe lună, scrise de `SYS.pINFO` din +`AUTH_PACK` la fiecare conectare, și **nu se purjează niciodată**. Când `SYSTEM` se umple, **orice** +script de actualizare pică cu `ORA-01653: unable to extend table SYS.INFO`, indiferent ce conține +(SIGMA 03.08.2026, AUTOMOTIVE 08.08.2026). + +Instalările noi sunt acoperite: `sys-objects.sql` creează `SYS.INFO` în tablespace-ul `ROA`, iar +`scheduler-jobs.sql` creează jobul `SYS.SYSINFO_PURJARE_ZILNIC` (03:30, retenție 90 zile). +**Plafonul lui `SYSTEM` rămâne de ridicat manual:** + +```sql +-- ca SYSDBA, după crearea bazei; înlocuiește calea cu cea reală din dba_data_files +ALTER DATABASE DATAFILE '\SYSTEM01.DBF' AUTOEXTEND ON NEXT 50M MAXSIZE 2000M; + +SELECT file_name, ROUND(bytes/1048576,2) mb, ROUND(maxbytes/1048576,2) max_mb, autoextensible + FROM dba_data_files WHERE tablespace_name = 'SYSTEM'; +``` + +La o instalare mai veche, unde `SYS.INFO` a rămas în `SYSTEM`: + +```sql +ALTER TABLE SYS.INFO MOVE TABLESPACE ROA LOB (INFO) STORE AS (TABLESPACE ROA); +``` + +> Diagnosticul zilnic care prinde asta automat, pragurile și triajul alertelor: +> `E:\proiecte\ROMFASTSQL\docs\diagnostic-spatiu-clienti.md`. + ## Memory Configuration (Opțional) Pentru Standard Edition cu 16GB RAM: diff --git a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md index 26f4927..bf7a6fd 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md +++ b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md @@ -310,6 +310,45 @@ SELECT policy_name, enabled_option FROM audit_unified_enabled_policies; --- +## Post-Installation: Plafonul SYSTEM si cresterea SYS.INFO (OBLIGATORIU!) + +Setarile de mai sus apara `SYSAUX`. **`SYSTEM` are o problema separata**, care a blocat deja doi +clienti (SIGMA 03.08.2026, AUTOMOTIVE 08.08.2026): `SYS.INFO` — logul de login al ROA, creat de +`sql/sys-objects.sql` — creste ~13.500 randuri (~2 MB) pe luna, scrise de `SYS.pINFO` din +`AUTH_PACK` la fiecare conectare, si **nu se purja niciodata**. + +Cand `SYSTEM` se umple, **orice** script de actualizare pica cu `ORA-01653: unable to extend table +SYS.INFO`, indiferent ce contine — pentru ca `AUTH_PACK` scrie acolo la conectare. Simptomul arata a +eroare de SQL, dar nu e. + +Instalarile noi sunt acoperite: `sys-objects.sql` creeaza `SYS.INFO` in tablespace-ul `ROA`, iar +`scheduler-jobs.sql` creeaza jobul `SYS.SYSINFO_PURJARE_ZILNIC` (03:30, retentie 90 zile). +**Plafonul lui `SYSTEM` ramane insa de ridicat manual**, pentru ca dictionarul singur ocupa ~200 MB +si unele instalari il plafoneaza la 600 MB: + +```sql +-- ca SYSDBA, dupa crearea bazei; inlocuieste calea cu cea reala din dba_data_files +ALTER DATABASE DATAFILE '\SYSTEM.DBF' AUTOEXTEND ON NEXT 50M MAXSIZE 2000M; + +-- verificare +SELECT file_name, ROUND(bytes/1048576,2) mb, ROUND(maxbytes/1048576,2) max_mb, autoextensible + FROM dba_data_files WHERE tablespace_name = 'SYSTEM'; +``` + +Plafonul de 11/12 GB al editiei XE se aplica pe **date utilizator** — `SYSTEM` si `SYSAUX` nu intra +la socoteala, deci ridicarea la 2000 MB nu apropie baza de limita. + +La o instalare mai veche, unde `SYS.INFO` a ramas in `SYSTEM`, mutarea se face cu: + +```sql +ALTER TABLE SYS.INFO MOVE TABLESPACE ROA LOB (INFO) STORE AS (TABLESPACE ROA); +``` + +> Diagnosticul zilnic care prinde asta automat, pragurile lui si triajul alertelor: +> `E:\proiecte\ROMFASTSQL\docs\diagnostic-spatiu-clienti.md`. + +--- + ## Gotchas Oracle XE 21c (Windows) | Problema | Solutie | diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql b/proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql index 67f395c..094cae9 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql @@ -4,8 +4,9 @@ -- Creates Oracle Scheduler jobs for automatic daily updates: -- - UPDATEROA_ZILNIC: Daily ROA application update (04:00) -- - UPDATERTVAI_ZILNIC: Daily RTVAI module update (04:30) +-- - SYS.SYSINFO_PURJARE_ZILNIC: purjare SYS.INFO la 90 zile (03:30) - creat ENABLED -- --- Jobs are created DISABLED by default - enable manually after verification +-- Update jobs are created DISABLED by default - enable manually after verification -- -- Usage: -- sqlplus sys/password@service as sysdba @scheduler-jobs.sql @@ -31,7 +32,7 @@ PROMPT -- SECTION 1: DROP EXISTING JOBS (if any) -- ============================================================================ -PROMPT [1/4] Removing existing jobs (if any)... +PROMPT [1/5] Removing existing jobs (if any)... BEGIN BEGIN @@ -49,6 +50,14 @@ BEGIN WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(' UPDATERTVAI_ZILNIC job did not exist (OK)'); END; + + BEGIN + DBMS_SCHEDULER.DROP_JOB(job_name => 'SYS.SYSINFO_PURJARE_ZILNIC', force => TRUE); + DBMS_OUTPUT.PUT_LINE(' Dropped existing SYSINFO_PURJARE_ZILNIC job'); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' SYSINFO_PURJARE_ZILNIC job did not exist (OK)'); + END; END; / @@ -56,7 +65,7 @@ END; -- SECTION 2: CREATE UPDATEROA_ZILNIC JOB -- ============================================================================ -PROMPT [2/4] Creating UPDATEROA_ZILNIC job... +PROMPT [2/5] Creating UPDATEROA_ZILNIC job... BEGIN DBMS_SCHEDULER.CREATE_JOB( @@ -121,7 +130,7 @@ END; -- SECTION 3: CREATE UPDATERTVAI_ZILNIC JOB -- ============================================================================ -PROMPT [3/4] Creating UPDATERTVAI_ZILNIC job... +PROMPT [3/5] Creating UPDATERTVAI_ZILNIC job... BEGIN DBMS_SCHEDULER.CREATE_JOB( @@ -145,10 +154,60 @@ END; / -- ============================================================================ --- SECTION 4: GRANT SCHEDULER PRIVILEGES TO CONTAFIN_ORACLE +-- SECTION 4: CREATE SYS.SYSINFO_PURJARE_ZILNIC JOB +-- ============================================================================ +-- SYS.INFO e logul de login scris de SYS.pINFO din AUTH_PACK: ~7 randuri per conectare, +-- ~13.500 randuri (~2 MB) pe luna, si nimic din baza nu-l citeste. Fara purjare creste la +-- nesfarsit si, mai devreme sau mai tarziu, umple tablespace-ul in care sta -> ORA-01653 la +-- primul script de actualizare care cere o extenta noua. +-- +-- Jobul e in schema SYS pentru ca privilegiile ANY nu se aplica pe obiectele SYS cat timp +-- O7_DICTIONARY_ACCESSIBILITY = FALSE; din CONTAFIN_ORACLE ar iesi ORA-01031. +-- Stergerea se face in transe de 10.000 de randuri, ca prima rulare (care poate gasi sute de +-- mii de randuri acumulate) sa nu umfle UNDO. +-- +-- Retentie: 90 de zile, aceeasi cu DIAG_SPATIU_LOG. -- ============================================================================ -PROMPT [4/4] Granting scheduler privileges to CONTAFIN_ORACLE... +PROMPT [4/5] Creating SYS.SYSINFO_PURJARE_ZILNIC job... + +BEGIN + DBMS_SCHEDULER.CREATE_JOB( + job_name => 'SYS.SYSINFO_PURJARE_ZILNIC', + job_type => 'PLSQL_BLOCK', + job_action => q'[ +declare + lnRanduri number; +begin + loop + delete from sys.info + where dataora < systimestamp - interval '90' day + and rownum <= 10000; + lnRanduri := sql%rowcount; + commit; + exit when lnRanduri = 0; + end loop; +end; +]', + start_date => TRUNC(SYSDATE) + 1 + 3.5/24, -- Tomorrow at 03:30 + repeat_interval => 'FREQ=DAILY;INTERVAL=1', + end_date => NULL, + enabled => TRUE, -- ENABLED: nu are nimic de configurat, iar uitat dezactivat + -- reproduce exact problema pe care o rezolva + auto_drop => FALSE, + comments => 'Purjare SYS.INFO la 90 zile - runs at 03:30' + ); + + DBMS_OUTPUT.PUT_LINE(' SYSINFO_PURJARE_ZILNIC job created (ENABLED)'); + DBMS_OUTPUT.PUT_LINE(' Schedule: Daily at 03:30, retentie 90 zile'); +END; +/ + +-- ============================================================================ +-- SECTION 5: GRANT SCHEDULER PRIVILEGES TO CONTAFIN_ORACLE +-- ============================================================================ + +PROMPT [5/5] Granting scheduler privileges to CONTAFIN_ORACLE... -- Grant CREATE JOB privilege (may already exist) BEGIN @@ -192,17 +251,18 @@ PROMPT Scheduler Jobs Verification PROMPT ======================================== PROMPT -PROMPT CONTAFIN_ORACLE scheduled jobs: -SELECT job_name, +PROMPT ROA scheduled jobs: +SELECT owner, + job_name, job_type, enabled, state, TO_CHAR(next_run_date, 'YYYY-MM-DD HH24:MI:SS') AS next_run, repeat_interval FROM dba_scheduler_jobs -WHERE owner = 'CONTAFIN_ORACLE' - AND job_name IN ('UPDATEROA_ZILNIC', 'UPDATERTVAI_ZILNIC') -ORDER BY job_name; +WHERE (owner = 'CONTAFIN_ORACLE' AND job_name IN ('UPDATEROA_ZILNIC', 'UPDATERTVAI_ZILNIC')) + OR (owner = 'SYS' AND job_name = 'SYSINFO_PURJARE_ZILNIC') +ORDER BY owner, job_name; PROMPT PROMPT Job arguments for UPDATEROA_ZILNIC: @@ -217,8 +277,9 @@ PROMPT ======================================== PROMPT Scheduler Jobs Creation Complete PROMPT ======================================== PROMPT -PROMPT IMPORTANT: Jobs are created DISABLED by default. -PROMPT To enable a job after verifying configuration: +PROMPT IMPORTANT: Update jobs are created DISABLED by default. +PROMPT SYS.SYSINFO_PURJARE_ZILNIC is created ENABLED (nothing to configure). +PROMPT To enable an update job after verifying configuration: PROMPT PROMPT -- Enable UPDATEROA_ZILNIC PROMPT EXEC DBMS_SCHEDULER.ENABLE('CONTAFIN_ORACLE.UPDATEROA_ZILNIC'); diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/sys-objects.sql b/proxmox/lxc108-oracle/roa-windows-setup/sql/sys-objects.sql index fec8b92..48dd688 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/sql/sys-objects.sql +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/sys-objects.sql @@ -77,21 +77,37 @@ END; / PROMPT [3/11] Creating SYS.INFO table (logging)... +-- IMPORTANT: SYS.INFO e log de aplicatie, nu obiect de dictionar - SYS.pINFO scrie ~7 randuri la +-- fiecare conectare (~13.500 randuri / ~2 MB pe luna) si nimic nu o citeste. Tinuta in SYSTEM, +-- umple tablespace-ul dictionarului si **orice** script de actualizare pica apoi cu +-- ORA-01653 (SIGMA 03.08.2026, AUTOMOTIVE 08.08.2026). De aceea se creeaza in tablespace-ul +-- aplicatiei, iar cresterea e marginita de jobul SYSINFO_PURJARE_ZILNIC (scheduler-jobs.sql). DECLARE v_count NUMBER; + v_ts VARCHAR2(30); BEGIN SELECT COUNT(*) INTO v_count FROM dba_tables WHERE owner = 'SYS' AND table_name = 'INFO'; IF v_count > 0 THEN DBMS_OUTPUT.PUT_LINE(' Table INFO already exists, skipping.'); ELSE + SELECT MAX(tablespace_name) INTO v_ts + FROM dba_tablespaces WHERE tablespace_name = 'ROA'; + + IF v_ts IS NULL THEN + v_ts := 'SYSTEM'; + DBMS_OUTPUT.PUT_LINE(' WARNING: tablespace ROA missing - INFO falls back to SYSTEM.'); + DBMS_OUTPUT.PUT_LINE(' Run create-tablespace.sql first, then move it:'); + DBMS_OUTPUT.PUT_LINE(' ALTER TABLE SYS.INFO MOVE TABLESPACE ROA LOB (INFO) STORE AS (TABLESPACE ROA);'); + END IF; + EXECUTE IMMEDIATE ' CREATE TABLE SYS.INFO ( INFO CLOB, DATAORA TIMESTAMP(6) DEFAULT SYSTIMESTAMP, LOCATIA VARCHAR2(200) NULL - ) TABLESPACE SYSTEM'; - DBMS_OUTPUT.PUT_LINE(' Table INFO created.'); + ) TABLESPACE ' || v_ts || ' LOB (INFO) STORE AS (TABLESPACE ' || v_ts || ')'; + DBMS_OUTPUT.PUT_LINE(' Table INFO created in tablespace ' || v_ts || '.'); END IF; END; / diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/uninstall-roa.sql b/proxmox/lxc108-oracle/roa-windows-setup/sql/uninstall-roa.sql index 86ab0b6..89c8e41 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/sql/uninstall-roa.sql +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/uninstall-roa.sql @@ -216,6 +216,12 @@ BEGIN EXECUTE IMMEDIATE 'DROP VIEW SYS.VAUTH_SERII'; EXCEPTION WHEN OTHERS THEN NULL; END; / +-- Drop scheduler job (SYS.INFO purge) +BEGIN DBMS_SCHEDULER.DROP_JOB(job_name => 'SYS.SYSINFO_PURJARE_ZILNIC', force => TRUE); + DBMS_OUTPUT.PUT_LINE(' Dropped SYS.SYSINFO_PURJARE_ZILNIC'); +EXCEPTION WHEN OTHERS THEN NULL; END; +/ + -- Drop procedures BEGIN EXECUTE IMMEDIATE 'DROP PROCEDURE SYS.UPDATESQLPLUS'; DBMS_OUTPUT.PUT_LINE(' Dropped SYS.UPDATESQLPLUS');