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:
507
proxmox/lxc108-oracle/README.md
Normal file
507
proxmox/lxc108-oracle/README.md
Normal 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
|
||||
186
proxmox/lxc108-oracle/scripts/export-roa2.ps1
Normal file
186
proxmox/lxc108-oracle/scripts/export-roa2.ps1
Normal 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
|
||||
47
proxmox/lxc108-oracle/scripts/export-roa2.sh
Normal file
47
proxmox/lxc108-oracle/scripts/export-roa2.sh
Normal 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
|
||||
Reference in New Issue
Block a user