Serverul 10.0.20.36 a parut blocat 20 de minute (12:02-12:22). Nu a fost blocaj, crash sau oprire: a intrat in standby S3 in urma unei actiuni de power de la consola. BootId neschimbat, oracle.exe si tnslsnr.exe neintrerupte din 15 iulie, zero erori in System/Application. Dovada decisiva e listener.log: clienti serviti normal pana la 12:01:26, apoi gaura totala pana la 12:22:03 - singura discontinuitate din toata ziua. Remediere aplicata si verificata: - somnul eliminat complet (powercfg /a nu mai listeaza nicio stare) - butoane power si meniu Start -> Shut down; buton sleep -> Do nothing - Sleep after era 600 s pe profilul DC, adica serverul ar fi adormit la 10 min dupa o pana de curent; acum 0 - Critical battery action era Hibernate, imposibil dupa dezactivarea hibernarii; corectat pe Shut down, praguri urcate 5%->20% / 7%->25% / 10%->40% - ViewPower oprit si dezactivat: comunicatia cu UPS-ul era moarta (QPI NAK), iar Windows gestioneaza UPS-ul nativ prin HID UPS Battery - sonda roa2web care lovea listenerul la 30 s: oprita. Verifica portul 1521, adica listenerul de productie, nu tunelul vending - raporta fals "sanatos". Tunelul e dezactivat, era oricum cazut de la boot-ul din 15 iulie Ramane, doar daca se repune vending in functiune: autorizarea cheii pe 79.119.86.134 (plink e respins de server dupa banner-ul de versiune). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RoM99w9qRELJefaWrtPRHo
18 KiB
Incident 10 august 2026 — server 10.0.20.36 „blocat" 20 de minute
Concluzie: serverul nu s-a blocat și nu a crăpat. A intrat în standby (S3) la 12:02:20 în urma unei acțiuni de power de la consolă și a stat adormit până la 12:22:04. Oracle nu a fost oprit, doar suspendat în RAM.
Server
ROA-CARAPETRU2 / 10.0.20.36 — Windows 11 Pro 26200, Oracle 19c SE2, instanța ROA.
Acces: ssh -p 22122 Administrator@10.0.20.36.
Cronologia (ora locală, GTB +03:00)
| Ora | Sursa | Eveniment |
|---|---|---|
| 11:45:36 | System 566 Kernel-Power |
ultimul input fizic la consolă înainte de incident (InputHid) |
| ~11:50 | — | monitorul se stinge (VIDEOIDLE AC = 300 s = 5 min) |
| 12:00:00 | System 6013 |
uptime 2.285.772 s = 26 zile 11 h, neîntrerupt din 15 iulie |
| 12:00:02–12:00:18 | listener.log | 8 conexiuni la ROA dintr-un program din C:\Users\Administrator\Downloads\ |
| 12:01:04 | System 7040 |
BITS trece demand → auto |
| 12:01:26 | listener.log | ultima conexiune client reală: ROACONT.exe de pe RAMONA |
| 12:01:58 | listener.log | ultimul poll local |
| 12:02:14 | System 1074 User32 |
Explorer.EXE inițiază power off, pe seama ROA-CARAPETRU2\Administrator, „Other (Unplanned)" |
| 12:02:14 | Security 4624×3 |
winlogon creează sesiunea 2 (UMFD-2, DWM-2) |
| 12:02:19 | Security 4647 |
„User initiated logoff" pentru Administrator (SID …-500) |
| 12:02:19 | System 100 winsrvext |
rundll32.exe (5016 ms) și ATI…\CCC.exe (5078 ms) întârzie oprirea |
| 12:02:20 | System 1074 |
winlogon.exe continuă power off |
| 12:02:20 | System 566 |
tranziție sesiune, Reason **InputHid** — input fizic exact în acel moment |
| 12:02:20 | System 187 Kernel-Power |
proces user-mode apelează SetSuspendState/SetSystemPowerState |
| 12:02:20 | System 42 Kernel-Power |
„The system is entering sleep. Sleep Reason: Application API" |
| 12:02:20 | RDP LSM 23/24/39/40 |
sesiunea 1 delogată/deconectată, Source Network Address: LOCAL |
| 12:02–12:22 | listener.log | gaură totală — zero activitate |
| 12:22:04 | Power-Troubleshooter | trezire. Sleep 09:02:20 UTC → Wake 09:22:04 UTC. Wake Source: Unknown |
| 12:22:03 | Kernel-General 1 |
ceasul sare înapoi la timpul real (delta 1.180.963 ms ≈ 19 min 41 s de somn) |
| 12:22:03 | listener.log | service_update * roa * 0 — listenerul revine |
| 12:22:48+ | listener.log | clienții reconectează: ELENA-I5, RAMONA, ROXANA, DESKTOP-DJ8G35U, STELUTA-PC, LG17 |
| 12:31:25 | RDP LSM 21 |
logon consolă Administrator (sesiunea 2) |
Dovezi că NU a fost blocaj, crash sau oprire
- Zero evenimente
41(Kernel-Power / oprire neașteptată),6008(unexpected shutdown),1001(BugCheck/BSOD) — nici în ziua incidentului, nici în ultimele 10 zile. - Zero evenimente Error/Critical în
System(3 zile) șiApplication(2 zile). BootId: 30neschimbat pe toată durata → nu a existat repornire.LastBootUpTime= 15 iulie 2026 01:03:48;oracle.exeșitnslsnr.exeauStartTime15 iulie 01:02:56 → procesele Oracle nu s-au oprit niciodată.- Listener.log demonstrează că baza servea normal până în secunda adormirii: clienți reali la 11:45, 11:47–11:53 (SILVIA-ENVY), 11:50 (JENI), 12:01:26 (RAMONA). Distribuția pe ore în ziua respectivă este continuă (09→56, 10→63, 11→47, 12→56 conexiuni). Singura discontinuitate din zi este fereastra 12:01:58 → 12:22:03.
Cu alte cuvinte: până la 12:02 nimic nu era în neregulă. Indisponibilitatea de 20 de minute a fost provocată chiar de acțiunea de la 12:02, nu de o defecțiune anterioară.
Cauza
Standby-ul nu a venit din inactivitate — STANDBYIDLE pe AC = 0 (Never), HIBERNATEIDLE AC = 0, iar
Sleep Reason este Application API, nu Idle. A fost o comandă explicită de power dată de la
consolă, care s-a executat ca Sleep în loc de Shut down:
UIBUTTON_ACTION(„Start menu power button") are valoarea efectivă 0 = Sleep.- Nu există override în schema activă (
…\PowerSchemes\381b4222…\4f971e89…) pentru acțiunea butonului fizic de power (PBUTTONACTION) sau sleep (SBUTTONACTION) — ambele auAttributes=1, adică sunt ascunse din interfața Windows, deci nici nu pot fi verificate/schimbate din Control Panel fără intervenție în registry. Explorer.EXEeste exact procesul care tratează butonul de power din meniul Start, iar566 Reason InputHidla 12:02:20 confirmă input fizic în acel moment.
Ce nu se poate proba din loguri: care buton anume a fost apăsat (meniul Start vs. butonul fizic).
Auditarea creării de procese (Process Creation) este dezactivată, deci nu există 4688 care să
arate ce a lansat rundll32.exe. Mecanismul și rezultatul sunt însă certe.
Trezirea de la 12:22:04 (Wake Source: Unknown) corespunde apăsării butonului de power — de aceea
calculatorul „s-a aprins", ceea ce a fost interpretat drept dovadă că era în standby. Era, dar
ajunsese acolo în urma acțiunii de la 12:02.
Probleme reale descoperite pe parcurs
-
Serverul poate intra în S3. Pe o mașină de producție cu Oracle, stările de somn trebuie eliminate complet, nu doar setate pe „Never" — atâta timp cât S3 e disponibil, orice apăsare greșită oprește baza pentru toți clienții.
-
Comunicația ViewPower ↔ UPS este moartă.
C:\ViewPower\log\log4j.logconține continuuQPI return(NAK, iar baza de date proprie (C:\ViewPower\datas\log5xx.dat) nu mai fusese scrisă din 9 august 23:10. Configurația (C:\ViewPower\config\ups.properties) areShutdownconfigure.batModeShutdown=truecubatModeShutdownTime=30— adică ar trebui să oprească serverul controlat după 30 min pe baterie. Cu comunicația căzută, la o pană reală de curent nu va face nimic.Hardware-ul e însă în regulă: Windows vede nativ
HID UPS Battery(HID\VID_0665&PID_5161&MI_01— Cypress/Voltronic),Win32_Batteryraportează Status OK, 100% încărcare, ~70 min autonomie. Repornirea serviciuluiupsMonitornu rezolvă: după restart au venit 2 răspunsuri valide (QPI returnQPIla 22:24:10 și 22:24:12), apoi s-a întors laNAK(197 NAK / 2 valide în ultimele 200 de linii). Tiparul indică o dispută pe același device USB HID între driverul nativ Windows și ViewPower. -
Fast Startup este activ (
HiberbootEnabled=1) pe un server Oracle de producție. De aceea uptime-ul se acumulează de 26 de zile — un „shutdown" normal nu mai face repornire curată a kernelului. -
Healthcheck greșit configurat — și inutil. Sursa:
roa2web, fișierulC:\inetpub\wwwroot\roa2web\backend\shared\ssh_tunnel_manager.py:- linia 68:
self.check_interval: int = 30 - linia 186:
await self._check_port("127.0.0.1", port) - liniile 218-230:
_check_portfaceasyncio.open_connectionși închide imediat, fără handshake TNS → listenerul îl loghează caTNS-12537.
Portul vine din
C:\inetpub\wwwroot\roa2web\backend\ssh-tunnels.json, unde tunelul „vending" are"local_port": 1521. Dar 1521 e portul listenerului de producție de pe acest server, iar.envdeclară vending-ul pelocalhost:**1522**. Consecințe:- tunelul SSH nu poate lega portul 1521, e ocupat de Oracle local;
- verificarea reușește întotdeauna, pentru că lovește listenerul local — monitorul raportează tunelul „sănătos" indiferent de realitate și nu declanșează niciodată repornirea;
- nu rulează niciun proces
ssh.exe, deci tunelul vending e oricum căzut de la ultima pornire.
- linia 68:
-
ORACLE_HOME e sub
C:\Users\Administrator\Downloads\WINDOWS.X64_193000_db_home\. Listenerul de producție rulează din folderul Downloads. Funcționează, dar e o amplasare fragilă.
Remediere APLICATĂ pe 10 august 2026, seara
powercfg /hibernate off # sleep+hibernate+Fast Startup
powercfg /setacvalueindex SCHEME_CURRENT SUB_BUTTONS PBUTTONACTION 3 # buton fizic -> Shut down
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BUTTONS PBUTTONACTION 3
powercfg /setacvalueindex SCHEME_CURRENT SUB_BUTTONS UIBUTTON_ACTION 2 # meniu Start -> Shut down
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BUTTONS UIBUTTON_ACTION 2
powercfg /setacvalueindex SCHEME_CURRENT SUB_BUTTONS SBUTTONACTION 0 # buton sleep -> Do nothing
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BUTTONS SBUTTONACTION 0
powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP abfc2519-3608-4c2a-94ea-171b0ed546ab 0 # ALLOWSTANDBY
powercfg /setdcvalueindex SCHEME_CURRENT SUB_SLEEP abfc2519-3608-4c2a-94ea-171b0ed546ab 0
powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP STANDBYIDLE 0
powercfg /setdcvalueindex SCHEME_CURRENT SUB_SLEEP STANDBYIDLE 0 # era 600 s pe DC!
powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP HIBERNATEIDLE 0
powercfg /setdcvalueindex SCHEME_CURRENT SUB_SLEEP HIBERNATEIDLE 0
powercfg /setactive SCHEME_CURRENT
Setările de buton erau ascunse din UI (Attributes=1); au fost făcute vizibile punând
Attributes=2 sub
HKLM\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\4f971e89-…\{7648efa3-…,96996bc0-…}.
Corecție obligatorie făcută imediat după: Critical battery action era 2 = Hibernate, iar
hibernarea tocmai fusese dezactivată — la o pană reală Windows ar fi încercat să hiberneze și ar fi
eșuat. Corectat, împreună cu pragurile, care erau prea joase pentru un shutdown curat de Oracle:
powercfg /setacvalueindex SCHEME_CURRENT SUB_BATTERY BATACTIONCRIT 3 # 3 = Shut down (era 2 = Hibernate)
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BATTERY BATACTIONCRIT 3
powercfg /setacvalueindex SCHEME_CURRENT SUB_BATTERY BATLEVELCRIT 20 # era 5%
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BATTERY BATLEVELCRIT 20
powercfg /setacvalueindex SCHEME_CURRENT SUB_BATTERY BATLEVELLOW 40 # era 10%
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BATTERY BATLEVELLOW 40
powercfg /setacvalueindex SCHEME_CURRENT SUB_BATTERY f3c5027d-cd16-4930-aa6b-90db844a8f00 25 # reserve, era 7%
powercfg /setdcvalueindex SCHEME_CURRENT SUB_BATTERY f3c5027d-cd16-4930-aa6b-90db844a8f00 25
powercfg /setactive SCHEME_CURRENT
Verificat după aplicare
powercfg /a nu mai listează nicio stare de somn disponibilă:
Standby (S3) → „The current power policy has disabled this standby state";
Hibernate → „Hibernation has not been enabled"; Hybrid Sleep și Fast Startup → indisponibile.
C:\hiberfil.sys a fost eliminat. Butoane: power = 0x3 (Shut down), sleep = 0x0 (Do nothing),
meniu Start = 0x2 (Shut down), pe AC și pe DC.
Oprirea Oracle la shutdown-ul Windows e configurată corect — HKLM\SOFTWARE\ORACLE\KEY_OraDB19Home1:
ORA_ROA_SHUTDOWN=TRUE, ORA_ROA_SHUTDOWNTYPE=immediate, ORA_ROA_SHUTDOWN_TIMEOUT=90,
ORA_ROA_AUTOSTART=TRUE. Deci la pană de curent, cu bateria sub 20%, Windows va face
shutdown immediate curat pe ROA.
Protecția la pană de curent nu mai depinde de ViewPower — Windows o face nativ, prin driverul
HID UPS Battery care funcționează corect.
Aplicat în plus (decizii luate de utilizator)
ViewPower — dezactivat
Stop-Service upsMonitor -Force ; Set-Service upsMonitor -StartupType Disabled
Stop-Service upsTomcat -Force ; Set-Service upsTomcat -StartupType Disabled
Ambele Stopped / Disabled. Verificat că Windows vede în continuare UPS-ul după oprirea lor:
Win32_Battery → HID UPS, 100%, ~70 min autonomie, Critical battery action = 0x3 (Shut down)
la Critical battery level = 0x14 (20%). Protecția la pană de curent este intactă.
Tunelul „vending" — port corectat, dar tunelul e defect din altă cauză
C:\inetpub\wwwroot\roa2web\backend\ssh-tunnels.json (backup: …json.bak-20260810):
"local_port": 1521 → 1522, ca să corespundă cu .env și să nu mai sondeze listenerul de
producție. Adăugat și "ssh_hostkey": "SHA256:Vptuj1UUGA9eSk/utwyLvS5C1pzgpYyyUFwUd60S6Go"
(cheia ECDSA a serverului, obținută cu ssh-keyscan), fiindcă scriptul rulează plink cu -batch
și fără -hostkey acesta abandona imediat.
Tunelul tot nu pornește — cauză reală, preexistentă (nu rula niciun ssh.exe de la boot-ul din
15 iulie):
plink -batch -P 22122 romfast@79.119.86.134
FATAL ERROR: Remote side sent disconnect message type 11 (by application):
"Client software or version not permitted."
Serverul vending respinge plink după banner-ul de versiune — acceptă doar clienți OpenSSH. Deci
autentificarea cu parolă prin plink nu va funcționa niciodată acolo, indiferent de config.
Calea cu cheie nu merge nici ea: secrets\vending.ssh_key nu există, iar secrets\romfast.ssh_key
nu e autorizată pe server:
ssh -i secrets\romfast.ssh_key -p 22122 romfast@79.119.86.134
romfast@79.119.86.134: Permission denied (publickey,password)
Conectivitatea TCP către 79.119.86.134:22122 funcționează, iar serverul anunță publickey,password.
Tunelul „vending" — dezactivat, la cererea utilizatorului
În ssh-tunnels.json cheia "ssh_host" a fost redenumită "ssh_host_disabled"
(backup: …json.bak-inainte-dezactivare). _load_config (linia 106) păstrează doar intrările care
au ssh_host, deci lista rămâne goală, iar start_monitoring iese devreme (liniile 129-131) —
bucla de monitorizare nu mai pornește deloc, deci nici _restart_tunnels nu poate fi apelat.
Toate datele de conectare rămân în fișier, pentru reactivare ușoară: se redenumește cheia înapoi.
Backend-ul rulează ca serviciu Windows ROA2WEB-Backend (wrapper NSSM, pornire automată,
scriptul scripts\start-backend-service.ps1). Repornit cu Restart-Service ROA2WEB-Backend -Force
pe 10 august la 22:40:45, ca modificarea să fie citită.
Verificat după repornire:
GET http://127.0.0.1:8000/health -> HTTP 200
{"api":"healthy","modules":{"oracle":"connected","reports_cache":"initialized",
"data_entry_db":"exists","telegram_bot":"running","ocr_worker":{"status":"running"},
"ssh_tunnels":{"status":"not_configured","tunnels":{},"monitoring":false}}}
monitoring: false — monitorul e oprit. În 100 de secunde de observație: 0 sonde TNS-12537
în listener.log (înainte: una la fiecare 30 s). Zgomotul din logul listenerului a încetat.
Rămâne de făcut
Doar dacă se dorește repunerea în funcțiune a tunelului vending. Este căzut de dinainte de
incident (niciun ssh.exe de la boot-ul din 15 iulie), deci integrarea vending nu funcționa oricum:
- Adăugat conținutul lui
secrets\romfast.ssh_key.pubîn~/.ssh/authorized_keysal utilizatoruluiromfastpe 79.119.86.134 — autentificarea cu parolă prin plink e blocată definitiv de server. - Copiat
romfast.ssh_keycasecrets\vending.ssh_key(scriptul caută cheia dupăid-ul tunelului). - Redenumit
"ssh_host_disabled"înapoi în"ssh_host"și repornitROA2WEB-Backend.
Decizii inițiale (istoric)
- ViewPower — repornirea nu a rezolvat comunicația. Fiind redundant față de gestionarea nativă
Windows (și declarând un rol de shutdown pe care nu-l poate îndeplini), recomandarea e să fie
dezactivat:
Set-Service upsMonitor -StartupType Disabled; Stop-Service upsMonitor. Alternativ, de reconfigurat protocolul UPS din interfața lui (Tomcat, port 15178). De reținut și căemailReceivers.length() = 0— nu are configurată nicio alertă pe email. - Healthcheck-ul roa2web — vezi mai jos. Orice variantă cere repornirea backend-ului roa2web
(uvicorn, PID-uri 6980/6292/8464, pornit din
C:\inetpub\wwwroot\roa2web-venv).
Opțiuni pentru healthcheck
| Variantă | Ce se schimbă | Efect |
|---|---|---|
| A. Dezactivare (recomandat) | scoate "ssh_host" din intrarea „vending" din ssh-tunnels.json, sau șterge intrarea |
linia 106 filtrează intrările fără ssh_host → monitorul nu mai sondează nimic. Zero zgomot. Corect, pentru că tunelul oricum nu rulează |
| B. Corectare port | "local_port": 1521 → 1522 (ca în .env) |
sonda se mută de pe listenerul de producție pe portul real al tunelului. Atenție: monitorul va raporta corect DOWN și, după 2 eșecuri, va încerca _restart_tunnels() la fiecare ≥60 s — buclă de repornire, dacă tunelul nu poate porni |
| C. Rărire | ssh_tunnel_manager.py:68 check_interval: int = 30 → 300 |
de 10 ori mai puțin zgomot, dar problema de fond (sondează listenerul greșit, raportează fals „sănătos") rămâne |
| D. Tăcere pe listener | LOGGING_LISTENER = OFF în listener.ora |
nerecomandat — pierzi exact logul care a rezolvat incidentul de azi |
Comenzi utile pentru reinvestigare
# Cronologia completa a unei zile din System log
Get-WinEvent -FilterHashtable @{LogName='System';StartTime=(Get-Date "AAAA-LL-ZZ 09:00:00")} |
Sort-Object TimeCreated | Select-Object TimeCreated,Id,ProviderName,Message
# Evenimente de power/oprire
Get-WinEvent -FilterHashtable @{LogName='System';Id=41,42,107,187,1074,6005,6006,6008,6013,1001}
# Ferestre de indisponibilitate reala, din perspectiva clientilor
Select-String -Path "C:\Users\oracle\diag\tnslsnr\ROA-CARAPETRU2\listener\trace\listener.log" `
-Pattern "^\d{2}-[A-Z]{3}-\d{4} (\d{2}):\d{2}:\d{2}.*establish"
Rularea comenzilor de la distanță se face cu -EncodedCommand (base64 UTF-16LE), altfel quoting-ul
prin ssh din Git Bash/PowerShell strică scripturile:
$enc = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($script))
ssh -p 22122 Administrator@10.0.20.36 "powershell -NoProfile -EncodedCommand $enc"