Database mirroring

Near-real-time replicas of Snowflake, Azure SQL, Cosmos DB, and Postgres landing as Delta tables in OneLake — how it works, what it costs, and when to use it over a shortcut or a pipeline.

Edit on GitHubReport an issue

Mirroring continuously replicates an external operational database into a Fabric-managed lakehouse as Delta tables. Change data is applied on a low-latency loop (typically seconds to a few minutes), with no pipeline to build and no compute you manage.

Supported sources

SourceNotes
SnowflakeTable-level selection; uses Snowflake streams under the hood
Azure SQL DatabaseCDC-based; needs ALTER DATABASE ... SET CHANGE_TRACKING permissions
Azure SQL Managed InstanceAs above
Azure Cosmos DB (NoSQL)Mirrors containers; JSON flattened to columns
Azure Database for PostgreSQLLogical replication
(open mirroring)Bring-your-own change feed via the Open Mirroring API

Confirm the current source matrix in Microsoft docs — it expands often.

CU impact

Mirroring compute (the replication engine) is free. You pay for:

  • OneLake storage for the mirrored Delta tables — and Microsoft includes a free storage allowance for mirrored data proportional to your capacity SKU (e.g. a chunk of free mirrored GB per F-SKU). Storage beyond the allowance is billed at the normal OneLake rate.
  • Reads of the mirrored tables (Spark, SQL endpoint, Direct Lake) — same as any other Delta table.

Net: for a moderate operational DB, mirroring is often close to free to land, and you only pay when you query it.

How it lands

Mirrored DB (Fabric item)
└── Mirrored<Name>.Lakehouse   (auto-created, read-only)
    └── Tables/
        ├── dbo_customers/      Delta, kept in sync
        └── dbo_orders/

The mirrored lakehouse gets a SQL analytics endpoint and can back a Direct Lake semantic model immediately. Tables are read-only from Fabric — writes go to the source system.

Setup

Prepare the source

  • Azure SQL: enable change tracking / CDC; grant the connection principal VIEW CHANGE TRACKING and SELECT on the tables.
  • Snowflake: a warehouse for the initial snapshot; a role with SELECT + CREATE STREAM on the schema.
  • Cosmos DB: analytical store not required; mirroring reads the change feed.

Create the Mirrored Database item

+ New → Mirrored <source>. Provide the connection (prefer a service principal or workspace identity, not a personal account).

Select tables

Pick specific tables, not "everything". Every mirrored table costs storage and adds replication load on the source.

Monitor replication lag

The Mirrored Database has a monitoring tab showing rows replicated and lag per table. Alert on lag growth — it usually means a source-side schema change or a long-running transaction blocking the change feed.

Mirroring vs shortcut vs pipeline

NeedUse
Live replica of an operational DB, minimal effort, Direct Lake readyMirroring
Data already in ADLS/S3 as Delta/Parquet you don't want to copyShortcut
Transformations on ingest, non-supported source, full control of scheduleData pipeline + notebook
Historical backfill + ongoing CDC with custom logicPipeline (watermark) or Open Mirroring

Gotchas

Source schema changes. Adding a column is usually handled; dropping or retyping a column, or renaming a table, can pause replication for that table until you re-map it. Treat source DDL as a change that needs coordination.

  • Primary key required. Tables without a PK (or unique index) can't be mirrored incrementally.
  • Large transactions on the source delay the change feed — mirroring lag spikes during bulk loads upstream.
  • Deletes are replicated as Delta deletes; if the source hard-deletes a lot, schedule OPTIMIZE + VACUUM on the mirrored tables (you can run maintenance even though you can't write data).
  • Cross-region mirroring incurs egress on the source cloud.
Was this page helpful?

Stay ahead of Fabric changes

Fabric runtime changes, API updates, and deprecations. No spam, unsubscribe anytime.

On this page