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 <noreply@anthropic.com>
This commit is contained in:
@@ -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 <<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:
|
||||
> ```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
|
||||
|
||||
18
proxmox/lxc108-oracle/config/sqlnet.ora
Normal file
18
proxmox/lxc108-oracle/config/sqlnet.ora
Normal file
@@ -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
|
||||
23
proxmox/lxc108-oracle/scripts/fix-sqlnet.sh
Normal file
23
proxmox/lxc108-oracle/scripts/fix-sqlnet.sh
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user