Faire le point sur les versions de ses collections et l’uniformité de sa configuration TFS/Devops

Avant ou après une migration, ou tout simplement dans le cadre de sa maintenance, il peut être intéressant de faire un petit état des versions de ses bases de données TFS.

Pour faire cela, TFS stocke une variable TFS_SERVICE_LEVEL pour chaque collection. Celle-ci se trouve dans les propriétés étendues des bases de données utilisées.

Quand on a beaucoup de collections, ce genre de requête n’est pas franchement trivial.

Pour me faciliter la tâche, j’utilise le script suivant. Celui-ci retourne le numéro de version de toutes les bases TFS, ainsi que quelques informations de base pour vérifier l’uniformité de la configuration (owner, collation, mode de récupération, niveau de compatibilité SQL Server).

Ce genre de requête est indispensable pour faire le point quand vous reprenez l’administration d’un TFS que vous n’avez pas installé, ou qui a déjà bien vécu ;)

Voici le code du script SQL en question :



-- Suppression de la table temporaire si elle existe déjà
-- if object_id(N'tempdb..#TempReport') is not null drop table #TempReport;
-- Création de la table temporaire
declare @table table (
    DataBaseName sysname,
    OwnerName nvarchar(128),
    Collation sysname,
    CompatibilityLevel tinyint,
    RecoveryModel nvarchar(60),
    VersionTfs sql_variant)

-- Déclarations
declare 
@DataBase sysname, 
@Owner nvarchar(128), 
@Collation sysname,
@CompatibilityLevel tinyint,
@RecoveryModel nvarchar(60),
@sql nvarchar(max),
@value sql_variant

-- Crusor pour aller chercher les bases de données
declare databases_cursor cursor for
select db.name as [DataBase],SUSER_SNAME(db.owner_sid) as [Owner], db.collation_name as [Collation], db.compatibility_level as [CompatibilityLevel],db.recovery_model_desc as [RecoveryModel]
from sys.databases as [db] 
order by [DataBase];

open databases_cursor

-- Passer à la base suivante
fetch next from databases_cursor into @DataBase, @Owner, @Collation, @CompatibilityLevel, @RecoveryModel

while @@FETCH_STATUS=0
begin
    set @sql = N'select @v=ext.value from ['+ @DataBase + '].sys.extended_properties as ext where ext.name=''TFS_SERVICE_LEVEL'''
    
    execute sp_executeSQL @sql, N'@v sql_variant output', @value output;

    insert into @table select @DataBase, @Owner, @Collation , @CompatibilityLevel, @RecoveryModel, isnull(@value,'')

    -- Passer à la base suivante
    fetch next from databases_cursor into @DataBase, @Owner, @Collation,@CompatibilityLevel,@RecoveryModel
end

close databases_cursor
deallocate databases_cursor

-- Restitution des données
SELECT * FROM @table
Jérémy Jeanson

Comments

You have to be logged in to comment this post.