- Increase LXC 108 memory from 4GB to 8GB + 2GB swap - Add manual startup/shutdown instructions for Oracle containers - Document CDB/PDB architecture and correct connection strings - Fix export-roa2.sh: use XEPDB1 PDB for Oracle 18c, separate DMPDIR - Fix export-roa2.ps1: dual DMPDIR paths, auto-start containers - Add container/database status checks before export - Add TNS entries with SERVICE_NAME=XEPDB1 (not SID=XE) - Document DBMS_CUBE_EXP warnings as harmless Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
833 lines
26 KiB
Markdown
833 lines
26 KiB
Markdown
# Oracle Database XE - LXC 108 (Proxmox)
|
|
|
|
## 📌 Informații Container LXC
|
|
|
|
- **VMID:** 108
|
|
- **Nume:** central-oracle
|
|
- **IP:** 10.0.20.121
|
|
- **Host Proxmox:** 10.0.20.201 (pvemini)
|
|
- **CPU:** 2 cores
|
|
- **RAM:** 8 GB (+ 2GB swap)
|
|
- **Storage:** 50 GB (local-zfs)
|
|
- **Status:** Stopped (pornire manuală la nevoie)
|
|
- **OS:** Ubuntu/Debian (LXC)
|
|
- **Docker Containers:** oracle-xe (21c), oracle18-xe (18c) - oprite implicit
|
|
|
|
## 📋 Sumar Containere Docker
|
|
|
|
| Container | Port | Versiune | TSTZ | Utilizare |
|
|
|-----------|------|----------|------|-----------|
|
|
| oracle-xe | 1521 | 21c | 35 | Dezvoltare, ROA, ROA2 |
|
|
| oracle18-xe | 1522 | 18c | 31 | Export compatibil 11g/18c/19c |
|
|
|
|
> **Notă:** Containerele Docker sunt oprite implicit pentru a economisi resurse.
|
|
> Pornește-le manual când ai nevoie (vezi secțiunea Pornire/Oprire).
|
|
|
|
---
|
|
|
|
## 🚀 Pornire și Oprire LXC + Oracle
|
|
|
|
### Pornire completă (LXC + Oracle 21c)
|
|
```bash
|
|
# De pe Proxmox (10.0.20.201):
|
|
pct start 108
|
|
sleep 10
|
|
pct exec 108 -- docker start oracle-xe
|
|
|
|
# Sau dintr-o singură comandă SSH:
|
|
ssh root@10.0.20.201 "pct start 108 && sleep 10 && pct exec 108 -- docker start oracle-xe"
|
|
|
|
# Verificare:
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker ps"
|
|
```
|
|
|
|
### Pornire Oracle 18c (pentru export compatibil)
|
|
```bash
|
|
# Presupune că LXC 108 rulează deja
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker start oracle18-xe"
|
|
|
|
# Așteaptă ~60s pentru startup, apoi verifică:
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker logs oracle18-xe --tail 5"
|
|
```
|
|
|
|
### Oprire containere Oracle
|
|
```bash
|
|
# Oprește ambele containere:
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker stop oracle-xe oracle18-xe"
|
|
|
|
# Sau doar unul:
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker stop oracle18-xe"
|
|
```
|
|
|
|
### Oprire completă LXC
|
|
```bash
|
|
# Oprește containerele Docker apoi LXC:
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker stop oracle-xe oracle18-xe 2>/dev/null; pct stop 108"
|
|
```
|
|
|
|
### Script rapid PowerShell (pentru Windows)
|
|
```powershell
|
|
# Pornire LXC + Oracle 21c
|
|
ssh root@10.0.20.201 "pct start 108; sleep 15; pct exec 108 -- docker start oracle-xe"
|
|
|
|
# Oprire
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker stop oracle-xe oracle18-xe; pct stop 108"
|
|
```
|
|
|
|
---
|
|
|
|
## 🐳 Oracle XE 21c în Docker
|
|
|
|
### Informații Container Docker
|
|
- **Container Name:** oracle-xe
|
|
- **Image:** container-registry.oracle.com/database/express:21.3.0-xe
|
|
- **Versiune:** Oracle Database 21c Express Edition
|
|
- **Status:** Pornire manuală (docker start oracle-xe)
|
|
- **Portainer:** http://10.0.20.121:9000 (admin / parola281234)
|
|
|
|
### Porturi Expuse
|
|
| Port | Serviciu | Descriere |
|
|
|------|----------|-----------|
|
|
| 1521 | Oracle Listener | Conexiuni SQL*Plus, JDBC |
|
|
| 5500 | Oracle EM Express | Enterprise Manager Web Interface |
|
|
|
|
### Volume Docker Montate (oracle-xe)
|
|
| Container Path | LXC 108 Path | Descriere |
|
|
|----------------|--------------|-----------|
|
|
| /opt/oracle/oradata | /opt/oracle/oradata | Date Oracle, tablespaces |
|
|
| /opt/oracle/oradata/dmpdir | /opt/oracle/oradata/dmpdir | Export/Import DMP (DMPDIR) |
|
|
| /opt/oracle/scripts/setup | /opt/oracle/scripts/setup | Scripturi setup |
|
|
| /opt/oracle/scripts/startup | /opt/oracle/scripts/startup | Scripturi startup |
|
|
|
|
---
|
|
|
|
## 🐳 Oracle XE 18c în Docker (Export Compatibil)
|
|
|
|
> **Scop:** Export DMP compatibil cu Oracle 11g, 18c, 19c (TSTZ version 31)
|
|
>
|
|
> **De ce Oracle 18c separat?** Oracle 21c are TSTZ version 35, iar clienții cu Oracle 11g/18c/19c
|
|
> nu pot importa DMP-uri exportate din 21c (eroare ORA-39405). Containerul oracle18-xe permite
|
|
> export cu VERSION=11.2 compatibil cu versiunile vechi.
|
|
|
|
### Informații Container Docker
|
|
- **Container Name:** oracle18-xe
|
|
- **Image:** gvenzl/oracle-xe:18
|
|
- **Versiune:** Oracle Database 18c Express Edition (18.4.0.0.0)
|
|
- **Port Extern:** 1522 (mapează la 1521 intern)
|
|
- **Port EM Express:** 5502 (mapează la 5500 intern)
|
|
- **TSTZ Version:** 31 (compatibil cu 11g/18c/19c)
|
|
- **SID:** XE (non-CDB, nu are PDB-uri)
|
|
- **Character Set:** WE8MSWIN1252
|
|
|
|
### Scheme Importate
|
|
| Schema | Parola | Obiecte | Utilizare |
|
|
|--------|--------|---------|-----------|
|
|
| CONTAFIN_ORACLE | ROMFASTSOFT | ~330 | Schema common (drepturi, update, etc.) |
|
|
| FIRMANOUA | ROMFASTSOFT | ~3400 | Schema client template (gestiune, contab, salarii) |
|
|
|
|
### Volume Docker Montate (oracle18-xe)
|
|
| Container Path | LXC 108 Path | Descriere |
|
|
|----------------|--------------|-----------|
|
|
| /opt/oracle/oradata | /opt/oracle18/oradata | Date Oracle 18c (datafiles, redo) |
|
|
| /opt/oracle/oradata/dmpdir | /opt/oracle18/oradata/dmpdir | Export/Import DMP |
|
|
|
|
> **Notă:** Oracle 18c folosește un volum **separat** (`/opt/oracle18/`) pentru a evita
|
|
> conflicte cu Oracle 21c. Directorul DMPDIR este în volumul 18c.
|
|
|
|
### Arhitectură CDB/PDB Oracle 18c
|
|
|
|
Oracle 18c XE folosește arhitectura **multitenant** (la fel ca 21c):
|
|
|
|
| Container | Tip | Descriere |
|
|
|-----------|-----|-----------|
|
|
| CDB$ROOT | CDB | Container root (admin, SYS objects) |
|
|
| PDB$SEED | PDB | Template read-only pentru creare PDB-uri noi |
|
|
| XEPDB1 | PDB | PDB implicit pentru aplicații și date |
|
|
|
|
> **Diferență față de Oracle 21c:**
|
|
> - Oracle 21c are PDB-uri custom: **ROA**, **ROA2**
|
|
> - Oracle 18c are PDB-ul implicit: **XEPDB1**
|
|
> - Schemele CONTAFIN_ORACLE și FIRMANOUA sunt în **XEPDB1** (nu în CDB!)
|
|
>
|
|
> **IMPORTANT:** Conectează-te la **XEPDB1**, nu la **XE**!
|
|
|
|
### Conexiune Oracle 18c
|
|
|
|
**Conectare la CDB (admin):**
|
|
```bash
|
|
# SYS la CDB root
|
|
sqlplus sys/romfastsoft@10.0.20.121:1522/XE as sysdba
|
|
|
|
# SYSTEM la CDB root
|
|
sqlplus system/romfastsoft@10.0.20.121:1522/XE
|
|
```
|
|
|
|
**Conectare la PDB XEPDB1 (aplicații):**
|
|
```bash
|
|
# SYS la PDB
|
|
sqlplus sys/romfastsoft@10.0.20.121:1522/XEPDB1 as sysdba
|
|
|
|
# Schema FIRMANOUA (pentru aplicații)
|
|
sqlplus FIRMANOUA/ROMFASTSOFT@10.0.20.121:1522/XEPDB1
|
|
|
|
# Schema CONTAFIN_ORACLE
|
|
sqlplus CONTAFIN_ORACLE/ROMFASTSOFT@10.0.20.121:1522/XEPDB1
|
|
```
|
|
|
|
**JDBC:**
|
|
```
|
|
# Conectare la CDB (admin)
|
|
jdbc:oracle:thin:@10.0.20.121:1522/XE
|
|
|
|
# Conectare la PDB XEPDB1 (aplicații - recomandat)
|
|
jdbc:oracle:thin:@10.0.20.121:1522/XEPDB1
|
|
```
|
|
|
|
**TNS Entries:**
|
|
```
|
|
# PDB XEPDB1 (pentru aplicații - RECOMANDAT)
|
|
ROA_CENTRAL3 =
|
|
(DESCRIPTION =
|
|
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.20.121)(PORT = 1522))
|
|
(CONNECT_DATA = (SERVICE_NAME = XEPDB1))
|
|
)
|
|
|
|
# Alias alternativ
|
|
XEPDB1 =
|
|
(DESCRIPTION =
|
|
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.20.121)(PORT = 1522))
|
|
(CONNECT_DATA = (SERVICE_NAME = XEPDB1))
|
|
)
|
|
|
|
# CDB root (doar pentru admin)
|
|
XE18 =
|
|
(DESCRIPTION =
|
|
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.20.121)(PORT = 1522))
|
|
(CONNECT_DATA = (SERVICE_NAME = XE))
|
|
)
|
|
```
|
|
|
|
> **Atenție:** Folosește `SERVICE_NAME = XEPDB1` pentru aplicații, NU `SID = XE`!
|
|
|
|
### Export Compatibil din Oracle 18c
|
|
```bash
|
|
# Export FIRMANOUA (compatibil Oracle 11g, 18c, 19c)
|
|
docker exec oracle18-xe expdp system/romfastsoft@localhost:1521/XE \
|
|
SCHEMAS=FIRMANOUA DIRECTORY=DMPDIR DUMPFILE=firmanoua_v11.2.dmp \
|
|
LOGFILE=export_firmanoua.log VERSION=11.2
|
|
|
|
# Export CONTAFIN_ORACLE (compatibil Oracle 11g, 18c, 19c)
|
|
docker exec oracle18-xe expdp system/romfastsoft@localhost:1521/XE \
|
|
SCHEMAS=CONTAFIN_ORACLE DIRECTORY=DMPDIR DUMPFILE=contafin_v11.2.dmp \
|
|
LOGFILE=export_contafin.log VERSION=11.2
|
|
|
|
# Export ambele scheme
|
|
docker exec oracle18-xe expdp system/romfastsoft@localhost:1521/XE \
|
|
SCHEMAS=CONTAFIN_ORACLE,FIRMANOUA DIRECTORY=DMPDIR \
|
|
DUMPFILE=roa_export_v11.2.dmp LOGFILE=export_roa.log VERSION=11.2
|
|
```
|
|
|
|
### Scripturi Export Automatizate
|
|
```bash
|
|
# Din LXC 108 sau remote
|
|
./export-roa2.sh 18 # Export din Oracle 18c (port 1522)
|
|
./export-roa2.sh 21 # Export din Oracle 21c PDB roa2 (port 1521)
|
|
|
|
# Din PowerShell Windows
|
|
.\export-roa2.ps1 # Meniu interactiv
|
|
```
|
|
**Locații scripturi:** `proxmox/lxc108-oracle/scripts/export-roa2.sh`, `proxmox/lxc108-oracle/scripts/export-roa2.ps1`
|
|
|
|
### Import în Oracle 18c
|
|
```bash
|
|
# Import schema cu remap tablespace (dacă nu există tablespace ROA)
|
|
docker exec oracle18-xe impdp system/romfastsoft@localhost:1521/XE \
|
|
SCHEMAS=FIRMANOUA DIRECTORY=DMPDIR DUMPFILE=firmanoua.dmp \
|
|
LOGFILE=import.log REMAP_TABLESPACE=ROA:USERS,ROA2:USERS
|
|
```
|
|
|
|
### Recreare Container Oracle 18c (dacă e necesar)
|
|
```bash
|
|
# 1. Stop și remove container vechi
|
|
docker stop oracle18-xe 2>/dev/null
|
|
docker rm oracle18-xe 2>/dev/null
|
|
|
|
# 2. Creează directorul volum (prima dată)
|
|
mkdir -p /opt/oracle18/oradata
|
|
chmod 777 /opt/oracle18/oradata
|
|
|
|
# 3. Creează container
|
|
docker run -d --name oracle18-xe \
|
|
--restart unless-stopped \
|
|
-p 1522:1521 \
|
|
-p 5502:5500 \
|
|
-e ORACLE_PASSWORD=romfastsoft \
|
|
-e ORACLE_CHARACTERSET=WE8MSWIN1252 \
|
|
-v /opt/oracle18/oradata:/opt/oracle/oradata \
|
|
--shm-size=1g \
|
|
gvenzl/oracle-xe:18
|
|
|
|
# 4. Așteaptă pornirea (primele 2-3 minute)
|
|
docker logs -f oracle18-xe
|
|
# Așteptă mesajul: "DATABASE IS READY TO USE!"
|
|
|
|
# 5. Creare DMPDIR
|
|
docker exec oracle18-xe bash -c "sqlplus -s / as sysdba <<EOF
|
|
CREATE OR REPLACE DIRECTORY DMPDIR AS '/opt/oracle/oradata/dmpdir';
|
|
GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC;
|
|
EOF"
|
|
|
|
# 6. Creare useri (dacă importi DMP-uri existente)
|
|
docker exec oracle18-xe bash -c "sqlplus -s / as sysdba <<EOF
|
|
CREATE USER CONTAFIN_ORACLE IDENTIFIED BY ROMFASTSOFT DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
|
|
CREATE USER FIRMANOUA IDENTIFIED BY ROMFASTSOFT DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
|
|
GRANT CONNECT, RESOURCE, DBA TO CONTAFIN_ORACLE, FIRMANOUA;
|
|
EOF"
|
|
```
|
|
|
|
### Troubleshooting Oracle 18c
|
|
|
|
#### Verificare Status
|
|
```bash
|
|
# Status container
|
|
docker ps | grep oracle18
|
|
|
|
# Loguri container
|
|
docker logs oracle18-xe --tail 50
|
|
|
|
# Verificare bază de date
|
|
docker exec oracle18-xe bash -c "echo 'SELECT status FROM v\$instance;' | sqlplus -s / as sysdba"
|
|
```
|
|
|
|
#### Container nu pornește
|
|
```bash
|
|
# Verifică memorie (necesită min 1GB RAM + 1GB shm)
|
|
free -m
|
|
|
|
# Verifică permisiuni director
|
|
ls -la /opt/oracle18/oradata
|
|
|
|
# Șterge și recreează
|
|
docker rm -f oracle18-xe
|
|
rm -rf /opt/oracle18/oradata/*
|
|
# Apoi reia pașii de creare
|
|
```
|
|
|
|
#### ORA-01034: ORACLE not available
|
|
```bash
|
|
# Repornește containerul
|
|
docker restart oracle18-xe
|
|
|
|
# Sau verifică dacă baza de date s-a oprit
|
|
docker exec oracle18-xe bash -c "sqlplus / as sysdba <<EOF
|
|
STARTUP;
|
|
EOF"
|
|
```
|
|
|
|
#### Eroare la import: ORA-00959 tablespace does not exist
|
|
```bash
|
|
# Folosește REMAP_TABLESPACE
|
|
impdp ... REMAP_TABLESPACE=ROA:USERS,ROA2:USERS
|
|
```
|
|
|
|
---
|
|
|
|
## 🔗 Conexiuni Oracle Database (21c)
|
|
|
|
### Container Database (CDB)
|
|
- **CDB Name:** XE
|
|
- **User SYS:** sys / romfastsoft (CONTAINER=ALL)
|
|
- **User SYSTEM:** system / romfastsoft (CONTAINER=ALL)
|
|
|
|
### Conexiune la CDB
|
|
```bash
|
|
# SQL*Plus
|
|
sqlplus sys/romfastsoft@10.0.20.121:1521/XE as sysdba
|
|
sqlplus system/romfastsoft@10.0.20.121:1521/XE
|
|
|
|
# JDBC
|
|
jdbc:oracle:thin:@10.0.20.121:1521/XE
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Pluggable Databases (PDB-uri)
|
|
|
|
### 1. PDB: ROA (Producție)
|
|
|
|
**Informații Generale:**
|
|
- **Service Name:** roa
|
|
- **Scop:** Bază de date producție pentru aplicații ROMFAST
|
|
|
|
**Useri și Parole:**
|
|
| User | Password | Rol |
|
|
|------|----------|-----|
|
|
| sys | romfastsoft | SYSDBA |
|
|
| system | romfastsoft | SYSTEM |
|
|
| CONTAFIN_ORACLE | OraclePass123 | Application schema |
|
|
| MARIUSM_AUTO | OraclePass123 | Application schema |
|
|
|
|
**SQL*Plus:**
|
|
```bash
|
|
sqlplus sys/romfastsoft@10.0.20.121:1521/roa as sysdba
|
|
sqlplus system/romfastsoft@10.0.20.121:1521/roa
|
|
sqlplus CONTAFIN_ORACLE/OraclePass123@10.0.20.121:1521/roa
|
|
sqlplus MARIUSM_AUTO/OraclePass123@10.0.20.121:1521/roa
|
|
```
|
|
|
|
**JDBC:**
|
|
```
|
|
jdbc:oracle:thin:@10.0.20.121:1521/roa
|
|
```
|
|
|
|
**TNS Entry:**
|
|
```
|
|
ROA =
|
|
(DESCRIPTION =
|
|
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.20.121)(PORT = 1521))
|
|
(CONNECT_DATA =
|
|
(SERVER = DEDICATED)
|
|
(SERVICE_NAME = roa)
|
|
)
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
### 2. PDB: ROA2 (Template pentru Export DMP)
|
|
|
|
**Informații Generale:**
|
|
- **Service Name:** roa2
|
|
- **Scop:** Template pentru scheme noi, export DMP pentru clienți noi
|
|
|
|
**Useri și Parole:**
|
|
| User | Password | Rol |
|
|
|------|----------|-----|
|
|
| sys | romfastsoft | SYSDBA |
|
|
| system | romfastsoft | SYSTEM |
|
|
| CONTAFIN_ORACLE | ROMFASTSOFT | Template schema |
|
|
| FIRMANOUA | ROMFASTSOFT | Template schema (client nou) |
|
|
|
|
**SQL*Plus:**
|
|
```bash
|
|
sqlplus sys/romfastsoft@10.0.20.121:1521/roa2 as sysdba
|
|
sqlplus system/romfastsoft@10.0.20.121:1521/roa2
|
|
sqlplus CONTAFIN_ORACLE/ROMFASTSOFT@10.0.20.121:1521/roa2
|
|
sqlplus FIRMANOUA/ROMFASTSOFT@10.0.20.121:1521/roa2
|
|
```
|
|
|
|
**JDBC:**
|
|
```
|
|
jdbc:oracle:thin:@10.0.20.121:1521/roa2
|
|
```
|
|
|
|
**TNS Entry:**
|
|
```
|
|
ROA2 =
|
|
(DESCRIPTION =
|
|
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.20.121)(PORT = 1521))
|
|
(CONNECT_DATA =
|
|
(SERVER = DEDICATED)
|
|
(SERVICE_NAME = roa2)
|
|
)
|
|
)
|
|
```
|
|
|
|
**Caracteristici ROA2:**
|
|
- Tablespace ROA: 2GB (pentru teste/template)
|
|
- Profil DEFAULT: parole nelimitate (PASSWORD_LIFE_TIME UNLIMITED)
|
|
- Obiecte SYS custom: AUTH_PACK, UPDATESQLPLUS, EXECUTESCRIPTOS, UTL_MAIL
|
|
- 232 sinonime publice CONTAFIN_ORACLE
|
|
- 149 grant-uri către PUBLIC
|
|
|
|
---
|
|
|
|
## 🔧 Acces la Oracle prin LXC
|
|
|
|
> **IMPORTANT:** Nu ai nevoie de user/parolă pentru LXC 108!
|
|
> Accesul se face prin Proxmox folosind comenzile `pct`.
|
|
|
|
### Metoda 1: Intrare în LXC 108
|
|
```bash
|
|
# SSH în Proxmox
|
|
ssh root@10.0.20.201
|
|
|
|
# Intrare în LXC 108
|
|
pct enter 108
|
|
|
|
# Acum poți folosi comenzi Docker direct
|
|
docker ps
|
|
docker logs oracle-xe --tail 50
|
|
```
|
|
|
|
### Metoda 2: Execuție Directă din Proxmox
|
|
```bash
|
|
# Verificare PDB-uri
|
|
ssh root@10.0.20.201 'pct exec 108 -- docker exec oracle-xe bash -c "echo \"SELECT name, open_mode FROM v\\\$pdbs;\" | sqlplus -s sys/romfastsoft@localhost:1521/XE as sysdba"'
|
|
|
|
# Restart Oracle container
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker restart oracle-xe"
|
|
```
|
|
|
|
### Metoda 3: SQL*Plus Direct în Container
|
|
```bash
|
|
# Intrare în container Oracle
|
|
pct exec 108 -- docker exec -it oracle-xe bash
|
|
|
|
# SQL*Plus din container
|
|
docker exec oracle-xe sqlplus sys/romfastsoft@localhost:1521/roa as sysdba
|
|
```
|
|
|
|
---
|
|
|
|
## 📦 Export și Import Data Pump
|
|
|
|
> **DMPDIR** - Director Oracle montat direct pe LXC 108: `/opt/oracle/oradata/dmpdir`
|
|
> Fișierele DMP sunt accesibile direct, fără `docker cp`.
|
|
|
|
### Export Complet ROA2 (Script)
|
|
```bash
|
|
# Rulează din LXC 108
|
|
pct exec 108 -- bash /opt/oracle/oradata/export-roa2.sh
|
|
```
|
|
Rezultat: `/opt/oracle/oradata/dmpdir/roa2_export_YYYYMMDD_HHMMSS.zip`
|
|
|
|
### Export Individual
|
|
```bash
|
|
docker exec oracle-xe expdp system/romfastsoft@localhost:1521/roa2 \
|
|
SCHEMAS=FIRMANOUA DIRECTORY=DMPDIR DUMPFILE=firmanoua.dmp COMPRESSION=ALL
|
|
|
|
docker exec oracle-xe expdp system/romfastsoft@localhost:1521/roa2 \
|
|
SCHEMAS=CONTAFIN_ORACLE DIRECTORY=DMPDIR DUMPFILE=contafin.dmp COMPRESSION=ALL
|
|
```
|
|
|
|
### Import în PDB
|
|
```bash
|
|
docker exec oracle-xe impdp system/romfastsoft@localhost:1521/roa \
|
|
SCHEMAS=FIRMANOUA DIRECTORY=DMPDIR DUMPFILE=firmanoua.dmp LOGFILE=firmanoua_import.log
|
|
```
|
|
|
|
### Copiere DMP din LXC 108 în WSL
|
|
```bash
|
|
scp root@10.0.20.201:/opt/oracle/oradata/dmpdir/firmanoua.dmp /mnt/e/backups/
|
|
```
|
|
|
|
### Recreare DMPDIR (dacă e necesar)
|
|
```bash
|
|
# 1. Creează folder pe LXC 108
|
|
pct exec 108 -- mkdir -p /opt/oracle/oradata/dmpdir
|
|
pct exec 108 -- chmod 777 /opt/oracle/oradata/dmpdir
|
|
|
|
# 2. Creează DIRECTORY Oracle în fiecare PDB
|
|
for pdb in XE roa roa2; do
|
|
pct exec 108 -- docker exec oracle-xe bash -c "sqlplus -s sys/romfastsoft@localhost:1521/$pdb as sysdba <<EOF
|
|
CREATE OR REPLACE DIRECTORY DMPDIR AS '/opt/oracle/oradata/dmpdir';
|
|
GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC;
|
|
EOF"
|
|
done
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 Verificări și Comenzi SQL Utile
|
|
|
|
### Status PDB-uri
|
|
```sql
|
|
-- Verificare status PDB-uri
|
|
SELECT name, open_mode, restricted FROM v$pdbs;
|
|
|
|
-- Deschidere PDB (dacă e MOUNTED)
|
|
ALTER PLUGGABLE DATABASE roa OPEN;
|
|
ALTER PLUGGABLE DATABASE roa2 OPEN;
|
|
ALTER PLUGGABLE DATABASE ALL SAVE STATE;
|
|
```
|
|
|
|
### Verificare Tablespace-uri
|
|
```sql
|
|
-- Tablespace-uri și utilizare în ROA2
|
|
SELECT
|
|
tablespace_name,
|
|
ROUND(bytes/1024/1024, 2) as MB,
|
|
ROUND(maxbytes/1024/1024, 2) as MAX_MB,
|
|
autoextensible
|
|
FROM dba_data_files
|
|
WHERE tablespace_name='ROA';
|
|
|
|
-- Spațiu liber
|
|
SELECT
|
|
tablespace_name,
|
|
ROUND(SUM(bytes)/1024/1024, 2) as FREE_MB
|
|
FROM dba_free_space
|
|
GROUP BY tablespace_name;
|
|
```
|
|
|
|
### Status Obiecte și Scheme
|
|
```sql
|
|
-- Număr obiecte per schema în ROA2
|
|
SELECT
|
|
owner,
|
|
COUNT(*) total_objects,
|
|
SUM(CASE WHEN status='VALID' THEN 1 ELSE 0 END) valid_objects,
|
|
SUM(CASE WHEN status='INVALID' THEN 1 ELSE 0 END) invalid_objects
|
|
FROM dba_objects
|
|
WHERE owner IN ('CONTAFIN_ORACLE', 'FIRMANOUA')
|
|
GROUP BY owner;
|
|
|
|
-- Tipuri obiecte
|
|
SELECT owner, object_type, COUNT(*)
|
|
FROM dba_objects
|
|
WHERE owner IN ('CONTAFIN_ORACLE', 'FIRMANOUA')
|
|
GROUP BY owner, object_type
|
|
ORDER BY owner, COUNT(*) DESC;
|
|
```
|
|
|
|
### Useri și Profiluri
|
|
```sql
|
|
-- Verificare useri și profile în PDB
|
|
SELECT username, account_status, profile, created
|
|
FROM dba_users
|
|
WHERE username IN ('CONTAFIN_ORACLE', 'FIRMANOUA', 'MARIUSM_AUTO')
|
|
ORDER BY created DESC;
|
|
|
|
-- Verificare limită parole (PASSWORD_LIFE_TIME)
|
|
SELECT profile, resource_name, limit
|
|
FROM dba_profiles
|
|
WHERE resource_name = 'PASSWORD_LIFE_TIME'
|
|
ORDER BY profile;
|
|
```
|
|
|
|
### Sinonime Publice
|
|
```sql
|
|
-- Verificare sinonime publice CONTAFIN_ORACLE
|
|
SELECT COUNT(*) as total_synonyms
|
|
FROM dba_synonyms
|
|
WHERE owner = 'PUBLIC'
|
|
AND table_owner = 'CONTAFIN_ORACLE';
|
|
|
|
-- Detalii sinonime
|
|
SELECT synonym_name, table_owner, table_name
|
|
FROM dba_synonyms
|
|
WHERE owner = 'PUBLIC'
|
|
AND table_owner = 'CONTAFIN_ORACLE'
|
|
ORDER BY synonym_name;
|
|
```
|
|
|
|
### Grant-uri către PUBLIC
|
|
```sql
|
|
-- Număr grant-uri către PUBLIC
|
|
SELECT COUNT(*) as total_grants
|
|
FROM dba_tab_privs
|
|
WHERE grantee = 'PUBLIC'
|
|
AND owner IN ('CONTAFIN_ORACLE', 'SYS');
|
|
|
|
-- Detalii grant-uri
|
|
SELECT owner, table_name, privilege, grantee
|
|
FROM dba_tab_privs
|
|
WHERE grantee = 'PUBLIC'
|
|
AND owner IN ('CONTAFIN_ORACLE', 'SYS')
|
|
ORDER BY owner, table_name;
|
|
```
|
|
|
|
---
|
|
|
|
## 🚨 Troubleshooting Oracle
|
|
|
|
### Verificare Conexiune Oracle
|
|
```bash
|
|
# Test ping LXC 108
|
|
ping -c 3 10.0.20.121
|
|
|
|
# Test port Oracle listener
|
|
nc -zv 10.0.20.121 1521
|
|
|
|
# Test SQL*Plus conexiune
|
|
sqlplus sys/romfastsoft@10.0.20.121:1521/roa as sysdba
|
|
```
|
|
|
|
### Restart Oracle Database
|
|
```bash
|
|
# Opțiunea 1: Restart container Docker (RAPID)
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker restart oracle-xe"
|
|
|
|
# Opțiunea 2: Restart LXC complet
|
|
ssh root@10.0.20.201 "pct restart 108"
|
|
|
|
# Verificare după restart
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker ps"
|
|
```
|
|
|
|
### Verificare Status Container
|
|
```bash
|
|
# Status Docker container
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker ps"
|
|
|
|
# Healthcheck Oracle
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker inspect oracle-xe | grep -A 10 Health"
|
|
|
|
# Loguri Oracle
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker logs oracle-xe --tail 100"
|
|
```
|
|
|
|
### PDB nu se deschide (MOUNTED)
|
|
```bash
|
|
# Deschidere manuală PDB
|
|
ssh root@10.0.20.201 'pct exec 108 -- docker exec oracle-xe bash -c "echo \"ALTER PLUGGABLE DATABASE ALL OPEN; ALTER PLUGGABLE DATABASE ALL SAVE STATE;\" | sqlplus -s sys/romfastsoft@localhost:1521/XE as sysdba"'
|
|
```
|
|
|
|
### Probleme Maximum Open Cursors
|
|
```sql
|
|
-- Verificare valoare curentă
|
|
SELECT name, value FROM v$parameter WHERE name = 'open_cursors';
|
|
|
|
-- Creștere limită cursoare (dacă apar erori ORA-01000)
|
|
ALTER SYSTEM SET OPEN_CURSORS=1000 SCOPE=BOTH SID='*';
|
|
```
|
|
|
|
### Verificare Alert Log Oracle
|
|
```bash
|
|
# Alert log location în container
|
|
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe tail -100 /opt/oracle/diag/rdbms/xe/XE/trace/alert_XE.log"
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 Notițe Importante
|
|
|
|
### Ce este CDB/PDB? (Arhitectura Multitenant)
|
|
|
|
Începând cu Oracle 12c, Oracle folosește arhitectura **multitenant**:
|
|
|
|
```
|
|
┌─────────────────────────────────────────────┐
|
|
│ CDB (Container DB) │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ CDB$ROOT - Dicționar date, SYS │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ PDB$SEED - Template (read-only) │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ PDB1 (ex: ROA) - Date aplicație │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
│ ┌─────────────────────────────────────┐ │
|
|
│ │ PDB2 (ex: ROA2) - Date aplicație │ │
|
|
│ └─────────────────────────────────────┘ │
|
|
└─────────────────────────────────────────────┘
|
|
```
|
|
|
|
| Termen | Descriere |
|
|
|--------|-----------|
|
|
| **CDB** | Container Database - baza de date principală care conține PDB-uri |
|
|
| **PDB** | Pluggable Database - bază de date "portabilă" cu propriile scheme și date |
|
|
| **CDB$ROOT** | Container root - conține dicționarul de date și obiectele SYS |
|
|
| **PDB$SEED** | Template read-only pentru crearea de noi PDB-uri |
|
|
|
|
**De ce contează:**
|
|
- **Conectare la CDB** (XE): vezi toate PDB-urile, operații admin
|
|
- **Conectare la PDB** (ROA, XEPDB1): vezi doar schemele din acel PDB
|
|
- **Export/Import**: specifică PDB-ul corect în connection string
|
|
|
|
**Exemplu practic:**
|
|
```bash
|
|
# Conectare la CDB - vezi toate PDB-urile
|
|
sqlplus sys/romfastsoft@10.0.20.121:1521/XE as sysdba
|
|
SQL> SELECT name FROM v$pdbs; -- arată: ROA, ROA2
|
|
|
|
# Conectare la PDB ROA - vezi doar schemele din ROA
|
|
sqlplus sys/romfastsoft@10.0.20.121:1521/ROA as sysdba
|
|
SQL> SELECT username FROM dba_users; -- arată userii din ROA
|
|
```
|
|
|
|
### Compatibilitate TSTZ (Time Zone)
|
|
| Versiune | TSTZ | Compatibilitate Import |
|
|
|----------|------|------------------------|
|
|
| Oracle 21c | 35 | Doar 21c+ |
|
|
| Oracle 18c | 31 | 11g, 18c, 19c, 21c |
|
|
| Oracle 19c | 32 | 11g, 18c, 19c, 21c |
|
|
|
|
> **Important:** Pentru export compatibil cu clienți Oracle 11g/18c/19c, folosește **oracle18-xe** (port 1522).
|
|
|
|
### Diferențe Oracle 10g vs 21c
|
|
- **Oracle 10g** folosește SID (ORCL) - sistem vechi, decommissioned
|
|
- **Oracle 21c** folosește SERVICE_NAME (roa, roa2) - sistem actual
|
|
- Migrare: Export DMP Oracle 10g → Import Data Pump Oracle 21c (impdp)
|
|
|
|
### Profile Parole
|
|
- **ROA:** Parolele pot expira (setări default Oracle)
|
|
- **ROA2:** Parolele NU expiră (PASSWORD_LIFE_TIME UNLIMITED)
|
|
|
|
### VM 201 - Windows 11 (Client Aplicații)
|
|
- **VMID:** 201
|
|
- **Nume:** roacentral
|
|
- **Host:** 10.0.20.201 (Proxmox pvemini)
|
|
- **OS:** Windows 11 (24H2)
|
|
- **Rol:** Client pentru aplicații Windows, SQL*Plus client
|
|
- **NU** rulează Oracle Database (migrat în LXC 108 Docker)
|
|
|
|
---
|
|
|
|
## 📂 Subdirectoare
|
|
|
|
### migration/
|
|
Scripturi pentru migrarea Oracle 10g → 21c XE:
|
|
- `00-MASTER-MIGRATION.sh` - Script master orchestrare migrare
|
|
- `01-setup-oracle21c.sh` - Setup tablespace ROA + useri
|
|
- `02-export-source.sh` - Export universal (AUTO/MANUAL/LOCAL)
|
|
- `03-transfer-to-oracle21c.sh` - Transfer fișiere DMP
|
|
- `04-import-to-oracle21c.sh` - Import scheme + SYS objects
|
|
- `05-create-synonyms-grants.sh` - Creare sinonime + grant-uri
|
|
- `06-finalize-migration.sh` - Recompilare + verificare finală
|
|
|
|
**Documentație:** `migration/README.md`
|
|
|
|
### sql/
|
|
SQL-uri și packages Oracle:
|
|
- `sql/roa/` - SQL-uri compatibilitate Oracle 10g (scrie_jc_2007.sql, etc.)
|
|
- `sql/roa-romconstruct/` - Package PACK_CONTAFIN.pck
|
|
|
|
### scripts/
|
|
Scripturi operaționale pentru export:
|
|
- `export-roa2.sh` - Export din Oracle 18c sau 21c (bash)
|
|
- `./export-roa2.sh 18` - Export compatibil 11g/18c/19c din Oracle 18c
|
|
- `./export-roa2.sh 21` - Export din Oracle 21c PDB roa2
|
|
- `export-roa2.ps1` - Export pentru Windows (PowerShell, meniu interactiv)
|
|
|
|
**Copiere manuală a scriptului pe LXC 108:**
|
|
```bash
|
|
# Din WSL/Linux local:
|
|
scp proxmox/lxc108-oracle/scripts/export-roa2.sh root@10.0.20.201:/tmp/
|
|
|
|
# Pe Proxmox (10.0.20.201):
|
|
pct push 108 /tmp/export-roa2.sh /opt/oracle/oradata/export-roa2.sh
|
|
pct exec 108 -- chmod +x /opt/oracle/oradata/export-roa2.sh
|
|
|
|
# Sau într-o singură comandă din WSL:
|
|
scp proxmox/lxc108-oracle/scripts/export-roa2.sh root@10.0.20.201:/tmp/ && \
|
|
ssh root@10.0.20.201 "pct push 108 /tmp/export-roa2.sh /opt/oracle/oradata/export-roa2.sh && \
|
|
pct exec 108 -- chmod +x /opt/oracle/oradata/export-roa2.sh"
|
|
```
|
|
|
|
**Notă warning-uri export:** La export vor apărea warning-uri `ORA-31642: DBMS_CUBE_EXP` -
|
|
acestea sunt **inofensive** (Oracle XE nu include modulul OLAP). Exportul se finalizează corect.
|
|
|
|
---
|
|
|
|
## 🔗 Legături Utile
|
|
|
|
**Pentru detalii Proxmox generale (cluster, toate LXC-uri/VM-uri):**
|
|
Vezi fișierul: `../cluster/README.md`
|
|
|
|
**Oracle Enterprise Manager Express:**
|
|
http://10.0.20.121:5500/em
|
|
|
|
**Portainer Docker Management:**
|
|
- **URL:** http://10.0.20.121:9000
|
|
- **User:** admin
|
|
- **Parola:** parola281234
|
|
|
|
---
|
|
|
|
**Data ultimei actualizări:** 2026-01-27
|
|
**Autor:** Marius Mutu
|
|
**Proiect:** ROMFASTSQL - Oracle XE 18c/21c în Proxmox LXC
|