Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This article provides guidance on backup and recovery strategy when using Microsoft Purview Unified Catalog in production deployment. The scope of this article is to cover manual business continuity and disaster recovery (BCDR) methods that you can set up using APIs.
Features covered
The following areas are covered in this BCDR strategy:
- Unified Catalog foundation: Governance Domains, Glossary Terms, and Data Assets — the foundational catalog that organizes and describes an organization's data estate.
- Data products: Curated, business-ready data sets with ownership, documentation, terms of use, and audience metadata.
- Critical data elements: Regulated or high-value data elements (for example, personal data, financial identifiers) with lifecycle management (Draft → Published → Expired).
- Data quality: Quality rules and asset metadata that track data health and conformance across the estate.
- Data access: Access request workflows, multi-stage approval chains, policy sets, and permitted use-case definitions for governed data sharing.
- Data estate health: CDMC control templates and analytics schedules that continuously measure governance maturity and compliance posture.
- Workflows: Configurable multi-stage approval workflows including manager, privacy, and approver stages for data access governance.
BCDR workflow
Step 1. Create an Enterprise tier account
Create a Purview Data Governance account at the Enterprise tier. This serves as the primary account with full governance capabilities.
Step 2. Request Classic Purview provisioning in a secondary region
Create a support ticket through the Customer Support channel requesting enablement of Classic Purview account provisioning in a secondary (paired) region for BCDR purposes.
Step 3. Create a Classic Purview account
After Classic provisioning is enabled in the secondary region, create a Classic Purview account. This account serves as the secondary (backup) account with limited capabilities.
Step 4. Copy data from the Enterprise account to the Classic account
Using the available BCDR APIs (described in the API details section), copy governance data from the Enterprise account (primary) to the Classic account (secondary). This includes:
- Governance domains
- Data products
- Glossary terms
- Critical data elements
- Data assets
- Data Quality metadata
- Data estate health configuration
- Data access workflows and policies
Step 5. Manage GUIDs during backup
You're responsible for managing and mapping globally unique identifiers (GUIDs) during the backup process. Because the secondary account generates new identifiers, you must maintain a mapping between primary and secondary GUIDs to ensure data consistency and traceability.
Step 6. Validate the secondary account
Use the GET APIs for each feature area to validate that all governance data is replicated to the secondary account:
GET /catalog/businessdomainsGET /catalog/dataProductsGET /catalog/termsGET /catalog/criticalDataElementsGET /catalog/dataAssetsGET /quality/bulk-asset-metadataGET /health/analytics/scheduleGET /dataaccess/workflows
Step 7. Fail over during a disaster recovery (DR) event
When a disaster recovery event occurs, create a support ticket requesting:
- Promote the Secondary (Classic) account to Enterprise tier
- Demote the Primary (Enterprise) account to Secondary
This completes the failover, and the previously secondary account becomes the new primary with full Enterprise capabilities.
API details
1. Account and provisioning
Get current policies
Verify the BCDR account is operational by listing the current user's policies.
GET https://<accountName>.purview.azure.com/datagovernance/catalog/policies
Note
Account provisioning is performed with Is BCDR = true. Acquire tokens by using standard Microsoft Entra ID/OAuth flows for Purview REST APIs.
2. Governance domains
Create governance domain
Create a governance domain:
POST https://<accountName>.purview.azure.com/datagovernance/catalog/businessdomains
Request body:
{
"name": "BCDR - My Business Domain",
"type": "DataDomain",
"status": "Draft",
"description": "Optional description up to 200k chars",
"isStagingDomain": false,
"managedAttributes": []
}
Response body:
{
"status": "Draft",
"type": "DataDomain",
"name": "BCDR - My Business Domain",
"description": "Optional description up to 200k chars",
"isRestricted": false,
"isStagingDomain": false
}
Get governance domains
List the governance domains to confirm replication:
GET https://<accountName>.purview.azure.com/datagovernance/catalog/businessdomains
3. Data products
Create data product
Create a data product under a governance domain:
POST https://<accountName>.purview.azure.com/datagovernance/catalog/dataProducts
Request body:
{
"name": "BCDR - Sales Analytics",
"domain": "<businessDomainId>",
"status": "Draft",
"type": "Analytical",
"endorsed": false,
"contacts": {
"owner": [
{
"id": "<guidObjectId>",
"info": "<email>"
}
]
},
"description": "Aggregated sales data across regions",
"businessUse": "Used for quarterly reporting",
"audience": [
"DataAnalyst",
"BusinessUser"
],
"updateFrequency": "Monthly",
"termsOfUse": [
{
"name": "Data Policy",
"url": "https://contoso.com/policy"
}
],
"documentation": [
{
"name": "User Guide",
"url": "https://contoso.com/guide"
}
]
}
Response body:
{
"status": "Draft",
"type": "Analytical",
"name": "BCDR - Sales Analytics",
"description": "Aggregated sales data across regions",
"businessUse": "Used for quarterly reporting",
"updateFrequency": "Monthly",
"endorsed": false
}
Get data products
List the data products:
GET https://<accountName>.purview.azure.com/datagovernance/catalog/dataProducts
4. Glossary terms
Create term
Create a glossary term under a governance domain:
POST https://<accountName>.purview.azure.com/datagovernance/catalog/terms
Request body:
{
"name": "BCDR - Customer Revenue",
"domain": "<businessDomainId>",
"status": "Draft",
"description": "Total revenue attributed to a customer",
"acronyms": [
"CR",
"CustRev"
],
"contacts": {
"owner": [
{
"id": "<guidObjectId>",
"info": "<email>"
}
],
"expert": [
{
"id": "<guidObjectId>",
"info": "<email>"
}
]
},
"resources": [
{
"name": "Wiki",
"url": "https://contoso.com/wiki/customer-revenue"
}
]
}
Response body:
{
"status": "Draft",
"name": "BCDR - Customer Revenue",
"description": "Total revenue attributed to a customer",
"contacts": {
"owner": [],
"expert": []
},
"isMigrated": false
}
Note
The API response may return empty contacts arrays even when contacts are provided in the request. Contacts are linked asynchronously and will appear on subsequent GET calls.
Get terms
List the glossary terms:
GET https://<accountName>.purview.azure.com/datagovernance/catalog/terms
5. Critical data elements (CDE)
Create critical data element
Create a critical data element under a governance domain:
POST https://<accountName>.purview.azure.com/datagovernance/catalog/criticalDataElements
Request body:
{
"name": "BCDR - Customer SSN",
"domain": "<businessDomainId>",
"status": "Draft",
"dataType": "DateTime",
"description": "Social Security Number — regulated PII element",
"contacts": {
"owner": [
{
"id": "<guidObjectId>",
"info": "<email>"
}
],
"expert": [
{
"id": "<guidObjectId>",
"info": "<email>"
}
]
}
}
Response body:
{
"status": "Draft",
"dataType": "DateTime",
"name": "BCDR - Customer SSN",
"description": "Social Security Number - regulated PII element"
}
CDE Data Types: Boolean, DateTime, Number, Text CDE Status Lifecycle: Draft → Published → Expired
Get critical data elements
List the critical data elements:
GET https://<accountName>.purview.azure.com/datagovernance/catalog/criticalDataElements
6. Data assets
Create data asset
Create a data asset that references a source:
POST https://<accountName>.purview.azure.com/datagovernance/catalog/dataAssets
Request body:
{
"name": "gold",
"type": "ADLSGen2Path",
"source": {
"type": "PurviewDataMap",
"accountName": "BCDRSecondary",
"assetId": "<assetGuid>",
"assetType": "azure_datalake_gen2_filesystem",
"fqn": "https://<storageAccount>.dfs.core.windows.net/gold"
},
"typeProperties": {
"serverEndpoint": "<storageAccount>.dfs.core.windows.net",
"container": "gold"
},
"contacts": {
"owner": [
{
"id": "<guidObjectId>",
"info": "<email>"
}
]
}
}
Response body:
{
"name": "gold",
"status": "ACTIVE",
"displayText": "gold",
"source": {
"type": "PurviewDataMap",
"assetId": "<assetGuid>"
}
}
Get data assets
GET https://<accountName>.purview.azure.com/datagovernance/catalog/dataAssets
7. Data estate health
CDMC control template
CDMC (Cloud Data Management Capabilities) control templates are auto-created when the BCDR account is provisioned. A global analytics schedule is enabled by default (daily frequency).
Create or update analytics schedule
Create or update the schedule that controls how often data estate health is measured:
PUT https://<accountName>.purview.azure.com/datagovernance/health/analytics/schedule?api-version=2024-02-01-preview
Request body:
{
"frequency": "Hour",
"interval": 6,
"startTime": "2026-03-18T00:00:00Z",
"status": "Enabled",
"timeZone": "UTC"
}
Response body:
{
"frequency": "Hour",
"interval": 6,
"status": "Enabled",
"timeZone": "UTC"
}
Get analytics schedule
Retrieve the current analytics schedule:
GET https://<accountName>.purview.azure.com/datagovernance/health/analytics/schedule?api-version=2024-02-01-preview
8. Data access
Get default access request template
Retrieve the default data access request template:
GET https://<accountName>.purview.azure.com/datagovernance/dataaccess/workflows/templates/dataAccessRequestTemplate
Create data access workflow
Create or update a data access workflow:
PUT https://<accountName>.purview.azure.com/datagovernance/dataaccess/workflows/{workflowId}
The workflow request body is a large JSON directed acyclic graph (DAG) that defines multi-stage approvals including:
DataSubscriptionWebhook: subscription triggerDataAccessRequestSubmitted: entry trigger- Manager approval stage
- Privacy / compliance approval stage
- Approver chain stages
- Approve / Reject terminal actions
Apply policy sets to data product
Apply policy sets to a data product to govern access:
PUT https://<accountName>.purview.azure.com/datagovernance/dataaccess/dataProducts/{dataProductId}/policySets/applied?api-version=2023-10-01-preview
Request body:
{
"policies": {
"approvers": [
{
"identityType": "User",
"objectId": "<userObjectId>",
"tenantId": "<tenantId>"
}
],
"permittedUseCases": [
{
"title": "Assessing Fit",
"description": "Use to determine if data is useful"
},
{
"title": "Critical Reporting",
"description": "Use to create high quality reports"
},
{
"title": "Directional Insights",
"description": "Use to gather directional insights"
}
],
"managerApprovalRequired": false,
"privacyComplianceApprovalRequired": false,
"dataCopyPermitted": false,
"attestations": [],
"skipWorkflow": false,
"maximumAccessDuration": {
"durationType": "Years",
"length": 1
}
}
}
List workflows
List the data access workflows:
GET https://<accountName>.purview.azure.com/datagovernance/dataaccess/workflows
Get approvals
Retrieve pending data access approvals:
GET https://<accountName>.purview.azure.com/datagovernance/dataaccess/approvals?approvalStatus=Pending&api-version=2023-10-01-preview
Get workflow runs
Retrieve the data access workflow runs:
GET https://<accountName>.purview.azure.com/datagovernance/dataaccess/workflowRuns?ignoreActionStatuses=true&api-version=2023-10-01-preview
9. Data Quality
Create bulk asset metadata
Create bulk asset metadata for data quality:
PUT https://<accountName>.purview.azure.com/datagovernance/quality/bulk-asset-metadata
Note
The request body references an external JSON file (BCDR-DQ-Create Metadata.json). Contact your support representative for the complete payload.
Get bulk asset metadata
Retrieve the bulk asset metadata:
GET https://<accountName>.purview.azure.com/datagovernance/quality/bulk-asset-metadata