Files
Marius Mutu d64124386c skills: 9 skill-uri de agent ROA (COMUN\skills) + legare si rutare
- leaga_skills.ps1: expune skill-urile in ~/.claude/skills prin symlink (citit si de Claude Code, si de opencode), fara copiere
- rutare zona->skill in reguli_lucru pct. 7, README, AGENTS.md; skill-ul devine proprietarul procedurii, docurile raman referinta conditionata
- rec_skills.md: decizia, inventarul si cum se adauga un skill nou
2026-09-16 11:54:37 +03:00

6.6 KiB

name: roa-oracle-production-access description: Ridica lantul complet statie -> tunel SSH Bitvise -> alias TNS -> DSN ODBC 32-bit si interogheaza read-only un Oracle de PRODUCTIE al unui client ROA. Foloseste-l OBLIGATORIU cand utilizatorul spune "conecteaza-te la productia clientului X", "intra pe Oracle la client", "ridica tunelul SSH", "deschide tunelul Bitvise", "nu merge DSN-ul ODBC", "ORA-12541 TNS:no listener", "verifica TNS", "unde e tnsnames.ora", "seteaza TNS_ADMIN", "ruleaza un SELECT pe productie", "de ce nu se conecteaza sqlplus" sau cere orice acces la o baza Oracle care nu e expusa direct. Stapaneste exact capcanele care costa sesiuni intregi: portul local 1521 unic pentru mai multe destinatii, BvSsh.exe care tine portul legat, odbcad32.exe pe 32 de biti, $ distrus in here-string PowerShell. Nu improviza, nu sari peste dovada si nu ghici parole.

Acces la productia Oracle: tunel SSH (Bitvise) + TNS + DSN ODBC

Scopul e sa NU se mai piarda o sesiune redescoperind lantul: executa pasii de mai jos, nu trimite utilizatorul in alta parte.

Cand se foloseste

  • "conecteaza-te la productia clientului X", "intra pe Oracle la client", "deschide baza de productie";
  • "ridica tunelul SSH", "porneste tunelul Bitvise", "profilul vending.tlp / conpress.tlp";
  • "nu merge DSN-ul ODBC", "eroare ORA-12541: TNS:no listener", "sqlplus nu se conecteaza";
  • "verifica TNS", "unde e tnsnames.ora", "seteaza TNS_ADMIN", "SELECT pe productie" (read-only).

Nu acopera: re-exportul sursei unui pachet PL/SQL si editarea de text VFP.

Pasi

  1. Fixeaza lantul. TREI nume trebuie sa se potriveasca, si e usor de ratat:
    • profilul Bitvise (.tlp) - ce port local deschide (de obicei 127.0.0.1:1521);
    • aliasul TNS din tnsnames.ora - ce host:port foloseste (127.0.0.1:1521);
    • DSN-ul ODBC - ce alias TNS foloseste. tcHost din oConn.Connect(tcHost, ...) (oproceduri_comune.prg) e NUMELE DSN-ului, nu un host si nu un alias TNS.
  2. Profilele Bitvise sunt pe statia curenta in D:\roa\BITVISE\ (vending.tlp, conpress.tlp, clever.tlp, automotive.tlp, avis.tlp, eduard.tlp, ems.tlp, romfast.tlp, sigma.tlp, vadeco.tlp).
  3. Ridica tunelul fara interfata grafica: & 'C:\Program Files (x86)\Bitvise SSH Client\stnlc.exe' -profile=D:\roa\BITVISE\vending.tlp (sau Start-Process ... -WindowStyle Hidden cu redirect in $env:TEMP\stnlc_out.txt). stnlc foloseste singur parola din profil: NU o pune pe linia de comanda si ruleaza sub acelasi cont Windows sub care a fost salvat profilul, altfel DPAPI nu poate decripta.
  4. Verifica tunelul inainte de orice altceva (nu te baza ca procesul traieste): (Test-NetConnection 127.0.0.1 -Port 1521 -WarningAction SilentlyContinue).TcpTestSucceeded.
  5. Seteaza TNS: $env:TNS_ADMIN = 'D:\ROA\instantclient_11_2_0_2' pentru driverul ODBC pe 32 de biti, sau instantclient_19_18 pentru sqlplus. Aliasul care merge prin tunel are HOST = 127.0.0.1, PORT = 1521.
  6. DSN: sunt pe 32 de biti, in HKLM\SOFTWARE\WOW6432Node\ODBC\ODBC.INI. Listeaza cu Get-ChildItem 'HKLM:\SOFTWARE\WOW6432Node\ODBC\ODBC.INI' | Select-Object -ExpandProperty PSChildName. Administrare vizuala: C:\Windows\SysWOW64\odbcad32.exe (NU cel din System32).
  7. Interogheaza: & 'D:\ROA\instantclient_19_18\sqlplus.exe' -S -L '<schema>/<parola>@VENDING' '@script.sql'. -L = o singura incercare de login. Foloseste-l intotdeauna pe productie.
  8. Prima interogare, mereu, ca sa stii unde ai nimerit: select user || ' @ ' || sys_context('USERENV','DB_NAME') from dual;
  9. La final inchide tunelul (opreste procesul stnlc); nu-l lasa deschis peste noapte.

Capcane

  • Port local 1521 unic pentru mai multe destinatii: daca ai deja un tunel catre alt client, al doilea nu mai poate lega portul si interoghezi alta baza fara sa-ti dai seama. Proba e pasul 8.
  • BvSsh.exe (GUI) poate tine portul 1521 legat pe 0.0.0.0 cu o sesiune moarta -> sqlplus da ORA-12541: TNS:no listener, desi "tunelul pare sus". stnlc isi poate lega totusi regula pe 127.0.0.1:1521 peste ea. Nu te lua dupa netstat: proba reala e interogarea.
  • DSN-urile sunt pe 32 de biti (VFP e pe 32 de biti) si stau in WOW6432Node\ODBC\ODBC.INI; odbcad32.exe din System32 e pe 64 de biti si nu le vede.
  • $ in here-string cu ghilimele duble (@"..."@): PowerShell expandeaza $, iar un regex Oracle care se termina cu ancora $ ajunge stricat in .sql -> interogarea intoarce 0 randuri fara nicio eroare. Foloseste here-string cu apostrof (@'...'@).
  • termout off ascunde si mesajele de eroare: un spool gol nu inseamna date lipsa; ruleaza din nou fara termout off inainte sa banuiesti datele.
  • Fara credentiale in git si fara ghicit parole: FAILED_LOGIN_ATTEMPTS poate bloca schema in PRODUCTIE dupa cateva incercari gresite. Cere parola.
  • Doar SELECT: fara INSERT/UPDATE/DELETE/DDL, fara ALTER SESSION persistent; margineaza cu fetch first N rows only. Codurile fiscale publice pot sta in repo, denumirile de parteneri, adresele si soldurile NU.

Criterii de acceptare si dovada

Fara dovezile da/nu de mai jos, conexiunea NU se raporteaza ca functionala. "S-a conectat" nu e dovada.

  1. (Test-NetConnection 127.0.0.1 -Port 1521 -WarningAction SilentlyContinue).TcpTestSucceeded -> True.
  2. In %TEMP%\stnlc_out.txt apare Added client-to-server forwarding rule on 127.0.0.1:1521 to localhost:1521.
  3. sqlplus -S -L chiar intoarce randuri din select user || ' @ ' || sys_context('USERENV','DB_NAME') from dual; -> schema si baza asteptate.
  4. DSN-ul rezolva la host:port corect: numele e prezent in WOW6432Node\ODBC\ODBC.INI, iar aliasul TNS folosit de el arata spre 127.0.0.1:1521.
  5. Tunelul e inchis la final (procesul stnlc oprit).

Scripturi

  • C:\Program Files (x86)\Bitvise SSH Client\stnlc.exe - tunel din linie de comanda.
  • C:\Program Files (x86)\Bitvise SSH Client\BvSsh.exe - GUI (sursa capcanei de port).
  • D:\ROA\instantclient_19_18\sqlplus.exe - interogare read-only.
  • D:\ROA\instantclient_11_2_0_2\ - clientul pentru driverul ODBC pe 32 de biti (TNS_ADMIN).
  • C:\Windows\SysWOW64\odbcad32.exe - administrarea DSN-urilor pe 32 de biti.
  • Test-NetConnection (PowerShell) - proba ca tunelul e sus.

Referinta (doar la nevoie)

  • Doar daca ai nevoie de tabelul schemelor cunoscute (profil -> alias/DSN -> schema) sau de exemplul de extragere a codurilor fiscale, citeste COMUN\docs\conexiuni-tunel-ssh-odbc.md; re-exportul sursei unui pachet PL/SQL nu e acoperit aici, vezi COMUN\docs\oracle_export.md.