
Database Strategy
Database Strategy: technical blog on Oracle, PostgreSQL, MySQL, data warehouse and project management. Hands-on articles from 30 years of IT consulting.
The difference between a system that works
and one that truly drives business is not luck.
It is deep understanding of execution plans.
It is control over privileges and data security.
It is data modeling aligned with business objectives.
It is performance that holds under growing load.
Databases are the operational core of every modern digital ecosystem.
They support critical processes, enable data-driven decisions and determine operational speed and efficiency.
Inside the Engine is where I analyze what happens under the hood of PostgreSQL, Oracle and MySQL: performance tuning, security, architecture and technical decisions applicable to real-world production systems.
Because in today’s data-driven world, databases are not just software components.
They are strategic assets that influence competitiveness, reliability and sustainable growth.
Latest articles


Three triggers, a nightly job, and 1,247 orphaned policies: Oracle 26ai Assertions explained
Oracle 26ai introduces CREATE ASSERTION, the cross-table declarative constraint SQL-92 promised for decades. Syntax, comparison with triggers, and real insurance use cases.

Swap at 100% on InnoDB Cluster: when join_buffer_size multiplies the problem

The lunch break that delayed go-live: Data Governance in the DWH
A lunch conversation about what a technically ready Data Warehouse still lacks: data ownership, quality framework, GDPR, TDE on Oracle 19c.

ORA-00205 at three in the morning: understanding Oracle critical files before you need to
Step-by-step diagnosis of ORA-00205 during a night emergency: MOUNT phase, control file, SPFILE, redo log. A practical method for on-call Oracle DBAs.

Logical replication in PostgreSQL: a colleague's questions that clarify the topic
PostgreSQL logical replication explained through a colleague's questions: cross-version migration, CDC to data warehouse, step-by-step configuration.

From rivals to co-authors: how Booch, Rumbaugh and Jacobson invented UML (and what's left of it today)
The story of the Three Amigos of UML and RUP: how Booch, Rumbaugh and Jacobson, from rivals, unified object-oriented modeling. And what's left of it today.

Oracle 19c, 21c, 23ai, 26ai: the silent rewrite of value domains
Seven years of Oracle seen through enumerations: from 19c CHECK to 23ai SQL Domains, all the way to 26ai Assertions. An insurance migration story.

Enumerations in Oracle: twenty years of workarounds, and the road that opened up with 23ai
Oracle never had a native ENUM. CHECK constraints, lookup tables and SQL Domains 23ai: three roads, a real banking case, and what's coming with 26ai.

ENUM in PostgreSQL: when the choice pays off, and when it bites back
PostgreSQL ENUM vs CHECK vs lookup table: ALTER TYPE ADD VALUE is metadata-cheap, dropping a value costs a migration. Three paths, one real telco case.

ENUM in MySQL: when it makes your day, and when it ruins your week
MySQL ENUM vs CHECK constraint vs lookup table: three ways to model an enumeration. Pros, cons and real case of a shipment tracking system.

When an index does more harm than good: cleaning PostgreSQL waste
PostgreSQL: how to find and drop unused indexes with pg_stat_user_indexes. Real case: a table with 15 indexes, 8 of them never used.

5 rules I've seen work in project teams that hold
Project management: 5 rules observed in teams that hold under pressure. Psychological safety, bus factor, outcome vs output, knowledge transfer.

Three data marts, three truths about sales: the bus matrix as common ground
Kimball bus matrix to align isolated data marts: conformed dimensions, business processes and comparable sales. Real insurance group case.

Before upgrading MySQL: the numbers the customer actually asks for — and how to find them
MySQL 8.0 pre-upgrade assessment: measuring sizes, growth, backup and restore times with information_schema. Real numbers to plan maintenance window.

Oracle from On-Premises to Cloud: Strategy, Planning and Cutover
Oracle 19c on-premises to OCI migration: 2 TB with RAC and Data Guard. BYOL licensing, Data Pump, overnight cutover — real chronicle.

pg_stat_statements: the first thing to install on any PostgreSQL
PostgreSQL pg_stat_statements: the first query diagnostics extension to install. Find the three queries consuming 80% of database resources.

mysqldump vs mysqlpump vs mydumper: the backup that keeps you up at night
MySQL backup tools compared: mysqldump vs mydumper vs mysqlpump on a 60 GB database. Real dump and restore times, parallelism and architectural choice.

DWH Partitioning: When 3 Years of Data Weigh Too Much
Range partitioning on an 800-million-row fact table: from 12-minute quarterly queries to 40 seconds. Monthly implementation, exchange and local indexes.

Binary logs in MySQL: what they are, how to manage them, and when you can delete them
MySQL binary log: management, retention and point-in-time recovery. Real case of a server with disk at 95% and 180 GB of binlogs in six months.

VACUUM and autovacuum: why PostgreSQL needs someone to clean up
PostgreSQL VACUUM and autovacuum: bloat diagnosis on a 200 GB database, reading pg_stat_user_tables and tuning without disabling anything.

AI Manager and Project Management: when artificial intelligence enters the project
AI Manager: the professional role that governs the impact of artificial intelligence on architectures, processes and people. Reflections from 30 years in IT.

Payment at 60-90-120 days: the Italian normality that doesn't exist in Europe
60-90-120 day payment terms in Italian IT consulting: comparison with European rules. DSO, EU directive 2011/7 and strategies for IT freelancers.

Bike vs Car in Rome: the morning that opened my eyes
Commuting in Rome: electric Brompton vs car. 18 minutes vs 50, €35 of parking saved per day. The sustainable mobility choice from a practical view.

Smart working in IT consulting: the numbers nobody wants to look at
Smart working in IT consulting: economic and strategic analysis of remote work. Real numbers, KPIs, presenteeism and productivity compared to in-office.

Oracle on Linux: the kernel parameters nobody configures
Oracle 19c on Linux: kernel tuning for real performance. Huge Pages, THP, swappiness, I/O scheduler, ulimit — before and after numbers.

Galera Cluster with 3 nodes: how I solved a MySQL availability issue
3-node MySQL Galera Cluster for high availability: synchronous replication, quorum, SST/IST. Full configuration against single point of failure.

Roles and Users in PostgreSQL: Why Everything Is (Only) a ROLE
PostgreSQL ROLE: users and roles are the same object. Mental model, GRANT, NOINHERIT and how to build a truly maintainable read-only account.

AWR, ASH and the 10 minutes that saved a go-live
Oracle 19c performance tuning with AWR and ASH: finding a hidden full table scan in a stored procedure in 10 minutes, the eve of a go-live.

When chaos becomes method: AI and GitHub to manage a project nobody wanted to touch
Project management with AI and GitHub: turning a chaotic project into a measurable workflow with issue tracking, code review and artificial intelligence.

Users, Roles and Privileges in Oracle: Why GRANT ALL Is Never the Answer
Oracle security: redesigning the GRANT model with custom roles and Unified Audit, applying least privilege. Real case with copy-paste SQL.
Standup meetings: why they only work if they last 15 minutes
Scrum standup meetings: why only the 15-minute constraint makes them work. Timeboxing, parking lot and daily meeting rules that hold up over time.

Ragged hierarchies: when the client has no parent and the group has no grandparent
Ragged hierarchy in the data warehouse: balancing unbalanced trees with the self-parenting technique. Correct drill-down on customers and groups.

The Yes-And technique: how I defused a meeting that was about to blow up
The Yes-And technique from improvisational theatre applied to conflict management in IT teams. Real case of a meeting that was about to blow up.

MySQL Users: Why 'mario' and 'mario'@'localhost' Are Not the Same Person
MySQL users and hosts: 'mario' and 'mario'@'localhost' are different entities. MySQL/MariaDB authentication model, common mistakes and correct GRANTs.

When a LIKE '%value%' Slows Everything Down: A Real PostgreSQL Optimization Case
PostgreSQL optimization: LIKE '%value%' causes full scan. Using pg_trgm and GIN index to turn a wildcard search into a fast lookup. Real case.

4 million euros, two multinationals, zero software: the true story of a failure foretold
Real project management case: insurance client spends 4 million euros on IT consulting and gets zero working software. Vendor lock-in lessons.

Oracle Partitioning: when 2 billion rows no longer fit in a query
Oracle Partitioning on a 2-billion-row table: range, interval, partition pruning, local indexes. From hours to seconds on reporting queries.

From Single Instance to Data Guard: The Day the CEO Understood DR
Oracle Data Guard 19c: migration from single instance after a 6-hour outage. DR architecture, primary/standby, automatic switchover.

SCD Type 2: the history the business didn't know it needed
SCD Type 2 in the data warehouse: historicising dimensions with surrogate keys and validity dates. Real case: a customer dimension that evolves over time.

MySQL Multi-Instance: A Ticket, a CSV and the secure-file-priv Wall
MySQL multi-instance on Linux: exporting a CSV with INTO OUTFILE blocked by secure-file-priv. Unix socket connection and shell workaround real case.

EXPLAIN ANALYZE is not enough: how to actually read a PostgreSQL execution plan
PostgreSQL EXPLAIN ANALYZE: reading an execution plan, spotting costly nested loops and stale statistics. Real case on 2-million-row table.

Wrong grain: when the fact table can't answer the right questions
Data warehouse: fact table grain determines which questions you can answer. Common mistakes in granularity and their impact on the dimensional model.

Full disk on a MySQL cluster: binary logs, Group Replication, and a migration that leaves no room for mistakes
3-node MySQL Group Replication: migrating binary logs to a dedicated volume without losing quorum. Real case with filesystem at 92%.