Wie kann ich den Zielservertyp für eine Ablaufverfolgungsvorlage ändern?


7

Ich habe eine .tdf SQL Server Profiler-Ablaufverfolgungsvorlage, die jemand ausführen soll, aber die Vorlage zielt auf SS 2008 R2 ab. Während mein SSMS 2008 R2 ist, ist der Server, den ich verfolgen muss, SS 2005. Beim Versuch, den Server zu verfolgen, ist der Servertyp gesperrt (vom tatsächlichen Server generiert), sodass ich nicht einfach die Vorlage auswählen kann, die ich benötige, während sie als markiert ist andere SS-Version ..

Fenster Eigenschaften der Trace-Vorlage

Wie kann ich ändern, auf welchen Servertyp die Handelsvorlage abzielt? Ich habe es versucht, File > Templates > Edit Templates...aber es scheint keine Option zu geben, dies zu ändern. Ist es möglich, die Version des Zielservers zu ändern, oder muss der gesamte Trace erneut von Grund auf neu erstellt werden?

Antworten:


6

Wenn Sie Profiler öffnen, gehen Sie zu Datei> Vorlagen> Importieren und wählen Sie Ihre .tdf-Datei aus.

Sie haben eine neue User-Trace-Vorlage mit dem Namen [Dateiname] (ohne die .tdf). Gehen Sie zu Datei> Vorlagen> Bearbeiten und wählen Sie die importierte Ablaufverfolgungsvorlage aus. Sie sollten dann in der Lage sein, den Servertyp durch Ziehen der Dropdown-Liste zu bearbeiten:

Geben Sie hier die Bildbeschreibung ein

Dann können Sie die Vorlage speichern. Dies sollte der Servertyp sein, wenn Sie eine neue Ablaufverfolgung mit dieser Vorlage starten.


Okay, das funktioniert. Es ist wichtig zu beachten, dass bei Auswahl des anderen Servertyps der Vorlagenname verschwindet (die Vorlagen werden neu gefiltert, um die Vorlagen des ausgewählten Servertyps anzuzeigen). Wenn Sie sie jedoch speichern, wird die ausgewählte Vorlage bearbeitet. Desorientiert, aber jetzt weiß ich es.
Ben Brocka

@ Ben Ja, es ist komisch. Profiler ist auf dem Hackklotz - nehmen Sie jetzt Extended Events an.
Aaron Bertrand

Ich musste die von @ mcw0933 unten empfohlene Technik anwenden.
Jeff

Das scheint nicht mehr zu funktionieren; Wenn ich zwischen Servertypen wechsle, wird automatisch die "Standard" -Vorlage für diesen Typ ausgewählt.
KutuluMike

6

Ich verwende Profiler 2012 und spreche mit den Datenbanken 2008, 2008 R2 und 2012. Ich musste einen etwas anderen Workflow verwenden als in der akzeptierten Antwort .

Wenn ich versuche, diesem Workflow zu folgen, um eine Vorlage von 2008 auf 2012 zu migrieren, wird die Dropdown-Liste Vorlagenname auswählen ausgeblendet. Wenn Sie auf Speichern oder Speichern unter klicken, werde ich aufgefordert, eine Vorlage zum Speichern auszuwählen.

Geben Sie hier die Bildbeschreibung ein

Kopieren Sie stattdessen Ihre Vorlage aus dem Ordner 2012 Profiler, 2008 Vorlagen (sollte sein %APPDATA%\Microsoft\SQL Profiler\11.0\Templates\Microsoft SQL Server\100) in den Ordner 2012 Profiler, 2012 Vorlagen (sollte sein %APPDATA%\Microsoft\SQL Profiler\11.0\Templates\Microsoft SQL Server\110).

Gehen Sie nun zu File > New Trace...und wählen Sie die kopierte Vorlage aus, um eine Ablaufverfolgung auf einem 2012-Server durchzuführen. Stellen Sie sicher, dass der Trace ausgeführt wird, und erfassen Sie, was Sie möchten.

An diesem Punkt sind Sie ziemlich gut - Sie können die kopierte Vorlage verwenden, um Traces zu starten. Wenn Sie jedoch Änderungen daran vornehmen möchten, erhalten Sie bei File > Templates > Edit Template...Auswahl von Ereignisauswahl eine Eingabeaufforderung, die angibt, dass der Trace das falsche Format hat:

Geben Sie hier die Bildbeschreibung ein

So speichern Sie es im neuen Format: Starten Sie die Ablaufverfolgung File > New Trace...wie oben beschrieben, und wählen Sie dann mit der ausgeführten Ablaufverfolgung do File > Save As > Trace Template...einen neuen Namen aus. Sie können jetzt die ursprünglich kopierte Vorlage löschen und die neu gespeicherte Vorlage an ihrer Stelle verwenden.


2
Diese Technik hat bei mir funktioniert, die akzeptierte Antwort jedoch nicht.
Jeff

2

Eigentlich müssen nur zwei Bytes in der tdf-Datei geändert werden. Dazu habe ich ein kleines PowerShell-Skript erstellt. mssql.profiler.template.sql_ver.chg.ps1 (GitHub)

<# 
.SYNOPSIS
    Changing sql server target version in *.tdf (profiler trace template) file.
.DESCRIPTION
    Changing sql server target version in *.tdf (trace template) file.
    To create *.tdf go to <SQL Server Profiler>\"File"\"Templates"\"Export Template...". To load *.tdf into templates list go to <SQL Server Profiler>\"File"\"Templates"\"Import Template..."
.PARAMETER iPath
    Source *.tdf file.
.PARAMETER iPathNew
    Destination *.tdf file. If ommitted then file $iPath will be rewrited. If file $iPathNew exists it will be overwrited.
.PARAMETER iVerNew
    Required target MS SQL Version for trace template in format 'X.X' or 'X'.
    Eg: 10.5 for MS SQL Server 2008 R2, 11 for MS SQL Server 2012. You can google it with query "ms sql versions".
.INPUTS
    <none>
.OUTPUTS
    <none>
.EXAMPLE
    mssql.profiler.template.sql_ver.chg.ps1 try_105.tdf try_13.tdf 13
    Will create file try_13.tdf with target sql server 2016 (version 13.0).
.LINK
    https://github.com/TEH30P/MSSQL.Profiler
#>

param
(   [parameter(Mandatory=1, position=0)][String]$iPath
,   [parameter(Mandatory=0, position=1)][String]$iPathNew
,   [parameter(Mandatory=0, position=2)][String]$iVerNew
)

try {

if ([IO.Path]::GetExtension($iPath) -ne '.tdf')
{   [String]$Answ = Read-Host -Prompt 'It is not a *.tdf file. Are you sure? {Y|[N]}';

    if (!$Answ.Length -or $Answ -eq 'N')
    {   throw 'Canceled'}
}

[String]$PathAbs = (Convert-Path $iPath);
[Byte[]]$aBuff = [IO.File]::ReadAllBytes($PathAbs);

if ($aBuff.Count -le 391)
{   throw 'File is to small. Possible corrupted.'}

if ([String]::IsNullOrEmpty($iVerNew))
{   $iVerNew = Read-Host -Prompt "Current version is $($aBuff[390]).$($aBuff[391]). Enter new version:";

    if (!$iVerNew.Length)
    {   throw 'Canceled'}
}

[Version]$Ver = New-Object Version;
[UInt32]$VerMajor = 0;
[UInt32]$VerMinor = 0;

if (![UInt32]::TryParse($iVerNew, [ref]$VerMajor))
{   [Version]$iVerNew | % {$VerMajor = $_.Major; $VerMinor = "$($_.Minor)0".Substring(0,2)}}

$aBuff[390] = $VerMajor;
$aBuff[391] = $VerMinor;

if (![String]::IsNullOrEmpty($iPathNew))
{   [String]$PathAbs = (Convert-Path $iPathNew)}

[IO.File]::WriteAllBytes($PathAbs, $aBuff);

} catch 
{   throw}

1
Vielen Dank, dies war hilfreich, da neuere Versionen von Profiler weniger tolerant gegenüber nicht übereinstimmenden Vorlagenversionen zu sein scheinen. Anstatt Ihr Skript zu verwenden, habe ich eine 2016-Vorlage aus dem 130Ordner in den 140Ordner kopiert und sie dann in einem Hex-Editor geöffnet und das Byte am Offset 390 von 0x0D(13 - v2016) in 0x0E(14 - v2017) geändert. Ziemlich einfach.
Nick

Die Hex-Bearbeitung hat auch bei mir funktioniert und den Byte-Offset 390 (0x186) von 0x0B auf 0x0E geändert. Das tun zu müssen ist so dumm, aber danke für die Abkürzung.
Nick Westgate
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.