{"id":808,"date":"2024-10-15T08:00:00","date_gmt":"2024-10-15T13:00:00","guid":{"rendered":"https:\/\/www.sqltabletalk.com\/?p=808"},"modified":"2024-10-12T23:12:44","modified_gmt":"2024-10-13T04:12:44","slug":"automating-database-restoration-between-sql-server-availability-groups","status":"publish","type":"post","link":"https:\/\/www.sqltabletalk.com\/?p=808","title":{"rendered":"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell"},"content":{"rendered":"<h3>Introduction<\/h3>\n<p>Managing SQL Server databases in Always On Availability Groups (AGs) often involves complex operations like database migrations, synchronizing replicas, or recovering from failures. Manually handling these tasks can be time-consuming and error-prone. Automating these processes not only reduces downtime but also ensures consistency across your AG environments.<\/p>\n<p>In this post, I&#8217;ll walk you through a PowerShell script that automates the restoration of a database from one AG to another. The script handles everything\u2014from performing a COPY-ONLY backup on the source AG to restoring the database on the target AG&#8217;s primary and secondary replicas, applying transaction logs, and rejoining the database to the new AG seamlessly.<\/p>\n<p>This automation simplifies the restoration process, minimizes downtime, and keeps your AG replicas in sync without manual intervention. Let&#8217;s dive into how the script works and why it&#8217;s an essential tool for SQL Server administrators.<\/p>\n<h3>Script Overview<\/h3>\n<p>The script is designed to automate the process of restoring a database from a source Always On Availability Group to a target AG environment. Below is a step-by-step explanation of what the script does:<\/p>\n<ol>\n<li>Import the SQL Server module.<\/li>\n<li>Set up necessary variables based on your environment.<\/li>\n<li>Define a function to execute SQL commands with error handling.<\/li>\n<li>Perform a COPY-ONLY backup of the database from the source AG.<\/li>\n<li>Take a transaction log backup to capture recent transactions.<\/li>\n<li>Remove the database from the target AG if it already exists.<\/li>\n<li>Restore the database on the target primary replica.<\/li>\n<li>Restore the database on all target secondary replicas.<\/li>\n<li>Apply the transaction log backup on the target primary replica.<\/li>\n<li>Bring the database online on the target primary replica.<\/li>\n<li>Apply the transaction log backup on all target secondary replicas.<\/li>\n<li>Re-add the database to the target AG on the primary replica.<\/li>\n<li>Re-join the database to the target AG on all secondary replicas.<\/li>\n<li>Confirm completion of the restoration process.<\/li>\n<\/ol>\n<h3>Prerequisites<\/h3>\n<ul>\n<li><strong>SqlServer PowerShell Module:<\/strong> Ensure that the SqlServer module is installed and imported.<\/li>\n<li><strong>Shared Backup Path:<\/strong> A shared network location accessible by all servers involved.<\/li>\n<\/ul>\n<h3>The Script<\/h3>\n<h4>1. Import the SQL Server Module<\/h4>\n<pre><code>Import-Module SqlServer<\/code><\/pre>\n<p>This line ensures that the required SqlServer PowerShell module is available for use.<\/p>\n<h4>2. Set Up Variables<\/h4>\n<pre><code>$sourceAgListener = \"SourceAGListener\"\n$targetPrimaryReplica = \"TargetPrimaryReplica\"\n$targetSecondaryReplicas = @(\"SecondaryReplica1\", \"SecondaryReplica2\")\n$database = \"YourDatabaseName\"\n$targetAgName = \"TargetAGName\"\n$sharedBackupPath = \"\\\\Shared\\Backup\\Path\"\n$sharedBackupFile = Join-Path $sharedBackupPath \"$database.bak\"\n$tlogBackupFile = Join-Path $sharedBackupPath \"$database.trn\"<\/code><\/pre>\n<h4>3. Define a Function to Execute SQL Commands<\/h4>\n<pre><code>function Invoke-SqlCmdWithCheck {\n    param (\n        [string]$serverInstance,\n        [string]$query\n    )\n    Write-Host \"Executing query on $serverInstance\"\n    Invoke-Sqlcmd -ServerInstance $serverInstance -Query $query -ErrorAction Stop -TrustServerCertificate\n}<\/code><\/pre>\n<h4>4. Perform a COPY-ONLY Backup from the Source AG<\/h4>\n<pre><code>Write-Host \"Starting COPY-ONLY backup of $database from source AG...\"\n$backupQuery = @\"\nBACKUP DATABASE [$database]\nTO DISK = N'$sharedBackupFile'\nWITH COPY_ONLY, INIT\n\"@\nInvoke-SqlCmdWithCheck -serverInstance $sourceAgListener -query $backupQuery\nWrite-Host \"Backup completed at $sharedBackupFile.\"<\/code><\/pre>\n<h4>5. Perform a Transaction Log Backup on the Source AG<\/h4>\n<pre><code>Write-Host \"Starting transaction log backup of $database...\"\n$tlogBackupQuery = @\"\nBACKUP LOG [$database]\nTO DISK = N'$tlogBackupFile'\nWITH INIT\n\"@\nInvoke-SqlCmdWithCheck -serverInstance $sourceAgListener -query $tlogBackupQuery\nWrite-Host \"Transaction log backup completed at $tlogBackupFile.\"<\/code><\/pre>\n<h4>6. Remove the Database from the Target AG if It Exists<\/h4>\n<pre><code>Write-Host \"Checking if $database exists in the Target AG...\"\n$checkDatabaseQuery = \"SELECT COUNT(*) AS DatabaseCount FROM sys.availability_databases_cluster WHERE database_name = N'$database'\"\n$result = Invoke-Sqlcmd -ServerInstance $targetPrimaryReplica -Query $checkDatabaseQuery -TrustServerCertificate\n\nif ($result.DatabaseCount -eq 1) {\n    Write-Host \"Removing $database from the Target AG on the primary replica...\"\n    $removeAgDbQuery = \"ALTER AVAILABILITY GROUP [$targetAgName] REMOVE DATABASE [$database]\"\n    Invoke-SqlCmdWithCheck -serverInstance $targetPrimaryReplica -query $removeAgDbQuery\n    Write-Host \"$database removed from the target AG.\"\n} else {\n    Write-Host \"$database does not exist in the Target AG.\"\n}<\/code><\/pre>\n<h4>7. Restore the Database on the Target Primary Replica<\/h4>\n<pre><code>Write-Host \"Restoring $database on the Target Primary Replica ($targetPrimaryReplica) from $sharedBackupFile...\"\n$restorePrimaryQuery = @\"\nRESTORE DATABASE [$database]\nFROM DISK = N'$sharedBackupFile'\nWITH NORECOVERY, REPLACE\n\"@\nInvoke-SqlCmdWithCheck -serverInstance $targetPrimaryReplica -query $restorePrimaryQuery\nWrite-Host \"Primary replica restore completed.\"<\/code><\/pre>\n<h4>8. Restore the Database on All Target Secondary Replicas<\/h4>\n<pre><code>foreach ($secondaryReplica in $targetSecondaryReplicas) {\n    Write-Host \"Restoring $database on target secondary replica ($secondaryReplica) from $sharedBackupFile...\"\n    $restoreSecondaryQuery = @\"\nRESTORE DATABASE [$database]\nFROM DISK = N'$sharedBackupFile'\nWITH NORECOVERY, REPLACE\n\"@\n    Invoke-SqlCmdWithCheck -serverInstance $secondaryReplica -query $restoreSecondaryQuery\n    Write-Host \"Restore completed on target secondary replica $secondaryReplica.\"\n}<\/code><\/pre>\n<h4>9. Apply the Transaction Log Backup on the Target Primary Replica<\/h4>\n<pre><code>Write-Host \"Applying transaction log backup on the Target Primary Replica ($targetPrimaryReplica)...\"\n$restoreTlogPrimaryQuery = @\"\nRESTORE LOG [$database]\nFROM DISK = N'$tlogBackupFile'\nWITH NORECOVERY\n\"@\nInvoke-SqlCmdWithCheck -serverInstance $targetPrimaryReplica -query $restoreTlogPrimaryQuery\nWrite-Host \"Transaction log restore (NORECOVERY) completed on Target Primary Replica.\"<\/code><\/pre>\n<h4>10. Bring the Database Online on the Target Primary Replica<\/h4>\n<pre><code>Write-Host \"Bringing $database online on the Target Primary Replica ($targetPrimaryReplica)...\"\n$restoreRecoveryQuery = @\"\nRESTORE DATABASE [$database]\nWITH RECOVERY\n\"@\nInvoke-SqlCmdWithCheck -serverInstance $targetPrimaryReplica -query $restoreRecoveryQuery\nWrite-Host \"Database $database is now online on the Target Primary Replica.\"<\/code><\/pre>\n<h3>Conclusion<\/h3>\n<p>By automating the database restoration process between AGs using this PowerShell script, you can significantly reduce manual effort and the potential for errors. The script ensures that all replicas are properly synchronized and that the database is seamlessly integrated into the target AG.<\/p>\n<p>This tool is invaluable for SQL Server administrators who need to manage complex AG environments efficiently. Feel free to customize the script to suit your specific environment and requirements.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this post, I&#8217;ll walk you through a PowerShell script that automates the restoration of a database from one AG to another. The script handles everything\u2014from performing a COPY-ONLY backup on the source AG to restoring the database on the target AG&#8217;s primary and secondary replicas, applying transaction logs, and rejoining the database to the new AG seamlessly.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[55,36,182,53,84,18,21],"tags":[191,38,184,313,42,314,315,131,316],"class_list":["post-808","post","type-post","status-publish","format-standard","hentry","category-automation","category-availability-groups","category-migration","category-powershell","category-sql-developer","category-transaction-logs","category-tutorial","tag-always-on-availability-groups","tag-availability-groups","tag-database-migration","tag-database-restoration","tag-high-availability","tag-powershell-automation","tag-sql-backup-and-restore","tag-sql-server","tag-transaction-logs"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automating Database Restoration Between SQL Server Availability Groups Using PowerShell - SQL Table Talk<\/title>\n<meta name=\"description\" content=\"In this post, I&#039;ll walk you through a PowerShell script that automates the restoration of a database from one AG to another. The script handles everything\u2014from performing a COPY-ONLY backup on the source AG to restoring the database on the target AG&#039;s primary and secondary replicas, applying transaction logs, and rejoining the database to the new AG seamlessly.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqltabletalk.com\/?p=808\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell - SQL Table Talk\" \/>\n<meta property=\"og:description\" content=\"In this post, I&#039;ll walk you through a PowerShell script that automates the restoration of a database from one AG to another. The script handles everything\u2014from performing a COPY-ONLY backup on the source AG to restoring the database on the target AG&#039;s primary and secondary replicas, applying transaction logs, and rejoining the database to the new AG seamlessly.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqltabletalk.com\/?p=808\" \/>\n<meta property=\"og:site_name\" content=\"SQL Table Talk\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-15T13:00:00+00:00\" \/>\n<meta name=\"author\" content=\"Yvonne Vanslageren\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yvonne Vanslageren\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=808#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=808\"},\"author\":{\"name\":\"Yvonne Vanslageren\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082\"},\"headline\":\"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell\",\"datePublished\":\"2024-10-15T13:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=808\"},\"wordCount\":505,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"keywords\":[\"Always On Availability Groups\",\"availability groups\",\"Database Migration\",\"Database Restoration\",\"High Availability\",\"PowerShell Automation\",\"SQL Backup and Restore\",\"SQL Server\",\"Transaction Logs\"],\"articleSection\":[\"Automation\",\"Availability Groups\",\"Migration\",\"PowerShell\",\"SQL Developer\",\"Transaction Logs\",\"Tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=808#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=808\",\"url\":\"https:\/\/www.sqltabletalk.com\/?p=808\",\"name\":\"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell - SQL Table Talk\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\"},\"datePublished\":\"2024-10-15T13:00:00+00:00\",\"description\":\"In this post, I'll walk you through a PowerShell script that automates the restoration of a database from one AG to another. The script handles everything\u2014from performing a COPY-ONLY backup on the source AG to restoring the database on the target AG's primary and secondary replicas, applying transaction logs, and rejoining the database to the new AG seamlessly.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=808#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=808\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=808#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqltabletalk.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\",\"url\":\"https:\/\/www.sqltabletalk.com\/\",\"name\":\"SQL Table Talk\",\"description\":\"Breaking Down SQL Server, One Post at a Time.\",\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqltabletalk.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\",\"name\":\"Stephen Planck\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"caption\":\"Stephen Planck\"},\"logo\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/dexterwiki.com\",\"https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI\",\"https:\/\/www.youtube.com\/linuxmate\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082\",\"name\":\"Yvonne Vanslageren\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g\",\"caption\":\"Yvonne Vanslageren\"},\"url\":\"https:\/\/www.sqltabletalk.com\/?author=2\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell - SQL Table Talk","description":"In this post, I'll walk you through a PowerShell script that automates the restoration of a database from one AG to another. The script handles everything\u2014from performing a COPY-ONLY backup on the source AG to restoring the database on the target AG's primary and secondary replicas, applying transaction logs, and rejoining the database to the new AG seamlessly.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqltabletalk.com\/?p=808","og_locale":"en_US","og_type":"article","og_title":"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell - SQL Table Talk","og_description":"In this post, I'll walk you through a PowerShell script that automates the restoration of a database from one AG to another. The script handles everything\u2014from performing a COPY-ONLY backup on the source AG to restoring the database on the target AG's primary and secondary replicas, applying transaction logs, and rejoining the database to the new AG seamlessly.","og_url":"https:\/\/www.sqltabletalk.com\/?p=808","og_site_name":"SQL Table Talk","article_published_time":"2024-10-15T13:00:00+00:00","author":"Yvonne Vanslageren","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Yvonne Vanslageren","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqltabletalk.com\/?p=808#article","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/?p=808"},"author":{"name":"Yvonne Vanslageren","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082"},"headline":"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell","datePublished":"2024-10-15T13:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqltabletalk.com\/?p=808"},"wordCount":505,"commentCount":0,"publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"keywords":["Always On Availability Groups","availability groups","Database Migration","Database Restoration","High Availability","PowerShell Automation","SQL Backup and Restore","SQL Server","Transaction Logs"],"articleSection":["Automation","Availability Groups","Migration","PowerShell","SQL Developer","Transaction Logs","Tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqltabletalk.com\/?p=808#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqltabletalk.com\/?p=808","url":"https:\/\/www.sqltabletalk.com\/?p=808","name":"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell - SQL Table Talk","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/#website"},"datePublished":"2024-10-15T13:00:00+00:00","description":"In this post, I'll walk you through a PowerShell script that automates the restoration of a database from one AG to another. The script handles everything\u2014from performing a COPY-ONLY backup on the source AG to restoring the database on the target AG's primary and secondary replicas, applying transaction logs, and rejoining the database to the new AG seamlessly.","breadcrumb":{"@id":"https:\/\/www.sqltabletalk.com\/?p=808#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqltabletalk.com\/?p=808"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqltabletalk.com\/?p=808#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqltabletalk.com\/"},{"@type":"ListItem","position":2,"name":"Automating Database Restoration Between SQL Server Availability Groups Using PowerShell"}]},{"@type":"WebSite","@id":"https:\/\/www.sqltabletalk.com\/#website","url":"https:\/\/www.sqltabletalk.com\/","name":"SQL Table Talk","description":"Breaking Down SQL Server, One Post at a Time.","publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqltabletalk.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0","name":"Stephen Planck","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","caption":"Stephen Planck"},"logo":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/dexterwiki.com","https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI","https:\/\/www.youtube.com\/linuxmate"]},{"@type":"Person","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082","name":"Yvonne Vanslageren","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g","caption":"Yvonne Vanslageren"},"url":"https:\/\/www.sqltabletalk.com\/?author=2"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=808"}],"version-history":[{"count":3,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/808\/revisions"}],"predecessor-version":[{"id":822,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/808\/revisions\/822"}],"wp:attachment":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}