
Database Strategy
Database Strategy: blog tehnic despre Oracle, PostgreSQL, MySQL, data warehouse și project management. Articole practice din 30 ani de consultanță IT.
Diferența dintre un sistem care funcționează
și unul care susține cu adevărat businessul nu este noroc.
Este înțelegerea profundă a planurilor de execuție.
Este controlul privilegiilor și securitatea datelor.
Este modelarea datelor aliniată obiectivelor de business.
Este performanță care rezistă pe măsură ce încărcarea crește.
Bazele de date reprezintă nucleul operațional al ecosistemului digital modern.
Susțin procese critice, permit decizii bazate pe date și determină viteza și eficiența operațională.
În Interiorul Motorului este spațiul în care analizez ce se întâmplă sub capota PostgreSQL, Oracle și MySQL: optimizare de performanță, securitate, arhitectură și decizii tehnice aplicabile în medii reale de producție.
Pentru că în lumea actuală orientată pe date, bazele de date nu sunt simple componente software.
Sunt active strategice care influențează competitivitatea, fiabilitatea și creșterea sustenabilă.
Ultimele articole


Raportul de luni dimineața: patru ore de lag pe replica MySQL
Cum am redus lag-ul de replicare MySQL de la patru ore la treizeci de secunde: GTID, parallel replication cu LOGICAL_CLOCK și monitorizare reală cu pt-heartbeat.

Tichetul spunea «actualizează MySQL și oprește serviciul»
Upgrade MySQL Community 8.0.34→8.0.45 pe RHEL 8: view-uri invalide, GTID, verificarea replicii și pașii corecți de patching. Workflow real, cu query-urile folosite.

Frustrarea lui Alberto: Oracle Text și cele trei tipuri de index pentru arhiva juridică
Cum am redus timpii de căutare de la 90 de secunde la sub un secundă pe un arhiv Oracle de 30 de ani, alegând indexul potrivit pentru fiecare pattern de căutare.

Trei trigger, un job nocturn și 1.247 de polițe orfane: ASSERTION în Oracle 26ai
Oracle 26ai introduce CREATE ASSERTION, constrângerea cross-tabel pe care SQL-92 o promitea de decenii. Sintaxă, comparație cu trigger-e și cazuri reale din asigurări.

Apelul de marți dimineața: cum un join_buffer_size de 2 GB a blocat un cluster MySQL de 157 GB
Un full scan pe 1,3 miliarde de rânduri a saturat swap-ul pe două noduri MySQL. Diagnostic cu performance_schema, reconfigurare buffere per-thread și rolling restart fără downtime.

Pauza de prânz care a amânat go-live-ul: Data Governance în DWH
Ce nu include un Data Warehouse tehnic funcțional: ownership, calitate continuă, TDE Oracle 19c, Data Catalog. Un caz real din sectorul asigurărilor.

ORA-00205 la trei dimineața: înțelegerea fișierelor critice Oracle înainte să ai nevoie de ele
Diagnostic ghidat al ORA-00205 în plină urgență nocturnă: faza MOUNT, control file, SPFILE, redo log. Metodă practică pentru DBA Oracle de gardă.

Replică logică în PostgreSQL: întrebările unui coleg care clarifică subiectul
Replică logică PostgreSQL explicată prin întrebările unui coleg: migrare cross-versiune, CDC spre data warehouse, configurare pas cu pas.

De la rivali la co-autori: cum Booch, Rumbaugh și Jacobson au inventat UML (și ce a rămas astăzi)
Povestea Three Amigos de la UML și RUP: cum Booch, Rumbaugh și Jacobson, din rivali, au unificat object-oriented modeling. Și ce a rămas astăzi.

Oracle 19c, 21c, 23ai, 26ai: rescrierea silențioasă a domeniilor de valori
Șapte ani de Oracle văzuți prin enumerări: de la CHECK-ul 19c la SQL Domains 23ai, până la Assertions 26ai. O migrare în sectorul asigurări.

Enumerări în Oracle: douăzeci de ani de workaround, și drumul care s-a deschis cu 23ai
Oracle nu a avut niciodată ENUM nativ. CHECK constraints, lookup tables și SQL Domains 23ai: trei drumuri, un caz real banking, și ce va veni cu 26ai.

ENUM în PostgreSQL: când alegerea merită, și când te costă scump
PostgreSQL ENUM vs CHECK vs tabel lookup: ALTER TYPE ADD VALUE nu costă nimic, eliminarea unei valori costă o migrare. Trei drumuri, un caz telco real.

ENUM in MySQL: când îți simplifică viața și când îți complică zilele
MySQL ENUM vs CHECK constraint vs tabelă lookup: trei căi pentru modelarea unei enumerări. Avantaje, limite și caz real de tracking expedieri.

Când un index face mai mult rău decât bine: curățarea PostgreSQL de risipă
PostgreSQL: cum găsești și elimini indecșii nefolosiți cu pg_stat_user_indexes. Caz real: tabel cu 15 indecși, 8 nefolosiți niciodată.

5 reguli pe care le-am văzut funcționând în echipele de proiect care rezistă
Management proiect: 5 reguli observate în echipele care rezistă sub presiune. Psychological safety, bus factor, outcome vs output, knowledge transfer.

Trei data marts, trei adevăruri despre vânzări: bus matrix ca teren comun
Bus matrix Kimball pentru alinierea data marts izolate: conformed dimensions, procese de business și vânzări comparabile. Caz real grup asigurări.

Înainte de a face upgrade la MySQL: cifrele pe care clientul ți le cere și cum să le găsești cu adevărat
MySQL 8.0 pre-upgrade assessment: dimensiuni, creștere, timpi de backup și restore cu information_schema. Cifre reale pentru planificare.

Oracle de la On-Premises la Cloud: Strategie, Planificare și Cutover
Migrare Oracle 19c on-premises la OCI: 2 TB cu RAC și Data Guard. Licensing BYOL, Data Pump, cutover peste noapte — cronică reală.

pg_stat_statements: primul lucru de instalat pe orice PostgreSQL
PostgreSQL pg_stat_statements: extensia de diagnosticare query de instalat prima. Găsește cele trei query-uri care consumă 80% din resurse.

mysqldump vs mysqlpump vs mydumper: backup-ul care nu te lasă să dormi
Backup MySQL: mysqldump vs mydumper vs mysqlpump pe bază de date de 60 GB. Timpi reali dump și restore, paralelism și decizie arhitecturală.

Partitioning în DWH: când 3 ani de date sunt prea mulți
Range partitioning pe fact table de 800 milioane rânduri: de la query-uri trimestriale de 12 minute la 40 de secunde. Implementare lunară, exchange.

Binary log în MySQL: ce sunt, cum le gestionezi și când le poți șterge
MySQL binary log: gestionare, retenție și point-in-time recovery. Caz real de server cu discul la 95% și 180 GB de binlog în șase luni.

VACUUM și autovacuum: de ce PostgreSQL are nevoie ca cineva să facă curățenie
PostgreSQL VACUUM și autovacuum: diagnostic bloat pe bază de date 200 GB, citirea pg_stat_user_tables și tuning fără a dezactiva nimic.

AI Manager și Project Management: când inteligența artificială intră în proiecte
AI Manager: rolul care guvernează impactul inteligenței artificiale asupra arhitecturilor, proceselor și oamenilor. Reflecții din 30 ani de IT.

Plăți la 60-90-120 de zile: normalitatea italiană care nu există în Europa
Plăți la 60-90-120 zile în consultanța IT italiană: comparație cu regulile europene. DSO, directiva 2011/7/UE și strategii pentru freelanceri IT.

Bicicletă vs Mașină la Roma: dimineața care mi-a deschis ochii
Pendulare în Roma: Brompton electrică vs mașină. 18 minute vs 50, 35€ de parcare economisiți. Alegerea mobilității sustenabile, date reale.

Smart working în consultanța IT: cifrele pe care nimeni nu vrea să le vadă
Smart working în consultanța IT: analiză economică și strategică a muncii la distanță. Cifre reale, KPI, prezenteism și productivitate vs birou.

Oracle pe Linux: parametrii kernel pe care nimeni nu-i configurează
Oracle 19c pe Linux: tuning kernel pentru performanță reală. Huge Pages, THP, swappiness, I/O scheduler, ulimit — cifre înainte/după.

Galera Cluster cu 3 noduri: cum am rezolvat o criticitate de disponibilitate pe MySQL
MySQL Galera Cluster cu 3 noduri pentru high availability: replicare sincronă, quorum, SST/IST. Configurare împotriva single point of failure.

Roluri și utilizatori în PostgreSQL: de ce totul este (doar) un ROLE
PostgreSQL ROLE: utilizatorii și rolurile sunt același obiect. Model mental, GRANT, NOINHERIT și construirea unui utilizator read-only mentenabil.

AWR, ASH și cele 10 minute care au salvat un go-live
Tuning Oracle 19c cu AWR și ASH: găsirea unui full table scan ascuns într-o procedură stocată în 10 minute, în ajunul unui go-live.

Când haosul devine metodă: AI și GitHub pentru gestionarea unui proiect pe care nimeni nu voia să-l atingă
Management proiect cu AI și GitHub: transformarea unui proiect haotic în workflow măsurabil cu issue tracking, code review și inteligență artificială.

Utilizatori, roluri și privilegii în Oracle: de ce GRANT ALL nu este niciodată răspunsul
Securitate Oracle: redesign al modelului GRANT cu roluri custom și Unified Audit, aplicând least privilege. Caz real cu SQL gata pentru copy-paste.
Standup meeting: de ce funcționează doar dacă durează 15 minute
Standup meeting Scrum: de ce doar 15 minute le fac să funcționeze. Timeboxing, parking lot și reguli practice ale daily meeting care rezistă în timp.

Ierarhii dezechilibrate: când clientul nu are părinte și grupul nu are bunic
Ragged hierarchy în data warehouse: echilibrarea ierarhiilor dezechilibrate cu tehnica self-parenting. Drill-down corect pe clienți și grupuri.

Utilizatori MySQL: de ce 'mario' și 'mario'@'localhost' nu sunt aceeași persoană
MySQL utilizatori și host: 'mario' și 'mario'@'localhost' sunt entități diferite. Model autentificare MySQL/MariaDB, greșeli comune și GRANT.

Tehnica Da-Și: cum am evitat o discuție care era pe punctul de a exploda
Tehnica Yes-And din teatrul de improvizație aplicată la gestionarea conflictelor în echipe IT. Caz real al unei ședințe ce era pe punctul de a exploda.

Când un LIKE '%valoare%' încetinește totul: un caz real de optimizare PostgreSQL
Optimizare PostgreSQL: LIKE '%valoare%' generează full scan. Folosirea pg_trgm și index GIN pentru a transforma căutarea wildcard în lookup rapid.

4 milioane de euro, două multinaționale, zero software: povestea reală a unui eșec anunțat
Caz real management proiect: client asigurări cheltuie 4 milioane în consultanță IT și obține zero software funcțional. Lecții vendor lock-in.

Oracle Partitioning: când 2 miliarde de rânduri nu mai încap într-o interogare
Oracle Partitioning pe tabelă de 2 miliarde de rânduri: range, interval, partition pruning, indecși locali. De la ore la secunde.

De la single instance la Data Guard: ziua în care CEO-ul a înțeles DR-ul
Oracle Data Guard 19c: migrare de la single instance după 6 ore de downtime. Arhitectură DR, primary/standby, switchover automat real.

SCD Tip 2: istoria pe care business-ul nu știa că o vrea
SCD Tip 2 în data warehouse: istorizare dimensiuni cu chei surogat și date de valabilitate. Caz real: dimensiune clienți care evoluează în timp.

MySQL multi-instanță: un ticket, un CSV și zidul secure-file-priv
MySQL multi-instanță pe Linux: export CSV cu INTO OUTFILE blocat de secure-file-priv. Conectare prin socket Unix și workaround din shell.

EXPLAIN ANALYZE nu e suficient: cum sa citesti cu adevarat un plan de executie PostgreSQL
PostgreSQL EXPLAIN ANALYZE: citirea planului de execuție, nested loop costisitor și ANALYZE pe statistici vechi. Caz real cu 2M rânduri.

Granularitate greșită: când fact table nu răspunde la întrebările potrivite
Data warehouse: granularitatea fact table determină ce întrebări poți răspunde. Greșeli frecvente în granularitate și impactul pe modelul dimensional.

Disc plin pe un cluster MySQL: binary logs, Group Replication și o migrare care nu acceptă erori
MySQL Group Replication cu 3 noduri: migrare binary logs pe un volum dedicat fără pierderea quorum-ului. Caz real cu filesystem la 92%.