From 2ee51c7318b9e6f8b716dc9258b56e7cbb794263 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Sat, 25 Apr 2026 19:48:18 +0000 Subject: [PATCH] docs(clienti): index ROMPETROL ENERGY ORA-12954 PDB recreation case Add a top-level case index at lxc108-oracle/clienti/README.md and a narrative README inside oracle-xe-21c/ that names ROMPETROL ENERGY explicitly, describes symptom -> diagnostic -> what failed -> what worked, and lists each numbered SQL with its role in the import phases. Wire the case into discoverable entry points: - proxmox/lxc108-oracle/README.md: new "clienti/" subsection - proxmox/README.md: tree + nav links - /workspace/romfastsql/CLAUDE.md: entry points Future "Rompetrol Energy" / "ORA-12954" / "recreare PDB" searches now hit the docs from the master indices instead of via grep on schema name. Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 2 + proxmox/README.md | 6 + proxmox/lxc108-oracle/README.md | 11 ++ proxmox/lxc108-oracle/clienti/README.md | 27 +++ .../clienti/oracle-xe-21c/README.md | 157 ++++++++++++++++++ 5 files changed, 203 insertions(+) create mode 100644 proxmox/lxc108-oracle/clienti/README.md create mode 100644 proxmox/lxc108-oracle/clienti/oracle-xe-21c/README.md diff --git a/CLAUDE.md b/CLAUDE.md index d145d92..76cc8db 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -45,6 +45,8 @@ 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` +- **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` ## Infrastructure Commands diff --git a/proxmox/README.md b/proxmox/README.md index e3b3ffd..d61eeb0 100644 --- a/proxmox/README.md +++ b/proxmox/README.md @@ -38,6 +38,10 @@ proxmox/ │ │ ├── README.md │ │ ├── 00-MASTER-MIGRATION.sh │ │ └── ... +│ ├── clienti/ # Cazuri concrete clienți (depanare/recreare DB) +│ │ ├── README.md # Index cazuri +│ │ └── oracle-xe-21c/ # ROMPETROL ENERGY: recreare PDB după ORA-12954 +│ ├── roa-windows-setup/ # Scripturi setup ROA pe Windows + Oracle 21c │ └── sql/ │ ├── roa/ # SQL-uri Oracle 10g compatibilitate │ └── roa-romconstruct/ # Package PACK_CONTAFIN @@ -403,6 +407,8 @@ ssh root@10.0.20.201 "qm snapshot 302 pre-test --description 'Before ROA test'" - **Restart Oracle** → `lxc108-oracle/README.md` → "Restart Oracle" - **Scripturi migrare 10g→21c** → `lxc108-oracle/migration/README.md` - **SQL-uri Oracle 10g** → `lxc108-oracle/sql/roa/` +- **Cazuri clienți (depanare/recreare DB)** → `lxc108-oracle/clienti/README.md` +- **Caz ROMPETROL — recreare PDB Oracle XE 21c (ORA-12954)** → `lxc108-oracle/clienti/oracle-xe-21c/README.md` ### Windows VM 109 - Disaster Recovery - **Configurez RMAN backup** → `vm109-windows-dr/README.md` diff --git a/proxmox/lxc108-oracle/README.md b/proxmox/lxc108-oracle/README.md index 4f7f9a9..3d1bf64 100644 --- a/proxmox/lxc108-oracle/README.md +++ b/proxmox/lxc108-oracle/README.md @@ -841,6 +841,17 @@ SQL> SELECT username FROM dba_users; -- arată userii din ROA ## 📂 Subdirectoare +### clienti/ +Cazuri concrete de depanare / migrare bază de date la clienți, cu scripturi +reutilizabile generate din fiecare incident. + +| Caz | Director | Scop | +|-----|----------|------| +| **ROMPETROL ENERGY** (schemă `ROMPETROLE`) | `clienti/oracle-xe-21c/` | Recreare PDB Oracle XE 21c după ORA-12954 (12 GB depășiți) — diagnostic SYSAUX, drop+recreate PDB din `PDB$SEED`, reimport scheme | + +**Documentație:** [`clienti/README.md`](clienti/README.md) (index general) +și [`clienti/oracle-xe-21c/README.md`](clienti/oracle-xe-21c/README.md) (cazul ROMPETROL). + ### migration/ Scripturi pentru migrarea Oracle 10g → 21c XE: - `00-MASTER-MIGRATION.sh` - Script master orchestrare migrare diff --git a/proxmox/lxc108-oracle/clienti/README.md b/proxmox/lxc108-oracle/clienti/README.md new file mode 100644 index 0000000..90a262f --- /dev/null +++ b/proxmox/lxc108-oracle/clienti/README.md @@ -0,0 +1,27 @@ +# Cazuri clienți — istoric depanare Oracle + +Index al cazurilor concrete de depanare / migrare / recreare bază de date +întâlnite în producție la clienți. Conține diagnosticul, soluția aplicată și +scripturile reutilizabile generate din fiecare caz. + +## Cazuri documentate + +| Client | Schemă | Problemă | Soluție | Director | +|--------|--------|----------|---------|----------| +| **ROMPETROL ENERGY** | `ROMPETROLE` | Oracle XE 21c CDB plin (ORA-12954, limita 12 GB) — SYSAUX umflat de SQL Tuning Sets, AWR, audit policies. Cleanup parțial nu a recuperat spațiul (datafile-uri nu s-au putut shrink-ui). | Recreare PDB `XEPDB1` din `PDB$SEED` + reimport scheme cu `remap_tablespace=USERS:ROA`. Total alocat: 13.5 GB → ~3 GB. | [`oracle-xe-21c/`](oracle-xe-21c/) | + +## Convenție + +Fiecare caz are propriul director cu: + +- `README.md` — narațiune (simptom → diagnostic → ce s-a încercat → ce a mers → rezultat) +- documente de referință tehnică (`depanare-*.md`) +- scripturi/SQL-uri reutilizabile + +Materialul e **generic-izat** (numele schemei rămâne, dar parolele, datele clientului +sunt înlocuite cu placeholdere). Scripturile pot fi rulate la următorul client cu +aceeași problemă, doar înlocuind valori în config. + +--- + +**Last Updated:** 2026-04-25 diff --git a/proxmox/lxc108-oracle/clienti/oracle-xe-21c/README.md b/proxmox/lxc108-oracle/clienti/oracle-xe-21c/README.md new file mode 100644 index 0000000..a6fe070 --- /dev/null +++ b/proxmox/lxc108-oracle/clienti/oracle-xe-21c/README.md @@ -0,0 +1,157 @@ +# ROMPETROL ENERGY — Recreare PDB Oracle XE 21c după ORA-12954 + +**Client:** ROMPETROL ENERGY +**Schemă aplicație:** `ROMPETROLE` (parolă inițială: `ROMFASTSOFT`) +**Bază de date:** Oracle XE 21c (CDB `XE` + PDB `XEPDB1`) pe Windows +**Stadiu:** rezolvat — PDB recreat, total alocat redus de la 13.5 GB la ~3 GB + +## Simptom + +Aplicația nu mai putea scrie în baza de date. La operații de DML / cleanup: + +``` +ORA-12954: The request exceeds the maximum allowed database size of 12 GB. +``` + +Inclusiv `DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL` eșua cu același cod, deci +nici curățarea audit trail-ului nu mai era posibilă în-place. + +## Diagnostic + +Limita 12 GB a Oracle XE se aplică pe **suma `dba_data_files`** (spațiu alocat), +nu pe `dba_segments` (spațiu efectiv folosit). Datafile-urile pot fi 90% goale +și tot să atingă limita. + +Distribuție găsită la diagnostic: + +| Componentă | Alocat | +|------------|--------| +| SYSAUX | 7.8 GB (segmente reale: 7.5 GB) | +| UNDOTBS1 | 2.1 GB | +| SYSTEM + alte | rest | +| **Total** | **~13.5 GB** (peste limită) | + +Cauze SYSAUX umflat (în ordinea impactului): + +1. **SQL Tuning Sets** (`wri$_sqlset_*`) — ~5 GB acumulat +2. **AWR snapshots** — retention default + moving window baseline 8 zile +3. **Audit policies** active (`ORA_SECURECONFIG`, `ORA_LOGON_FAILURES`) → + AUDSYS umflat în PDB nou creat din `PDB$SEED` +4. **Auto tasks** (`sql tuning advisor`, `auto space advisor`) regenerează + constant date + +Vezi [`depanare-ora-12954-spatiu.md`](depanare-ora-12954-spatiu.md) pentru +queries-le de diagnostic. + +## Ce s-a încercat (parțial) + +1. `DROP` pe SQL Tuning Sets via `DBMS_SQLTUNE.DROP_SQLSET` — nu a eliberat + spațiul LOB-ului. **`TRUNCATE` direct pe `wri$_sqlset_*`** a funcționat. +2. `DBMS_ADVISOR.DELETE_EXPIRED_TASKS`, `MODIFY_SNAPSHOT_SETTINGS`, + `PURGE_STATS`, `PURGE DBA_RECYCLEBIN` — au eliberat segmentele. +3. `ALTER DATABASE DATAFILE ... RESIZE` pe SYSAUX — **eșec ORA-03297** (used + data beyond resize value). Pe XE 21c nu există `ALTER TABLESPACE ... SHRINK` + (apare doar din 23ai). Segmentele SYSAUX erau la high water mark și nu + puteau fi compactate. +4. `UNDOTBS1` — soluționat prin recreare (drop tablespace + recreate cu + datafile mic). Funcționează pentru UNDO, NU și pentru SYSAUX. + +**Concluzie:** SYSAUX nu se poate shrink-ui pe XE 21c → singura soluție +definitivă = **recrearea PDB-ului**. + +## Soluție: recreare PDB + reimport + +Pași (orchestrator: [`import/recreare_pdb.sql`](import/recreare_pdb.sql)): + +1. **Export** din PDB-ul vechi (înainte de orice DROP): + - `expdp` Data Pump pentru schemele aplicației: `CONTAFIN_ORACLE`, + `ROMPETROLE` + - `expdp` separat pentru tabele SYS custom (`SYS.AUTH_SERII`, + `SYS.AUTH_DETALII`, `SYS.INFO`) + - `export_pdb_complet.sql` din SQLPlus pentru obiectele de cod SYS + (packages, views, triggers, context) care nu se pot exporta cu Data Pump +2. **DROP PLUGGABLE DATABASE** `XEPDB1 INCLUDING DATAFILES` din `CDB$ROOT` +3. **CREATE PLUGGABLE DATABASE** `XEPDB1` din `PDB$SEED` cu admin user nou +4. **Faza 1 import** ([`import/11_import_master.sql`](import/11_import_master.sql)) — + infrastructură care trebuie să existe înainte de Data Pump: + tablespaces (01) → useri (02) → directories (03) → tabele SYS (04) → + context (08) +5. **Data Pump impdp** scheme aplicație cu + `remap_tablespace=USERS:ROA` (PDB-ul nou din seed nu are tablespace USERS) +6. **Data Pump impdp** tabele SYS custom cu `table_exists_action=APPEND` +7. **Faza 2 import** ([`import/11_import_master_faza2.sql`](import/11_import_master_faza2.sql)) — + obiecte dependente de date: cod SYS (05) → views (06) → triggers (07) → + granturi (09) → sinonime publice (10) +8. **Recompilare** — `DBMS_UTILITY.COMPILE_SCHEMA` pentru `CONTAFIN_ORACLE`, + `ROMPETROLE`, `SYS` +9. **Prevenție** — dezactivare auto tasks, retention AWR la min 8 zile, + `NOAUDIT POLICY` pe `ORA_SECURECONFIG` și `ORA_LOGON_FAILURES` + +## Rezultat + +| Componentă | Înainte | După recreare PDB | +|-----------|---------|-------------------| +| SYSAUX | 7.8 GB | 390 MB | +| SYSTEM | — | 370 MB | +| ROA | — | 2 GB | +| UNDOTBS1 | 2.1 GB | 165 MB | +| **Total alocat** | **13.5 GB** | **~3 GB** | + +Marjă recâștigată față de limita 12 GB: ~9 GB. + +## Scripturi în acest director + +| Fișier | Scop | +|--------|------| +| [`depanare-ora-12954-spatiu.md`](depanare-ora-12954-spatiu.md) | Ghid complet ORA-12954: diagnostic, cleanup, resize, gotcha-uri Oracle XE 21c | +| [`import/recreare_pdb.sql`](import/recreare_pdb.sql) | Orchestrator (drop PDB → recreate → faze import) | +| [`import/export_pdb_complet.sql`](import/export_pdb_complet.sql) | Export obiecte SYS care nu merg via Data Pump | +| [`import/01_tablespaces.sql`](import/01_tablespaces.sql) | Faza 1.1: ROA tablespace | +| [`import/02_useri.sql`](import/02_useri.sql) | Faza 1.2: `CONTAFIN_ORACLE`, `ROMPETROLE` | +| [`import/03_directories.sql`](import/03_directories.sql) | Faza 1.3: DIRECTORY objects | +| [`import/04_sys_tables.sql`](import/04_sys_tables.sql) | Faza 1.4: tabele SYS custom | +| [`import/05_sys_code_objects.sql`](import/05_sys_code_objects.sql) | Faza 2.1: packages SYS | +| [`import/06_sys_views.sql`](import/06_sys_views.sql) | Faza 2.2: views SYS | +| [`import/07_sys_triggers.sql`](import/07_sys_triggers.sql) | Faza 2.3: triggere SYS | +| [`import/08_context.sql`](import/08_context.sql) | Faza 1.5: application context | +| [`import/09_granturi.sql`](import/09_granturi.sql) | Faza 2.4: granturi | +| [`import/10_sinonime_publice.sql`](import/10_sinonime_publice.sql) | Faza 2.5: sinonime publice | +| [`import/11_import_master.sql`](import/11_import_master.sql) | Faza 1 master (rulează 01 → 04, 08) | +| [`import/11_import_master_faza2.sql`](import/11_import_master_faza2.sql) | Faza 2 master (rulează 05 → 07, 09 → 10) + verificare | +| [`import/cleanup_audit.sql`](import/cleanup_audit.sql) | Curățare audit trail (rulează doar dacă DB-ul nu e plin) | + +## Reutilizare la alți clienți + +Scripturile sunt parametrizate la nivel de schemă aplicație. Pentru un client +nou cu aceeași problemă (Oracle XE 21c plin): + +1. Adaptează `02_useri.sql` cu noua schemă (înlocuiește `ROMPETROLE`) +2. Adaptează `04_sys_tables.sql` și `09_granturi.sql` la nevoie +3. Rulează exportul, apoi `recreare_pdb.sql` pas cu pas +4. La pasul de prevenție, **rulează imediat** `NOAUDIT POLICY` și + `DBMS_AUTO_TASK_ADMIN.DISABLE` — dacă lași PDB-ul nou în default, problema + reapare în câteva luni + +## Lecții învățate + +1. **TRUNCATE > DROP pe SQL Tuning Sets** — DROP nu eliberează LOB-ul. +2. **Limita 12 GB = `dba_data_files`** — segmentele pot fi mici, contează + spațiul alocat. +3. **SYSAUX nu se poate shrink** pe XE 21c (fără 23ai). Singura ieșire = + recreare PDB. +4. **AWR retention >= 8 zile** — moving window baseline default e 8 zile, + nu poți seta sub fără să modifici baseline-ul (care nu există ca procedură + pe XE 21c). +5. **PDB nou din `PDB$SEED` are audit policies active** — `ORA_SECURECONFIG` + și `ORA_LOGON_FAILURES` umflă AUDSYS rapid. Dezactivare imediat după CREATE. +6. **`DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL` eșuează când DB-ul e plin** — chiar + și în restricted mode. Prevenția > intervenția. +7. **PDB nou nu are tablespace `USERS`** — toate impdp-urile cu obiecte pe + USERS necesită `remap_tablespace=USERS:ROA`. +8. **Pe Windows, `AS SYSDBA` în impdp/expdp** trebuie inclus în ghilimelele + conexiunii: `expdp "sys/...@XEPDB1 AS SYSDBA" ...` + +--- + +**Last Updated:** 2026-04-25 +**Autor depanare:** Marius Mutu