- SYSTEM_PASSWORD: romfastsoft - CONTAFIN_PASSWORD: ROMFASTSOFT (uppercase) - COMPANY_PASSWORD: ROMFASTSOFT (uppercase) - SERVICE_NAME: XEPDB1 - DMPDIR: C:\DMPDIR - ROAUPDATE_BASE_PATH: D:\ROAUPDATE Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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)
# 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)
# 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
# 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
# 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)
# 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 (CDB cu PDB implicit: XEPDB1)
- 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 |
| /opt/oracle/scripts/startup | /opt/oracle18/oradata/startup | Scripturi executate la pornire |
Fișiere configurare persistente (în /opt/oracle18/oradata/):
| Fișier | Descriere |
|---|---|
| dbconfig/sqlnet.ora | Configurare autentificare (suport clienți vechi 11g) |
| startup/*.sh | Scripturi executate automat la pornirea containerului |
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):
# 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):
# 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
ODBC Windows (Instant Client 11.2 sau mai vechi):
| Parametru | Valoare |
|---|---|
| Host | 10.0.20.121 |
| Port | 1522 |
| Service Name | XEPDB1 |
| User | CONTAFIN_ORACLE sau FIRMANOUA |
| Password | ROMFASTSOFT |
Notă: Pentru clienți ODBC vechi (Instant Client 11g), serverul Oracle 18c trebuie configurat cu
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8însqlnet.ora. Vezi secțiunea Troubleshooting.
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 = XEPDB1pentru aplicații, NUSID = XE!
Export Compatibil din Oracle 18c
# 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
# 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
# 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)
# 1. Stop și remove container vechi
docker stop oracle18-xe 2>/dev/null
docker rm oracle18-xe 2>/dev/null
# 2. Creează directoarele volum (prima dată)
mkdir -p /opt/oracle18/oradata
mkdir -p /opt/oracle18/oradata/dbconfig
mkdir -p /opt/oracle18/oradata/startup
chmod 777 /opt/oracle18/oradata
# 3. Creează sqlnet.ora pentru compatibilitate cu clienți vechi (Instant Client 11g)
cat > /opt/oracle18/oradata/dbconfig/sqlnet.ora << 'EOF'
NAMES.DIRECTORY_PATH = (EZCONNECT, TNSNAMES)
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
EOF
# 4. Creează container cu volume pentru persistență config
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 \
-v /opt/oracle18/oradata/startup:/opt/oracle/scripts/startup \
--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
ORA-28040: No matching authentication protocol (ODBC/Instant Client vechi)
Problemă: Conectarea din Windows cu Oracle Instant Client 11.2 (sau mai vechi) la Oracle 18c eșuează cu eroarea:
ORA-28040: No matching authentication protocol
Cauză: Oracle 18c folosește implicit protocolul de autentificare versiunea 12, incompatibil cu clienții vechi (11g și anterior).
Soluție: Configurează sqlnet.ora să accepte protocoale vechi de autentificare.
# Verifică configurația curentă
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle18-xe sh -c 'cat /opt/oracle/product/18c/dbhomeXE/network/admin/sqlnet.ora'"
# Adaugă suport pentru clienți vechi (dacă nu există deja)
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle18-xe sh -c 'echo \"SQLNET.ALLOWED_LOGON_VERSION_SERVER=8\" >> /opt/oracle/product/18c/dbhomeXE/network/admin/sqlnet.ora'"
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle18-xe sh -c 'echo \"SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8\" >> /opt/oracle/product/18c/dbhomeXE/network/admin/sqlnet.ora'"
# Reîncarcă listener-ul
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle18-xe sh -c 'lsnrctl reload'"
După modificare - resetează parolele utilizatorilor:
Parolele sunt stocate cu versiunea de protocol activă la momentul setării. După modificarea sqlnet.ora, trebuie resetate:
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle18-xe sh -c 'sqlplus -s / as sysdba <<EOF
ALTER SESSION SET CONTAINER = XEPDB1;
ALTER USER CONTAFIN_ORACLE IDENTIFIED BY ROMFASTSOFT;
ALTER USER FIRMANOUA IDENTIFIED BY ROMFASTSOFT;
EXIT;
EOF'"
Persistență la restart container:
Configurația sqlnet.ora este salvată în volumul persistent /opt/oracle18/oradata/dbconfig/. Containerul este configurat cu volum pentru startup scripts care restaurează automat configurația.
Notă: Containerul oracle18-xe a fost recreat cu volum adițional pentru persistența configurației:
-v /opt/oracle18/oradata/startup:/opt/oracle/scripts/startup
Verificare Status
# 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
# 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
# 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
# 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
# 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:
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:
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
# 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
# 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
# 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/dmpdirFișierele DMP sunt accesibile direct, fărădocker cp.
Export Complet ROA2 (Script)
# 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
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
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
scp root@10.0.20.201:/opt/oracle/oradata/dmpdir/firmanoua.dmp /mnt/e/backups/
Recreare DMPDIR (dacă e necesar)
# 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
# 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
# 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
# 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)
# 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
-- 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
# 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:
# 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 migrare01-setup-oracle21c.sh- Setup tablespace ROA + useri02-export-source.sh- Export universal (AUTO/MANUAL/LOCAL)03-transfer-to-oracle21c.sh- Transfer fișiere DMP04-import-to-oracle21c.sh- Import scheme + SYS objects05-create-synonyms-grants.sh- Creare sinonime + grant-uri06-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
config/
Fișiere configurare Oracle 18c:
sqlnet.ora- Configurare autentificare pentru clienți vechi (rezolvă ORA-28040)
scripts/
Scripturi operaționale:
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)fix-sqlnet.sh- Script startup pentru Oracle 18c (copiază sqlnet.ora la pornire container)
Copiere config și scripturi pe LXC 108 (Oracle 18c):
# Din WSL/Linux local - copiază toate fișierele necesare:
cd /mnt/e/proiecte/ROMFASTSQL
# 1. Copiază sqlnet.ora în volumul persistent dbconfig
scp proxmox/lxc108-oracle/config/sqlnet.ora root@10.0.20.201:/tmp/ && \
ssh root@10.0.20.201 "pct exec 108 -- mkdir -p /opt/oracle18/oradata/dbconfig && \
pct push 108 /tmp/sqlnet.ora /opt/oracle18/oradata/dbconfig/sqlnet.ora"
# 2. Copiază fix-sqlnet.sh în volumul startup scripts
scp proxmox/lxc108-oracle/scripts/fix-sqlnet.sh root@10.0.20.201:/tmp/ && \
ssh root@10.0.20.201 "pct exec 108 -- mkdir -p /opt/oracle18/oradata/startup && \
pct push 108 /tmp/fix-sqlnet.sh /opt/oracle18/oradata/startup/fix-sqlnet.sh && \
pct exec 108 -- chmod +x /opt/oracle18/oradata/startup/fix-sqlnet.sh"
# 3. Aplică imediat sqlnet.ora (fără restart container)
ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle18-xe sh -c \
'cp /opt/oracle/oradata/dbconfig/sqlnet.ora /opt/oracle/product/18c/dbhomeXE/network/admin/ && lsnrctl reload'"
Copiere export-roa2.sh pe LXC 108:
# 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-28 Autor: Marius Mutu Proiect: ROMFASTSQL - Oracle XE 18c/21c în Proxmox LXC