> For the complete documentation index, see [llms.txt](https://docs.fabricplan.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fabricplan.com/documentation/readme/disaster-recovery-guidance.md).

# Disaster recovery guidance

## Overview

This guide provides disaster recovery (DR) guidance specific to Plan items in Fabric IQ.

### Plan Architecture in Fabric

Understanding which components belong to which Fabric layer is essential for DR planning. The diagram illustrates the full component map and which elements are replicated automatically versus those requiring manual backup strategies.

<figure><img src="/files/hXCmz3L9JkEL4us6felh" alt=""><figcaption></figcaption></figure>

The key components and their DR characteristics are:

* Plan templates & app definitions - stored as Fabric items. Not automatically replicated to the secondary region.
* Plan writeback data - stored in a Fabric SQL database. Requires regular SqlPackage.bacpac exports to geo-redundant storage.
* Source/Actuals Data - typically in a lakehouse or via OneLake shortcuts. Lakehouse data is async-replicated when DR is enabled; shortcuts must be recreated manually.
* Semantic models - Power BI datasets. Recoverable via Git(.pbip) or PBIX backup.
* Approval workflows & cell-Level comments - stored as item metadata. Not replicated, must be recreated manually.
* Refresh schedules & execution history - workspace-level configuration. Not replicated.

### Sample Scenario

You have a Fabric capacity C1 in Region A with a workspace W1. Disaster Recovery is enabled for C1, so OneLake data is asynchronously replicated to Region B. If Region A becomes unavailable, the Fabric service fails over to Region B.

<figure><img src="/files/0wYcsHZmWfIP409KvzrL" alt=""><figcaption></figcaption></figure>

The general recovery plan is:

1\. Create a new Fabric capacity C2 in a new healthy region.

2\. Create a new workspace W2 in C2 with the same name as W1.

3\. Restore the Fabric SQL database holding plan writeback data.

4\. Restore plan item definitions from Git (recommended) or manually recreate them.

5\. Reconnect semantic models and lakehouse references to restored items.

6\. Validate plan data, re-establish approval workflows, and republish to users.

{% hint style="info" %}
Note: This recovery guidance assumes the tenant home region remains operational. If the tenant home region is also affected, these steps are contingent on Microsoft restoring it first.
{% endhint %}

### RTO / RPO Summary

The table below summarizes the Recovery Time Objective (RTO) and Recovery Point Objective (RPO) for each plan component, depending on the DR strategy used. Color coding indicates relative risk level.

<figure><img src="/files/08Oe3IYV3VBuq3ruFYfl" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Tip: *The fastest path to low RTO and RPO is to combine Fabric Git integration (for item definitions) with a regular SqlPackage export schedule (for writeback data) stored in a geo-redundant location.*
{% endhint %}

## Plan items

### Plan templates and app definitions

Plan item definitions, including planning templates, input forms, driver models, and app configurations, are stored as Fabric items in the workspace. These items are NOT automatically replicated to the secondary region. To recover them, use Fabric Git integration.

#### Approach 1: Git integration (Recommended)

The preferred approach is to synchronize all plan items with an Azure DevOps (ADO) or GitHub repository using Fabric Git integration. After failover, the repository is used to rebuild items in the new workspace. The diagram illustrates this workflow.

<figure><img src="/files/9MPrXLHh8vz5a7pU7VJA" alt=""><figcaption></figcaption></figure>

Pre-disaster(proactive steps):

1\. In workspace W1, go to **Workspace Settings** and configure Git integration.

2\. Select **Connect** and Sync with your ADO or GitHub repository.

3\. Confirm that all Lumel Plan items appear as synced in the Source Control panel.

4\. Establish a commit discipline - commit after every significant change to a plan definition so the repo always reflects the latest state.

Post-disaster (recovery steps):

1\. Create a new workspace W2 inside capacity C2 in the healthy region.

2\. In W2, go to **Workspace Settings** and reconnect to the same ADO/GitHub repository.

3\. Select the relevant branch and select **Update All**. All Lumel Plan items are downloaded to W2.

4\. After items are restored, reconnect each plan to its Fabric SQL writeback database (see Writeback Data section) and to the recovered semantic model.

5\. Recreate any scheduled refreshes and notification rules manually in W2, as these are not stored in Git.

{% hint style="success" %}
Tip: Use the same workspace name (W1) in the new region whenever possible. Many plan configurations reference workspace names, and reusing the name minimises the number of reconnection steps.
{% endhint %}

#### Approach 2: Manual Recreation

If Git integration was not configured before the disaster, plan item definitions must be recreated manually.

1\. In new workspace W2, create each plan item (budget template, forecast model, etc.) with the same names and configurations as the originals.

2\. Re-enter driver assumptions, calculation rules, dimension hierarchies, and approval stages based on documentation or knowledge held by finance/planning administrators.

3\. Reconnect each item to the restored Fabric SQL database and semantic model.

{% hint style="info" %}
Note: Manual recreation is time-consuming and error-prone. Adopting Git integration before a disaster occurs is strongly recommended.
{% endhint %}

### Plan writeback data (SQL Database)

All plan inputs, such as budget entries, forecast adjustments, scenario values, and approvals, are written back to a Fabric SQL database in the workspace. This database is the source of truth for all plan data. Recovering it is the highest-priority step in any DR scenario. The diagram illustrates the full backup and restore workflow.

<figure><img src="/files/MwJ1Xew33xv4ODWQemtl" alt=""><figcaption></figcaption></figure>

#### Proactive backup with SqlPackage

Schedule regular exports of the Fabric SQL writeback database to a .bacpac file. Store the file in a geo-redundant location outside the primary region.

1\. Install the [SqlPackage CLI](https://learn.microsoft.com/en-us/fabric/database/sql/sqlpackage).

2\. Export the writeback database on a schedule that matches your RPO target (for example, daily or after each planning cycle close):

sqlpackage /Action:Export /SourceConnectionString:"\<your-fabric-sql-connection-string>" /TargetFile:"lumel\_plan\_backup\_YYYYMMDD.bacpac"

3\. Store the .bacpac file in one of the following geo-redundant locations:

* A lakehouse in a different Fabric region.
* An Azure Blob Storage account with geo-redundant storage (GRS) enabled.
* Another secure cloud storage location outside the primary region.

{% hint style="info" %}
Note: The exported .bacpac file reflects the state of plan data at the time of export. Any plan entries made after the last export will need to be re-entered manually or sourced from audit logs if available.
{% endhint %}

#### Restoring the Writeback database

1\. In new workspace W2 (in capacity C2, healthy region), create a new Fabric SQL database with the same name as the original writeback database.

2\. Use SqlPackage to import from the latest .bacpac file:

sqlpackage /Action:Import /TargetConnectionString:"\<new-fabric-sql-connection-string>" /SourceFile:"lumel\_plan\_backup\_YYYYMMDD.bacpac"

3\. Validate row counts and key plan tables (budget entries, forecast lines, scenario snapshots, approval status) against pre-disaster records.

4\. Reconnect the restored plan items in W2 to this new Fabric SQL database via the plan connection settings.

{% hint style="info" %}
Note: The restored database is independent of the original. Any data entered after the last backup export will not be present. If the primary region recovers, a manual reconciliation step between the recovered original and the restored copy is required before failing bac&#x6B;*.*
{% endhint %}

### Approval workflows and cell-level comments

Approval workflows and cell-level comments are stored as metadata within plan items. This metadata is notreplicated to the secondary region and cannot be automatically restored.

To minimize data loss:

• Export or screenshot pending approvals and open comments before a planned maintenance window or when DR risk is elevated.

• After recovery, manually recreate active approval workflows by re-assigning reviewers and contributors in the restored plan items.

• Completed approval history captured in the writeback database (if your configuration writes approval status to SQL) will be recovered with the .bacpac restore.

### Scheduled refreshes and execution history

Plan refresh schedules including on-change triggers and scheduled downstream plan updates are configured at the workspace level and are not replicated to the secondary region. Execution history is also not recoverable.

After recovery:

1\. Manually recreate all plan refresh schedules in workspace W2.

2\. Re-enable on-change cascade triggers between linked plans (e.g. revenue plan driving headcount plan).

3\. Accept that historical execution logs and metrics will start fresh from the recovery date. Set a new baseline for monitoring thresholds.

{% hint style="info" %}
Tip: Document your schedule configuration (refresh times, cascade dependencies, notification recipients) in a shared location outside Fabric such as a SharePoint page or a committed file in the Git repository so it can be quickly referenced during recover&#x79;*.*
{% endhint %}

### Source data and semantic models

#### OneLake Source Data (Lakehouse)

Plan reads actuals and reference data directly from lakehouse tables via semantic models. Lakehouse data in OneLake enabled capacities is asynchronously replicated to the paired region when DR is enabled.

To recover lakehouse source data, see the [Lakehouse section](https://learn.microsoft.com/en-us/fabric/security/experience-specific-guidance#lakehouse).

After lakehouse recovery, reconnect the recovered lakehouse to the semantic model and verify that plan can read actuals data correctly before re-opening plans for input.

#### External data via OneLake shortcuts

Plan supports reading data from external platforms such as Snowflake, Databricks, Google BigQuery, SAP, Oracle via OneLake shortcuts and mirroring. These connections are not replicated.

After recovery:

1\. Recreate OneLake shortcuts in W2, pointing to the same external data sources.

2\. If the external source systems are also affected by the regional disaster, follow the respective vendor DR procedures before attempting to reconnect.

3\. Validate that semantic models resolve correctly after shortcuts are restored.

#### Power BI Semantic Models

Plan builds planning grids and input forms directly on top of Power BI semantic models. These models must be restored before plan items can function correctly in the recovered workspace.

Semantic model recovery options:

* Git Integration: If the semantic model's .pbip files are committed to the same ADO/GitHub repository used for plan items, they are restored automatically during the Git sync step.
* PBIX/PBIP backup: Maintain a regularly updated copy of each semantic model in a version-controlled or geo-redundant location. Import into W2 after recovery.

After restoring the semantic model in W2, open each plan item and confirm that the semantic model binding is pointing to the newly restored model (not the unavailable original in W1).

### Recovery checklist & flow

The diagram shows the recommended execution sequence for recovering a plan deployment. Estimated times are indicative and will vary with data volume and environment complexity.

<figure><img src="/files/T8969DMc4NQGjbyE9oOC" alt=""><figcaption></figcaption></figure>

Use the checklist below when executing disaster recovery for a plan deployment.

Phase 1 - Infrastructure

* Create new Fabric capacity C2 in a healthy region.
* Create new workspace W2 in C2 (use same name as W1 if possible).

Phase 2 - Data restoration

* Recover Lakehouse source data (ABFS script or Azure Storage Explorer).
* Restore Fabric SQL writeback database using SqlPackage and latest .bacpac.
* Validate row counts and key plan data tables.

Phase 3 - Item recovery

* Connect W2 to the Git repository and sync to restore plan items and semantic models.
* Re-enter or import semantic model PBIX/PBIP if not in Git.
* Recreate OneLake shortcuts to external sources (Snowflake, SAP, etc.).

Phase 4 - Reconnection and validation

* Reconnect each plan item to the restored Fabric SQL database.
* Confirm semantic model bindings in each plan item.
* Validate that actuals data flows correctly from Lakehouse into plan grids.
* Reconcile any plan data entered after the last .bacpac backup export.

Phase 5 - Configuration and Go-Live

* Recreate approval workflows and re-assign contributors and reviewers.
* Recreate scheduled refreshes and cascade triggers.
* Update application connection strings and URLs distributed to end users.
* Notify planning team of recovery completion and any data gaps to address.
* Establish new monitoring baseline for refresh metrics and error alerts.

### Proactive best practices

The following practices, when implemented before a disaster, significantly reduce recovery time and data loss.

* Enable Fabric DR at the capacity level to trigger async OneLake replication to the paired Azure region.
* Commit all plan items, semantic models(.pbip), and workspace configuration to a Git repository. Set up automated commits or enforce a commit-on-save policy.
* Schedule SqlPackage exports of the Fabric SQL writeback database on a cadence aligned to your RPO at minimum daily during active planning cycles. Store exports in a geo-redundant Azure Storage account or a lakehouse in a different region.
* Document all plan configuration outside Fabric: refresh schedules, approval role assignments, cascade dependencies, and data source connection strings.
* For critical planning cycles (annual budget, quarterly reforecast), take a manual SqlPackage export immediately before and after the cycle closes.
* Test recovery procedures at least annually in a non-production environment to confirm that .bacpac restores and Git syncs complete within target RTO.
* If operating in a region that does not have an Azure-paired secondary region, implement a secondary Lumel Plan deployment in a separate region as a warm standby.

### Related Documentation

* [Microsoft Fabric disaster recovery guide](https://learn.microsoft.com/en-us/fabric/security/disaster-recovery-guide)
* [Fabric experience-specific DR guide](https://learn.microsoft.com/en-us/fabric/security/experience-specific-guidance)
* [Fabric SQL SqlPackage reference](https://learn.microsoft.com/en-us/fabric/database/sql/sqlpackage)
* [OneLake disaster recovery](https://learn.microsoft.com/en-us/fabric/onelake/onelake-disaster-recovery)
* [Fabric Git integration](https://learn.microsoft.com/en-us/fabric/cicd/git-integration/intro-to-git-integration)
* [Integrate OneLake with Azure storage explorer](https://learn.microsoft.com/en-us/fabric/onelake/onelake-azure-storage-explorer)
* [Fabric Plan documentation](https://learn.microsoft.com/en-us/fabric/iq/plan/overview)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.fabricplan.com/documentation/readme/disaster-recovery-guidance.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
