feat(oracle): granturi dictionar PACK_DIAG_SPATIU + sys-grants.sql legat in flux

Trei probleme gasite pregatind migrarea unui client de pe Oracle XE 11 pe XE 21c.

1. sys-grants.sql nu era rulat de niciun script PowerShell. Era referit doar din
   run-all-sys.sql, care se lanseaza manual. Pe orice instalare facuta cu
   RunAll.cmd lipseau sinonimele SYS (SYN_NEWSCHEMA, SYN_NEWSCHEMAJOB,
   EXECUTESCRIPTOS, SYN_PINFO), DMPDIR si granturile pe DBMS_SCHEDULER / UTL_* /
   DBMS_CRYPTO catre CONTAFIN_ORACLE. Legat ca STEP 3 in 04-create-synonyms-grants,
   dupa import - unde propriul header al fisierului spune ca trebuie rulat.

2. Granturile de dictionar cerute de PACK_DIAG_SPATIU lipseau complet. Consolidez
   sys_2026_08_03_05, sys_2026_08_03_07 si sys_2026_08_06_07 in sectiunea [5/5]
   din sys-grants.sql: SELECT direct pe 18 vederi dba_*/v$*, idempotent, cu
   ORA-00942 tratat pentru vederile absente pe alte editii/versiuni. Grantul prin
   rolul DBA nu ajunge - rolurile nu se aplica in pachetele cu drepturi de
   definitor, iar PACK_DIAG_SPATIU e exact asa; fara ele ramane INVALID si
   DIAGSPATIU_ZILNIC nu ruleaza.

3. Capcana la migrari: tabela de versiuni a lui PACK_MIGRARE traieste in
   CONTAFIN_ORACLE si vine cu DMP-ul, deci baza noua raporteaza scripturile sys_*
   drept aplicate si ROAACTUALIZARI le sare, desi in SYS nu exista nimic. De aceea
   obiectele si granturile SYS se pun la instalare, nu prin actualizator.
   Documentat in sys-updates/README.md si in ghidul nou.

07-verify-installation raporteaza nominal care dintre cele 18 granturi lipsesc.

Documentatie: docs/instalare-si-migrare-oracle.md - arbore de decizie intre
roa-windows-setup/ (client pe Windows), migration/ (Oracle in Docker pe LXC 108) si
new-roa-oracle-server/ (arhiva). Include de ce migration/ nu se foloseste la un
client Windows: creeaza PDB ROA cu OraclePass123, sinonime minimale, fara
SERVER_INFO / ROAUPDATE / ACL / sqlnet.ora, iar sys_objects.sql de acolo creeaza
INFO in SYSTEM - cauza cunoscuta a ORA-01653 la actualizare. Plus comenzile de
export din XE 11 / 10g si plafonul XE de 12 GB.

Corectat pe drum: dual-edition-test-plan si issues-se-prod indicau clonarea
VM 302 -> 303 pentru testul SE, dar 303 e ocupat de Win11-Adina. Mutat pe 304.

NETESTAT pe baza reala - VM 302 e oprit. Scripturile trec doar parse-check
PowerShell.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SzF1hf4aFS1tmJWpPMiwGp
This commit is contained in:
Marius
2026-08-25 15:46:28 +03:00
parent 85750d8ab3
commit afb8266407
13 changed files with 1267 additions and 757 deletions

View File

@@ -1,5 +1,10 @@
# ROA Oracle Database Setup for Windows
> **Nu ești sigur că acesta e directorul potrivit?**
> Vezi [`../docs/instalare-si-migrare-oracle.md`](../docs/instalare-si-migrare-oracle.md) —
> compară acest director cu `migration/` și `new-roa-oracle-server/` și conține arborele
> de decizie.
> **Status testare ediții Oracle 21c:**
>
> | Ediție | Status | Mediu validat |
@@ -17,7 +22,7 @@ Scripts and documentation for setting up ROA Oracle Database on Windows servers:
| Scenario | Description |
|----------|-------------|
| **New Server** | Oracle 21c SE (non-CDB) or XE (CDB/PDB) + CONTAFIN_ORACLE.dmp |
| **Migration** | Import existing DMP files (CONTAFIN_ORACLE + 30-50 companies) |
| **Migration** | Import existing DMP files (CONTAFIN_ORACLE + 30-50 companies), inclusiv de pe Oracle XE 11 / 10g |
| **Add Company** | Add new company schema to existing server |
---
@@ -92,7 +97,7 @@ roa-windows-setup/
│ ├── 01-setup-database.ps1 # Tablespace, profile, CONTAFIN_ORACLE user
│ ├── 02-create-sys-objects.ps1# SYS objects (AUTH_PACK, NEWSCHEMA, etc.)
│ ├── 03-import-contafin.ps1 # Import CONTAFIN_ORACLE schema
│ ├── 04-create-synonyms-grants.ps1 # Public synonyms and grants
│ ├── 04-create-synonyms-grants.ps1 # Public synonyms, grants + sys-grants.sql
│ ├── 05-import-companies.ps1 # Batch import company schemas
│ ├── 06-add-company.ps1 # Add new company to existing server
│ ├── 07-verify-installation.ps1# Verify installation completeness
@@ -134,7 +139,7 @@ roa-windows-setup/
| `01-setup-database.ps1` | Create tablespace ROA, configure profile, create CONTAFIN_ORACLE user | Yes |
| `02-create-sys-objects.ps1` | Install SYS objects: AUTH_PACK, NEWSCHEMA, EXECUTESCRIPTOS, UTL_MAIL | Yes |
| `03-import-contafin.ps1` | Import CONTAFIN_ORACLE schema from DMP | Yes |
| `04-create-synonyms-grants.ps1` | Create public synonyms and grants for CONTAFIN_ORACLE | Yes |
| `04-create-synonyms-grants.ps1` | Public synonyms + grants for CONTAFIN_ORACLE, then `sys-grants.sql` (SYS grants, SYS synonyms, DMPDIR, data dictionary reads for `PACK_DIAG_SPATIU`) | Yes |
| `05-import-companies.ps1` | Batch import company schemas from DMP files | Yes |
| `06-add-company.ps1` | Add new company to existing server | Optional |
| `07-verify-installation.ps1` | Verify installation completeness (objects, grants, synonyms) | Yes |
@@ -311,19 +316,84 @@ Copy-Item \\server\dmp\NEWCOMPANY.dmp C:\DMPDIR\
.\06-add-company.ps1 -CompanyName "NEWCOMPANY" -Password "ROMFASTSOFT"
```
### Migration from Oracle 10g
### Migrare de la un server client existent (Oracle XE 11 / 10g)
Exportul de pe sursă **nu** e automatizat aici — scripturile presupun DMP-urile deja în
`C:\DMPDIR\` pe serverul nou.
**Sursa Oracle XE 11.2.** `impdp` din 21c acceptă direct seturile Data Pump produse de 11.2,
deci fără `VERSION=`:
```bat
REM pe serverul sursă, ca SYSTEM
sqlplus system/parola@XE
CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
GRANT READ, WRITE ON DIRECTORY DMPDIR TO SYSTEM;
expdp system/parola@XE SCHEMAS=CONTAFIN_ORACLE DIRECTORY=DMPDIR ^
DUMPFILE=contafin_oracle.dmp LOGFILE=export_contafin.log
expdp system/parola@XE SCHEMAS=FIRMA1,FIRMA2 DIRECTORY=DMPDIR ^
DUMPFILE=firme_%U.dmp LOGFILE=export_firme.log PARALLEL=2
REM ^ %U e substituția Data Pump; din interiorul unui fișier .bat se scrie %%U
```
Lista schemelor se ia din `CONTAFIN_ORACLE.NOM_FIRME` (`WHERE sters = 0`) — aceeași listă pe
care `07-verify-installation.ps1` o compară apoi cu schemele existente.
**Sursa Oracle 10g cu `exp` clasic.** Formatele `exp`/`expdp` nu sunt interschimbabile: un
fișier produs cu `exp` se importă cu `imp`, nu cu `impdp`.
```powershell
# 1. Export from Oracle 10g (on source Windows server)
# 1. Export de pe sursă (exp clasic)
exp system/password@ORCL file=C:\backup\COMPANY.dmp owner=COMPANY
# 2. Convert with Oracle 21c imp (if needed)
# Or use impdp with VERSION parameter
# 3. Import using scripts
.\05-import-companies.ps1 -DmpFile "COMPANY.dmp"
# 2. Import
imp system/password@XEPDB1 file=C:\DMPDIR\COMPANY.dmp fromuser=COMPANY touser=COMPANY
```
**Înainte de a porni:** verifică plafonul XE (12 GB date de utilizator pe 21c XE, față de
11 GB pe 11.2 XE):
```sql
SELECT ROUND(SUM(bytes)/1024/1024/1024, 2) AS gb
FROM dba_segments
WHERE owner NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP','XDB','APEX_040000');
```
---
### Scripturile `sys_*` la o migrare — capcana tabelei de versiuni
Obiectele deținute de **SYS nu călătoresc în DMP-ul de schemă**. În schimb, tabela de versiuni
a lui `PACK_MIGRARE` trăiește în `CONTAFIN_ORACLE` și **vine cu DMP-ul** — iar scripturile
`sys_*` își înregistrează acolo aplicarea (`pack_migrare.UpdateVersiune(..., 'SYS')`).
Consecința: pe baza nouă, `ROAACTUALIZARI` vede scripturile `sys_*` drept deja aplicate și le
sare, deși în `SYS` nu există nimic. De aceea obiectele și granturile SYS se pun **la
instalare**, prin `02-create-sys-objects.ps1` și `04-create-synonyms-grants.ps1`, și nu se
așteaptă de la actualizator.
Ce e consolidat unde:
| Script sursă (`D:\roa\database\SCRIPTURI_CLAR\`) | Unde e aici |
|---|---|
| `sys_2026_01_14_01_AUTH_PACK` | `sql/sys-objects.sql` |
| `sys_2026_08_08_02_SYS_INFO_TABLESPACE_PURJARE` | `sql/sys-objects.sql` + `sql/scheduler-jobs.sql` |
| `sys_2026_08_03_05_DIAG_SPATIU_GRANT` | `sql/sys-grants.sql`, secțiunea `[5/5]` |
| `sys_2026_08_03_07_DIAG_SPATIU_GRANT2` | `sql/sys-grants.sql`, secțiunea `[5/5]` |
| `sys_2026_08_06_07_DIAG_SPATIU_GRANT3` | `sql/sys-grants.sql`, secțiunea `[5/5]` |
Secțiunea `[5/5]` acordă `SELECT` **direct** pe 18 vederi de dicționar către
`CONTAFIN_ORACLE`. Grantul prin rolul `DBA` nu ajunge: rolurile nu se aplică în pachetele cu
drepturi de definitor, iar `CONTAFIN_ORACLE.PACK_DIAG_SPATIU` este exact așa. Fără ele
pachetul rămâne `INVALID` și jobul `DIAGSPATIU_ZILNIC` nu rulează.
`07-verify-installation.ps1` raportează care dintre cele 18 lipsesc.
Un `sys_*` nou fie se consolidează în `sys-objects.sql` / `sys-grants.sql` /
`scheduler-jobs.sql`, fie se pune în [`sql/sys-updates/`](sql/sys-updates/README.md) ca patch
post-instalare.
---
## Uninstall / Cleanup