Files
ROMFASTSQL/proxmox/lxc108-oracle
Marius aaf5942f6b Fix 04-create-synonyms-grants.ps1 to use SQL files instead of inline SQL
The script had inline SQL that was missing 20 synonyms compared to
synonyms-public.sql, causing PACK_DEF and other packages to fail with
missing synonym errors (SYN_VNOM_UM_ISO, SYN_ATAS_*, SYN_SAL_*, etc.).

Changes:
- Remove all inline SQL (~350 lines)
- Now runs synonyms-public.sql (81 synonyms vs 61 before)
- Now runs grants-public.sql for all grants and ACL
- Add verification of SESIUNE context

This ensures the script stays in sync with the SQL files and
prevents future desync issues.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 00:30:12 +02:00
..

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 în sqlnet.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 = XEPDB1 pentru aplicații, NU SID = 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/dmpdir Fiș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 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

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:


Data ultimei actualizări: 2026-01-28 Autor: Marius Mutu Proiect: ROMFASTSQL - Oracle XE 18c/21c în Proxmox LXC