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
847 lines
33 KiB
Markdown
847 lines
33 KiB
Markdown
# 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 |
|
|
> |--------|--------|---------------|
|
|
> | **XE (CDB/PDB)** | OK | VM 302 (`oracle-test-302`, 10.0.20.130) |
|
|
> | **Standard Edition (non-CDB)** | **TODO — netestat în mediu de test** | În producție au apărut erori, neînregistrate. Vezi [`../../vm302-oracle-test/docs/issues-se-prod.md`](../../vm302-oracle-test/docs/issues-se-prod.md) |
|
|
>
|
|
> Plan testare dual-edition: [`../../vm302-oracle-test/docs/dual-edition-test-plan.md`](../../vm302-oracle-test/docs/dual-edition-test-plan.md).
|
|
> Mediul de test: [`../../vm302-oracle-test/README.md`](../../vm302-oracle-test/README.md).
|
|
|
|
## Overview
|
|
|
|
Scripts and documentation for setting up ROA Oracle Database on Windows servers:
|
|
|
|
| Scenario | Description |
|
|
|----------|-------------|
|
|
| **A. Instalare pe curat** | Client nou, fără firme anterioare. Pornești din șabloanele `contafin_oracle.dmp` + `FIRMANOUA.dmp` |
|
|
| **B. Migrare** | Client cu Oracle XE 11 / 10g. Aduci `contafin_oracle.dmp` al clientului + câte un `.dmp` per firmă |
|
|
| **Add Company** | Firmă nouă pe un server deja instalat (normal din aplicație, prin `SYS.NEWSCHEMA`) |
|
|
|
|
Ambele instalări rulează **aceleași** scripturi în **aceeași** ordine — diferă doar ce pui în
|
|
`C:\DMPDIR`. Pașii detaliați: [Cele două scenarii de instalare](#cele-două-scenarii-de-instalare).
|
|
|
|
---
|
|
|
|
## Prerequisites
|
|
|
|
- Windows Server 2016+ or Windows 10/11
|
|
- Oracle 21c Standard Edition or Express Edition installed
|
|
- Administrator privileges
|
|
- PowerShell 5.1+
|
|
- Minimum 8GB RAM (16GB recommended for SE)
|
|
- 50GB free disk space
|
|
|
|
---
|
|
|
|
## Quick Start
|
|
|
|
> Care fișiere `.dmp` îți trebuie depinde de scenariu (A pe curat / B migrare) — vezi
|
|
> [DMP Files Required](#dmp-files-required). `FIRMANOUA.dmp` trebuie copiat în **ambele**
|
|
> cazuri, altfel clientul nu va putea adăuga firme noi.
|
|
|
|
### Oracle 21c Express Edition (XE) - Gratuit
|
|
1. Download și instalează Oracle 21c XE (see `docs/00-INSTALL-ORACLE-XE.md`)
|
|
2. Copiază fișierele DMP în `C:\DMPDIR\`
|
|
3. Rulează instalarea:
|
|
```cmd
|
|
RunAll.cmd
|
|
```
|
|
`RunAll.cmd` e **interactiv** — cere confirmare la tastatură. Pentru rulare automată,
|
|
apelează scripturile în ordine (vezi scenariile A / B).
|
|
|
|
### Oracle 21c Standard Edition (SE) - Licență
|
|
1. Download și instalează Oracle 21c SE (see `docs/00-INSTALL-ORACLE-SE.md`)
|
|
- În wizard: "Create and configure a single instance database"
|
|
- Global database name: `ROA`
|
|
- **Debifează** "Create as Container database"
|
|
2. Copiază fișierele DMP în `C:\DMPDIR\`
|
|
3. Rulează instalarea:
|
|
```cmd
|
|
RunAll.cmd
|
|
```
|
|
|
|
### Rulare script individual (dacă e necesar)
|
|
|
|
```cmd
|
|
Run.cmd 01-setup-database.ps1
|
|
Run.cmd 07-verify-installation.ps1
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
Copy `config.example.ps1` to `config.ps1` and edit:
|
|
|
|
| Parameter | XE Value | SE Value |
|
|
|-----------|----------|----------|
|
|
| `ORACLE_HOME` | `C:\app\oracle\product\21c\dbhomeXE` | `C:\app\oracle\product\21c\dbhome_1` |
|
|
| `SERVICE_NAME` | `XEPDB1` | `ROA` |
|
|
| `DATAFILE_DIR` | `C:\app\oracle\oradata\XE\XEPDB1` | `C:\app\oracle\oradata\ROA` |
|
|
|
|
---
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
roa-windows-setup/
|
|
├── README.md # This file
|
|
├── config.example.ps1 # Configuration template
|
|
├── Run.cmd # Script runner (handles ExecutionPolicy)
|
|
├── RunAll.cmd # Complete installation runner
|
|
│
|
|
├── docs/ # Installation guides
|
|
│ ├── 00-INSTALL-ORACLE-XE.md # Oracle 21c XE installation
|
|
│ └── 00-INSTALL-ORACLE-SE.md # Oracle 21c SE installation
|
|
│
|
|
├── scripts/ # PowerShell setup scripts
|
|
│ ├── 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, 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
|
|
│ ├── 08-post-install-config.ps1# ROAUPDATE folders, SERVER_INFO, jobs
|
|
│ └── 99-uninstall-roa.ps1 # Uninstall/cleanup script
|
|
│
|
|
├── config/ # Configuration templates
|
|
│ └── sqlnet.ora # Compatibility for Instant Client 10/11
|
|
│
|
|
├── par/ # Data Pump parameter files
|
|
│ ├── import-contafin.par # CONTAFIN_ORACLE import parameters
|
|
│ └── import-company.par # Company schema import template
|
|
│
|
|
├── sql/ # SQL scripts
|
|
│ ├── create-tablespace.sql # ROA tablespace creation
|
|
│ ├── create-user-contafin.sql # CONTAFIN_ORACLE user creation
|
|
│ ├── create-user-company.sql # Company user template
|
|
│ ├── configure-profile.sql # Profile settings
|
|
│ ├── sys-objects.sql # SYS custom objects (AUTH_PACK, etc.)
|
|
│ ├── synonyms-public.sql # Public synonyms for CONTAFIN_ORACLE
|
|
│ ├── grants-public.sql # Public grants
|
|
│ ├── directories-roaupdate.sql # 54 DIRECTORY objects for PACK_UPDATE
|
|
│ ├── server-info-init.sql # SERVER_INFO configuration
|
|
│ ├── scheduler-jobs.sql # UPDATEROA_ZILNIC, UPDATERTVAI_ZILNIC
|
|
│ ├── auth-detalii-init.sql # Customer ID for licensing
|
|
│ ├── verify-objects.sql # Verification queries
|
|
│ └── uninstall-roa.sql # Cleanup script (removes all ROA objects)
|
|
│
|
|
└── test/ # Testing scripts
|
|
└── clone-vm300.sh # Proxmox VM cloning for testing
|
|
```
|
|
|
|
---
|
|
|
|
## Scripts Overview
|
|
|
|
| Script | Purpose | Required |
|
|
|--------|---------|----------|
|
|
| `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` | 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 |
|
|
| `08-post-install-config.ps1` | ROAUPDATE directories, SERVER_INFO, scheduler jobs, licensing | Yes |
|
|
| `99-uninstall-roa.ps1` | Remove all ROA objects (cleanup for re-testing) | Optional |
|
|
|
|
---
|
|
|
|
## Architecture Differences
|
|
|
|
### Oracle 21c Standard Edition (non-CDB) - RECOMANDAT pentru producție
|
|
|
|
Traditional single-database architecture (legacy compatibility).
|
|
|
|
| Feature | Value |
|
|
|---------|-------|
|
|
| Architecture | Single database (non-CDB) |
|
|
| Database Name | ROA |
|
|
| Service Name | ROA |
|
|
| SID | ROA |
|
|
| Connection | `system/pass@ROA` |
|
|
| Datafiles | `C:\app\oracle\oradata\ROA\` |
|
|
|
|
**La instalare:**
|
|
- Selectezi "Create and configure a single instance database"
|
|
- **Debifezi** "Create as Container database"
|
|
- Global database name: `ROA`
|
|
- Wizard-ul creează baza de date automat (~30-45 min)
|
|
|
|
**Avantaje:**
|
|
- Fără limitări de resurse (RAM, CPU, spațiu)
|
|
- Administrare simplă
|
|
- Compatibil cu scripturi de migrare Oracle 10g
|
|
- Fără overhead PDB
|
|
|
|
### Oracle 21c Express Edition (CDB/PDB) - Gratuit, pentru testare
|
|
|
|
Modern multitenant architecture with Container Database.
|
|
|
|
| Feature | Value |
|
|
|---------|-------|
|
|
| Architecture | Container + Pluggable Database |
|
|
| CDB Name | XE |
|
|
| PDB Name | XEPDB1 |
|
|
| Service Name | XEPDB1 (for applications) |
|
|
| Connection | `system/pass@XEPDB1` |
|
|
| Datafiles | `C:\app\oracle\oradata\XE\XEPDB1\` |
|
|
|
|
**La instalare:**
|
|
- Rulezi installer-ul XE
|
|
- Baza de date se creează automat (CDB: XE + PDB: XEPDB1)
|
|
- Nu ai opțiunea non-CDB (XE suportă doar CDB)
|
|
|
|
**Avantaje:**
|
|
- Licență gratuită
|
|
- Instalare rapidă
|
|
- Ideal pentru dezvoltare/testare
|
|
|
|
**Limitări XE:**
|
|
- Max 2 CPU threads
|
|
- Max 2 GB RAM
|
|
- Max 12 GB date utilizator
|
|
|
|
**Connection Warning:**
|
|
> Conectează-te întotdeauna la **XEPDB1** (PDB), NU la **XE** (CDB root) pentru operații ROA!
|
|
|
|
---
|
|
|
|
## Standard Passwords
|
|
|
|
| User | Password | Notes |
|
|
|------|----------|-------|
|
|
| SYS | romfastsoft | SYSDBA |
|
|
| SYSTEM | romfastsoft | DBA |
|
|
| CONTAFIN_ORACLE | ROMFASTSOFT | Common schema |
|
|
| Company schemas | From NOM_FIRME.parola | See company-specific config |
|
|
|
|
> **Security Note:** Change passwords in production environments!
|
|
|
|
---
|
|
|
|
## DMP Files Required
|
|
|
|
Care fișiere îți trebuie depinde de scenariu. **Alege întâi scenariul:**
|
|
|
|
| Scenariu | Când | DMP-uri necesare |
|
|
|---|---|---|
|
|
| **A. Instalare pe curat** | Client nou, fără firme anterioare | `contafin_oracle.dmp` (șablon) + `FIRMANOUA.dmp` (șablon) |
|
|
| **B. Migrare** | Client cu Oracle XE mai vechi, are deja date | `contafin_oracle.dmp` **al clientului** + câte un `.dmp` per firmă + `FIRMANOUA.dmp` (șablon) |
|
|
|
|
| File | Description | Size |
|
|
|------|-------------|------|
|
|
| `contafin_oracle.dmp` | Schema comună (drepturi, actualizări, `NOM_FIRME`) | ~50-280 MB |
|
|
| `FIRMANOUA.dmp` | **Șablon de firmă goală.** Sursa din care `SYS.NEWSCHEMA` și `06-add-company.ps1` creează orice firmă nouă | ~24 MB |
|
|
| `[company].dmp` | Schema unei firme existente (doar la migrare, una per firmă) | ~100-500 MB fiecare |
|
|
|
|
> **`FIRMANOUA.dmp` trebuie să ajungă în `C:\DMPDIR` la ORICE instalare, și la A și la B.**
|
|
> Nu e folosit de scripturile 01-08, ci mult mai târziu: când clientul adaugă o firmă nouă din
|
|
> aplicație, `SYS.NEWSCHEMA` îl caută în directorul Oracle `DMPDIR`
|
|
> ([`sql/sys-objects.sql`](sql/sys-objects.sql), `lcSchemaSursa := 'FIRMANOUA'`). Dacă lipsește,
|
|
> adăugarea firmei pică în `DBMS_DATAPUMP.ADD_FILE` — peste luni de la instalare, când nimeni
|
|
> nu mai leagă eroarea de instalare.
|
|
> `07-verify-installation.ps1` verifică prezența lui și raportează lipsa ca eroare.
|
|
|
|
### De unde iei DMP-urile șablon
|
|
|
|
Ambele stau pe **LXC 108** (`central-oracle`, 10.0.20.121), în containerul `oracle-xe`:
|
|
|
|
Sunt **trei** niveluri de scos, nu unul: container Docker → LXC 108 → host pvemini → stația ta.
|
|
`docker cp` te scoate doar din container, iar `scp root@10.0.20.201:/tmp/...` citește de pe
|
|
**host**, unde fișierul încă nu a ajuns — de aceea e nevoie și de `pct pull`.
|
|
|
|
```bash
|
|
# 1. container oracle-xe -> LXC 108 (fisierul ajunge in /tmp AL CONTAINERULUI 108)
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker cp oracle-xe:/tmp/oracle-import-roa2/firmanoua.dmp /tmp/firmanoua.dmp"
|
|
|
|
# 2. LXC 108 -> host pvemini
|
|
ssh root@10.0.20.201 "pct pull 108 /tmp/firmanoua.dmp /tmp/firmanoua.dmp"
|
|
|
|
# 3. host -> statia ta
|
|
scp root@10.0.20.201:/tmp/firmanoua.dmp ./FIRMANOUA.dmp
|
|
```
|
|
|
|
Identic pentru `contafin_oracle.dmp` (înlocuiește numele în toți cei trei pași).
|
|
Apoi copiezi fișierele pe serverul clientului, în `C:\DMPDIR`:
|
|
|
|
```bash
|
|
scp ./FIRMANOUA.dmp <user>@<server-client>:C:/DMPDIR/FIRMANOUA.dmp
|
|
```
|
|
|
|
> Numele fișierului pe destinație trebuie să fie **`FIRMANOUA.dmp`** — `SYS.NEWSCHEMA` îl
|
|
> construiește ca `lcSchemaSursa || '.dmp'`, cu `lcSchemaSursa := 'FIRMANOUA'`. În container
|
|
> fișierul e cu litere mici (`firmanoua.dmp`); pe Windows nu contează, dar redenumește-l oricum
|
|
> ca să fie clar.
|
|
|
|
Copie identică există și în `/opt/oracle/admin/XE/dpdump/<GUID-PDB>/` din același container.
|
|
|
|
`contafin_oracle.dmp` de acolo este varianta **curată**: `NOM_FIRME` are doar rândul-sămânță
|
|
(`FIRMA = 0`, fără schemă) plus o firmă marcată ștearsă — deci
|
|
`07-verify-installation.ps1` nu va raporta firme lipsă după instalare.
|
|
|
|
### Obtaining DMP Files
|
|
|
|
Export from existing Oracle 18c server (for compatibility):
|
|
|
|
```bash
|
|
# From LXC 108 (Oracle 18c - port 1522)
|
|
docker exec oracle18-xe expdp system/romfastsoft@localhost:1521/XEPDB1 \
|
|
SCHEMAS=CONTAFIN_ORACLE DIRECTORY=DMPDIR DUMPFILE=contafin_oracle.dmp \
|
|
LOGFILE=export_contafin.log VERSION=11.2
|
|
```
|
|
|
|
Copy to Windows:
|
|
```powershell
|
|
# Using SCP from WSL/Linux
|
|
scp root@10.0.20.201:/opt/oracle18/oradata/dmpdir/contafin_oracle.dmp C:\DMPDIR\
|
|
```
|
|
|
|
---
|
|
|
|
## Workflow Examples
|
|
|
|
### Cele două scenarii de instalare
|
|
|
|
Ambele rulează **aceleași** scripturi, în **aceeași** ordine. Diferența e doar în ce pui în
|
|
`C:\DMPDIR` înainte de a porni și ce faci după pasul 07.
|
|
|
|
#### Scenariul A — instalare pe curat (client nou, fără firme anterioare)
|
|
|
|
Pornești de la șabloanele de pe LXC 108. `NOM_FIRME` vine practic goală, deci pasul 05 nu are
|
|
ce importa — îl lași să ruleze, iese cu `0` și „No companies found in NOM_FIRME". Prima firmă o
|
|
creezi la final, din șablonul `FIRMANOUA.dmp`.
|
|
|
|
```powershell
|
|
# 1. Instalezi Oracle 21c XE (vezi docs/00-INSTALL-ORACLE-XE.md)
|
|
# Parola SYS/SYSTEM la instalare: romfastsoft
|
|
|
|
# 2. Configurare
|
|
Copy-Item config.example.ps1 config.ps1
|
|
notepad config.ps1 # SERVICE_NAME=XEPDB1 pentru XE, ROA pentru SE
|
|
|
|
# 3. DMP-urile SABLON (vezi "De unde iei DMP-urile sablon")
|
|
mkdir C:\DMPDIR
|
|
Copy-Item \\server\sabloane\contafin_oracle.dmp C:\DMPDIR\
|
|
Copy-Item \\server\sabloane\FIRMANOUA.dmp C:\DMPDIR\
|
|
|
|
# 4. Instalarea propriu-zisa
|
|
Run.cmd 01-setup-database.ps1
|
|
Run.cmd 02-create-sys-objects.ps1
|
|
Run.cmd 03-import-contafin.ps1 # cod de iesire 5 = NORMAL, vezi mai jos
|
|
Run.cmd 04-create-synonyms-grants.ps1
|
|
Run.cmd 05-import-companies.ps1 # no-op: NOM_FIRME e goala
|
|
Run.cmd 08-post-install-config.ps1 -CustomerId "<id-client>" -EmailSmtp "mail.romfast.ro"
|
|
Run.cmd 07-verify-installation.ps1
|
|
```
|
|
|
|
**Pasul 5 — prima firmă — se face din aplicația ROA, nu din scripturi.** Aplicația inserează
|
|
firma în `CONTAFIN_ORACLE.NOM_FIRME` și apoi apelează `SYS.NEWSCHEMA(schema, luna, an)`, care
|
|
creează userul și îi importă structura din `FIRMANOUA.dmp` (`DMPDIR`). De asta fișierul
|
|
**rămâne** în `C:\DMPDIR` după instalare — e folosit la fiecare firmă nouă, oricând.
|
|
|
|
`06-add-company.ps1` este calea manuală, de depanare: creează schema și îi importă șablonul,
|
|
dar **nu** scrie în `NOM_FIRME`. Dacă îl folosești, firma nu apare în aplicație până nu o
|
|
înregistrezi tu, iar `07-verify-installation.ps1` o raportează ca „Orphan schema (not in
|
|
NOM_FIRME)".
|
|
|
|
```powershell
|
|
# doar daca ai nevoie de calea manuala:
|
|
Run.cmd 06-add-company.ps1 -CompanyName "FIRMACLIENT" -TemplateDump "C:\DMPDIR\FIRMANOUA.dmp" -TemplateSchema "FIRMANOUA"
|
|
# ...urmat de inregistrarea firmei in CONTAFIN_ORACLE.NOM_FIRME
|
|
```
|
|
|
|
#### Scenariul B — migrare de pe un Oracle XE mai vechi
|
|
|
|
Ai `contafin_oracle.dmp` **al clientului** (cu `NOM_FIRME` populată) plus câte un `.dmp` per
|
|
firmă. Pasul 05 citește `NOM_FIRME` din schema deja importată la pasul 03 și potrivește
|
|
fiecare firmă cu fișierul ei din `C:\DMPDIR`.
|
|
|
|
```powershell
|
|
# 0. Export de pe serverul VECHI - vezi "Migrare de la un server client existent" mai jos.
|
|
# Lista schemelor: SELECT schema FROM CONTAFIN_ORACLE.NOM_FIRME WHERE sters = 0;
|
|
|
|
# 1-2. Ca la scenariul A (instalare Oracle + config.ps1)
|
|
|
|
# 3. DMP-urile CLIENTULUI + sablonul de firma noua
|
|
mkdir C:\DMPDIR
|
|
Copy-Item D:\export-client\contafin_oracle.dmp C:\DMPDIR\
|
|
Copy-Item D:\export-client\*.dmp C:\DMPDIR\ # cate unul per firma
|
|
Copy-Item \\server\sabloane\FIRMANOUA.dmp C:\DMPDIR\ # NU vine de la client!
|
|
|
|
# 4. Aceeasi ordine, aceleasi scripturi
|
|
Run.cmd 01-setup-database.ps1
|
|
Run.cmd 02-create-sys-objects.ps1
|
|
Run.cmd 03-import-contafin.ps1 # aduce NOM_FIRME cu firmele clientului
|
|
Run.cmd 04-create-synonyms-grants.ps1
|
|
Run.cmd 05-import-companies.ps1 # importa toate firmele gasite in NOM_FIRME
|
|
Run.cmd 08-post-install-config.ps1 -CustomerId "<id-client>" -EmailSmtp "mail.romfast.ro"
|
|
Run.cmd 07-verify-installation.ps1
|
|
```
|
|
|
|
Verificare intermediară utilă înainte de import (nu modifică nimic):
|
|
|
|
```powershell
|
|
Run.cmd 05-import-companies.ps1 -DryRun # arata ce firma se leaga de ce fisier
|
|
```
|
|
|
|
Numele fișierului nu trebuie să fie identic cu schema — pasul 05 potrivește `NOM_FIRME.SCHEMA`
|
|
cu fișierele din director, deci `capidavatour_72001.dmp` se leagă de schema `CAPIDAVATOUR`.
|
|
|
|
#### Ce e comun ambelor scenarii
|
|
|
|
- **`03-import-contafin.ps1` iese cu codul 5 și asta e normal** — e codul Data Pump pentru
|
|
„completed with errors": `ORA-31684 ... already exists` (userul e creat deja de pasul 01) și
|
|
`ORA-39082` (warning-uri de compilare, rezolvate la pasul 04). Nu e eșec; citește logul.
|
|
- **`RunAll.cmd` nu poate fi rulat neinteractiv** (folosește `set /p`). Pe stdin redirecționat
|
|
fie anulează instalarea *ieșind cu codul 0*, fie dă „The syntax of the command is incorrect".
|
|
Pentru automatizare apelează scripturile în ordine, ca mai sus.
|
|
- **Conectarea se face la `XEPDB1`**, niciodată la `XE` (CDB root).
|
|
- La final `07-verify-installation.ps1` trebuie să iasă cu **0**. Cod `1` → citește lista de
|
|
probleme din raport; `FIRMANOUA.dmp missing from DMPDIR` e eroare reală în ambele scenarii.
|
|
- Dacă reiei instalarea de la zero, `99-uninstall-roa.ps1` trebuie să iasă cu **0**. Cod diferit
|
|
de 0 înseamnă că au rămas obiecte (uzual o sesiune activă ținea userul ocupat) — nu porni
|
|
instalarea, altfel pasul 05 dă `ORA-31684` în lanț.
|
|
|
|
### Kit de instalare pentru client (recomandat)
|
|
|
|
În loc să aduni manual DMP-urile și scripturile, construiește un kit gata de dus la client:
|
|
|
|
```powershell
|
|
cd proxmox\lxc108-oracle\scripts
|
|
.\build-client-kit.ps1 -Zip
|
|
```
|
|
|
|
Scriptul exportă `CONTAFIN_ORACLE` și `FIRMANOUA` de pe LXC 108 (PDB **ROA2**, nu ROA — ROA e
|
|
producția `ROA_CENTRAL`), le aduce local prin cele trei hopuri, le redenumește la
|
|
`contafin_oracle.dmp` / `FIRMANOUA.dmp` și le pune lângă o copie a scripturilor de instalare.
|
|
|
|
Verifică și **câte firme are `NOM_FIRME`** în dump, citind logul expdp. Un șablon curat are 2
|
|
rânduri; dacă vezi zeci, ai prins din greșeală datele unei baze reale și nu ai voie s-o trimiți
|
|
mai departe.
|
|
|
|
Kitul are structura lui `roa-windows-setup/` plus `DMPDIR/`, deci se dezarhivează pe serverul
|
|
clientului și se rulează direct:
|
|
|
|
```cmd
|
|
INSTALEAZA.cmd curat 138 mail.romfast.ro
|
|
INSTALEAZA.cmd migrare 214
|
|
```
|
|
|
|
`INSTALEAZA.cmd` face ce face `RunAll.cmd`, dar **fără `set /p`** — deci merge și prin SSH, fără
|
|
tastatură. Copiază DMP-urile în `C:\DMPDIR`, dă drepturi contului `NT SERVICE\OracleServiceXE`,
|
|
rulează pașii în ordine, tratează corect codul 5 de la pasul 03 și se oprește la prima eroare
|
|
reală.
|
|
|
|
Opțiuni utile:
|
|
|
|
| Parametru | Ce face |
|
|
|---|---|
|
|
| `-SkipExport` | Refolosește ultimele arhive de pe LXC 108, fără export nou |
|
|
| `-Zip` | Produce și o arhivă `.zip` de trimis |
|
|
| `-PushTo "user@host:C:/kit"` | Trimite kitul direct pe serverul țintă, prin scp |
|
|
| `-OracleVersion 18` | Exportă din `oracle18-xe` (`VERSION=11.2`), pentru baze mai vechi |
|
|
|
|
> `scp` copiază **conținutul** kitului direct în destinație dacă aceasta nu există, sau kitul ca
|
|
> subdirector dacă există deja. Verifică unde a ajuns înainte să rulezi `INSTALEAZA.cmd`.
|
|
|
|
Fluxul complet, kit → instalare pe curat → `[OK] All checks passed!`, e validat pe VM 302
|
|
(2026-08-25).
|
|
|
|
---
|
|
|
|
### Post-Installation Configuration (08-post-install-config.ps1)
|
|
|
|
This script completes the ROA setup by configuring:
|
|
|
|
1. **ROAUPDATE Directories**: Creates 54 physical folders and Oracle DIRECTORY objects
|
|
2. **SERVER_INFO**: Encoded passwords, paths, email settings for PACK_UPDATE
|
|
3. **SMTP**: setează `SMTP_OUT_SERVER` și ACL-ul de rețea pentru `CONTAFIN_ORACLE`
|
|
4. **Customer ID**: Sets AUTH_DETALII for license verification
|
|
5. **Scheduler Jobs**: UPDATEROA_ZILNIC and UPDATERTVAI_ZILNIC (disabled by default)
|
|
|
|
> **De ce e nevoie de pasul 3:** `sys-objects.sql` instalează `UTL_MAIL` și `sys-grants.sql` dă
|
|
> `EXECUTE` pe el — atât cât să *compileze* codul care trimite mailuri. Ca să și *funcționeze*
|
|
> mai trebuie parametrul `SMTP_OUT_SERVER` (altfel `ORA-29278/29279`) și un ACL de rețea către
|
|
> serverul SMTP (din 12c încoace orice acces de rețea din PL/SQL trece prin ACL, altfel
|
|
> `ORA-24247`). Ambele se pun aici; sari peste cu `-SkipSmtpConfig`.
|
|
|
|
```powershell
|
|
# Basic usage (defaults: D:\ROAUPDATE, no Customer ID)
|
|
.\08-post-install-config.ps1
|
|
|
|
# With custom ROAUPDATE path and Customer ID
|
|
.\08-post-install-config.ps1 -RoaUpdatePath "E:\ROAUPDATE" -CustomerId "138"
|
|
|
|
# With email configuration (seteaza si SMTP_OUT_SERVER + ACL)
|
|
.\08-post-install-config.ps1 -EmailTo "admin@company.ro" -EmailSmtp "mail.company.ro" -EmailPort 25
|
|
|
|
# Skip specific parts
|
|
.\08-post-install-config.ps1 -SkipSchedulerJobs -SkipServerInfo -SkipSmtpConfig
|
|
```
|
|
|
|
**Enable automatic updates after verification:**
|
|
```sql
|
|
-- Enable daily update job
|
|
EXEC DBMS_SCHEDULER.ENABLE('CONTAFIN_ORACLE.UPDATEROA_ZILNIC');
|
|
|
|
-- Run update manually for testing
|
|
EXEC DBMS_SCHEDULER.RUN_JOB('CONTAFIN_ORACLE.UPDATEROA_ZILNIC');
|
|
```
|
|
|
|
### Add New Company
|
|
|
|
```powershell
|
|
# Copy company DMP
|
|
Copy-Item \\server\dmp\NEWCOMPANY.dmp C:\DMPDIR\
|
|
|
|
# Run add company script
|
|
.\06-add-company.ps1 -CompanyName "NEWCOMPANY" -Password "ROMFASTSOFT"
|
|
```
|
|
|
|
### 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 de pe sursă (exp clasic)
|
|
exp system/password@ORCL file=C:\backup\COMPANY.dmp owner=COMPANY
|
|
|
|
# 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
|
|
|
|
To remove all ROA objects and start fresh (useful for testing):
|
|
|
|
```powershell
|
|
# Interactive (with confirmation)
|
|
.\scripts\99-uninstall-roa.ps1 -SystemPassword "romfastsoft"
|
|
|
|
# Force (no confirmation)
|
|
.\scripts\99-uninstall-roa.ps1 -SystemPassword "romfastsoft" -Force
|
|
```
|
|
|
|
Or run the SQL script directly:
|
|
|
|
```sql
|
|
sqlplus sys/romfastsoft@localhost:1521/XEPDB1 as sysdba @sql/uninstall-roa.sql
|
|
```
|
|
|
|
**This removes:**
|
|
- All company user schemas (using ROA tablespace)
|
|
- CONTAFIN_ORACLE user and all objects
|
|
- Public synonyms pointing to CONTAFIN_ORACLE
|
|
- SYS custom objects (AUTH_PACK, AUTH_SERII, INFO, etc.)
|
|
- Application context SESIUNE
|
|
- Tablespace ROA (including datafile)
|
|
|
|
> **Warning:** This permanently deletes all ROA data! Use only for testing or before reinstallation.
|
|
|
|
**Verifică întotdeauna codul de ieșire.** Fiecare secțiune a scriptului prinde excepțiile în
|
|
`WHEN OTHERS` ca să nu se oprească la primul obstacol, deci mesajele intermediare nu spun dacă
|
|
a reușit. Verdictul e dat de blocul final, care numără ce a rămas:
|
|
|
|
| Cod | Înseamnă |
|
|
|---|---|
|
|
| `0` | Baza e curată. Poți relua instalarea. |
|
|
| ≠ `0` | `ORA-20900` — au rămas obiecte ROA. **Nu porni instalarea.** |
|
|
|
|
Cauza uzuală a unei dezinstalări incomplete e o sesiune activă care ține userul ocupat
|
|
(`ORA-01940`); scriptul mai încearcă o dată după `KILL SESSION`, dar dacă aplicația ROA e
|
|
pornită nu are ce face. Închide aplicația și sesiunile `sqlplus`, apoi rulează din nou.
|
|
|
|
Dacă ignori codul de ieșire și pornești instalarea peste o dezinstalare parțială, pasul 05 dă
|
|
`ORA-31684 ... already exists` în lanț.
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### ORA-28040: No matching authentication protocol
|
|
|
|
**Problem:** Old clients (Instant Client 10/11) cannot connect to Oracle 21c.
|
|
|
|
**Solution:** Configure `sqlnet.ora` for backward compatibility:
|
|
|
|
```powershell
|
|
# Copy sqlnet.ora template
|
|
Copy-Item config\sqlnet.ora $env:ORACLE_HOME\network\admin\sqlnet.ora
|
|
|
|
# Restart listener
|
|
lsnrctl reload
|
|
```
|
|
|
|
### ORA-01017: invalid username/password
|
|
|
|
**After configuring sqlnet.ora for old clients, reset passwords:**
|
|
|
|
```sql
|
|
ALTER USER CONTAFIN_ORACLE IDENTIFIED BY ROMFASTSOFT;
|
|
ALTER USER [COMPANY] IDENTIFIED BY [PASSWORD];
|
|
```
|
|
|
|
### ORA-12514: TNS:listener does not currently know of service
|
|
|
|
**Check listener status:**
|
|
|
|
```powershell
|
|
lsnrctl status
|
|
lsnrctl services
|
|
```
|
|
|
|
**For XE, ensure PDB is open:**
|
|
|
|
```sql
|
|
ALTER SESSION SET CONTAINER = XEPDB1;
|
|
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;
|
|
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE;
|
|
```
|
|
|
|
### ORA-12609: TNS Receive timeout — importul „eșuează" deși a reușit
|
|
|
|
**Simptom:** `03-import-contafin.ps1` (sau `05`) se termină cu
|
|
`UDI-12609 / ORA-12609: TNS: Receive timeout occurred`, raportează `Objects imported: 0` și iese
|
|
cu cod nenul. Dar în logul Data Pump din `C:\DMPDIR` scrie
|
|
`Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" completed`.
|
|
|
|
**Cauză:** `SQLNET.RECV_TIMEOUT` în `sqlnet.ora`. Fișierul e citit și de clienții de pe aceeași
|
|
mașină (`impdp`, `expdp`, `sqlplus`), iar în timpul unui import serverul poate lucra minute
|
|
întregi fără să trimită vreun pachet — creare de indecși, constrângeri. Clientul `impdp` moare,
|
|
jobul de pe server continuă și se termină cu bine, iar scriptul numără obiectele imediat după
|
|
moartea clientului și găsește 0.
|
|
|
|
Pe Oracle 21c fișierul care contează e cel din **read-only home**:
|
|
`C:\app\<user>\product\21c\homes\OraDB21Home1\network\admin\sqlnet.ora`, nu cel din `dbhomeXE`.
|
|
|
|
**Rezolvare:** scoate `SQLNET.RECV_TIMEOUT` și `SQLNET.SEND_TIMEOUT`. `01-setup-database.ps1` nu
|
|
le mai scrie (le hardcoda pe amândouă la 30 s), dar o instalare mai veche le poate avea încă:
|
|
|
|
```powershell
|
|
$f = "C:\app\romfast\product\21c\homes\OraDB21Home1\network\admin\sqlnet.ora"
|
|
(Get-Content $f) | Where-Object { $_ -notmatch 'SQLNET\.(RECV|SEND)_TIMEOUT' } | Set-Content $f
|
|
```
|
|
|
|
`SQLNET.INBOUND_CONNECT_TIMEOUT` poate rămâne — limitează doar handshake-ul de conectare.
|
|
|
|
Importul care „a eșuat" nu trebuie refăcut dacă logul spune `completed`; rulează doar
|
|
`07-verify-installation.ps1` ca să confirmi.
|
|
|
|
### Import Errors
|
|
|
|
**ORA-00959: tablespace 'ROA' does not exist:**
|
|
```powershell
|
|
# Use REMAP_TABLESPACE in impdp
|
|
impdp ... REMAP_TABLESPACE=ROA:USERS
|
|
```
|
|
|
|
**ORA-00959: tablespace 'USERS' does not exist (pe PDB nou):**
|
|
```cmd
|
|
REM PDB-ul nou din PDB$SEED nu are tablespace USERS. Remapeaza la ROA:
|
|
impdp "sys/pass@XEPDB1 AS SYSDBA" ... remap_tablespace=USERS:ROA
|
|
```
|
|
|
|
**ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version newer:**
|
|
|
|
Use DMP files exported from Oracle 18c (TSTZ 31) instead of Oracle 21c (TSTZ 35).
|
|
|
|
### ORA-12954: Database exceeds 12 GB (XE only)
|
|
|
|
See `../clienti/oracle-xe-21c/depanare-ora-12954-spatiu.md` for full troubleshooting guide.
|
|
|
|
**Prevention (run on every new XE installation):**
|
|
```sql
|
|
-- Connect to XEPDB1 as SYS
|
|
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL);
|
|
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL);
|
|
NOAUDIT POLICY ORA_SECURECONFIG;
|
|
NOAUDIT POLICY ORA_LOGON_FAILURES;
|
|
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60);
|
|
EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7);
|
|
GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE;
|
|
```
|
|
|
|
### Service Not Starting
|
|
|
|
Check Windows Services:
|
|
- `OracleServiceXE` (for XE)
|
|
- `OracleServiceROA` (for SE)
|
|
- `OracleOraDB21Home1TNSListener`
|
|
|
|
```powershell
|
|
# Restart services
|
|
net stop OracleServiceXE
|
|
net start OracleServiceXE
|
|
net stop OracleOraDB21Home1TNSListener
|
|
net start OracleOraDB21Home1TNSListener
|
|
```
|
|
|
|
---
|
|
|
|
## Connection Strings
|
|
|
|
### SQL*Plus
|
|
|
|
```bash
|
|
# Oracle XE (connect to PDB)
|
|
sqlplus system/romfastsoft@localhost:1521/XEPDB1
|
|
sqlplus CONTAFIN_ORACLE/ROMFASTSOFT@localhost:1521/XEPDB1
|
|
|
|
# Oracle SE (connect to database)
|
|
sqlplus system/romfastsoft@localhost:1521/ROA
|
|
sqlplus CONTAFIN_ORACLE/ROMFASTSOFT@localhost:1521/ROA
|
|
```
|
|
|
|
### JDBC
|
|
|
|
```
|
|
# Oracle XE
|
|
jdbc:oracle:thin:@localhost:1521/XEPDB1
|
|
|
|
# Oracle SE
|
|
jdbc:oracle:thin:@localhost:1521/ROA
|
|
```
|
|
|
|
### ODBC (Instant Client)
|
|
|
|
| Parameter | XE Value | SE Value |
|
|
|-----------|----------|----------|
|
|
| Host | localhost | localhost |
|
|
| Port | 1521 | 1521 |
|
|
| Service Name | XEPDB1 | ROA |
|
|
| User | CONTAFIN_ORACLE | CONTAFIN_ORACLE |
|
|
| Password | ROMFASTSOFT | ROMFASTSOFT |
|
|
|
|
### TNS Entry
|
|
|
|
```
|
|
# For Oracle XE
|
|
ROA =
|
|
(DESCRIPTION =
|
|
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
|
|
(CONNECT_DATA = (SERVICE_NAME = XEPDB1))
|
|
)
|
|
|
|
# For Oracle SE
|
|
ROA =
|
|
(DESCRIPTION =
|
|
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
|
|
(CONNECT_DATA = (SERVICE_NAME = ROA))
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## Testing
|
|
|
|
**Mediul de test dedicat:** VM 302 (`oracle-test-302`, 10.0.20.130, pvemini).
|
|
Vezi [`../../vm302-oracle-test/`](../../vm302-oracle-test/) pentru:
|
|
|
|
- Quick start (start/stop/connect VM, RDP/SSH)
|
|
- Workflow snapshots și clonare pentru testare paralelă
|
|
- Plan testare dual-edition XE + SE: [`docs/dual-edition-test-plan.md`](../../vm302-oracle-test/docs/dual-edition-test-plan.md)
|
|
- Log erori producție SE (TODO): [`docs/issues-se-prod.md`](../../vm302-oracle-test/docs/issues-se-prod.md)
|
|
|
|
Pentru clonarea unui VM nou de test din template-ul 300:
|
|
|
|
```bash
|
|
# On Proxmox host (pvemini)
|
|
./test/clone-vm300.sh 301 # Creates VM 301 from template 300
|
|
```
|
|
|
|
See `test/clone-vm300.sh` for details.
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- **Oracle LXC 108 (Docker):** `../README.md`
|
|
- **Migration Oracle 10g -> 21c:** `../migration/README.md`
|
|
- **SQL Migration Guidelines:** `/system_instructions/system_prompt.md`
|
|
- **Proxmox Infrastructure:** `../../README.md`
|
|
|
|
---
|
|
|
|
**Last Updated:** 2026-01-28
|
|
**Author:** Marius Mutu
|
|
**Project:** ROMFASTSQL - ROA Oracle Database Windows Setup
|