Jun 21 2022 03:55 PM
After applying a cumulative update our SharePoint 2016 search crawls are not running automatically. When looking at the crawl configuration in CA it shows our crawl schedule is intact and incremental and full crawls are scheduled but no crawls are being run. We can manually start these crawls and they will run as expected, but will not run again after as scheduled.
We have tried the following:
We did look into resetting the timer jobs in CA but we were unable to find any trace of search timer jobs existing in the job definitions.
I have found other mentions of similar cases but the solutions that we did try didn't seem to help.
Has anyone run into this and how did you fix it?
Jun 22 2022 06:07 AM
Jun 22 2022 08:32 AM
@Andres Gorzelany KB5002118 and KB5002183 Security Updates from Microsoft SharePoint Enterprise Server 2016
Jun 27 2022 10:39 AM
Jun 27 2022 11:19 AM
@Andres Gorzelany Ultimately, we had to fully recreate our SSA instance. Nothing we tried was able to bring back some of the missing services that, presumably when the update happened, got out of sync between our servers or had disappeared entirely.
We did attempt a synchronization using the following which seem to work for others:
$svc = Get-SPEnterpriseSearchServiceInstance
$svc.Synchronize()
However, this revealed what I assume was a misconfiguration between our servers and led to the complete shutdown of our SSA. It looked as if our other server had, at some point, had been configured to run the search service so HealthMonitor would shutdown any attempt of search to function on the desired server.
I think the biggest issue outside of the misconfiguration was that our Indexing Schedule Manager job was completely gone, without this, no crawl would be scheduled on our desired search server. We could not find a way to bring this back during our troubleshooting with Microsoft.
We ended up using the following script to create a new search instance:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
# Specify the Settings for the Search Service Application
$ServerName = (Get-ChildItem env:computername).value
$IndexLocation = "E:\Search Index"
$SearchServiceApplicationName = "Search Service Application 2016"
$SearchServiceApplicationProxyName = "Search Service Application 2016 Proxy"
$SearchDatabaseServer = "Name of Database server"
$SearchServiceApplicationDatabase = "SP2016_Search_Service"
$SearchAppPoolName = "Search Service Application pool"
$SearchAppPoolAccount = Get-SPManagedAccount ""
#Check if Managed account is registered already
Write-Host -ForegroundColor Yellow "Checking if the Managed Accounts already exists"
$SearchAppPoolAccount = Get-SPManagedAccount -Identity $SearchAppPoolAccount -ErrorAction SilentlyContinue
If ($SearchAppPoolAccount -eq $null)
{
Write-Host "Please Enter the password for the Service Account..."
$AppPoolCredentials = Get-Credential $SearchAppPoolAccount
$SearchAppPoolAccount = New-SPManagedAccount -Credential $AppPoolCredentials
}
#*** Step 1: Create Application Pool for Search Service Application ****
#Get the existing Application Pool
$SearchServiceAppPool = Get-SPServiceApplicationPool -Identity $SearchAppPoolName -ErrorAction SilentlyContinue
#If Application pool Doesn't exists, Create it
if (!$SearchServiceAppPool)
{
$SearchServiceAppPool = New-SPServiceApplicationPool -Name $SearchAppPoolName -Account $SearchAppPoolAccount
write-host "Created New Application Pool" -ForegroundColor Green
}
#*** Step 2: Start Search Service Instances ***
Start-SPEnterpriseSearchServiceInstance $ServerName -ErrorAction SilentlyContinue
Start-SPEnterpriseSearchQueryAndSiteSettingsServiceInstance $ServerName -ErrorAction SilentlyContinue
#*** Step 3: Create Search Service Application ****
# Get the Search Service Application
$SearchServiceApplication = Get-SPEnterpriseSearchServiceApplication -Identity $SearchServiceApplicationName -ErrorAction SilentlyContinue
# Create the Search Service Application, If it doesn't exists!
if(!$SearchServiceApplication)
{
$SearchServiceApplication = New-SPEnterpriseSearchServiceApplication -Name $SearchServiceApplicationName -ApplicationPool $SearchServiceAppPool -DatabaseServer $SearchDatabaseServer -DatabaseName $SearchServiceApplicationDatabase
write-host "Created New Search Service Application" -ForegroundColor Green
}
#*** Step 4: Create Search Service Application Proxy ****
#Get the Search Service Application Proxy
$SearchServiceAppProxy = Get-SPEnterpriseSearchServiceApplicationProxy -Identity $SearchServiceApplicationProxyName -ErrorAction SilentlyContinue
# Create the Proxy, If it doesn't exists!
if(!$SearchServiceAppProxy)
{
$SearchServiceAppProxy = New-SPEnterpriseSearchServiceApplicationProxy -Name $SearchServiceApplicationProxyName -SearchApplication $SearchServiceApplication
write-host "Created New Search Service Application Proxy" -ForegroundColor Green
}
#*** Step 5: Create New Search Topology
$SearchServiceInstance = Get-SPEnterpriseSearchServiceInstance -Local
#To Get Search Service Instance on Other Servers: use - $SearchServiceAppSrv1 = Get-SPEnterpriseSearchServiceInstance -Identity "S-SP-02"
# Create New Search Topology
$SearchTopology = New-SPEnterpriseSearchTopology -SearchApplication $SearchServiceApplication
#*** Step 6: Create Components of Search
New-SPEnterpriseSearchContentProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
New-SPEnterpriseSearchAnalyticsProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
New-SPEnterpriseSearchCrawlComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
New-SPEnterpriseSearchAdminComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
#Prepare Index Location
Remove-Item -Recurse -Force -LiteralPath $IndexLocation -ErrorAction SilentlyContinue
MKDIR -Path $IndexLocation -Force
#Create Index and Query Components
New-SPEnterpriseSearchIndexComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance -RootDirectory $IndexLocation
New-SPEnterpriseSearchQueryProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
#*** Step 7: Activate the Toplogy for Search Service ***
$SearchTopology.Activate() # Or Use: Set-SPEnterpriseSearchTopology -Identity $SearchTopology
Jun 27 2022 11:50 AM