Cum remediem erorile: WHEA_UNCORRECTABLE_ERROR, CRITICAL_PROCESS_DIED in Windows Server

Aceste două erori de tip Blue Screen of Death (BSOD)—WHEA_UNCORRECTABLE_ERROR (0x00000124) și CRITICAL_PROCESS_DIED (0x000000EF)—reprezintă alerte critice în Windows Server.

Când apar împreună sau consecutiv pe un server, scenariul cel mai probabil indică o instabilitate hardware (procesor, memorie, stocare) care destabilizează sistemul până în punctul în care procese de bază ale Windows-ului (cum ar fi csrss.exe, wininit.exe sau smss.exe) crapă instantaneu.

1. Analiza celor două erori

  • WHEA_UNCORRECTABLE_ERROR: Windows Hardware Error Architecture. Este o eroare pur hardware. Înseamnă că procesorul (CPU) sau placa de bază a detectat o eroare fizică fatală (de tensiune, magistrală sau cache) pe care sistemul de operare nu o poate corecta prin software.

  • CRITICAL_PROCESS_DIED: Înseamnă că un serviciu de sistem critic, a cărui oprire forțează oprirea Windows-ului, s-a terminat brusc. Pe servere, acest lucru se întâmplă adesea când controlerul de stocare (SAS/RAID) pierde conexiunea cu discurile pe care este instalat sistemul, blocând citirea/scrierea fișierelor de sistem.

2. Plan de Acțiune Pas cu Pas 

Pasul 1: Inspectarea Hardware-ului prin IDRAC / ILO / IMM

Înainte de a modifica ceva în software, verificați logurile de management ale serverului fizic (Dell iDRAC, HPE iLO, Lenovo XClarity):

  1. Accesați consola web de management a serverului.

  2. Navigați la System Event Log (SEL) sau Hardware Logs.

  3. Căutați erori legate de:

    • CPU Machine Check Exception (MCE) — confirmă o problemă de procesor sau socket.

    • Uncorrectable ECC Memory Error — indică o plăcuță RAM defectă.

    • PCIe Bus Error — o placă de rețea, un controller RAID sau un GPU dă semne de oboseală.

    • Drive Predictive Failure / Controller cache error.

Pasul 2: Analiza Fișierelor Minidump 

Dacă serverul apucă să scrie dump-ul pe disc înainte de repornire:

  1. Descărcați WinDbg (Windows Debugger) pe o stație de lucru.

  2. Copiați fișierul C:\Windows\Minidump\xxxxx.dmp sau C:\Windows\MEMORY.DMP de pe server.

  3. Deschideți fișierul în WinDbg și rulați comanda:

!analyze -v

4. Căutați secțiunea **MODULE_NAME** și **IMAGE_NAME**. 
   * Dacă indică un driver (ex: `megasas35.sys`, `iastorac.sys`, `ntoskrnl.exe`), aveți vinovatul direct (controller stocare sau kernel destabilizat de hardware).
   * Pentru WHEA, rulați `!whea` în debugger pentru a vedea exact registrul CPU sau componenta PCIe raportată defectă.

---

## 3. Metode de Rezolvare Tehnice

### Soluția A: Verificarea și Remedierea Subsistemului de Stocare (Țintește *Critical Process Died*)
Dacă controllerul RAID pierde temporar comunicarea cu discurile din cauza unui firmware instabil sau a unei baterii de cache defecte (BBU), procesele critice mor deoarece nu mai pot citi din `C:\Windows`.

1. **Actualizați Firmware-ul unităților:** Faceți update la firmware-ul controllerului RAID și la SSD-uri/HDD-uri folosind utilitarul oficial al producătorului (ex: *Dell Lifecycle Controller*).
2. **Verificați cablurile și conexiunile:** Într-un mediu controlat (mentenanță), opriți serverul, scoateți și reintroduceți discurile în backplane, și verificați cablurile SAS interne.
3. **Dezactivați Link State Power Management (dacă e cazul):** În Power Options pe Windows Server, setați planul pe **High Performance** și asigurați-vă că PCIe Link State Power Management este pe **Off**.

### Soluția B: Remedierea Instabilității CPU și RAM (Țintește *WHEA*)
1. **Resetare setări BIOS/UEFI:** Intrați în BIOS-ul serverului și asigurați-vă că nu există profile de overclocking activate (rare pe servere, dar posibile prin funcții de tip „Performance Mode” agresive) sau setări greșite de tensiune. Setați profilul pe **Custom** sau **Standard Reliable Performance**.
2. **Testare RAM extinsă:** Programați o fereastră de mentenanță și rulați un test de memorie bare-metal (cum ar fi *MemTest86+* sau utilitarul de diagnostic nativ al serverului HPE/Dell) timp de câteva ore.
3. **Microcode Update:** Asigurați-vă că BIOS-ul serverului este la ultima versiune. Update-urile de BIOS aduc patch-uri de microcod pentru procesoarele Intel/AMD care rezolvă erorile matematice interne ce generează WHEA.

### Soluția C: Verificarea Integrității Fișierelor de Sistem (OS Level)
Dacă hardware-ul este 100% intact în loguri, dar fișierele de sistem au fost corupte în timpul unui update sau din cauza unei opriri bruște de curent:

1. Deschideți **Command Prompt** ca Administrator și executați comanda DISM pentru a repara imaginea de sistem:
   ```cmd
   DISM /Online /Cleanup-Image /RestoreHealth
  1. Rulați System File Checker pentru a înlocui fișierele critice corupte:

    DOS

    sfc /scannow
    
3. Verificați starea discului logici pentru corupții ale sistemului de fișiere NTFS/ReFS:
   ```cmd
chkdsk C: /f /r

(Notă: Va necesita repornirea serverului și poate dura mult în funcție de mărimea volumului).

[mai mult...]

Remediere: VBA runtime error 1004

Eroarea VBA Runtime Error 1004 apare cel mai des în Excel, când o macrocomandă încearcă să facă o acțiune pe care Excel nu o poate executa: selectare greșită, sheet inexistent, fișier blocat, range invalid, workbook protejat etc.

Cele mai frecvente cauze și remedieri

1. Macro-ul încearcă să selecteze un sheet care nu este activ

Exemplu problematic:

Worksheets("Sheet1").Range("A1").Select

Dacă Sheet1 nu este activ, poate da eroare.

Remediere:

Worksheets("Sheet1").Activate
Worksheets("Sheet1").Range("A1").Select

Sau mai bine, fără Select:

Worksheets("Sheet1").Range("A1").Value = "Test"

2. Numele sheet-ului este greșit

Verifică dacă sheet-ul există exact cu același nume.

Exemplu:

Worksheets("Date").Range("A1").Value = "OK"

Dacă foaia se numește de fapt Data, DATE sau Date cu spațiu la final, apare eroarea.

Remediere:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Date")
ws.Range("A1").Value = "OK"

3. Range-ul este invalid

Exemplu problematic:

Range("A0").Select

sau:

Range("A1:A").Select

Remediere:

Range("A1").Select
Range("A1:A100").Select

Pentru ultimul rând:

Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:A" & lastRow).Select

4. Workbook-ul sau sheet-ul este protejat

Dacă foaia este protejată, macro-ul nu poate modifica celule.

Remediere:

Worksheets("Date").Unprotect Password:="parola"
Worksheets("Date").Range("A1").Value = "Test"
Worksheets("Date").Protect Password:="parola"

Dacă nu are parolă:

Worksheets("Date").Unprotect

5. Fișierul este deschis Read-Only

Verifică dacă fișierul Excel este deschis în mod Read-Only sau dacă este pe un share unde nu ai drepturi de scriere.

Remedieri:

- salvează fișierul local;
- verifică drepturile pe folder;
- închide fișierul de pe alte calculatoare;
- verifică dacă nu este blocat de OneDrive / SharePoint / antivirus.

6. Macro-ul folosește ActiveWorkbook în loc de ThisWorkbook

Dacă ai mai multe fișiere Excel deschise, ActiveWorkbook poate indica alt fișier.

Problematic:

ActiveWorkbook.Worksheets("Date").Range("A1").Value = "Test"

Mai sigur:

ThisWorkbook.Worksheets("Date").Range("A1").Value = "Test"

7. Copiere / lipire eșuată

Eroarea 1004 apare des la:

Selection.PasteSpecial Paste:=xlPasteValues

Remediere mai stabilă:

Worksheets("Sursa").Range("A1:A10").Copy
Worksheets("Destinatie").Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

Sau fără clipboard:

Worksheets("Destinatie").Range("A1:A10").Value = _
Worksheets("Sursa").Range("A1:A10").Value
[mai mult...]

Remediere Java Runtime Environment not found

Eroarea “Java Runtime Environment Not Found” apare când aplicația nu găsește Java instalat sau caută o versiune greșită de Java.

Remediere rapidă pe Windows

1. Verifică dacă Java este instalat

Deschide Command Prompt și scrie:

java -version

Dacă primești mesaj de tip:

'java' is not recognized...

înseamnă că Java nu este instalat sau nu este pus în PATH.

2. Instalează Java

Pentru aplicații obișnuite care cer doar Java Runtime, poți instala Java 8 Runtime de pe pagina oficială Java. Oracle menționează că Java 8 este pentru utilizatorii care au nevoie să ruleze aplicații desktop/laptop bazate pe Java.

Caută:

Java 8 download Windows

sau intră pe pagina oficială Java / Oracle.

Pentru aplicații mai noi, poți instala un JDK/JRE modern, de exemplu Eclipse Temurin, unde poți alege versiunea și tipul de pachet JDK/JRE.

Recomandare practică:

Pentru aplicații vechi: Java 8, 32-bit sau 64-bit în funcție de aplicație.
Pentru aplicații noi: Java 17 sau Java 21.

3. Verifică dacă aplicația cere Java 32-bit sau 64-bit

Asta este foarte important.

Dacă aplicația este veche, de multe ori cere Java 32-bit, chiar dacă Windows-ul este 64-bit.

Instalări tipice:

Java 64-bit:
C:\Program Files\Java\

Java 32-bit:
C:\Program Files (x86)\Java\

Dacă aplicația caută Java 32-bit și tu ai instalat doar 64-bit, eroarea poate continua.

4. Setează JAVA_HOME

După instalare, verifică unde este instalat Java. Exemplu:

C:\Program Files\Java\jre1.8.0_491

sau:

C:\Program Files\Eclipse Adoptium\jdk-17...

Apoi:

Start → search: Environment Variables → Edit the system environment variables

Intră la:

Environment Variables

La System variables, adaugă:

Variable name: JAVA_HOME
Variable value: C:\Program Files\Java\jre1.8.0_491

sau calea unde ai Java instalat.

Apoi la variabila Path, adaugă:

%JAVA_HOME%\bin

Închide și redeschide aplicația.

5. Testează din nou

În Command Prompt:

java -version

Ar trebui să apară ceva de genul:

java version "1.8.0_491"

sau versiunea instalată.

6. Dacă eroarea apare într-o aplicație veche

Instalează ambele variante, dacă nu știi ce cere aplicația:

Java 8 32-bit
Java 8 64-bit

Apoi repornește PC-ul.

[mai mult...]

Remediere Runtime error 3709: the connection cannot be used

Eroarea Runtime error 3709: The connection cannot be used apare de obicei în aplicații făcute în VB6 / VBA / Access / Excel / aplicații vechi cu bază de date, când conexiunea către baza de date nu este deschisă, este închisă, este stricată sau se încearcă folosirea ei greșit.

Pe scurt, aplicația încearcă să citească/scrie în baza de date, dar conexiunea nu este disponibilă.

Ce poți verifica prima dată

1. Închide și redeschide aplicația

Dacă este o aplicație veche, uneori conexiunea rămâne blocată.

- închide aplicația complet;
- verifică în Task Manager dacă mai rulează;
- închide procesul dacă este blocat;
- pornește aplicația din nou.

2. Verifică dacă baza de date există

Dacă aplicația folosește un fișier de tip:

.mdb
.accdb
.xls
.xlsx

verifică dacă fișierul există în locația configurată.

De exemplu:

C:\Program Files\Aplicatie\Database\
D:\Aplicatie\Data\
\\server\share\baza_date\

Dacă baza de date este pe rețea, verifică dacă poți accesa folderul respectiv din File Explorer.

3. Verifică drepturile pe folder

Aplicația trebuie să poată citi și scrie în folderul unde este baza de date.

Click dreapta pe folder → PropertiesSecurity și verifică dacă utilizatorul are:

Read
Write
Modify

Dacă baza de date este într-un folder protejat, cum ar fi:

C:\Program Files\
C:\Windows\

este posibil ca aplicația să nu aibă drepturi suficiente.

Încearcă să rulezi aplicația cu:

Run as administrator

4. Verifică conexiunea la server

Dacă baza de date este pe server, verifică:

- ai internet / rețea?
- poți accesa serverul?
- poți intra pe share?
- serverul este pornit?
- VPN-ul este conectat, dacă aplicația cere VPN?

Poți testa din Run:

\\nume-server

sau:

\\IP-server

Exemplu:

\\192.168.1.10

5. Verifică ODBC / driverul bazei de date

Dacă aplicația folosește ODBC, intră în:

Control Panel → Administrative Tools → ODBC Data Sources

Atenție: există două variante:

ODBC Data Sources 32-bit
ODBC Data Sources 64-bit

Pentru aplicații vechi, de obicei trebuie verificat ODBC 32-bit.

Îl găsești și direct aici:

C:\Windows\SysWOW64\odbcad32.exe

Verifică dacă există conexiunea configurată și apasă Test Connection, dacă există opțiunea.

Dacă este aplicație Access / Excel cu macro

Dacă eroarea apare într-un fișier Access sau Excel, încearcă:

1. Deschide fișierul.
2. Verifică dacă macro-urile sunt activate.
3. Verifică dacă fișierul nu este blocat de Windows.

Click dreapta pe fișier → Properties → dacă apare Unblock, bifează și apasă Apply.

Dacă ai acces la cod

Eroarea apare frecvent când în cod se face ceva de genul:

rs.Open sql, conn

dar conn nu este deschis.

Ar trebui verificat ca înainte de folosire conexiunea să fie deschisă:

If conn.State = 0 Then
    conn.Open
End If

Sau, mai corect:

If conn.State <> adStateOpen Then
    conn.Open connectionString
End If

De asemenea, verifică să nu existe ceva de genul:

conn.Close
rs.Open sql, conn

adică programul închide conexiunea și apoi încearcă să o folosească.

[mai mult...]