{"id":112337,"date":"2026-09-07T12:00:00","date_gmt":"2026-09-07T12:00:00","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/?p=112337"},"modified":"2026-08-26T15:57:25","modified_gmt":"2026-08-26T15:57:25","slug":"how-to-mirror-data-from-sql-server-to-microsoft-fabric-complete-guide","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/how-to-mirror-data-from-sql-server-to-microsoft-fabric-complete-guide\/","title":{"rendered":"How to mirror data from SQL Server to Microsoft Fabric: complete guide"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/learn.microsoft.com\/en-us\/fabric\/mirroring\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Mirroring in Microsoft Fabric<\/a> is useful when you need to make <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">SQL Server<\/a> data available in Fabric. Perhaps in <a href=\"https:\/\/www.red-gate.com\/simple-talk\/cloud\/azure\/data-intelligence-on-light-speed-microsoft-fabric\/#:~:text=one%20and%20another.-,Microsoft%20Fabric%20and%20OneLake,-OneLake%20is%20the\" target=\"_blank\" rel=\"noreferrer noopener\">OneLake<\/a>, for example, if you need to use the data for reporting, analytics, <a href=\"https:\/\/learn.microsoft.com\/en-us\/fabric\/data-engineering\/how-to-use-notebook\" target=\"_blank\" rel=\"noreferrer noopener\">notebooks<\/a>, or another <a href=\"https:\/\/learn.microsoft.com\/en-us\/fabric\/workload-development-kit\/workload-environment\" target=\"_blank\" rel=\"noreferrer noopener\">Fabric workload<\/a>.<\/strong><\/p>\n\n\n\n<p><strong>However, it&#8217;s not suitable for <em>everything<\/em>, as I&#8217;ll explain in this complete guide to mirroring data from SQL Server to Microsoft Fabric.<\/strong><\/p>\n\n\n\n<p>Before we get started, a note about compatibility. Since SQL Server 2005, there&#8217;s been a <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/database-engine\/database-mirroring\/database-mirroring-sql-server?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">type of database mirroring totally unrelated to Microsoft Fabric mirroring<\/a>. I wish these types of terms weren&#8217;t so overloaded but, in this article, when I say <em>mirroring<\/em>, I&#8217;m talking <em>only<\/em> about Fabric mirroring.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-can-i-use-microsoft-fabric-mirroring-for-my-pre-2025-version-of-sql-server\">Can I use Microsoft Fabric mirroring for my pre-2025 version of SQL Server?<\/h2>\n\n\n\n<p><strong>The way Microsoft Fabric mirroring works has changed in SQL Server 2025 compared to earlier versions. <\/strong><\/p>\n\n\n\n<p>For earlier versions that are supported (SQL Server 2016 to SQL Server 2022), mirroring uses <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/learn\/introduction-to-change-data-capture-cdc-in-sql-server-2008\/\" target=\"_blank\" rel=\"noreferrer noopener\">Change Data Capture (CDC)<\/a>. The source database <em>must<\/em> support CDC as the mirroring setup either uses CDC that&#8217;s already enabled, <em>or<\/em> helps configure it as part of the setup process.<\/p>\n\n\n\n<p>On Windows, Fabric mirroring is supported in Standard, Enterprise, and Developer editions. It&#8217;s also supported on Linux, but only from <a href=\"https:\/\/learn.microsoft.com\/en-us\/troubleshoot\/sql\/releases\/sqlserver-2017\/cumulativeupdate18\" target=\"_blank\" rel=\"noreferrer noopener\">SQL Server 2017 CU18<\/a> onwards.<\/p>\n\n\n\n<p>Mirroring also works with a variety of hosted environments. You can work with mirroring for SQL Server on-premises, SQL Server in either <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/virtual-machines\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Azure virtual machines<\/a>, and even non-Azure clouds like <a href=\"https:\/\/aws.amazon.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">AWS<\/a> and Google Cloud Platform (<a href=\"https:\/\/cloud.google.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">GCP)<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-should-i-use-microsoft-fabric-mirroring-for-sql-server-data\">Should I use Microsoft Fabric mirroring for SQL Server data?<\/h2>\n\n\n\n<p><strong>Microsoft Fabric mirroring works well in near real-time analytical <a href=\"https:\/\/www.ibm.com\/think\/topics\/data-replication\" target=\"_blank\" rel=\"noreferrer noopener\">replication<\/a> scenarios. The insert, update, and delete replication latency is low, keeping the data close to the current state. Mirroring is a good fit when you or your organization wants current or near-current analytical copies without building a more traditional batch pipeline.<\/strong><\/p>\n\n\n\n<p><strong>However, mirroring is not the best choice for <em>every<\/em> SQL Server integration need. <\/strong><\/p>\n\n\n\n<p>For a start, mirroring doesn&#8217;t guarantee 100% fresh data in the way that readable synchronous replicas in <a href=\"https:\/\/www.red-gate.com\/simple-talk\/other\/database-devops-considerations-for-sql-server-availability-groups\/\" target=\"_blank\" rel=\"noreferrer noopener\">availability groups<\/a> do. Instead, it&#8217;s designed to reduce <a href=\"https:\/\/www.ibm.com\/think\/topics\/etl\" target=\"_blank\" rel=\"noreferrer noopener\">ETL (extract, transform, load)<\/a> complexity for the right workloads.*<\/p>\n\n\n\n<p>So, you&#8217;ll be better off taking another approach if the main requirement is heavy reshaping before the data becomes useful, the source configuration is unsupported, or the solution depends on features that mirroring doesn&#8217;t support.<\/p>\n\n\n\n<p><em>*<em><a href=\"https:\/\/www.ibm.com\/think\/topics\/data-transformation\" target=\"_blank\" rel=\"noreferrer noopener\">Data transformation<\/a> still needs to happen somewhere in the system. Mirroring fits when the immediate need is simply to replicate operational data into Fabric and make it available quickly<\/em><\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-does-fabric-mirroring-work-for-sql-server-2025\">How does Fabric mirroring work for SQL Server 2025?<\/h2>\n\n\n\n<p><strong>SQL Server 2025 uses a different replication mechanism for mirroring compared to earlier versions. This means design, setup, and troubleshooting assumptions need to change as well.<\/strong> <strong>The key technical change is that SQL Server 2025 uses the Fabric mirroring change feed feature. <\/strong><\/p>\n\n\n\n<p>This alters which source features are required, which are incompatible, and which troubleshooting tools you use to solve potential replication issues.<\/p>\n\n\n\n<p>I do think this functionality is better (and this is a better direction for mirroring overall), but there is currently one key limitation: SQL Server 2025 mirroring is currently only supported for on-premises instances. I&#8217;m sure this will change over time but, for now, it&#8217;s not ideal.<\/p>\n\n\n\n<p><strong>For example, mirroring is not currently supported for SQL Server 2025 instances running in an Azure Virtual Machine, and there&#8217;s no Linux support <em>at all<\/em>.<\/strong><\/p>\n\n\n\n<p>With this change, you&#8217;ll also use different change-feed-specific <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/system-dynamic-management-objects\/system-dynamic-management-objects?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">dynamic management views (DMVs)<\/a> and <a href=\"https:\/\/www.red-gate.com\/simple-talk\/other\/for-the-love-of-stored-procedures\/\" target=\"_blank\" rel=\"noreferrer noopener\">stored procedures<\/a> to the ones used in previous versions.<\/p>\n\n\n\n<section id=\"my-first-block-block_4ccd679dafee1e1e4951114dabff75b9\" class=\"my-first-block alignwide\">\n    <div class=\"bg-brand-600 text-base-white py-5xl px-4xl rounded-sm bg-gradient-to-r from-brand-600 to-brand-500 red\">\n        <div class=\"gap-4xl items-start md:items-center flex flex-col md:flex-row justify-between\">\n            <div class=\"flex-1 col-span-10 lg:col-span-7\">\n                <h3 class=\"mt-0 font-display mb-2 text-display-sm\">Fast, reliable and consistent SQL Server development&#8230;<\/h3>\n                <div class=\"child:last-of-type:mb-0\">\n                                            &#8230;with SQL Toolbelt Essentials. 10 ingeniously simple tools for accelerating development, reducing risk, and standardizing workflows.                                    <\/div>\n            <\/div>\n                                            <a href=\"https:\/\/www.red-gate.com\/products\/sql-toolbelt-essentials\/\" class=\"btn btn--secondary btn--lg\" aria-label=\"Learn more &amp; try for free: Fast, reliable and consistent SQL Server development...\">Learn more &amp; try for free<\/a>\n                    <\/div>\n    <\/div>\n<\/section>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-do-i-need-for-fabric-mirroring-for-sql-server-2025\">What do I need for Fabric mirroring for SQL Server 2025?<\/h2>\n\n\n\n<p><strong>Mirroring for SQL Server 2025 requires <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-arc\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Arc<\/a> &#8211; and the server <em>must<\/em> be connected to it, so you need Azure Extension for SQL Server as well. <\/strong><\/p>\n\n\n\n<p>You can either set it up during installation of SQL Server or add it later.<\/p>\n\n\n\n<p>Gateway and network connectivity also need to be in place. You need either an <a href=\"https:\/\/learn.microsoft.com\/en-us\/data-integration\/gateway\/service-gateway-onprem\" target=\"_blank\" rel=\"noreferrer noopener\">on-premises data gateway<\/a> or a <a href=\"https:\/\/learn.microsoft.com\/en-us\/data-integration\/vnet\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">virtual network data gateway<\/a>. The gateway\u2019s network must be able to connect to the SQL Server instance, either through a <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/bi-sql-server\/using-virtual-network-data-gateways-to-secure-access-to-azure-sql-in-power-bi\/#:~:text=on%20public%20internet.-,Using%20Private%20Endpoints%20and%20a%20Gateway,-Each%20one%2C%20Power\" target=\"_blank\" rel=\"noreferrer noopener\">private endpoint<\/a> <em>or<\/em> because the firewall rule allows it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-what-you-need-before-adding-azure-arc-to-an-existing-server\">What you need before adding Azure Arc to an existing server<\/h3>\n\n\n\n<p><strong>Before attempting to add Azure Arc to an existing server, you need <a href=\"https:\/\/www.red-gate.com\/simple-talk\/sysadmin\/powershell\/\" target=\"_blank\" rel=\"noreferrer noopener\">PowerShell<\/a> installed on your system and an appropriate Azure Arc user account. You&#8217;ll also need to have registered the required resource providers.<\/strong><\/p>\n\n\n\n<p>These are the most important things to get right first time. Once everything&#8217;s in place, the GUI (graphical user interface) in the portal for setting up mirroring is simple.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-sql-server-managed-identities\">SQL Server managed identities<\/h3>\n\n\n\n<p>Over the years, I&#8217;ve been disappointed by the lack of support for <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/managed-identities-in-sql-server-2025-a-complete-guide\/\" target=\"_blank\" rel=\"noreferrer noopener\">managed identities<\/a> across the SQL Server product line, <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/managed-identities-in-sql-server-2025-a-complete-guide\/#:~:text=For%20example%2C%20you%20can%20assign%20either%20or%20both%20a%20system%2Dassigned%20managed%20identity%20and%20a%20user%2Dassigned%20managed%20identity%20to%20an%20Azure%20Analysis%20Services%20(AAS).%20However%2C%20AAS%20does%20not%20currently%20provide%20any%20way%20to%20use%20that%20identity%20when%20connecting%20to%20an%20Azure%2Dbased%20resource%20or%20service.\" target=\"_blank\" rel=\"noreferrer noopener\">including in Azure Analysis Services (AAS)<\/a>.<\/p>\n\n\n\n<p><strong>For SQL Server 2025 specifically, the identity story relies on Azure Arc integration. This means that mirroring sits in a hybrid-management model rather than a simple direct-database pattern. Mirroring then makes use of a managed identity in conjunction with Azure Arc.<\/strong><\/p>\n\n\n\n<p>Even so, source access still needs secure authentication and least privilege. Microsoft\u2019s <a href=\"https:\/\/learn.microsoft.com\/en-us\/entra\/identity-platform\/secure-least-privileged-access\" target=\"_blank\" rel=\"noreferrer noopener\">security guidance<\/a> recommends creating a dedicated database user with limited permissions, following the principle of least privilege.<\/p>\n\n\n\n<p>Supported source authentication methods are currently <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/learn\/sql-server-authentication-methods\/\" target=\"_blank\" rel=\"noreferrer noopener\">SQL authentication<\/a> with username and password, and <a href=\"https:\/\/www.microsoft.com\/en-gb\/security\/business\/identity-access\/microsoft-entra-id\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Entra ID<\/a>.<\/p>\n\n\n\n<p>Once Arc is in place, you should be able to check the managed identities by querying:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">USE [master];\nSELECT *\nFROM sys.dm_server_managed_identities;<\/pre><\/div>\n\n\n\n<p>The managed identity requires read\/write permission on the workspace. If you use the portal to configure mirroring, it will automatically assign this for you. <\/p>\n\n\n\n<p>Also note that, once Arc is in place, the user configured for mirroring doesn&#8217;t also need to be an admin. <\/p>\n\n\n\n<p>Here&#8217;s an example for a SQL login. You can use this <em>or<\/em> an Entra ID:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:tsql decode:true \">CREATE USER [Fabric User Name] \nFOR LOGIN [Fabric User Name];\nGRANT SELECT, \n      ALTER ANY EXTERNAL MIRROR, \n      VIEW DATABASE PERFORMANCE STATE, \n      VIEW DATABASE SECURITY STATE \nTO [Fabric User Name];<\/pre><\/div>\n\n\n\n<p>The user will also need permissions in the source database.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-do-always-on-availability-groups-work-with-fabric-mirroring-for-sql-server\">How do Always On Availability groups work with Fabric mirroring for SQL Server?<\/h2>\n\n\n\n<p><strong>When using <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/database-engine\/availability-groups\/windows\/overview-of-always-on-availability-groups-sql-server?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">Always On Availability groups<\/a> with Fabric mirroring for SQL Server, you <em>must<\/em> ensure you connect to the listener during configuration &#8211; <em>not<\/em> directly to the primary node.<\/strong><\/p>\n\n\n\n<p>Mirroring will then continue to work on <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/how-to-optimize-planned-availability-group-failovers-in-sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">failover<\/a> as long as:<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>The Fabric login is the <em>same user<\/em><br><br><\/li>\n\n\n\n<li>Permissions are present in the database<br><br><\/li>\n\n\n\n<li>Permissions in the Fabric workspace are the same for the identity<br><br><\/li>\n\n\n\n<li>The System Assigned Managed Identity (SAMI) of every secondary node has been granted <em>contributor<\/em> on the workspace (at the very least). Ideally, though, it&#8217;ll be member or admin &#8211; useful if anything needs changing.<\/li>\n<\/ul>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-are-some-database-level-limitations-of-fabric-mirroring-for-sql-server\">What are some database-level limitations of Fabric mirroring for SQL Server?<\/h2>\n\n\n\n<p><strong>Similar to Azure SQL Database, there are some database-level limitations of Fabric mirroring for SQL Server data. Not <em>everything<\/em> is supported; there are some features you may have enabled in the database that&#8217;ll prevent you from setting up mirroring.<\/strong><\/p>\n\n\n<div class=\"block-core-list\">\n<ol class=\"wp-block-list\">\n<li>An existing CDC setup is <em>not<\/em> a blocker until SQL Server 2025 and later.<br><br><\/li>\n\n\n\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/synapse-analytics\/synapse-link\/sql-synapse-link-overview\" target=\"_blank\" rel=\"noreferrer noopener\">Azure synapse link for SQL<\/a> <em>is<\/em> still a blocker.<br><br><\/li>\n\n\n\n<li>Each database can only be mirrored once (so if you have an existing mirror, that will also be a blocker.)<br><br><\/li>\n\n\n\n<li>Replication is also a blocker for mirroring.<\/li>\n<\/ol>\n<\/div>\n\n\n<p>Elsewhere, <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/tools\/sql-database-projects\/concepts\/data-tier-applications\/overview?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\"><code>.dacpac<\/code>&nbsp;deployments<\/a> require the publish property&nbsp;<code><a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/microsoft.sqlserver.dac.dacdeployoptions.donotalterreplicatedobjects?view=sql-dacfx-162\" target=\"_blank\" rel=\"noreferrer noopener\">\/p:DoNotAlterReplicatedObjects=False<\/a><\/code>. You can&#8217;t modify any mirrored tables without this.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/sql-server-row-level-security-introduction\/\" target=\"_blank\" rel=\"noreferrer noopener\">Row-level security (RLS)<\/a>, <a href=\"https:\/\/learn.microsoft.com\/en-us\/analysis-services\/tabular-models\/object-level-security?view=sql-analysis-services-2025\" target=\"_blank\" rel=\"noreferrer noopener\">object-level security (OLS)<\/a>, and <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/unmasking-sql-server-dynamic-data-masking\/\" target=\"_blank\" rel=\"noreferrer noopener\">Dynamic Data Masking (DDM)<\/a> are not currently replicated. Additionally, <a href=\"https:\/\/learn.microsoft.com\/en-us\/entra\/external-id\/cross-tenant-access-overview\" target=\"_blank\" rel=\"noreferrer noopener\">cross-tenant<\/a> setups aren&#8217;t supported with this form of mirroring, so you can&#8217;t have SQL Server in one tenant and your Fabric workspace in another.<\/p>\n\n\n\n<section id=\"my-first-block-block_b7dd1fc3e64bd0e973af5c7109eac464\" class=\"my-first-block alignwide\">\n    <div class=\"bg-brand-600 text-base-white py-5xl px-4xl rounded-sm bg-gradient-to-r from-brand-600 to-brand-500 red\">\n        <div class=\"gap-4xl items-start md:items-center flex flex-col md:flex-row justify-between\">\n            <div class=\"flex-1 col-span-10 lg:col-span-7\">\n                <h3 class=\"mt-0 font-display mb-2 text-display-sm\">Enhance your data security with an automated masking approach<\/h3>\n                <div class=\"child:last-of-type:mb-0\">\n                                            Data Masker automatically masks sensitive data across your estate, enabling you to deliver secure data to downstream environments in non-production databases for development and testing.                                    <\/div>\n            <\/div>\n                                            <a href=\"https:\/\/www.red-gate.com\/products\/data-masker\/\" class=\"btn btn--secondary btn--lg\" aria-label=\"Learn more &amp; try for free: Enhance your data security with an automated masking approach\">Learn more &amp; try for free<\/a>\n                    <\/div>\n    <\/div>\n<\/section>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-table-level-limitations-of-microsoft-fabric-mirroring-for-sql-server\">Table-level limitations of Microsoft Fabric mirroring for SQL Server<\/h3>\n\n\n\n<p>There are also limitations at the table level:<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>There can be no more than 1000 tables.<br><br><\/li>\n\n\n\n<li>There are restrictions to the <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/learn\/primary-key-primer-for-sql-server\/\" target=\"_blank\" rel=\"noreferrer noopener\">primary key<\/a> \/ <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/learn\/effective-clustered-indexes\/\" target=\"_blank\" rel=\"noreferrer noopener\">clustered index<\/a> data types.<br><br><\/li>\n\n\n\n<li>No <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/t-sql-programming-sql-server\/what-are-columnstore-indexes\/\" target=\"_blank\" rel=\"noreferrer noopener\">clustered columnstore indexes<\/a>.<br><br><\/li>\n\n\n\n<li>Other unsupported features include <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/database-administration-sql-server\/sql-server-temporal-tables-recipes\/\" target=\"_blank\" rel=\"noreferrer noopener\">temporal<\/a> and ledger history tables, <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/database-administration-sql-server\/sql-server-encryption-always-encrypted\/\" target=\"_blank\" rel=\"noreferrer noopener\">Always Encrypted<\/a> columns, in-memory or graph or external tables, switching partitions, and altering the primary key.<\/li>\n<\/ul>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-column-level-limitations-of-microsoft-fabric-mirroring-for-sql-server\">Column-level limitations of Microsoft Fabric mirroring for SQL Server<\/h3>\n\n\n\n<p>And finally, there are limitations at the column level:<\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li>No <code><a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/oracle-databases\/json-for-absolute-beginners-part-1-introduction\/\" target=\"_blank\" rel=\"noreferrer noopener\">JSON<\/a><\/code> or <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/data-types\/vector-data-type?view=sql-server-ver17&amp;tabs=csharp\" target=\"_blank\" rel=\"noreferrer noopener\"><code>VECTOR<\/code> data type<\/a>.<br><br><\/li>\n\n\n\n<li>There are data type \/ precision issues.<br><br><\/li>\n\n\n\n<li><a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/database-administration-sql-server\/columnstore-indexes-in-sql-server-2012\/#:~:text=a%20highly%20compressed-,Large%20Object%20(LOB),-that%20can%20contain\" target=\"_blank\" rel=\"noreferrer noopener\">Large object (LOB)<\/a> columns are potentially trimmed.<br><br><\/li>\n\n\n\n<li>Unsupported data types: computed columns, image\/text\/<code><a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/t-sql\/data-types\/ntext-text-and-image-transact-sql?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">ntext<\/a><\/code>, <code>XML<\/code>, <code>rowversion<\/code>\/<code>timestamp<\/code>, <code>sql_variant<\/code>, user-defined data types (including <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/clr-integration\/common-language-runtime-integration-overview?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">SQL CLR<\/a> types), geometry\/geography.<\/li>\n<\/ul>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-to-troubleshoot-microsoft-fabric-mirroring-for-sql-server-2025\">How to troubleshoot Microsoft Fabric mirroring for SQL Server 2025<\/h2>\n\n\n\n<p><strong>When you have mirroring problems, <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/database-administration-sql-server\/baselining-with-sql-server-dynamic-management-views\/\" target=\"_blank\" rel=\"noreferrer noopener\">Dynamic Management Views (DMVs)<\/a> can help with database-level checks. They can also be used to validate configuration.<\/strong><\/p>\n\n\n\n<p>Firstly, the&nbsp;<code>sys.dm_change_feed_log_scan_sessions<\/code>&nbsp;DMV <em>should<\/em> show the progress and processing of incremental changes. If not, query <code>sys.dm_change_feed_errors<\/code> to see if any errors are being reported.<\/p>\n\n\n\n<p>If there are no issues there, you can execute the <code>sp_help_change_feed<\/code> stored procedure to check if there are any configuration issues. Remember to check the <code>table_name<\/code>&nbsp;<em>and<\/em>&nbsp;the state. Any state value besides&nbsp;4<strong>&nbsp;<\/strong>indicates a potential problem.<\/p>\n\n\n\n<p>If the data replication is still not flowing, verify that the correct&nbsp;managed identity&nbsp;object has permissions. Do this by selecting the &#8220;&#8230;&#8221; ellipses option on the mirrored database item, choosing the <em>Manage Permissions<\/em> option, and seeing if the managed identity name shows with read\/write permissions. <\/p>\n\n\n\n<p>At the same time, check that the <code>AppId<\/code> that shows up is identical to the managed identity ID for your SQL Server.<\/p>\n\n\n\n<p>Finally, if you have a <a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/sql-server\/learn\/sql-server-transaction-log-architecture\/\" target=\"_blank\" rel=\"noreferrer noopener\">transaction log<\/a> growing out of hand and not truncating, it could be that mirroring is preventing log truncation for the mirrored database. <\/p>\n\n\n\n<p>To confirm this, check the&nbsp;<code>log_reuse_wait_desc<\/code>&nbsp;column in the&nbsp;<code>sys.databases<\/code>&nbsp;system catalog view. If it says <code>REPLICATION<\/code>, it <em>is<\/em> waiting for mirroring.<\/p>\n\n\n\n<p>The impact of Fabric mirroring on the source database shouldn&#8217;t be high but, if you want to control it further, there are <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/relational-databases\/resource-governor\/resource-governor-workload-group?view=sql-server-ver17\" target=\"_blank\" rel=\"noreferrer noopener\">resource governor workload groups<\/a> that you <em>can<\/em> control.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-summary-microsoft-fabric-mirroring-for-sql-server\">Summary: Microsoft Fabric mirroring for SQL Server<\/h2>\n\n\n\n<p>In SQL Server 2016 &#8211; 2022, Microsoft Fabric mirroring was based on CDC; Azure SQL Database used a different mechanism. Now, with SQL Server 2025, mirroring has moved to a mechanism that&#8217;s <em>closer<\/em> to what&#8217;s in Azure SQL Database. <\/p>\n\n\n\n<p>This is a positive step but, since it&#8217;s designed for on-premises SQL Server systems, it comes with its own set of prerequisites. There are also a number of limitations, many of which I hope get addressed over time.<\/p>\n\n\n\n<section id=\"my-first-block-block_a1cfbb4f5f606aad3028be3288822990\" class=\"my-first-block alignwide\">\n    <div class=\"bg-brand-600 text-base-white py-5xl px-4xl rounded-sm bg-gradient-to-r from-brand-600 to-brand-500 red\">\n        <div class=\"gap-4xl items-start md:items-center flex flex-col md:flex-row justify-between\">\n            <div class=\"flex-1 col-span-10 lg:col-span-7\">\n                <h3 class=\"mt-0 font-display mb-2 text-display-sm\">Move fast. Govern at scale.<\/h3>\n                <div class=\"child:last-of-type:mb-0\">\n                                            Redgate Flyway Enterprise embeds guardrails in the database layer, so every change is policy-checked, deterministic, and traceable.                                    <\/div>\n            <\/div>\n                                            <a href=\"https:\/\/www.red-gate.com\/products\/flyway\/enterprise\/\" class=\"btn btn--secondary btn--lg\" aria-label=\"Try for free: Move fast. Govern at scale.\">Try for free<\/a>\n                    <\/div>\n    <\/div>\n<\/section>\n\n\n<section id=\"faq\" class=\"faq-block my-5xl\">\n    <h2>FAQs: Microsoft Fabric mirroring for SQL Server<\/h2>\n\n                        <h3 class=\"mt-4xl\">1. What is Microsoft Fabric mirroring for SQL Server?<\/h3>\n            <div class=\"faq-answer\">\n                <p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">A feature that replicates SQL Server data into OneLake in near real time, making it available for Fabric analytics and reporting without a full ETL pipeline.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">2. Can I use it with SQL Server versions before 2025?<\/h3>\n            <div class=\"faq-answer\">\n                <p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">Yes. SQL Server 2016\u20132022 use CDC (Change Data Capture) for mirroring. The source database must support CDC.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">3. What&#039;s different in SQL Server 2025?<\/h3>\n            <div class=\"faq-answer\">\n                <p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">It uses a new change feed feature instead of CDC, with different DMVs and stored procedures. It currently only supports on-premises instances \u2014 no Azure VMs or Linux.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">4. What&#039;s needed to set up Fabric mirroring for SQL Server 2025?<\/h3>\n            <div class=\"faq-answer\">\n                <p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">Azure Arc connectivity, a data gateway, PowerShell, an Azure Arc user account, and registered resource providers.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">5. Is Fabric mirroring the same as SQL Server database mirroring?<\/h3>\n            <div class=\"faq-answer\">\n                <p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">No. SQL Server&#8217;s older database mirroring (since 2005) is unrelated to Fabric mirroring.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">6. Does it guarantee fully fresh data?<\/h3>\n            <div class=\"faq-answer\">\n                <p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">No. It reduces ETL complexity for near real-time analytics, but doesn&#8217;t match the freshness of synchronous availability group replicas.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">7. What are the main limitations?<\/h3>\n            <div class=\"faq-answer\">\n                <p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">Blockers include Synapse Link, existing mirrors, and replication. Tables are capped at 1,000 with feature restrictions. Unsupported column types include <code>JSON<\/code>, <code>VECTOR<\/code>, <code>XML<\/code>, and geometry\/geography.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">8. How do I troubleshoot issues?<\/h3>\n            <div class=\"faq-answer\">\n                <p>Check the <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">sys.dm_change_feed_log_scan_sessions<\/code> and <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">sys.dm_change_feed_errors<\/code> DMVs, run <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">sp_help_change_feed<\/code>, and verify managed identity permissions in the Fabric portal.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">9. Does it work with Always On Availability Groups?<\/h3>\n            <div class=\"faq-answer\">\n                <div role=\"feed\" aria-label=\"Chat messages\" aria-describedby=\"_r_170_\" data-find-provider-scope=\"\">\n<div data-sizer-excess=\"0\" data-rocksteady-sizer=\"\">\n<div data-rs-index=\"5\" data-index=\"5\" data-last-message=\"true\">\n<div role=\"article\" aria-label=\"Message 6 of 6\">\n<div data-test-render-count=\"1\">\n<div class=\"group group\/message-row\">\n<div class=\"contents\">\n<div class=\"group relative relative pb-[var(--msg-assistant-pb,0.75rem)]\" data-is-streaming=\"false\">\n<div class=\"font-claude-response relative leading-[1.65rem] [&amp;_pre&gt;div]:bg-bg-000\/50 [&amp;_pre&gt;div]:border-0.5 [&amp;_pre&gt;div]:border-border-400 [&amp;_.ignore-pre-bg&gt;div]:bg-transparent [&amp;_.standard-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;_.standard-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8 [&amp;_.progressive-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;_.progressive-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8\">\n<div>\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3 [&amp;_&gt;_*:last-child]:mb-0 print:block print:[&amp;_&gt;_*_+_*]:mt-3 standard-markdown\">\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">Yes \u2014 connect to the listener (not the primary node), and grant each secondary node&#8217;s managed identity at least contributor access to the workspace.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"flow-root\">\n<div>\n<div class=\"ml-1 mt-6 flex items-center transition-transform duration-300 ease-out\">\n<div class=\"p-1 -translate-x-px\">\n<div aria-hidden=\"true\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n            <\/div>\n            <\/section>\n","protected":false},"excerpt":{"rendered":"<p>Learn all about Microsoft Fabric mirroring for SQL Server: how it works, what&#8217;s new in 2025, setup, limitations, and troubleshooting.&hellip;<\/p>\n","protected":false},"author":346483,"featured_media":112353,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[159160,143523,53,159164,143524],"tags":[4168,4170,158997,4150,4151],"coauthors":[159368],"class_list":["post-112337","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-analytics","category-databases","category-featured","category-microsoft-fabric","category-sql-server","tag-database","tag-database-administration","tag-microsoft-fabric","tag-sql","tag-sql-server"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/112337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/346483"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=112337"}],"version-history":[{"count":10,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/112337\/revisions"}],"predecessor-version":[{"id":112364,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/112337\/revisions\/112364"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media\/112353"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=112337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=112337"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=112337"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=112337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}