Annoyed by TF276000 error?

· by giulio · Read in about 2 min · (344 Words)

Annoyed by this error?

[Full Analysis Database Sync]:
TF276000: The current Analysis Database Sync job has exited without making any changes. Either another Analysis Database Sync job is already in progress, or the Analysis Database Sync job cannot run because an Optimize Databases job is running. The next Analysis Database Sync job will start at its scheduled time.

It shows up in the Cube Status report of the Administrative Report Pack, and you are using them, aren’t you?

Solution 1 - Move the Full Analysis Database Sync to a later time

Connect to one of your Application Tier servers; open the page at http://localhost:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx and select ChangeSetting.

For settingId input DailyFullProcessingTime, for newValue set 03:00:00.0000000, which is local time, as shown in the picture.

ChangeSetting page

Now, click the Invoke button: it will open another page or tab with similar content.

<string xmlns="http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Controller/03">
 The setting DailyFullProcessingTime has been successfully changed to 03:00:00.0000000+02:00.
</string>

Note in this example the +02:00 string, corresponding to CEST (Central European Summer Time), our TFS local time.

Solution 2 - Change the Optimize Databases schedule

This time there is no simple user interface, must usewrite some code as explained in the forum https://social.msdn.microsoft.com/Forums/vstudio/en-US/52bef4ac-80f0-464d-8fcc-9e24ddd7fffb/warehouse-optimize-databases-job-runs-at-wrong-time?forum=tfsadmin.

I converted it to Powershell for easier consumption.

param(
    $tfsUrl = "http://localhost:8080/tfs",
    $newSchedule = (Get-Date -Year 2015 -Month 1 -Day 1 -Hour 3 -Minute 0 -Second 0)
)

function Get-TFSCollection(
    [Parameter(Mandatory=$True)]
    [Uri]  $collectionurl,
    [Parameter(Mandatory=$False)]
    [string[]]  $assemblies = @()
)
{
    if (Test-Path "HKLM:\SOFTWARE\Microsoft\TeamFoundationServer") {
        $highestTFSversion = "{0:N1}" -f (Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\TeamFoundationServer" | Split-Path -Leaf | foreach { $_ -as [double] } | sort -Descending | select -First 1)
        $tfsClientVersion = ", Version=$highestTFSversion.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        [void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client"+$tfsClientVersion)
        $assemblies | foreach {
            [void][System.Reflection.Assembly]::Load($_+$tfsClientVersion)
        }#for
        return [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($collectionurl)
    }#if
}

$server = Get-TFSCollection $tfsUrl
$jobService = $server.GetService([Microsoft.TeamFoundation.Framework.Client.ITeamFoundationJobService])
$jobs = $jobService.QueryJobs()

$exist = $false
foreach ($job in $jobs)
{
    if ($job.Name -eq "Optimize Databases")
    {
        # Only one job is necessary
        if ($exist)
        {
            $jobService.DeleteJob($job)
            continue
        }

        $optimizeDatabasesJob = $job
        $optimizeDatabasesJob.Schedule.Clear()

        $schedule = New-Object -TypeName 'Microsoft.TeamFoundation.Framework.Client.TeamFoundationJobSchedule' -ArgumentList $newSchedule,86400
        $schedule.TimeZone = [TimeZoneInfo]::Local
        $optimizeDatabasesJob.Schedule.Add($schedule)

        $jobService.UpdateJob($optimizeDatabasesJob)
        $exist = $true
    }#if
}#for

The less errors, the better, isn’t it?