Replatforming a decade of analytics from Oracle to Snowflake

Replatforming a decade of analytics from Oracle to Snowflake

Simor Consulting | 01 Sep, 2026 | 07 Mins read

Ten years of analytics built on Oracle means ten years of accumulated PL/SQL, materialized views, database links, stored procedures, and ETL jobs that nobody fully understands. The schema has four hundred tables. The reporting layer has twelve hundred reports. The stored procedures contain business logic that was written by three different teams over a decade, some of whom have left the company. Nobody can tell you with confidence which procedures are still in use.

A financial services firm with twelve billion dollars in assets under management ran its entire analytics stack on a single Oracle Exadata instance. The system was not broken. Queries returned results. Reports generated on schedule. The compliance team could pull audited data when regulators asked. The problem was cost and constraint. The Oracle license renewal was approaching, the annual cost had tripled over five years, and the Exadata hardware was approaching end-of-life. The firm could not scale compute independently of storage, could not spin up isolated environments for experimentation, and was paying for peak capacity twenty-four hours a day even though analytics demand followed a predictable business-hours pattern.

They wanted to move to Snowflake. The question was not whether to move but how to move ten years of analytics without breaking the reports that the compliance team, the portfolio managers, and the executive committee relied on daily.

Inventory Before Migration

The first mistake teams make in a platform migration is starting with the technology. They pick a migration tool, map Oracle SQL dialect to the target platform, and start converting. This works for simple schemas. For a decade of accumulated analytics, it produces a flood of conversion errors, broken dependencies, and logic discrepancies that take months to untangle.

We started with inventory. Not a technical inventory of tables and columns — the database already had that — but a behavioral inventory of what was actually used. We instrumented the Oracle instance to log every query, every stored procedure call, and every report generation for sixty days. The instrumentation captured the query text, the calling application, the user identity, the execution time, and the result set size.

The sixty-day log revealed a pattern that surprised the data team. Of the four hundred tables in the schema, only one hundred and forty had been queried in the past two months. Of the twelve hundred reports, only three hundred and eighty had been generated. Of the two hundred stored procedures, sixty-seven had been called. The remaining objects — two hundred and sixty tables, eight hundred and twenty reports, and one hundred and thirty-three procedures — were dead. They existed in the schema but nobody used them.

This was not a one-time finding. The dead objects had been accumulating for years because there was no mechanism to deprecate and remove unused analytics artifacts. When a business process changed, the new tables and reports were added but the old ones were never removed. The schema had become a graveyard of abandoned analytics.

The inventory gave us a migration scope that was thirty-five percent of the original schema. We did not need to migrate four hundred tables. We needed to migrate one hundred and forty. We did not need to convert twelve hundred reports. We needed to convert three hundred and eighty. This changed the migration timeline from eighteen months to seven months.

The Parallel Run Architecture

The firm could not tolerate reporting downtime. Portfolio managers needed daily position reports. The compliance team needed auditable data trails. The executive committee needed weekly performance dashboards. Any gap in reporting — even a single day — would trigger regulatory questions and internal escalation.

The migration architecture was a parallel run. Both Oracle and Snowflake ran simultaneously during the migration period. New data was loaded into both platforms. Reports were served from Oracle while Snowflake was being validated. As each report was validated on Snowflake — meaning it produced results identical to Oracle within an acceptable tolerance — it was switched to Snowflake. Oracle continued serving reports that had not yet been validated.

This diagram requires JavaScript.

Enable JavaScript in your browser to use this feature.

The validation engine was the critical component. For each report, it ran the query against both Oracle and Snowflake and compared the results. The comparison was not a simple row-by-row check because Oracle and Snowflake handled floating-point arithmetic, null sorting, and date formatting differently. The validation engine applied normalization rules: floating-point values were compared to a tolerance of six decimal places, nulls were treated as equal regardless of sort position, and dates were normalized to UTC before comparison.

When the results matched within tolerance for fourteen consecutive runs, the report was marked as validated and switched to Snowflake. When results diverged, the validation engine produced a drift report showing exactly which rows and columns differed, which made root-cause investigation fast. Most divergences were caused by Oracle-specific SQL behavior — implicit type conversions, ROWNUM ordering, and DECODE function semantics — that required explicit rewriting in Snowflake SQL.

The PL/SQL Problem

Stored procedures were the hardest part of the migration. Oracle PL/SQL is a full programming language with cursors, exception handling, package variables, and autonomous transactions. Snowflake’s stored procedure language is JavaScript-based and does not support the same constructs. Direct translation was impossible for roughly forty percent of the procedures.

We categorized the sixty-seven active procedures into three groups.

The first group — twenty-nine procedures — were pure data transformation. They read from staging tables, applied business rules, and wrote to target tables. These were candidates for migration to a transformation tool. We rewrote them as dbt models, which gave us version control, testing, and documentation that the original PL/SQL lacked. The dbt models ran in Snowflake natively and produced identical results.

The second group — twenty-three procedures — were orchestration logic. They scheduled jobs, managed dependencies between transformations, and handled error recovery. These were replaced by the existing orchestration tool, which was already present in the stack but underutilized because the PL/SQL procedures had absorbed the orchestration responsibility. Moving orchestration out of the database and into a purpose-built tool was an improvement, not just a migration.

The third group — fifteen procedures — contained complex business logic with cursors, conditional branching, and iterative calculations that could not be expressed as SQL transformations. These were the hardest. We rewrote them as Snowflake stored procedures in JavaScript, which required careful testing because the behavioral differences between PL/SQL and JavaScript are significant. Exception handling semantics differ. Numeric precision differs. Null propagation differs. Each procedure in this group required individual attention and a validation suite that compared Oracle and Snowflake output across a representative input set.

What We Gave Up

The migration was not cost-free. Three capabilities changed in ways that required adjustment.

First, Oracle’s materialized view refresh mechanism had no direct Snowflake equivalent. The firm had forty-two materialized views that pre-computed expensive joins for frequently accessed reports. In Snowflake, we replaced these with Snowflake’s automatic clustering and result caching. For most queries, Snowflake’s cache was faster than Oracle’s materialized views because the cache was automatic and did not require refresh scheduling. For a few complex aggregation queries, Snowflake was slightly slower because the result had to be computed rather than read from a pre-built view. The performance difference was measurable — two seconds versus five seconds — but did not impact the user experience because none of these queries were in real-time dashboards.

Second, Oracle’s row-level security model used Virtual Private Database, which applied security predicates transparently at the query layer. Snowflake’s row-level security used secure views and row access policies, which required explicit view creation for each security rule. The migration from transparent predicates to explicit views was tedious — we created sixty-two secure views — but the result was more auditable because the security rules were visible as view definitions rather than hidden in database-level predicates.

Third, the Oracle database links that connected the analytics instance to the transactional database were replaced by data sharing through Snowflake shares. This was a genuine improvement for read access but broke the few write-back patterns where analytics stored procedures updated transactional tables. Those three write-back procedures were redesigned to use an event-based pattern instead: the analytics procedure published an event, and the transactional system consumed it. This was more decoupled and more robust, but it required changes to the transactional system that were outside the original migration scope.

The Cost Outcome

Annual Oracle licensing and hardware maintenance was $1.8 million. Snowflake’s consumption-based pricing, after the migration settled, was $640,000 per year for equivalent workloads. The savings of $1.16 million per year funded the migration cost within the first fourteen months.

More important than the direct cost savings was the elasticity. Oracle required provisioning for peak load — end-of-quarter reporting, year-end compliance — which meant the firm paid for peak capacity year-round. Snowflake’s auto-scaling meant the firm paid for capacity only when queries were running. During nights and weekends, compute spend dropped to near zero. During end-of-quarter reporting, compute scaled up automatically and then scaled back down when the reporting surge ended.

The firm also gained the ability to create isolated environments. On Oracle, running an experimental query that consumed significant resources risked impacting production reports. On Snowflake, the data team could create a separate warehouse for experimentation that had no impact on production workloads. This alone accelerated the analytics team’s velocity because they no longer needed to schedule experimentation during off-peak hours.

The Decision Heuristic

If you are considering a database platform migration, start with a sixty-day usage inventory. Do not migrate what nobody uses. The typical finding is that sixty to seventy percent of the schema is dead. Migrating dead objects is pure waste — it consumes time, introduces risk, and produces no value.

For the live objects, run both platforms in parallel. Validate every output before switching. The validation engine is not optional. Without it, you are hoping that the migration produced correct results rather than knowing. In financial services, hope is not an audit strategy.

Finally, do not treat the migration as a translation project. Treat it as a redesign opportunity. Stored procedures that were written ten years ago for a different business process should be redesigned, not rewritten. Materialized views that compensated for a slow database should be replaced by a faster database, not reimplemented. The goal is not to produce the same system on a different platform. The goal is to produce a better system that happens to run on a different platform.

Shipping a production AI system?

Find the control gaps before they turn into incidents. Take the AI Production Scorecard for a fast baseline across the seven layers, or book an architecture review and we will turn it into a hardening plan.

Similar Articles

The Modern Data Stack for AI Readiness: Architecture and Implementation
The Modern Data Stack for AI Readiness: Architecture and Implementation
28 Jan, 2025 | 03 Mins read

Existing data infrastructure often cannot support ML workflows. The modern data stack offers a foundation, but it requires adaptation to become AI-ready. This article covers building a data architectu

How a retailer reduced inference latency 90% with feature store caching
How a retailer reduced inference latency 90% with feature store caching
21 Apr, 2026 | 04 Mins read

A mid-market e-commerce retailer with roughly $200M in annual revenue had invested eighteen months building a product recommendation engine. The models were accurate. Offline evaluation showed meaning

The data pipeline that cost $50K/month — and the audit that found why
The data pipeline that cost $50K/month — and the audit that found why
22 Apr, 2026 | 04 Mins read

A financial services firm running analytics on trade settlement data came to us with a specific complaint: their cloud data platform cost had tripled in eighteen months, and nobody could explain why.

dbt vs SQLMesh: which transformation tool wins in 2026?
dbt vs SQLMesh: which transformation tool wins in 2026?
23 Apr, 2026 | 06 Mins read

Every analytics team eventually faces the same choice: how do you transform raw data into something analysts can actually use? For years, dbt was the only serious answer. SQLMesh arrived with a differ

Data Lakehouse Security Best Practices
Data Lakehouse Security Best Practices
22 Feb, 2024 | 02 Mins read

Data lakehouses combine lake flexibility with warehouse performance but introduce security challenges from their hybrid nature. Securing these environments requires layered approaches covering authent

Migrating from batch to streaming: a 6-month journey
Migrating from batch to streaming: a 6-month journey
28 Apr, 2026 | 05 Mins read

A logistics company processing two million shipments per day ran their entire operational reporting stack on nightly batch ETL. Every morning at 6 AM, operations managers reviewed dashboards built on

When RAG failed: a knowledge retrieval project post-mortem
When RAG failed: a knowledge retrieval project post-mortem
29 Apr, 2026 | 05 Mins read

A legal technology company had invested six months building a retrieval-augmented generation system to help contract attorneys find relevant precedent clauses across a corpus of 180,000 executed agree

From 3-hour dashboards to 3-minute insights: a BI modernization story
From 3-hour dashboards to 3-minute insights: a BI modernization story
05 May, 2026 | 05 Mins read

A manufacturing company with facilities in twelve countries ran its operational reporting on a traditional BI stack: a data warehouse, an ETL pipeline, and a dashboard tool that had been deployed six

Orchestration face-off: Airflow vs Prefect vs Dagster
Orchestration face-off: Airflow vs Prefect vs Dagster
07 May, 2026 | 06 Mins read

The orchestration market has a clear incumbent and two serious challengers. Apache Airflow has been the default choice since 2015. Prefect and Dagster both emerged to address Airflow's pain points, bu

The vector database that couldn't scale — and what we did instead
The vector database that couldn't scale — and what we did instead
12 May, 2026 | 05 Mins read

A media company with a library of twelve million articles, transcripts, and research documents had built a semantic search system on a managed vector database. The system was designed to let journalis

Building an AI operating system for a 10,000-person company
Building an AI operating system for a 10,000-person company
19 May, 2026 | 05 Mins read

A diversified industrial company with 10,000 employees across manufacturing, logistics, and field services had accumulated forty-seven separate AI projects over three years. Each business unit had bui

Real-time streaming: Kafka vs Redpanda vs Pulsar
Real-time streaming: Kafka vs Redpanda vs Pulsar
21 May, 2026 | 05 Mins read

Kafka has dominated event streaming for a decade. It processes trillions of messages daily across thousands of companies. Its dominance created an ecosystem so large that "streaming" became synonymous

How we killed our ETL pipeline (and productivity went up)
How we killed our ETL pipeline (and productivity went up)
26 May, 2026 | 05 Mins read

A B2B SaaS company running a customer success platform had a data pipeline that consumed sixty percent of the data engineering team's time. Not feature work. Not analytics. Pipeline maintenance. The p

Semantic Layer Implementation: Challenges and Solutions
Semantic Layer Implementation: Challenges and Solutions
20 Mar, 2024 | 02 Mins read

A semantic layer provides business-friendly abstraction over technical data structures, enabling self-service analytics and consistent metric interpretation. Implementing one involves technical challe

A compliance-first AI rollout in financial services
A compliance-first AI rollout in financial services
03 Jun, 2026 | 05 Mins read

A regional bank with $12 billion in assets wanted to use machine learning to improve its commercial loan underwriting process. The existing process was manual, relying on credit analysts who spent fou

The $2M model that never made it to production
The $2M model that never made it to production
09 Jun, 2026 | 05 Mins read

A retail chain with 400 stores spent two years and $2.1 million building an inventory optimization model. The model was technically excellent. It reduced predicted stockouts by thirty-two percent and

Data cataloging tools: Atlan, Alation, DataHub, Amundsen
Data cataloging tools: Atlan, Alation, DataHub, Amundsen
11 Jun, 2026 | 05 Mins read

A data catalog solves a trust problem. When an analyst cannot find the right table, does not know what a column means, or cannot tell whether data is fresh, they either guess or ask someone. Both outc

Data mesh in practice: year 2 retrospective
Data mesh in practice: year 2 retrospective
16 Jun, 2026 | 05 Mins read

An insurance company with $400 million in premium volume adopted data mesh two years ago. The central data team had become a bottleneck. Every business unit — claims, underwriting, actuarial, and dist

When your AI vendor goes bankrupt — surviving platform lock-in
When your AI vendor goes bankrupt — surviving platform lock-in
23 Jun, 2026 | 05 Mins read

A healthcare analytics company received notice on a Tuesday afternoon that their primary AI infrastructure vendor was filing for Chapter 7 bankruptcy. The platform hosted their patient risk stratifica

Real-time fraud detection: from proof-of-concept to production in 90 days
Real-time fraud detection: from proof-of-concept to production in 90 days
30 Jun, 2026 | 05 Mins read

A payment processor handling twelve million transactions per day had a fraud detection system that was accurate but slow. The system reviewed transactions in batch, four times per day. A fraudulent tr

Consolidating 47 data sources into one knowledge layer
Consolidating 47 data sources into one knowledge layer
01 Jul, 2026 | 05 Mins read

A global professional services firm with 8,000 consultants maintained institutional knowledge across forty-seven separate systems. Project proposals lived in a document management system. Client engag

The GDPR audit that reshaped our entire ML pipeline
The GDPR audit that reshaped our entire ML pipeline
07 Jul, 2026 | 05 Mins read

A European fintech with twelve million customers received a GDPR audit notice from their national data protection authority. The audit focused on the company's machine learning pipeline, which powered

How a healthcare org deployed LLMs without violating HIPAA
How a healthcare org deployed LLMs without violating HIPAA
14 Jul, 2026 | 05 Mins read

A hospital system with twelve facilities and 14,000 clinical staff wanted to use large language models to assist with clinical documentation. Physicians spent an average of two hours per day on docume

Data quality platforms: Great Expectations vs Soda vs Monte Carlo
Data quality platforms: Great Expectations vs Soda vs Monte Carlo
15 Jul, 2026 | 06 Mins read

Data quality failures are expensive and silent. A broken pipeline does not crash — it produces wrong data that flows into dashboards, models, and decisions. The error is discovered weeks later when a

Legacy mainframe to cloud-native: the data migration they said was impossible
Legacy mainframe to cloud-native: the data migration they said was impossible
21 Jul, 2026 | 06 Mins read

An insurance company running on an IBM mainframe had accumulated forty years of policy data in VSAM files and DB2 tables. The mainframe processed 600,000 transactions per day across policy administrat

The modern data stack is dead — here's what replaced it
The modern data stack is dead — here's what replaced it
23 Jul, 2026 | 05 Mins read

The modern data stack was a marketing category that outlived its usefulness. Between 2019 and 2023, it described a specific architecture: Fivetran or Airbyte for ingestion, dbt for transformation, Sno

Building trust in AI recommendations — the change management story
Building trust in AI recommendations — the change management story
28 Jul, 2026 | 06 Mins read

A consumer goods company built an AI system that recommended reorder quantities for 12,000 SKUs across 340 distribution points. The system optimized for a multi-objective function that balanced invent

Schema registry showdown: Confluent vs Apicurio vs AWS Glue
Schema registry showdown: Confluent vs Apicurio vs AWS Glue
30 Jul, 2026 | 05 Mins read

When producers and consumers share a Kafka topic without agreeing on the data format, things break in production. A producer adds a field. A consumer expects the old schema. The deserialization fails,

When the model was right but nobody believed it
When the model was right but nobody believed it
04 Aug, 2026 | 05 Mins read

An agriculture technology company built a crop yield prediction model that combined satellite imagery, soil sensor data, weather forecasts, and historical yield records. The model predicted per-field

Scaling a recommendation engine from 1K to 10M users
Scaling a recommendation engine from 1K to 10M users
11 Aug, 2026 | 06 Mins read

A video streaming platform grew from 1,000 beta users to 10 million subscribers over thirty months. Their recommendation system was rebuilt three times during this period. Each rebuild was triggered n

Real-time pricing engine: from batch overnight to sub-second
Real-time pricing engine: from batch overnight to sub-second
19 Aug, 2026 | 05 Mins read

An online travel agency processed 2.3 million flight searches per day. Each search triggered a pricing computation that determined the displayed fare for every matching itinerary. The pricing computat

The data catalog project that actually stuck — 18 months later
The data catalog project that actually stuck — 18 months later
25 Aug, 2026 | 07 Mins read

Most data catalog projects die within six months. The tool gets purchased, a team populates it with metadata for a few hundred tables, enthusiasm fades, and twelve months later the catalog is a stale

Data pipeline monitoring: Elementary vs Databand vs Lightup
Data pipeline monitoring: Elementary vs Databand vs Lightup
03 Sep, 2026 | 05 Mins read

A data pipeline fails silently. The DAG completes without errors, the tables are populated, but the numbers are wrong. A column that was never null now has 30% nulls. A join that produced 10,000 rows

How a logistics company predicted delivery failures before they happened
How a logistics company predicted delivery failures before they happened
08 Sep, 2026 | 06 Mins read

A regional logistics company running three thousand deliveries per day across a six-state territory had a late-delivery rate of fourteen percent. The cost of a late delivery was not just the apology.

Serverless Data Pipelines: Architecture Patterns
Serverless Data Pipelines: Architecture Patterns
05 Jun, 2024 | 08 Mins read

# Serverless Data Pipelines: Architecture Patterns Serverless computing eliminates server management and provides automatic scaling with pay-per-use billing. These benefits matter for data pipelines

Event-Driven Data Architecture
Event-Driven Data Architecture
15 Sep, 2024 | 02 Mins read

Event-driven architectures treat changes in state as events that trigger immediate actions and data flows. Rather than processing data in batches or through scheduled jobs, components react to changes

From Data Silos to Data Mesh: The Evolution of Enterprise Data Architecture
From Data Silos to Data Mesh: The Evolution of Enterprise Data Architecture
15 Feb, 2025 | 03 Mins read

Traditional centralized data architectures worked for BI but struggle with AI workloads. Centralized teams become bottlenecks as data volumes grow. Domain experts who understand the data are separated

Case Study: End-to-End RAG Platform for Customer Support
Case Study: End-to-End RAG Platform for Customer Support
05 Dec, 2025 | 05 Mins read

A SaaS company with 200 support agents and 10,000+ knowledge base articles had an 18-hour average response time and 23% first-contact resolution. Their largest enterprise client threatened to cancel a

Case Study: Building a Production AI Knowledge Layer for Financial Services
Case Study: Building a Production AI Knowledge Layer for Financial Services
01 Mar, 2026 | 10 Mins read

A regional bank's investment research team spent 60% of their time gathering information and 40% doing analysis. Analysts had to search through regulatory filings, internal research memos, market data

Feature Stores for AI: The Missing MLOps Component Reaching Maturity
Feature Stores for AI: The Missing MLOps Component Reaching Maturity
12 Mar, 2026 | 11 Mins read

A recommendation system team built their tenth model. Each model required feature engineering. Each feature engineering project started by copying code from the previous project, then modifying it for

Case Study: Multi-Agent System for Supply Chain Optimization
Case Study: Multi-Agent System for Supply Chain Optimization
13 Jun, 2026 | 12 Mins read

A mid-size automotive parts manufacturer with operations spanning 15 countries and relationships with over 200 suppliers faced a supply chain coordination problem that was consuming too much of their

The AI Data Pipeline: Special Considerations for Unstructured and Structured Data
The AI Data Pipeline: Special Considerations for Unstructured and Structured Data
11 May, 2026 | 13 Mins read

Data pipelines for AI are not the same as data pipelines for traditional software systems. The outputs are different. The failure modes are different. The tolerance for data quality issues is differen