Files
ROMFASTSQL/proxmox/vm302-oracle-test/README.md
Marius 7fce925349 feat(oracle): kit de instalare la client + corectarea lipsurilor din instalare
Blocul de instalare/migrare Oracle 21c XE, terminat si validat pe VM 302.

Kit de instalare (nou)

  scripts/build-client-kit.ps1 exporta CONTAFIN_ORACLE si FIRMANOUA de pe
  LXC 108 (PDB ROA2, nu ROA - ROA e productia ROA_CENTRAL), le aduce local
  prin cele trei hopuri container -> LXC -> host -> statie, le redenumeste la
  numele pe care le asteapta scripturile si le impacheteaza cu o copie a
  directorului roa-windows-setup. Citeste logul expdp si raporteaza cate
  firme are NOM_FIRME, ca sa nu plece din greseala datele unui client.

  roa-windows-setup/INSTALEAZA.cmd ruleaza pasii 01..08 fara "set /p", deci
  merge si prin SSH - RunAll.cmd nu poate fi rulat neinteractiv. Trateaza
  corect codul 5 de la pasul 03 si se opreste la prima eroare reala.

Corectii

  01-setup-database.ps1 nu mai scrie SQLNET.RECV_TIMEOUT / SEND_TIMEOUT in
  sqlnet.ora. Le hardcoda la 30 s, iar fisierul e citit si de impdp: in timpul
  unui import serverul poate lucra minute fara sa trimita un pachet, clientul
  murea cu ORA-12609 iar scriptul raporta esec pentru un import care se
  terminase cu bine pe server. Reprodus si reparat pe VM 302.

  01-setup-database.ps1: Step 4c optional (-ResetSystemPassword) care curata
  EXPIRED(GRACE) pe SYSTEM in CDB root; ALTER PROFILE opreste expirarile
  viitoare dar nu reseteaza un cont deja intrat in gratie.

  uninstall-roa.sql: retry la DROP USER dupa KILL SESSION, plus un bloc final
  de verdict care numara ce a ramas si iese cu ORA-20900 daca baza nu e
  curata. Pana acum toate sectiunile prindeau exceptiile in WHEN OTHERS si
  scriptul tiparea "UNINSTALL COMPLETE" chiar si cand un user supravietuise,
  iar instalarea urmatoare dadea ORA-31684 in lant. 99-uninstall-roa.ps1
  propaga codul de iesire.

  08-post-install-config.ps1: Step 7b seteaza SMTP_OUT_SERVER si ACL-ul de
  retea pentru CONTAFIN_ORACLE. UTL_MAIL se instala si primea EXECUTE, adica
  destul cat sa compileze, dar nu si cat sa trimita. Privilegiul resolve nu
  accepta interval de porturi (ORA-24244), deci se acorda separat de connect.

  07-verify-installation.ps1: sectiune noua care verifica prezenta lui
  FIRMANOUA.dmp in DMPDIR si o raporteaza ca eroare daca lipseste. Fara el,
  adaugarea unei firme noi pica in DBMS_DATAPUMP.ADD_FILE peste luni de la
  instalare, cand nimeni nu mai leaga eroarea de instalare.

  configure-profile.sql: antetul spune ca e unealta de remediere manuala, nu
  parte din flux; pas nou la final pentru CDB root.

Documentatie

  README-ul roa-windows-setup descrie acum explicit cele doua scenarii -
  instalare pe curat si migrare - de unde se iau DMP-urile sablon, si capcana
  ORA-12609. Handoff-urile de sesiune au fost sterse; ce era durabil in ele a
  intrat in README-uri si in docs/diagnostic-spatiu-clienti.md.

Validare pe VM 302: ciclu complet din kit, instalare pe curat, verificarea
finala "[OK] All checks passed!".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SzF1hf4aFS1tmJWpPMiwGp
2026-08-25 18:05:56 +03:00

490 lines
13 KiB
Markdown

# VM 302 - oracle-test-302 (ROA Windows Setup Test VM)
VM-ul de test pentru scripturile de instalare ROA pe Windows + Oracle 21c.
Scripturile efective trăiesc în `proxmox/lxc108-oracle/roa-windows-setup/`
(generale, nu legate de VM 302). Acest director documentează **mediul de test**
și planul de validare.
> VM 302 testează **doar** `roa-windows-setup/`. Scripturile din
> `proxmox/lxc108-oracle/migration/` nu au mediu de test dedicat — se validează direct pe
> LXC 108. Ce face fiecare director:
> [`../lxc108-oracle/docs/instalare-si-migrare-oracle.md`](../lxc108-oracle/docs/instalare-si-migrare-oracle.md).
## Status testare
| Ediție Oracle | Status | Note |
|---------------|--------|------|
| **21c XE (CDB/PDB)** | OK | Validat pe VM 302, `RunAll.cmd` rulează complet |
| **21c Standard Edition (non-CDB)** | TODO | NETESTAT pe VM 302. În producție au apărut erori — vezi `docs/issues-se-prod.md` |
> Scripturile `roa-windows-setup` au fost testate doar pe XE. La rularea în
> producție pe Oracle 21c SE au apărut erori. Înainte de următorul deployment
> SE trebuie reprodus scenariul SE pe VM 302 (sau clonă VM 303). Vezi
> `docs/dual-edition-test-plan.md`.
---
## VM Information
| Property | Value |
|----------|-------|
| VM ID | 302 |
| Name | oracle-test-302 |
| Hostname | ROACENTRAL |
| IP Address | 10.0.20.130 |
| RAM | 4 GB |
| Disk | 500 GB |
| OS | Windows 11 |
| Oracle | 21c XE (CDB/PDB) — instalat curent |
| Proxmox Host | pvemini (10.0.20.201) |
| Scripturi setup | `../lxc108-oracle/roa-windows-setup/` |
---
## Quick Start
### 1. Start VM (if stopped)
```bash
# From any machine with SSH access to Proxmox
ssh root@10.0.20.201 "qm start 302"
# Wait for boot (~2-3 minutes)
ssh root@10.0.20.201 "qm status 302"
```
### 2. Connect to VM
```bash
# SSH (if OpenSSH installed)
ssh romfast@10.0.20.130
# Or use RDP
mstsc /v:10.0.20.130
# User: romfast
```
### 3. Run Tests
```powershell
# PowerShell as Administrator
cd C:\roa-setup
.\RunAll.cmd
```
### 4. Stop VM (when done)
```bash
ssh root@10.0.20.201 "qm shutdown 302"
# Or force stop:
ssh root@10.0.20.201 "qm stop 302"
```
---
## Proxmox VM Management
### Check Status
```bash
ssh root@10.0.20.201 "qm status 302"
```
### Start VM
```bash
ssh root@10.0.20.201 "qm start 302"
```
### Graceful Shutdown
```bash
ssh root@10.0.20.201 "qm shutdown 302"
```
### Force Stop
```bash
ssh root@10.0.20.201 "qm stop 302"
```
### Access Console (via Proxmox GUI)
```
https://10.0.20.201:8006 → VM 302 → Console
```
---
## Current Configuration
### Oracle Connection
| Property | Value |
|----------|-------|
| Host | 10.0.20.130 |
| Port | 1521 |
| Service | XEPDB1 |
| SYS Password | romfastsoft |
| SYSTEM Password | romfastsoft |
```bash
# SQL*Plus connection
sqlplus sys/romfastsoft@10.0.20.130:1521/XEPDB1 as sysdba
sqlplus system/romfastsoft@10.0.20.130:1521/XEPDB1
sqlplus CONTAFIN_ORACLE/ROMFASTSOFT@10.0.20.130:1521/XEPDB1
```
### ROA Users (after installation)
| User | Password | Purpose |
|------|----------|---------|
| CONTAFIN_ORACLE | ROMFASTSOFT | Common schema |
| CAPIDAVATOUR | ROMFASTSOFT | Test company |
### DMP Files Available
```
C:\DMPDIR\
├── contafin_oracle_72001.dmp (276 MB)
└── capidavatour_72001.dmp (76 MB)
```
### Setup Directory
```
C:\roa-setup\
├── config.ps1 # Current configuration
├── scripts\ # PowerShell setup scripts
├── sql\ # SQL scripts
├── par\ # Import parameters
└── logs\ # Execution logs
```
---
### Capcane de mediu (verificate 2026-08-25)
**1. VM-ul își poate pierde IP-ul static la boot.** La pornirea din 2026-08-25 adaptorul
s-a re-enumerat ca `Ethernet 2` și a venit pe DHCP (`10.0.20.118`). `listener.ora` are
`HOST=10.0.20.130` scris în clar, deci serviciul listener pornește („Running") dar nu
leagă portul, iar orice conectare dă `ORA-12541: TNS:no listener`. Verifică IP-ul
**înainte** de a începe testul:
```bash
ssh root@10.0.20.201 "qm agent 302 network-get-interfaces" | grep ip-address
```
Dacă nu e `10.0.20.130`, restaurează-l (comanda rupe sesiunea SSH curentă, de aceea
rulează printr-un task programat):
```powershell
Set-NetIPInterface -InterfaceAlias 'Ethernet 2' -Dhcp Disabled
Get-NetIPAddress -InterfaceAlias 'Ethernet 2' -AddressFamily IPv4 | Remove-NetIPAddress -Confirm:$false
New-NetIPAddress -InterfaceAlias 'Ethernet 2' -IPAddress 10.0.20.130 -PrefixLength 24 -DefaultGateway 10.0.20.1
Set-DnsClientServerAddress -InterfaceAlias 'Ethernet 2' -ServerAddresses 10.0.20.1
```
Apoi `Restart-Service OracleOraDB21Home1TNSListener`. Listener-ul mai are nevoie de
~60 s ca instanța să se înregistreze (PMON), altfel primești `ORA-12514`.
**2. `C:\roa-setup\` este o copie, nu un clone al repo-ului.** La 2026-08-25 era în urmă
cu două commit-uri (`sys-objects.sql`, `scheduler-jobs.sql`, `uninstall-roa.sql` erau
dinainte de `015cd79`). Sincronizează **tot** directorul, nu doar fișierele pe care
crezi că le-ai atins, și confirmă cu hash-uri:
```bash
cd proxmox/lxc108-oracle/roa-windows-setup
scp sql/*.sql romfast@10.0.20.130:C:/roa-setup/sql/
scp scripts/*.ps1 romfast@10.0.20.130:C:/roa-setup/scripts/
scp scripts/lib/*.ps1 romfast@10.0.20.130:C:/roa-setup/scripts/lib/
scp Run.cmd RunAll.cmd romfast@10.0.20.130:C:/roa-setup/
```
**3. `RunAll.cmd` nu poate fi condus neinteractiv.** Folosește `set /p` pentru
confirmări; pe stdin redirecționat (`< NUL` sau prin `ssh`) fie se anulează cu
„Installation cancelled" **și iese cu codul 0**, fie crapă cu „The syntax of the command
is incorrect". Nu te lua după codul de ieșire — verifică logul. Pentru rulare automată,
apelează scripturile în ordine direct:
```
01-setup-database.ps1 → 02-create-sys-objects.ps1 → 03-import-contafin.ps1
→ 04-create-synonyms-grants.ps1 → 05-import-companies.ps1
→ 08-post-install-config.ps1 → 07-verify-installation.ps1
```
**4. `03-import-contafin.ps1` iese normal cu codul 5.** E codul Data Pump pentru
„completat cu erori"; erorile sunt `ORA-31684 already exists` (userul e creat de scriptul
01) și `ORA-39082` (warning-uri de compilare). Nu e un eșec.
---
## Testing Workflow
### Full Installation Test
```powershell
# 1. Uninstall existing ROA (if any)
cd C:\roa-setup
.\scripts\99-uninstall-roa.ps1 -SystemPassword "romfastsoft" -Force
# 2. Run full installation
.\RunAll.cmd
# 3. Verify
.\scripts\07-verify-installation.ps1
```
### Individual Script Test
```powershell
cd C:\roa-setup
# Use Run.cmd wrapper (handles ExecutionPolicy)
.\Run.cmd 01-setup-database.ps1
.\Run.cmd 02-create-sys-objects.ps1
.\Run.cmd 03-import-contafin.ps1
.\Run.cmd 04-create-synonyms-grants.ps1
.\Run.cmd 05-import-companies.ps1
.\Run.cmd 08-post-install-config.ps1
.\Run.cmd 07-verify-installation.ps1
```
### Reset for Fresh Test
```powershell
# Complete uninstall (drops all ROA objects)
.\scripts\99-uninstall-roa.ps1 -SystemPassword "romfastsoft" -Force
# This removes:
# - CONTAFIN_ORACLE user
# - CAPIDAVATOUR user (and any other company users)
# - ROA tablespace
# - Public synonyms
# - SYS objects (AUTH_PACK, NEWSCHEMA, etc.)
```
---
## Script Execution Order
| # | Script | Duration | Purpose |
|---|--------|----------|---------|
| 1 | 01-setup-database.ps1 | ~30s | Tablespace, profile, CONTAFIN_ORACLE user |
| 2 | 02-create-sys-objects.ps1 | ~15s | AUTH_PACK, NEWSCHEMA, UTL_MAIL config |
| 3 | 03-import-contafin.ps1 | ~2 min | Import CONTAFIN_ORACLE schema (344 objects) |
| 4 | 04-create-synonyms-grants.ps1 | ~30s | 81 public synonyms + grants |
| 5 | 05-import-companies.ps1 | ~3 min | Import CAPIDAVATOUR (3418 objects) |
| 6 | 08-post-install-config.ps1 | ~1 min | 54 directories, SERVER_INFO |
| 7 | 07-verify-installation.ps1 | ~15s | Verification report |
**Total: ~8 minutes for full installation**
---
## Expected Results
### After Successful Installation
```
07-verify-installation.ps1 output:
=== ROA Installation Verification ===
Tablespace ROA: OK
User CONTAFIN_ORACLE: OK (344 objects)
User CAPIDAVATOUR: OK (3418 objects)
Public Synonyms: OK (81 synonyms)
SYS Objects: OK (AUTH_PACK, NEWSCHEMA, etc.)
ROAUPDATE Directories: OK (54 directories)
SERVER_INFO: OK (configured)
```
### Object Counts
| Schema | Objects | Tables | Procedures | Packages |
|--------|---------|--------|------------|----------|
| CONTAFIN_ORACLE | 344 | ~80 | ~50 | ~20 |
| CAPIDAVATOUR | 3418 | ~150 | ~100 | ~30 |
---
## Troubleshooting
### Oracle Service Not Running
```powershell
# Check service
Get-Service OracleServiceXE
# Start service
Start-Service OracleServiceXE
# Check listener
lsnrctl status
```
### DMPDIR Points to Wrong Path
Oracle XE has a pre-existing DMPDIR that points to `D:\Oracle\admin\ORCL\dpdump`.
The setup scripts should now handle this automatically, but to verify/fix manually:
```sql
-- Check existing directories
SELECT directory_name, directory_path FROM dba_directories WHERE directory_name = 'DMPDIR';
-- If pointing to wrong path, recreate
DROP DIRECTORY DMPDIR;
CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC;
```
**Note:** The `New-OracleDirectory` function in `oracle-functions.ps1` now automatically
detects and corrects this issue (drops and recreates if path differs).
### DATAFILE_DIR Wrong Path
If tablespace creation fails with ORA-01119, check the datafile path in config.ps1:
```powershell
# Check actual datafile location
sqlplus -S sys/romfastsoft@10.0.20.130:1521/XEPDB1 "as sysdba" <<< "SELECT file_name FROM dba_data_files WHERE ROWNUM = 1;"
# Common paths:
# Oracle XE typical: C:\app\<user>\product\21c\oradata\XE\XEPDB1
# Not: C:\app\<user>\oradata\XE\XEPDB1 (missing 'product\21c')
```
Fix in config.ps1:
```powershell
$DATAFILE_DIR = "C:\app\romfast\product\21c\oradata\XE\XEPDB1"
```
### Permission Error on C:\DMPDIR
```powershell
# Grant Oracle service permissions
icacls C:\DMPDIR /grant "NT SERVICE\OracleServiceXE:(OI)(CI)F" /T
```
### PDB Not Open
```sql
-- Connect as SYSDBA to CDB
sqlplus sys/romfastsoft@localhost:1521/XE as sysdba
-- Open PDB
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE;
```
### Script Execution Policy Error
```powershell
# Use Run.cmd wrapper instead of direct execution
.\Run.cmd 01-setup-database.ps1
# Or set policy manually (Admin PowerShell)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```
### Check Logs
```powershell
# View latest log
Get-ChildItem C:\roa-setup\logs\ | Sort-Object LastWriteTime -Descending | Select-Object -First 5
# Read specific log
Get-Content C:\roa-setup\logs\01-setup-database_*.log
```
---
## Deploying Updated Scripts
### From WSL/Linux
```bash
# Copy all scripts to VM
scp -r /mnt/e/proiecte/ROMFASTSQL/proxmox/lxc108-oracle/roa-windows-setup/* romfast@10.0.20.130:C:/roa-setup/
```
### From Windows
```powershell
# Copy from network share or local path
Copy-Item -Recurse E:\proiecte\ROMFASTSQL\proxmox\lxc108-oracle\roa-windows-setup\* C:\roa-setup\ -Force
```
### Quick Script Update (single file)
```bash
# Update specific script
scp /mnt/e/proiecte/ROMFASTSQL/proxmox/lxc108-oracle/roa-windows-setup/scripts/03-import-contafin.ps1 romfast@10.0.20.130:C:/roa-setup/scripts/
```
---
## VM Snapshots
### Create Snapshot (for quick restore)
```bash
# Before testing
ssh root@10.0.20.201 "qm snapshot 302 pre-test --description 'Before ROA test'"
# List snapshots
ssh root@10.0.20.201 "qm listsnapshot 302"
```
### Restore Snapshot
```bash
# Restore to clean state
ssh root@10.0.20.201 "qm rollback 302 pre-test"
```
### Delete Snapshot
```bash
ssh root@10.0.20.201 "qm delsnapshot 302 pre-test"
```
---
## Clone VM for Parallel Testing
```bash
# Clone VM 302 to VM 304 (ATENTIE: 303 e ocupat de Win11-Adina)
ssh root@10.0.20.201 "qm clone 302 304 --name oracle-test-304 --full"
# Start new VM
ssh root@10.0.20.201 "qm start 304"
# Note: Change IP in Windows after boot (Network Settings)
```
---
## Notes
- VM 302 a fost clonata initial din template-ul VM 300 (clean Windows + Oracle XE)
- ✅ **Foloseste template-ul VM 310 `Win11-Template-Sysprep`.** VM 300 a fost **sters
2026-08-11**: nu era sysprep-uit, purta numele si SID-ul de masina al VM 201, iar clonele
lui nu se puteau autentifica prin SMB/NTLM cu VM 201 sau intre ele.
- Oracle XE has 2GB RAM limit - sufficient for testing
- DMP files are already in C:\DMPDIR (persisted between tests)
- Uninstall script preserves DMP files
---
**Last Updated:** 2026-04-25
**Author:** Marius Mutu
**Project:** ROMFASTSQL - VM 302 (oracle-test-302) test environment
## Documente conexe
- `docs/dual-edition-test-plan.md` — plan testare XE + SE 21c
- `docs/issues-se-prod.md` — TODO: log erori întâlnite în producție pe Oracle SE 21c
- `../lxc108-oracle/roa-windows-setup/README.md` — scripturile de setup
- `../lxc108-oracle/roa-windows-setup/test/clone-vm300.sh` — clonare VM template 300 (utilizat pentru a crea VM 302)