From 665c2b5d37f179a329260ac82dcafebe96d1c66a Mon Sep 17 00:00:00 2001 From: Marius Date: Wed, 28 Jan 2026 00:22:03 +0200 Subject: [PATCH] Add Oracle 18c sqlnet.ora config for old ODBC/Instant Client 11g compatibility - Add config/sqlnet.ora with ALLOWED_LOGON_VERSION=8 for old client support - Add scripts/fix-sqlnet.sh startup script to persist config across container restarts - Update README with ORA-28040 troubleshooting, ODBC connection params, and deployment instructions - Fix SID description: Oracle 18c has PDB (XEPDB1), not non-CDB - Update container recreation instructions with startup scripts volume Resolves ORA-28040: No matching authentication protocol when connecting from Windows ODBC with Oracle Instant Client 11.2 Co-Authored-By: Claude Opus 4.5 --- proxmox/lxc108-oracle/README.md | 111 ++++++++++++++++++-- proxmox/lxc108-oracle/config/sqlnet.ora | 18 ++++ proxmox/lxc108-oracle/scripts/fix-sqlnet.sh | 23 ++++ 3 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 proxmox/lxc108-oracle/config/sqlnet.ora create mode 100644 proxmox/lxc108-oracle/scripts/fix-sqlnet.sh diff --git a/proxmox/lxc108-oracle/README.md b/proxmox/lxc108-oracle/README.md index 0a01fc4..4f7f9a9 100644 --- a/proxmox/lxc108-oracle/README.md +++ b/proxmox/lxc108-oracle/README.md @@ -116,7 +116,7 @@ ssh root@10.0.20.201 "pct exec 108 -- docker stop oracle-xe oracle18-xe; pct sto - **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) +- **SID:** XE (CDB cu PDB implicit: XEPDB1) - **Character Set:** WE8MSWIN1252 ### Scheme Importate @@ -130,6 +130,13 @@ ssh root@10.0.20.201 "pct exec 108 -- docker stop oracle-xe oracle18-xe; pct sto |----------------|--------------|-----------| | /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. @@ -183,6 +190,19 @@ jdbc:oracle:thin:@10.0.20.121:1522/XE 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) @@ -252,11 +272,20 @@ docker exec oracle18-xe impdp system/romfastsoft@localhost:1521/XE \ docker stop oracle18-xe 2>/dev/null docker rm oracle18-xe 2>/dev/null -# 2. Creează directorul volum (prima dată) +# 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ă container +# 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 \ @@ -264,6 +293,7 @@ docker run -d --name oracle18-xe \ -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 @@ -287,6 +317,49 @@ 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. + +```bash +# 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: + +```bash +ssh root@10.0.20.201 "pct exec 108 -- docker exec oracle18-xe sh -c 'sqlplus -s / as sysdba < **Notă:** Containerul oracle18-xe a fost recreat cu volum adițional pentru persistența configurației: +> ```bash +> -v /opt/oracle18/oradata/startup:/opt/oracle/scripts/startup +> ``` + #### Verificare Status ```bash # Status container @@ -785,14 +858,40 @@ 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 pentru export: +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 manuală a scriptului pe LXC 108:** +**Copiere config și scripturi pe LXC 108 (Oracle 18c):** +```bash +# 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:** ```bash # Din WSL/Linux local: scp proxmox/lxc108-oracle/scripts/export-roa2.sh root@10.0.20.201:/tmp/ @@ -827,6 +926,6 @@ http://10.0.20.121:5500/em --- -**Data ultimei actualizări:** 2026-01-27 +**Data ultimei actualizări:** 2026-01-28 **Autor:** Marius Mutu **Proiect:** ROMFASTSQL - Oracle XE 18c/21c în Proxmox LXC diff --git a/proxmox/lxc108-oracle/config/sqlnet.ora b/proxmox/lxc108-oracle/config/sqlnet.ora new file mode 100644 index 0000000..4f31385 --- /dev/null +++ b/proxmox/lxc108-oracle/config/sqlnet.ora @@ -0,0 +1,18 @@ +# ============================================================================= +# sqlnet.ora - Configurare Oracle 18c XE pentru clienți vechi +# ============================================================================= +# Locație în container: /opt/oracle/oradata/dbconfig/sqlnet.ora +# Copiat automat în: /opt/oracle/product/18c/dbhomeXE/network/admin/sqlnet.ora +# de către fix-sqlnet.sh la pornirea containerului +# +# Problema rezolvată: ORA-28040: No matching authentication protocol +# Permite conexiuni de la Oracle Instant Client 11g și ODBC vechi +# ============================================================================= + +NAMES.DIRECTORY_PATH = (EZCONNECT, TNSNAMES) + +# Suport pentru clienți vechi (Oracle 11g, Instant Client 11.2, ODBC vechi) +# Valori posibile: 8, 10, 11, 12 (default în Oracle 18c este 12) +# Versiunea 8 permite cele mai vechi clienți +SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 +SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 diff --git a/proxmox/lxc108-oracle/scripts/fix-sqlnet.sh b/proxmox/lxc108-oracle/scripts/fix-sqlnet.sh new file mode 100644 index 0000000..75b84ba --- /dev/null +++ b/proxmox/lxc108-oracle/scripts/fix-sqlnet.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# ============================================================================= +# fix-sqlnet.sh - Startup script pentru Oracle 18c XE +# ============================================================================= +# Scop: Restaurează sqlnet.ora cu suport pentru clienți vechi (Instant Client 11g) +# la fiecare pornire a containerului Docker. +# +# Locație în container: /opt/oracle/scripts/startup/fix-sqlnet.sh +# Executat automat de: gvenzl/oracle-xe la pornirea containerului +# +# Problema rezolvată: ORA-28040: No matching authentication protocol +# Cauză: Oracle 18c implicit nu acceptă autentificare de la clienți 11g +# ============================================================================= + +CONFIG_SOURCE="/opt/oracle/oradata/dbconfig/sqlnet.ora" +CONFIG_DEST="/opt/oracle/product/18c/dbhomeXE/network/admin/sqlnet.ora" + +if [ -f "$CONFIG_SOURCE" ]; then + cp "$CONFIG_SOURCE" "$CONFIG_DEST" + echo "[fix-sqlnet.sh] Copied custom sqlnet.ora with old auth protocol support" +else + echo "[fix-sqlnet.sh] WARNING: $CONFIG_SOURCE not found, using default sqlnet.ora" +fi