Sitecore 9 update 1 XP0 topology ‘sqlcmd’ is not recognized error [SOLVED]

A week ago, I was trying to provision a Sitecore 9 Update 1 XP0 topology and everything was great, until the step



As you can see, it complains about sqlcmd is not recognized as the name of the cmdlet. This is way weird as Sitecore 9 Installation Guide does not mention anything about it.

I was not convinced that it would be sqlcmd, so posted a question on the Sitecore StackExchange – as usual, when get myself stuck after couple tentatives… you should also try whenever you get yourself stuck (don’t be shy :))

While was waiting for the community, started dig in and googled “sql server 2016 sqlcmd download” with a hope to be able to easily install the sqlcmd without need the full SQL Server installed at the web server, right?

I found that two things would be necessary

Once I got both installed, it was just a matter to re-run the XP0 and get my Sitecore 9 Update 1 up & running smoothly!

Of course I posted this as an answer in Sitecore StackExchange, check out here! And as soon the answer was there, a Sitecore employee – Kieran Marron – commented saying that

“Unfortunately this was missed off the docs for update 1. We’re aiming to have this corrected soon.”

Thanks for your reply Kieran, really appreciate it! So, stay tuned to see a fix for that anytime soon.

I hope you liked it, and thanks for reading!

And I’ll see you on my next post!



Sitecore 9 – Reporting not working after install [SOLVED]

Couple days ago, I was installing a new Sitecore 9 XP1 topology and during my post-installations tests I received the following error while accessing the Reporting piece


C’mon! You got to be kidding me… and I was telling Sitecore 9


Well, didn’t solve my problem… SOOOOOOOOOOO, let’s dig in!

Let’s re-run the Reporting piece in Powershell

  • First of all import SitecoreFundamentals SitecoreInstallFramework
  • Then execute Install-SitecoreConfiguration and point to sitecore-XP1-rep.json full path

I was prompted to provide the Package and LicenseFile location but NO SqlDbPrefix as you probably noticed from other packages like Content DeliveryContent Management, and so forth. 


Let’s check the ConnectionStrings.config post-installation

  • Navigate to Reporting installation path, usually C:\inetpub\wwwroot\ and the name you provided for the instance
  • Go to App_Config and find ConnectionStrings.config

Well, looks like something is wrong! Did you noticed that Initial Catalog= contains only an underscore + Database (e.g. _Core, _Master, etc)


An easy workaround would be rename the Initial Catalog= with the correct name of those databases and solve the case BUT not so fast buddy, let’s find the reason for this typo!

Let’s check the JSON file

  • Navigate to Sitecore configuration files path, in my case is C:\SitecoreInstaller\XP1\Configuration
  • Find sitecore-XP1-rep.json and open in Notepad
  • Look for SqlDbPrefix

WOW! There’s a DefaultValue set to “” which means you won’t be asked to provide a SqlDbPrefix


and the concatenation throws a blank value, resulting in the underscore + database (e.g. _Core, _Master)


So, the quickest way to fix that is to remove “DefaultValue”: “” and the comma after the Description value.


EASY PEASY, isn’t it? From now on, you will be prompted to provide SqlDbPrefix when provisioning the Reporting piece!

I hope you liked it, and thanks for reading!

And I’ll see you on my next post!

Is there an order to install the Sitecore 9 XP1 Topology?

A powershell script to “simplify your installation” is provided by the Sitecore 9 Installation Guide, however, you can use a different way where you have to execute every JSON file individually and following a particular order, which is my preferred for now until I better understand the whole process.

After analyzing the JSON files, and post a question on the Sitecore StackExchange, and getting myself with tons of errors during the installations, I decided to create a relation table where would be easier to determine the requirements of every JSON file, then establish a proper order.


Assuming you already have SQL Server and SOLR in-place, and based in the reference table above, I’ve determined the following order to install XP1 topology without getting stop due missing prerequisites.

  1. At the SOLR server, modify and run XConnect-Solr.json and Sitecore-Solr.json
  2. Create XConnect certificate – I’d recommend to download the XP0 topology and use XConnect-CreateCert.json for that, check the reason here in Sitecore StackExchange
  3. XConnect-xp1-collection.json
  4. XConnect-xp1-collectionsearch.json
  5. XConnect-xp1-referencedata.json
  6. XConnect-xp1-marketingautomation.json
  7. XConnect-xp1-marketingautomationreporting.json
  8. sitecore-xp1-rep.json
  9. sitecore-xp1-prc.json
  10. sitecore-xp1-cm.json
  11. sitecore-xp1-cd.json

I hope this helps you as it helps me!

Also, I’d recommend the following articles to get you asap working with Sitecore 9

And last but not least, I special thanks my friend João Neto, who just become Sitecore MVP 2018, and the one that provided initial directions in Sitecore StackExchange.

Thanks for reading!

And I’ll see you on my next post.



Sitecore announces 2018 MVPs

Exactly one year ago, for the very first time, I was receiving the honor to be part of the Sitecore MVP group. Back then, I shared with you about my start, goals and how happy I was in be awarded!

Last November, once again, I submitted for this year’s technical Sitecore MVP awards, and I felt more anxious than last year

Haven’t seen in my entirely life a January soooooooooooooooooo long as this year, and I was like



Just yesterday, in the non-ending month of January, Sitecore named its 2018 Most Valuable Professionals and I was THERE for the 2nd time!

Well, don’t need to say that all anxious became something like this….

giphy (1).gif

I am proud and glad to be part (again) of the Sitecore Most Valuable Professionals in 2018!

The first big thanks goes to my wife, Raquel, for all support and understanding during the journey! I LOVE YOU RAQUEL!

For the second round of thanks, I’d like to thank Sitecore, Sitecore Community and Sitecore MVPs!

And last but not least, a HUGE thanks to all readers!

As usual, thanks for reading, and I’ll see you on my next post!


Sitecore Content Delivery – Error after upgrade EXM 3.5 [SOLVED]

Couple weeks ago I was working on a Sitecore upgrade from 8.2 update 2 to 8.2 update 5 in order to also get EXM updated from 3.4 to 3.5 due Azure requirements.

My scenario had a Content Delivery and a Content Management which was properly upgraded to Sitecore 8.2 update 5 & to EXM 3.5 by following their upgrade guides.

I managed to get Sitecore 8.2 update 5 and EXM 3.5 in both nodes, however, Content Delivery keeps showing the following error after received the EXM 3.5 files.


The requested failed with the error message:

<html><head><title>Object moved</title></head><body>

<h2>Object moved to <a href=”/404?item=%2femailcampaign%2fecmclientservice&user=extranet%5cAnonymous&site=modules_website”>here</a>.</h2>


CRAP! What am I going to do?

Well, let’s double check the EXM Upgrade Instructions…


AHA! Found something interesting…

“During the installation, all the .aspx pages, .asmx web services, and the .ashx handlers have been moved to the \Sitecore\modules\Web\EXM folder of the instance.”

The EXM Upgrade Instructions suggested applying a URL Rewrite rule in IIS

<rule name="ExmSitecoreFolderRule">
<match url="^(.*)ConfirmSubscription.aspx|DedicatedDispatchService.asmx|ECMClientService.asmx|RedirectUrlPage.aspx|RegisterEmailOpened.ashx|Unsubscribe.aspx|UnsubscribeFromAll.aspx)"/>
<action type="Rewrite" url="sitecore modules/Web/EXM/{R:2}" />

BUT didn’t work here 😦

I started compare files before vs after the upgrade, and find myself with the ConnectionStrings.config which uses ecmclientservice.asmx webservice from the Content Management node

<add name="EmailCampaignClientService" connectionString="url=http://sitecore-cm/sitecore%20modules/web/emailcampaign/ecmclientservice.asmx;timeout=60000" />

Well, as the upgrade instructions said that the path has changed, let’s see what happens

<add name="EmailCampaignClientService" connectionString="url=http://sitecore-cm/sitecore%20modules/web/exm/ecmclientservice.asmx;timeout=60000" />

ConnectionStrings.config saved, re-load Sitecore Content Delivery node…




I hope you liked it, and thanks for reading!

And I’ll see you on my next post!

Sitecore 9 – From requirements perspective, what has changed?

Last year I have written a similar blog post about being at Sitecore 8.2 and I thought that everyone was excited, well, I was WRONG! I didn’t know nothing until couple weeks ago once Sitecore 9 has been announced!


A lot of changes on Sitecore 9 and I am sure you will notice those as soon as you start the installation but let’s check what has changed from requirements perspective!

.NET Framework

Sitecore XP 9.0 now requires .NET Framework 4.6.2 or later, which means that our supported Operating Systems also changed

Operating System

  • Server
    • Windows Server 2016
    • Windows Server 2012 R2
  • Workstation
    • Windows 10 (32 & 64-bit)
    • Windows 8.1 (32 & 64-bit)

Please note that accordingly to Sitecore Installation guide 9.0 the following Operating System are not compatible anymore

  • Windows 2012 (64-bit)
  • Windows 2008 R2 SP2
  • Windows 8 (32 & 64-bit)

You may get yourself asking “I was able to install Sitecore 9 on my Windows 2012. Is there a reason why should I avoid to have it?”

That’s a good thing to her, Sitecore 9 running in a non-supported environment… YAY!

However, you should be aware that you might be on your own if anything goes wrong. In other words, quoting Mark Cassidy (again!)

It comes down to support [read more…]


  • Microsoft SQL Server 2016 SP1
    • It is the required and ONLY supported version for the Experience Database (xDB)
  • Microsoft SQL Server  2014 SP2
    • Does not support the Experience Database (xDB)

“Sitecore XP 9.0 rev. 171002 does not currently support MongoDB or Oracle database for the Experience Database (xDB). Support will be added in future versions of Sitecore.”


  • Solr 6.6.1
    • Solr now is the default search provider
  • Azure Search
    • Now supported but for Azure Cloud PaaS deployments only
  • Lucene
    • Lucene only supports Content Search and does not support xConnect

And there’s more….


Sitecore Installation Framework (aka SIF), xConnect, SSL everywhere and lot of new things but these are topics for a later conversation, until then here are good articles to get yourself familiar with Sitecore9

Thanks for reading, and I hope you enjoyed it!

And I’ll see you on my next post!


Sitecore – Heartbeat.aspx throws Error 500 (SOLVED)

A few weeks ago I was working in an installation using Sitecore 8.2 update 2 in a Virtual Machine at Azure.

As per you can see in the diagram below, I have 2 Content Delivery behind a Load Balancer to split the traffic.scenario

After setting up the Azure Load Balancer, I noticed that the traffic never went through and the Virtual Machines weren’t responding on HTTP, so I have decided to test it locally.

Connect locally, and make sure Sitecore is alive

I connected in both CD1 & CD2, and as expected Sitecore loaded up just fine!

Weird! I might be missed something at Azure Load Balancer level.

Connect to Azure Portal and check Load Balancer configuration

I checked configuration by configuration until reached out Health Probe which is used to verify if the website is available or not


So, my HealthProbe is looking for /sitecore/service/heartbeat.aspx, and for some reason cannot use it which is causing the failures to access the website from outside passing by the Azure Load Balancer.

Connect locally, and make sure Heartbeat.aspx works

I connected one more time on both CD1 to access the Heartbeat address http://localhost/sitecore/service/heartbeat.aspx and it was failing with the following error message


The same error was occurring on CD2, so let’s dig in!

Check Sitecore logs for detailed information

In Sitecore logs, I have found the following entry


At least tells me something, and looks like Heartbeat didn’t like the way one of my databases in ConnectionStrings.config is set but which one?

I have googled the error and found a post from my colleague and Sitecore MVP Glen McInnis named Azure Traffic Manager and Sitecore Herartbeat where he shows an example to exclude LocalSQLServer and Webforms Remote using Sitecore.Services.Heartbeat.ExcludeConnection inside of Sitecore.config

However, at this point, it wasn’t clear which database was the issue – if any! – and I had to do it by trial and error. And as expected the last show did the trick!

Reporting.apikey was the root cause of it, and accordingly to Sitecore Database Connection Strings for Configuring Servers it is optional for Content Delivery and Content Management Servers!

Well, if that’s the case, then I have two options:

1.Comment out directly on ConnectionStrings.config

<!– <add name=”reporting.apikey” connectionString=”” /> –>


2. Add a proper exclusion using Sitecore.Services.Heartbeat.ExcludeConnection inside of Sitecore.config

<setting name=”Sitecore.Services.Heartbeat.ExcludeConnection” value=”LocalSqlServer|reporting.apikey” />

Recommended read

  1. Sitecore Heartbeat
  2. Azure Traffic Manager and Sitecore Heartbeat
  3. Creating an Internet-facing load balancer using the Azure portal

I hope you liked it, and thanks for reading!

And I’ll see you on my next post!