{"id":1179,"date":"2007-09-28T15:27:44","date_gmt":"2007-09-28T15:27:44","guid":{"rendered":"\/blogs\/paul\/post\/Search-Engine-QA-2-Moving-a-database-while-Database-Mirroring-is-running.aspx"},"modified":"2017-04-13T09:52:06","modified_gmt":"2017-04-13T16:52:06","slug":"search-engine-qa-2-moving-a-database-while-database-mirroring-is-running","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/","title":{"rendered":"Search Engine Q&#038;A #2: Moving a database while Database Mirroring is running"},"content":{"rendered":"<p>This was a question from the <a href=\"https:\/\/social.msdn.microsoft.com:443\/forums\/en-US\/sqldisasterrecovery\/threads\/\">MSDN Disaster Recovery forum<\/a> I started while I was at Microsoft.<\/p>\n<p style=\"padding-left: 30px;\"><em>I have a 600 gig database that has a mirror. I need to move the databases from local drives to a SAN. Can anyone recommend a document that lists the steps to go through to move both the principle and mirror to the SAN with no down time? or minimal down time?<\/em><\/p>\n<p>As far as I know, there isn&#8217;t any such document so I had a crack at coming up with a list of operations. Here&#8217;s what I had:<\/p>\n<ol>\n<li>Take a full backup of the principal on node A<\/li>\n<li>Restore it on the SAN on node B\u00a0using WITH\u00a0NORECOVERY, remembering to use WITH MOVE to place the files correctly, and with a different database name than the current mirror<\/li>\n<li>Take the required log backup on the principal and restore on the database copy on the SAN on node B<\/li>\n<li>Break the mirroring partnership<\/li>\n<li>Drop the current mirror database on node B<\/li>\n<li>Rename the database on the SAN on node B to be the mirror database &#8212; THIS DOESN&#8221;T WORK!<\/li>\n<li>Setup the mirroring partnership to point to the newly restored database on the SAN on node B<\/li>\n<li>Start mirroring and the new mirror will catch-up<\/li>\n<li>Failover to the mirror on node B, which becomes the new principal<\/li>\n<li>Follow the same procedure to move the new mirror on node A onto its SAN<\/li>\n<li>Failback if you want to<\/li>\n<\/ol>\n<p>And I promised to try it out to make sure I had it right so in this blog post I&#8217;m going to walk through the steps of doing this. It turns out that the steps above are slightly incorrect. Step 6 above doesn&#8217;t work because the database is in recovery (so is inaccessible) and there&#8217;s a short-cut when moving the database on the first node to avoid having to take and copy more backups. Let&#8217;s see how it works and I&#8217;ll post the corrected sequence at the end.<\/p>\n<p>As I did in yesterday&#8217;s mirroring post, I&#8217;m going to use the TicketSalesDB database from our Always-On DVDs. It&#8217;s only a few hundred MB instead of 600GB but the principal is the same (no pun intended :-)). I&#8217;ve got mirroring running between two nodes, SQLDEV01 (the principal) and SQLDEV02 (the mirror), both of which are running 2005 SP2 and I&#8217;ve got a simulated workload inserting rows into the database. I don&#8217;t actually have a SAN laying around so I&#8217;m cheating and I have directories called C:\\SQLDEV01SAN and C:\\SQLDEV02SAN instead. It&#8217;s the location change that&#8217;s the interesting part, not where the actual location is.<\/p>\n<p><strong>Step 1<\/strong><\/p>\n<p>On SQLDEV01, take a full backup and a log backup:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nBACKUP DATABASE &#x5B;TicketSalesDB] TO DISK = N'C:\\SQLskills\\TicketSalesDB.BAK' WITH INIT;\r\nGO\r\n\r\nBACKUP LOG &#x5B;TicketSalesDB] TO DISK = N'C:\\SQLskills\\TicketSalesDB_Log.bak' WITH INIT;\r\nGO\r\n<\/pre>\n<p><strong>Step 2<\/strong><\/p>\n<p>On SQLDEV01, break the mirroring partnership:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER DATABASE &#x5B;TicketSalesDB] SET PARTNER OFF;\r\nGO\r\n<\/pre>\n<p>And just check that it&#8217;s gone:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT &#x5B;mirroring_state_desc] FROM sys.database_mirroring WHERE &#x5B;database_id] = DB_ID (N'TicketSalesDB');\r\nGO\r\n<\/pre>\n<pre class=\"brush: plain; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nNULL\r\n<\/pre>\n<p><strong>Step 3<\/strong><\/p>\n<p>On SQLDEV02, drop the mirror database &#8211; this wouldn&#8217;t work unless mirroring was no longer running:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nDROP DATABASE &#x5B;TicketSalesDB];\r\nGO\r\n<\/pre>\n<p><strong>Step 4<\/strong><\/p>\n<p>Copy the backups to SQLDEV02 and restore\u00a0them on the SAN and remembering to use <em>WITH NORECOVERY<\/em>:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nRESTORE DATABASE &#x5B;TicketSalesDB] FROM DISK = N'C:\\SQLskills\\TicketSalesDB.bak'\r\nWITH\r\n    MOVE N'TicketSalesDBData' TO N'C:\\SQLDEV02SAN\\TicketSalesDBData.MDF',\r\n    MOVE N'TicketSalesFG2005Q1' TO N'C:\\SQLDEV02SAN\\TicketSalesFG2005Q1.NDF',\r\n    MOVE N'TicketSalesFG2005Q2' TO N'C:\\SQLDEV02SAN\\TicketSalesFG2005Q2.NDF',\r\n    MOVE N'TicketSalesFG2005Q3' TO N'C:\\SQLDEV02SAN\\TicketSalesFG2005Q3.NDF',\r\n    MOVE N'TicketSalesFG2005Q4' TO N'C:\\SQLDEV02SAN\\TicketSalesFG2005Q4.NDF',\r\n    MOVE N'TicketSalesDBLog' TO N'C:\\SQLDEV02SAN\\TicketSalesDBLog.LDF',\r\n    NORECOVERY;\r\nGO\r\n<\/pre>\n<p><strong>Step 5<\/strong><\/p>\n<p>On SQLDEV02, set the mirroring partner to be SQLDEV01:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER DATABASE &#x5B;TicketSalesDB] SET PARTNER = 'TCP:\/\/SQLDEV01:5091';\r\nGO\r\n<\/pre>\n<p><strong>Step 6<\/strong><\/p>\n<p>On SQLDEV01, start mirroring:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER DATABASE &#x5B;TicketSalesDB] SET PARTNER = 'TCP:\/\/SQLDEV02:5092';\r\nGO\r\n<\/pre>\n<p>And check that it&#8217;s running:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT &#x5B;mirroring_state_desc] FROM sys.database_mirroring WHERE &#x5B;database_id] = DB_ID (N'TicketSalesDB');\r\nGO\r\n<\/pre>\n<p>This time it returns:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSYNCHRONIZED\r\n<\/pre>\n<p><strong>Step 7<\/strong><\/p>\n<p>Now we need to failover so that we can move the database on SQLDEV01 onto its SAN. Before we do that, let&#8217;s make sure that SQLDEV01 is the principal:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nSELECT &#x5B;mirroring_role_desc] FROM sys.database_mirroring WHERE &#x5B;database_id] = DB_ID (N'TicketSalesDB');\r\nGO\r\n<\/pre>\n<p>which returns:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nPRINCIPAL\r\n<\/pre>\n<p>Now force the failover:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER DATABASE &#x5B;TicketSalesDB] SET PARTNER FAILOVER;\r\nGO\r\n<\/pre>\n<p>And query the DMV again to make sure. This time the mirroring_state_desc returned is:<\/p>\n<pre class=\"brush: plain; gutter: false; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nMIRROR\r\n<\/pre>\n<p>Excellent!<\/p>\n<p>Now, I did all of this while my workload was running and it automatically failed over to SQLDEV02, with the database now hosted on the SAN. To do the same move on SQLDEV01, we don&#8217;t need to go through the backup and copy process again &#8211; we can just use the original backups we took in step 1.<\/p>\n<p><strong>Step 8<\/strong><\/p>\n<p>We need to break the mirroring partnership again, this time executing on SQLDEV02, the new principal:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER DATABASE &#x5B;TicketSalesDB] SET PARTNER OFF;\r\nGO\r\n<\/pre>\n<p>On SQLDEV01, we can now drop the database and restore the original backups onto the SAN:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nDROP DATABASE &#x5B;TicketSalesDB];\r\nGO\r\n\r\nRESTORE DATABASE &#x5B;TicketSalesDB] FROM DISK = N'C:\\SQLskills\\TicketSalesDB.bak'\r\nWITH\r\n    MOVE N'TicketSalesDBData' TO N'C:\\SQLDEV01SAN\\TicketSalesDBData.MDF',\r\n    MOVE N'TicketSalesFG2005Q1' TO N'C:\\SQLDEV01SAN\\TicketSalesFG2005Q1.NDF',\r\n    MOVE N'TicketSalesFG2005Q2' TO N'C:\\SQLDEV01SAN\\TicketSalesFG2005Q2.NDF',\r\n    MOVE N'TicketSalesFG2005Q3' TO N'C:\\SQLDEV01SAN\\TicketSalesFG2005Q3.NDF',\r\n    MOVE N'TicketSalesFG2005Q4' TO N'C:\\SQLDEV01SAN\\TicketSalesFG2005Q4.NDF',\r\n    MOVE N'TicketSalesDBLog' TO N'C:\\SQLDEV01SAN\\TicketSalesDBLog.LDF',\r\n    NORECOVERY;\r\nGO\r\n\r\nRESTORE LOG &#x5B;TicketSalesDB] FROM DISK = N'C:\\SQLskills\\TicketSalesDB_Log.bak' WITH NORECOVERY;\r\nGO\r\n<\/pre>\n<p>And setup mirroring again. On SQLDEV01:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER DATABASE &#x5B;TicketSalesDB] SET PARTNER = 'TCP:\/\/SQLDEV02:5092';\r\nGO\r\n<\/pre>\n<p>And on SQLDEV02:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER DATABASE &#x5B;TicketSalesDB] SET PARTNER = 'TCP:\/\/SQLDEV01:5091';\r\nGO\r\n<\/pre>\n<p>And we&#8217;re running again.<\/p>\n<p><strong>Step 9<\/strong><\/p>\n<p>Now all we need to do is fail the workload back to SQLDEV01 by executing this on SQLDEV02:<\/p>\n<pre class=\"brush: sql; title: ; toolbar: true; wrap-lines: true; notranslate\" title=\"\">\r\nALTER DATABASE &#x5B;TicketSalesDB] SET PARTNER FAILOVER;\r\nGO\r\n<\/pre>\n<p><strong>Summary<\/strong><\/p>\n<p>So &#8211; the corrected sequence for moving a database while mirroring is running is the following:<\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li>Take a full backup of the principal database on node A, and the required log backup<\/li>\n<li>Break the mirroring partnership<\/li>\n<li>Drop the current mirror database on node B<\/li>\n<li>Copy the backups to node B and restore it on the SAN on node B\u00a0using WITH\u00a0NORECOVERY, remembering to use WITH MOVE to place the files correctly<\/li>\n<li>Setup the mirroring partnership to point to the newly restored database on the SAN on node B<\/li>\n<li>Start mirroring and the new mirror will catch-up<\/li>\n<li>Failover to the mirror on node B, which becomes the new principal<\/li>\n<li>Follow the same procedure to move the new mirror on node A onto its SAN, but using the original backups from step 1<\/li>\n<li>Failback<\/li>\n<\/ol>\n<p>Hope this helps.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This was a question from the MSDN Disaster Recovery forum I started while I was at Microsoft. I have a 600 gig database that has a mirror. I need to move the databases from local drives to a SAN. Can anyone recommend a document that lists the steps to go through to move both the [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,32,38,78],"tags":[],"class_list":["post-1179","post","type-post","status-publish","format-standard","hentry","category-database-maintenance","category-database-mirroring","category-example-scripts","category-search-engine-q-and-a"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Search Engine Q&amp;A #2: Moving a database while Database Mirroring is running - Paul S. Randal<\/title>\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.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Search Engine Q&amp;A #2: Moving a database while Database Mirroring is running - Paul S. Randal\" \/>\n<meta property=\"og:description\" content=\"This was a question from the MSDN Disaster Recovery forum I started while I was at Microsoft. I have a 600 gig database that has a mirror. I need to move the databases from local drives to a SAN. Can anyone recommend a document that lists the steps to go through to move both the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/\" \/>\n<meta property=\"og:site_name\" content=\"Paul S. Randal\" \/>\n<meta property=\"article:published_time\" content=\"2007-09-28T15:27:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:52:06+00:00\" \/>\n<meta name=\"author\" content=\"Paul Randal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Randal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/\",\"name\":\"Search Engine Q&A #2: Moving a database while Database Mirroring is running - Paul S. Randal\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\"},\"datePublished\":\"2007-09-28T15:27:44+00:00\",\"dateModified\":\"2017-04-13T16:52:06+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Search Engine Q&#038;A #2: Moving a database while Database Mirroring is running\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/\",\"name\":\"Paul S. Randal\",\"description\":\"In Recovery...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce\",\"name\":\"Paul Randal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g\",\"caption\":\"Paul Randal\"},\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/paul\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Search Engine Q&A #2: Moving a database while Database Mirroring is running - Paul S. Randal","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.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/","og_locale":"en_US","og_type":"article","og_title":"Search Engine Q&A #2: Moving a database while Database Mirroring is running - Paul S. Randal","og_description":"This was a question from the MSDN Disaster Recovery forum I started while I was at Microsoft. I have a 600 gig database that has a mirror. I need to move the databases from local drives to a SAN. Can anyone recommend a document that lists the steps to go through to move both the [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/","og_site_name":"Paul S. Randal","article_published_time":"2007-09-28T15:27:44+00:00","article_modified_time":"2017-04-13T16:52:06+00:00","author":"Paul Randal","twitter_misc":{"Written by":"Paul Randal","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/","name":"Search Engine Q&A #2: Moving a database while Database Mirroring is running - Paul S. Randal","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website"},"datePublished":"2007-09-28T15:27:44+00:00","dateModified":"2017-04-13T16:52:06+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/search-engine-qa-2-moving-a-database-while-database-mirroring-is-running\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/paul\/"},{"@type":"ListItem","position":2,"name":"Search Engine Q&#038;A #2: Moving a database while Database Mirroring is running"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/paul\/","name":"Paul S. Randal","description":"In Recovery...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/paul\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/ffcec826c18782e1e0adf173826a7fce","name":"Paul Randal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/paul\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0b6a266bba2f088f2551ef529293001bd73bf026bc1908b9866728c062beeeb6?s=96&d=mm&r=g","caption":"Paul Randal"},"sameAs":["http:\/\/3.209.169.194\/blogs\/paul"],"url":"https:\/\/www.sqlskills.com\/blogs\/paul\/author\/paul\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/1179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/comments?post=1179"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/posts\/1179\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/media?parent=1179"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/categories?post=1179"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/paul\/wp-json\/wp\/v2\/tags?post=1179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}