Update Oracle 18c/21c export scripts and documentation
- 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>
This commit is contained in:
@@ -7,11 +7,11 @@
|
||||
- **IP:** 10.0.20.121
|
||||
- **Host Proxmox:** 10.0.20.201 (pvemini)
|
||||
- **CPU:** 2 cores
|
||||
- **RAM:** 4 GB
|
||||
- **RAM:** 8 GB (+ 2GB swap)
|
||||
- **Storage:** 50 GB (local-zfs)
|
||||
- **Status:** Running
|
||||
- **Status:** Stopped (pornire manuală la nevoie)
|
||||
- **OS:** Ubuntu/Debian (LXC)
|
||||
- **Docker Containers:** oracle-xe (21c), oracle18-xe (18c)
|
||||
- **Docker Containers:** oracle-xe (21c), oracle18-xe (18c) - oprite implicit
|
||||
|
||||
## 📋 Sumar Containere Docker
|
||||
|
||||
@@ -20,6 +20,60 @@
|
||||
| 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
|
||||
@@ -28,7 +82,7 @@
|
||||
- **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)
|
||||
- **Status:** Pornire manuală (docker start oracle-xe)
|
||||
- **Portainer:** http://10.0.20.121:9000 (admin / parola281234)
|
||||
|
||||
### Porturi Expuse
|
||||
@@ -50,52 +104,230 @@
|
||||
## 🐳 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
|
||||
- **Port:** 1522
|
||||
- **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/oracle/oradata18 | Date Oracle 18c |
|
||||
| /opt/oracle/oradata/dmpdir | /opt/oracle/oradata/dmpdir | Export/Import DMP (partajat) |
|
||||
| /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
|
||||
```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
|
||||
**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 schema (compatibil cu Oracle 11g, 18c, 19c)
|
||||
# Export FIRMANOUA (compatibil 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
|
||||
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
|
||||
docker pull gvenzl/oracle-xe:18
|
||||
# 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 \
|
||||
-v /opt/oracle/oradata18:/opt/oracle/oradata \
|
||||
-v /opt/oracle/oradata/dmpdir:/opt/oracle/oradata/dmpdir \
|
||||
-e ORACLE_CHARACTERSET=WE8MSWIN1252 \
|
||||
-v /opt/oracle18/oradata:/opt/oracle/oradata \
|
||||
--shm-size=1g \
|
||||
gvenzl/oracle-xe:18
|
||||
|
||||
# Creare DMPDIR
|
||||
docker exec oracle18-xe bash -c "sqlplus -s sys/romfastsoft@localhost:1521/XE as sysdba <<EOF
|
||||
# 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
|
||||
```
|
||||
|
||||
---
|
||||
@@ -461,6 +693,51 @@ ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle-xe tail -100 /opt/oracl
|
||||
|
||||
## 📝 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 |
|
||||
|----------|------|------------------------|
|
||||
@@ -509,9 +786,29 @@ SQL-uri și packages Oracle:
|
||||
- `sql/roa-romconstruct/` - Package PACK_CONTAFIN.pck
|
||||
|
||||
### scripts/
|
||||
Scripturi operaționale:
|
||||
- `export-roa2.sh` - Export PDB roa2
|
||||
- `export-roa2.ps1` - Export pentru Windows
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
|
||||
$BackupDir = "E:\backups\oracle"
|
||||
$Proxmox = "root@10.0.20.201"
|
||||
$DmpDir = "/opt/oracle/oradata/dmpdir"
|
||||
$DmpDir21 = "/opt/oracle/oradata/dmpdir" # Oracle 21c
|
||||
$DmpDir18 = "/opt/oracle18/oradata/dmpdir" # Oracle 18c
|
||||
|
||||
# Creează directorul backup dacă nu există
|
||||
if (!(Test-Path $BackupDir)) {
|
||||
@@ -11,7 +12,16 @@ if (!(Test-Path $BackupDir)) {
|
||||
}
|
||||
|
||||
function Get-RemoteArchives {
|
||||
$result = ssh $Proxmox "pct exec 108 -- bash -c 'ls -lt $DmpDir/*.tar.gz 2>/dev/null'" 2>$null
|
||||
param([string]$DmpDir = "")
|
||||
|
||||
# Dacă nu e specificat, caută în ambele directoare
|
||||
if ([string]::IsNullOrEmpty($DmpDir)) {
|
||||
$dirs = "$DmpDir18 $DmpDir21"
|
||||
} else {
|
||||
$dirs = $DmpDir
|
||||
}
|
||||
|
||||
$result = ssh $Proxmox "pct exec 108 -- bash -c 'for d in $dirs; do ls -lt `$d/*.tar.gz 2>/dev/null; done'" 2>$null
|
||||
if ($result) {
|
||||
$archives = @()
|
||||
foreach ($line in $result) {
|
||||
@@ -42,6 +52,25 @@ function Copy-Archive($archivePath) {
|
||||
Write-Host " Done" -ForegroundColor Green
|
||||
}
|
||||
|
||||
function Start-OracleContainer {
|
||||
param([string]$Container)
|
||||
|
||||
Write-Host "Pornesc containerul $Container..." -ForegroundColor Yellow
|
||||
ssh $Proxmox "pct exec 108 -- docker start $Container"
|
||||
Write-Host "Astept 60s pentru startup Oracle..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 60
|
||||
|
||||
# Verifică dacă e pornit
|
||||
$status = ssh $Proxmox "pct exec 108 -- docker ps --format '{{.Names}}' | grep $Container"
|
||||
if ($status) {
|
||||
Write-Host "Container $Container pornit cu succes!" -ForegroundColor Green
|
||||
return $true
|
||||
} else {
|
||||
Write-Host "EROARE: Container $Container nu a pornit!" -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
function Run-Export {
|
||||
Write-Host "`nSelecteaza sursa Oracle:" -ForegroundColor Cyan
|
||||
Write-Host " 1. Oracle 18c (port 1522) - Compatibil 11g/18c/19c (Recomandat)"
|
||||
@@ -49,8 +78,52 @@ function Run-Export {
|
||||
|
||||
$srcChoice = Read-Host "Selecteaza sursa [1]"
|
||||
$oracleVer = switch ($srcChoice) {
|
||||
'2' { '21' }
|
||||
default { '18' }
|
||||
'2' { '21'; $containerName = 'oracle-xe' }
|
||||
default { '18'; $containerName = 'oracle18-xe' }
|
||||
}
|
||||
|
||||
if ($oracleVer -eq '18') {
|
||||
$containerName = 'oracle18-xe'
|
||||
$currentDmpDir = $DmpDir18
|
||||
} else {
|
||||
$containerName = 'oracle-xe'
|
||||
$currentDmpDir = $DmpDir21
|
||||
}
|
||||
|
||||
# Verifică dacă LXC 108 rulează
|
||||
Write-Host "`nVerific LXC 108..." -NoNewline
|
||||
$lxcStatus = ssh $Proxmox "pct status 108" 2>$null
|
||||
if ($lxcStatus -notmatch "running") {
|
||||
Write-Host " OPRIT" -ForegroundColor Red
|
||||
$start = Read-Host "Pornesc LXC 108? (D/n)"
|
||||
if ($start -ne 'n') {
|
||||
Write-Host "Pornesc LXC 108..." -ForegroundColor Yellow
|
||||
ssh $Proxmox "pct start 108"
|
||||
Start-Sleep -Seconds 10
|
||||
} else {
|
||||
Write-Host "Anulat." -ForegroundColor Gray
|
||||
return
|
||||
}
|
||||
} else {
|
||||
Write-Host " OK" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# Verifică dacă containerul Oracle rulează
|
||||
Write-Host "Verific container $containerName..." -NoNewline
|
||||
$containerStatus = ssh $Proxmox "pct exec 108 -- docker ps --format '{{.Names}}' | grep $containerName" 2>$null
|
||||
if (-not $containerStatus) {
|
||||
Write-Host " OPRIT" -ForegroundColor Red
|
||||
$start = Read-Host "Pornesc $containerName? (D/n)"
|
||||
if ($start -ne 'n') {
|
||||
if (-not (Start-OracleContainer -Container $containerName)) {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
Write-Host "Anulat." -ForegroundColor Gray
|
||||
return
|
||||
}
|
||||
} else {
|
||||
Write-Host " OK" -ForegroundColor Green
|
||||
}
|
||||
|
||||
if ($oracleVer -eq '18') {
|
||||
@@ -61,9 +134,9 @@ function Run-Export {
|
||||
|
||||
ssh $Proxmox "pct exec 108 -- bash /opt/oracle/oradata/export-roa2.sh $oracleVer"
|
||||
|
||||
# Copiază cele mai noi 2 arhive
|
||||
# Copiază cele mai noi 2 arhive din directorul corect
|
||||
Write-Host "`nCopying new archives..." -ForegroundColor Yellow
|
||||
$archives = Get-RemoteArchives | Select-Object -First 2
|
||||
$archives = Get-RemoteArchives -DmpDir $currentDmpDir | Select-Object -First 2
|
||||
foreach ($archive in $archives) {
|
||||
Copy-Archive $archive.Path
|
||||
}
|
||||
|
||||
@@ -2,26 +2,58 @@
|
||||
# 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)
|
||||
#
|
||||
# Exemple:
|
||||
# ./export-roa2.sh 18 # Export din Oracle 18c pe port 1522
|
||||
# ./export-roa2.sh 21 # Export din Oracle 21c PDB roa2 pe port 1521
|
||||
# ./export-roa2.sh # Default: Oracle 21c
|
||||
|
||||
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"
|
||||
PORT="1521" # Port intern container (extern e 1522)
|
||||
SERVICE="XEPDB1" # Oracle 18c PDB (nu CDB!)
|
||||
DMPDIR="/opt/oracle18/oradata/dmpdir" # Volum separat pentru 18c
|
||||
SUFFIX="_v11.2"
|
||||
VERSION="11.2"
|
||||
echo "=== Export Oracle 18c (compatibil 11g/18c/19c) - $DATE ==="
|
||||
echo "=== Export Oracle 18c PDB XEPDB1 (compatibil 11g/18c/19c) - $DATE ==="
|
||||
else
|
||||
CONTAINER="oracle-xe"
|
||||
PORT="1521"
|
||||
SERVICE="roa2"
|
||||
SUFFIX="_v21"
|
||||
VERSION="12"
|
||||
echo "=== Export Oracle 21c - $DATE ==="
|
||||
SERVICE="roa2" # Oracle 21c PDB roa2
|
||||
DMPDIR="/opt/oracle/oradata/dmpdir" # Volum pentru 21c
|
||||
SUFFIX="_v19"
|
||||
VERSION="19"
|
||||
echo "=== Export Oracle 21c PDB roa2 - $DATE ==="
|
||||
fi
|
||||
|
||||
# Verifică că containerul Docker rulează
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "EROARE: Containerul $CONTAINER nu rulează!"
|
||||
echo ""
|
||||
echo "Pornește-l cu: docker start $CONTAINER"
|
||||
echo "Apoi așteaptă ~60s pentru startup Oracle."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verifică că baza de date Oracle e OPEN
|
||||
DB_STATUS=$(docker exec $CONTAINER bash -c "echo 'SELECT status FROM v\$instance;' | sqlplus -s / as sysdba" 2>/dev/null | grep -E "OPEN|MOUNTED")
|
||||
if [ -z "$DB_STATUS" ]; then
|
||||
echo "EROARE: Baza de date Oracle nu e disponibilă!"
|
||||
echo "Containerul rulează dar Oracle nu e OPEN."
|
||||
echo "Verifică: docker logs $CONTAINER --tail 20"
|
||||
exit 1
|
||||
fi
|
||||
echo "Oracle status: $DB_STATUS"
|
||||
|
||||
# Verifică că DMPDIR există
|
||||
if [ ! -d "$DMPDIR" ]; then
|
||||
echo "EROARE: Director $DMPDIR nu există!"
|
||||
echo "Creează-l cu: mkdir -p $DMPDIR && chmod 777 $DMPDIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $DMPDIR
|
||||
|
||||
Reference in New Issue
Block a user