Reorganize proxmox documentation into subdirectories per LXC/VM

- Create cluster/ for Proxmox cluster infrastructure (SSH guide, HA monitor, UPS)
- Create lxc108-oracle/ for Oracle Database documentation and scripts
- Create vm201-windows/ for Windows 11 VM docs and SSL certificate scripts
- Add SSL certificate monitoring scripts (check-ssl-certificates.ps1, monitor-ssl-certificates.sh)
- Remove archived VM107 references (decommissioned)
- Update all cross-references between files
- Update main README.md with new structure and navigation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Marius
2026-01-27 17:02:49 +02:00
parent 1da4c2347c
commit 4d51d5b2d2
33 changed files with 954 additions and 593 deletions

View File

@@ -0,0 +1,507 @@
# 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:** 4 GB
- **Storage:** 50 GB (local-zfs)
- **Status:** Running
- **OS:** Ubuntu/Debian (LXC)
- **Docker Containers:** oracle-xe (21c), oracle18-xe (18c)
## 📋 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 |
---
## 🐳 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:** Running (Up 3+ weeks, healthy)
- **Portainer:** http://10.0.20.121:9443
### 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)
### Informații Container Docker
- **Container Name:** oracle18-xe
- **Image:** gvenzl/oracle-xe:18
- **Versiune:** Oracle Database 18c Express Edition
- **Port:** 1522
- **TSTZ Version:** 31 (compatibil cu 11g/18c/19c)
### Volume Docker Montate (oracle18-xe)
| Container Path | LXC 108 Path | Descriere |
|----------------|--------------|-----------|
| /opt/oracle/oradata | /opt/oracle/oradata18 | Date Oracle 18c |
| /opt/oracle/oradata/dmpdir | /opt/oracle/oradata/dmpdir | Export/Import DMP (partajat) |
### Conexiune Oracle 18c
```bash
# SQL*Plus
sqlplus sys/romfastsoft@10.0.20.121:1522/XE as sysdba
sqlplus system/romfastsoft@10.0.20.121:1522/XE
# JDBC
jdbc:oracle:thin:@10.0.20.121:1522/XE
```
### Export Compatibil din Oracle 18c
```bash
# Export schema (compatibil cu Oracle 11g, 18c, 19c)
docker exec oracle18-xe expdp system/romfastsoft@localhost:1521/XE \
SCHEMAS=FIRMANOUA DIRECTORY=DMPDIR DUMPFILE=firmanoua_v18.dmp VERSION=11.2
```
### Recreare Container Oracle 18c (dacă e necesar)
```bash
docker pull gvenzl/oracle-xe:18
docker run -d --name oracle18-xe \
-p 1522:1521 \
-e ORACLE_PASSWORD=romfastsoft \
-v /opt/oracle/oradata18:/opt/oracle/oradata \
-v /opt/oracle/oradata/dmpdir:/opt/oracle/oradata/dmpdir \
gvenzl/oracle-xe:18
# Creare DMPDIR
docker exec oracle18-xe bash -c "sqlplus -s sys/romfastsoft@localhost:1521/XE as sysdba <<EOF
CREATE OR REPLACE DIRECTORY DMPDIR AS '/opt/oracle/oradata/dmpdir';
GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC;
EOF"
```
---
## 🔗 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
### 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)
---
## 🔗 Legături Utile
**Pentru detalii Proxmox generale (cluster, toate LXC-uri/VM-uri):**
Vezi fișierul: `proxmox/proxmox-ssh-guide.md`
**Oracle Enterprise Manager Express:**
http://10.0.20.121:5500/em
**Portainer Docker Management:**
http://10.0.20.121:9443
---
**Data ultimei actualizări:** 2026-01-27
**Autor:** Marius Mutu
**Proiect:** ROMFASTSQL - Oracle XE 18c/21c în Proxmox LXC

View File

@@ -0,0 +1,186 @@
# Export ROA2 schemas și copiere pe Windows
# Rulează din PowerShell: .\export-roa2.ps1
$BackupDir = "E:\backups\oracle"
$Proxmox = "root@10.0.20.201"
$DmpDir = "/opt/oracle/oradata/dmpdir"
# Creează directorul backup dacă nu există
if (!(Test-Path $BackupDir)) {
New-Item -ItemType Directory -Path $BackupDir | Out-Null
}
function Get-RemoteArchives {
$result = ssh $Proxmox "pct exec 108 -- bash -c 'ls -lt $DmpDir/*.tar.gz 2>/dev/null'" 2>$null
if ($result) {
$archives = @()
foreach ($line in $result) {
if ($line -match '(\S+\.tar\.gz)$') {
$fullPath = $matches[1]
$name = Split-Path $fullPath -Leaf
$size = ($line -split '\s+')[4]
$date = ($line -split '\s+')[5..7] -join ' '
$archives += [PSCustomObject]@{
Name = $name
Size = $size
Date = $date
Path = $fullPath
}
}
}
return $archives
}
return @()
}
function Copy-Archive($archivePath) {
$name = Split-Path $archivePath -Leaf
Write-Host " Copying: $name..." -NoNewline
ssh $Proxmox "pct pull 108 $archivePath /tmp/$name"
scp "${Proxmox}:/tmp/$name" "$BackupDir\" 2>$null
ssh $Proxmox "rm -f /tmp/$name" 2>$null
Write-Host " Done" -ForegroundColor Green
}
function Run-Export {
Write-Host "`nSelecteaza sursa Oracle:" -ForegroundColor Cyan
Write-Host " 1. Oracle 18c (port 1522) - Compatibil 11g/18c/19c (Recomandat)"
Write-Host " 2. Oracle 21c (port 1521) - ROA2"
$srcChoice = Read-Host "Selecteaza sursa [1]"
$oracleVer = switch ($srcChoice) {
'2' { '21' }
default { '18' }
}
if ($oracleVer -eq '18') {
Write-Host "`nExport din Oracle 18c (TSTZ 31 - compatibil 11g/18c/19c)..." -ForegroundColor Green
} else {
Write-Host "`nExport din Oracle 21c ROA2 (TSTZ 35 - doar 21c+)..." -ForegroundColor Yellow
}
ssh $Proxmox "pct exec 108 -- bash /opt/oracle/oradata/export-roa2.sh $oracleVer"
# Copiază cele mai noi 2 arhive
Write-Host "`nCopying new archives..." -ForegroundColor Yellow
$archives = Get-RemoteArchives | Select-Object -First 2
foreach ($archive in $archives) {
Copy-Archive $archive.Path
}
}
function Select-Archives {
$archives = Get-RemoteArchives
if ($archives.Count -eq 0) {
Write-Host "No archives found on LXC 108!" -ForegroundColor Red
return
}
Write-Host "`nAvailable archives:" -ForegroundColor Cyan
for ($i = 0; $i -lt $archives.Count; $i++) {
Write-Host " $($i + 1). $($archives[$i].Name) [$($archives[$i].Size)] - $($archives[$i].Date)"
}
Write-Host " A. All archives"
Write-Host " 0. Cancel"
$choice = Read-Host "`nSelect archives (e.g., 1,3 or A for all)"
if ($choice -eq '0' -or [string]::IsNullOrWhiteSpace($choice)) {
return
}
Write-Host "`nCopying to $BackupDir..." -ForegroundColor Yellow
if ($choice -eq 'A' -or $choice -eq 'a') {
foreach ($archive in $archives) {
Copy-Archive $archive.Path
}
} else {
$indices = $choice -split ',' | ForEach-Object { [int]$_.Trim() - 1 }
foreach ($i in $indices) {
if ($i -ge 0 -and $i -lt $archives.Count) {
Copy-Archive $archives[$i].Path
}
}
}
}
function Clean-RemoteArchives {
$archives = Get-RemoteArchives
if ($archives.Count -eq 0) {
Write-Host "No archives to clean!" -ForegroundColor Yellow
return
}
Write-Host "`nArchives on LXC 108:" -ForegroundColor Cyan
for ($i = 0; $i -lt $archives.Count; $i++) {
Write-Host " $($i + 1). $($archives[$i].Name) [$($archives[$i].Size)] - $($archives[$i].Date)"
}
Write-Host "`n A. Delete ALL archives"
Write-Host " 0. Cancel"
$choice = Read-Host "`nSelect archives to delete (e.g., 1,3 or A for all)"
if ($choice -eq '0' -or [string]::IsNullOrWhiteSpace($choice)) {
return
}
$toDelete = @()
if ($choice -eq 'A' -or $choice -eq 'a') {
$toDelete = $archives
} else {
$indices = $choice -split ',' | ForEach-Object { [int]$_.Trim() - 1 }
foreach ($i in $indices) {
if ($i -ge 0 -and $i -lt $archives.Count) {
$toDelete += $archives[$i]
}
}
}
if ($toDelete.Count -gt 0) {
Write-Host "`nDeleting $($toDelete.Count) archive(s)..." -ForegroundColor Yellow
foreach ($archive in $toDelete) {
ssh $Proxmox "pct exec 108 -- rm -f $($archive.Path)"
Write-Host " Deleted: $($archive.Name)" -ForegroundColor Red
}
}
}
# Main Menu
Clear-Host
Write-Host "=== Export ROA2 ===" -ForegroundColor Cyan
Write-Host ""
Write-Host " 1. Export nou si copiere arhive"
Write-Host " 2. Copiere arhive existente"
Write-Host " 3. Curatare arhive pe LXC 108"
Write-Host " 0. Iesire"
Write-Host ""
$choice = Read-Host "Selecteaza optiune"
switch ($choice) {
'1' {
Run-Export
}
'2' {
Select-Archives
}
'3' {
Clean-RemoteArchives
}
'0' {
Write-Host "Bye!" -ForegroundColor Gray
exit
}
default {
Write-Host "Optiune invalida!" -ForegroundColor Red
exit
}
}
Write-Host "`n=== Done! ===" -ForegroundColor Cyan
Get-ChildItem $BackupDir\*.tar.gz -ErrorAction SilentlyContinue |
Sort-Object LastWriteTime -Descending |
Select-Object -First 6 |
Format-Table Name, @{N='Size(MB)';E={[math]::Round($_.Length/1MB,1)}}, LastWriteTime

View File

@@ -0,0 +1,47 @@
#!/bin/bash
# Export CONTAFIN_ORACLE și FIRMANOUA, arhive separate tar.gz
# Rulează din LXC 108: ./export-roa2.sh [18|21]
# 18 = Oracle 18c (compatibil 11g/18c/19c) | 21 = Oracle 21c (default)
DMPDIR="/opt/oracle/oradata/dmpdir"
DATE=$(date +%Y%m%d_%H%M%S)
SCHEMAS="CONTAFIN_ORACLE FIRMANOUA"
ORACLE_VER=${1:-21}
if [ "$ORACLE_VER" == "18" ]; then
CONTAINER="oracle18-xe"
PORT="1521"
SERVICE="XE"
SUFFIX="_v18"
VERSION="11.2"
echo "=== Export Oracle 18c (compatibil 11g/18c/19c) - $DATE ==="
else
CONTAINER="oracle-xe"
PORT="1521"
SERVICE="roa2"
SUFFIX="_v21"
VERSION="12"
echo "=== Export Oracle 21c - $DATE ==="
fi
cd $DMPDIR
for SCHEMA in $SCHEMAS; do
echo "Exporting $SCHEMA from $CONTAINER..."
docker exec $CONTAINER expdp system/romfastsoft@localhost:$PORT/$SERVICE \
SCHEMAS=$SCHEMA \
DIRECTORY=DMPDIR \
DUMPFILE=${SCHEMA}_${DATE}.dmp \
LOGFILE=${SCHEMA}_${DATE}.log \
VERSION=$VERSION \
EXCLUDE=STATISTICS
# Arhivare individuală
ARCHIVE="${SCHEMA}${SUFFIX}_${DATE}.tar.gz"
echo "Creating archive: $ARCHIVE"
tar -czvf "$ARCHIVE" ${SCHEMA}_${DATE}.dmp ${SCHEMA}_${DATE}.log
rm -f ${SCHEMA}_${DATE}.dmp ${SCHEMA}_${DATE}.log
done
echo "=== Done! ==="
ls -lh $DMPDIR/*_${DATE}.tar.gz