Dimension à variation lente

bonjour

SCD ou Slowly Changing Dimension est l’un des composants de la boîte à outils SSIS. Ce composant est utilisé si vous souhaitez insérer ou mettre à jour des enregistrements de données dans des tables de dimensions. L’explication la plus simple peut être de comparer les données source entrantes avec les données de table de dimension de destination existantes à l’aide d’une clé professionnelle (clé unique). Si aucun enregistrement ne correspond, il sera considéré comme un nouvel enregistrement ou un enregistrement correspondant, puis il compare les attributs des attributs modifiés si les données semblent actualisées, puis met à jour l’enregistrement ou sinon, il reste inchangé.

Slowly Changing Dimension vérifie les attributs pour trois scénarios New, Changed ou UnChanged records, comme nous venons de le décrire.

Le terme Dimension à variation lente ou Slowly Changing Dimension englobe les trois méthodes suivantes pour gérer les modifications apportées aux colonnes dans une table de dimension d’un entrepôt de données:

Méthode 1 – mettez à jour les colonnes de la ligne de dimension sans conserver l’historique des modifications.
Méthode  2 – conservez l’historique des modifications dans la table de dimension et créez une nouvelle ligne en cas de modification.
Méthode  3 – une combinaison de type 1 et de type 2, conservant généralement plusieurs instances d’une colonne dans la ligne de dimension; Par exemple, une valeur actuelle et une ou plusieurs valeurs précédentes.

L’assistant SCD a quelques fonctions: il est rapide et facile à mettre en œuvre, il gère la plupart des scénarios SCD et son approche multi-composants vous permet de le personnaliser avec les fonctionnalités dont vous avez besoin

Il est maintenant temps de glisser-déposer le composant SCD de la boîte à outils SSIS. Il suffit donc de faire glisser et de déposer SCD et de le joindre au composant de conversion de données, comme illustré ci-dessous.

Sans titre

Maintenant, faites un clic droit et modifiez le SCD et configurez le moment où vous cliquez avec le bouton droit de la souris, un assistant vous demandera de suivre ces étapes

 

 

Sans titre

Faites ensuite pour passer à l’étape suivante. Cliquez maintenant sur Nouveau bouton pour créer un nouveau gestionnaire de connexion. Au moment où vous cliquez sur le nouveau bouton, il affiche le nom de votre serveur SQL Server, comme illustré ci-dessous

Sans titre

Cliquez sur le bouton OK et maintenant, il y a une liste déroulante sur la vue Table, sélectionnez simplement la table Dim.Produit

Au moment où vous sélectionnez la table Dim.Produit ci-dessous, elle affichera les noms de colonne de cette table Dim.Produi dans lesquels vous devez associer ces colonnes à des colonnes de source entrante (colonnes de fichier plat). choisissez le type de clé comme clé métier.

Pour référence s’il vous plaît vérifier l’image ci-dessous.

 

Sans titre

Ici, dans cette étape, vous devez sélectionner un attribut quelconque si vous pensez qu’une colonne particulière sera corrigée (elle ne sera pas mise à jour à tout moment), puis choisissez l’attribut Fixe pour cette colonne OU si des données de colonne changent périodiquement, choisissez L’attribut d’historique, si vous souhaitez conserver l’historique des enregistrements modifiés précédents, sélectionnez uniquement l’attribut d’historique, mais la plupart des cas choisissent l’option Modifier l’attribut (aucun historique n’est conservé).

Avec l’utilisation de Changer d’attribut, nous pouvons mettre à jour toutes les données de colonne à tout moment. Donc, sélectionnez ce passage à l’étape suivante.

 

Sans titre

Sans titre

À l’étape suivante  cliquez simplement sur le bouton suivant.

Sans titre

Au moment où vous cliquez sur le bouton Terminer, l’assistant met automatiquement à jour notre onglet de flux de données avec deux nouveaux composants, à savoir la destination d’insertion OLEDB et la commande OLEDB

Sans titre

OLEDB Insérer la destination: Pour insérer de nouveaux enregistrements.

Commande OLEDB1: pour mettre à jour des enregistrements existants.

Si vous avez configuré ces deux composants automatiquement, vous n’avez pas besoin de le faire. Merci à l’assistant SCD.

Enfin, nous avons tous maintenant fait et on se termine par  exécuter ce projet.Sans titre

Donc, les gars, si vous voyez, nous avons mis à jour les enregistrements et inséré de nouveaux enregistrements avec succès.

 

Sans titre

Comme vous l’avez vu ci-dessus, nous avons exécuté le projet avec succès. J’espère que vous avez compris cet article si vous avez des doutes n’hésitez pas à nous contacter. Je vous remercie…!

cordialement

Activer le chiffrement transparent des données TDE

bonjour

Vous pouvez configurer le chiffrement de données transparent (TDE) lorsque vous créez une base de données pour la première fois ou que vous pouvez l’appliquer à une base de données existante. Dans ce dernier cas, une fois que TDE a été activé, il sera configuré pour chiffrer vos données existantes en arrière-plan.

Dans les deux cas, les étapes sont les mêmes. Nous allons les parcourir rapidement avant d’entrer dans les détails.

Vous devez d’abord avoir une clé principale de base de données (DMK) dans la base de données principale et un certificat qui sera utilisé par TDE

USE MASTER;

CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'MasterkeyTunisie20180819';

Puis vous devrez procéder a crée votre propre certificat

CREATE CERTIFICATE TDE_Cert
WITH SUBJECT = 'Chiffrement base de données ';

Cet certificat est essentiel pour pouvoir accéder aux données chiffrées par TDE, vous devez donc vous assurer de les sauvegarder

Pour sauvegarder votre certificat il faut procéder a faire :

BACKUP CERTIFICATE TDE_Cert
TO FILE = 'C:\TDE_Cert'
WITH PRIVATE KEY
(
    FILE = 'C:\Privatekey_cert',
    ENCRYPTION BY PASSWORD = 'Password_TDE@20180819'
);

Ensuite, dans la base de données chiffrée avec TDE, vous devez créer une clé de chiffrement de la base de données (DEK) et spécifier le certificat

USE Production ;

CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDE_Cert  ;

Enfin, vous Pouvez activez le cryptage sur votre base de donné :

ALTER DATABASE TestTDE SET ENCRYPTION ON;

En mode Graphique
Sans titre.png

Sans titre

vous pouvez voir Si votre bases de données est activées par TDE en consultant la colonne is_encrypted:

SELECT name
FROM sys.databases
WHERE is_encrypted = 1;

ou a travers

SELECT
   d.name,
   k.encryption_state,
   k.encryptor_type,
   k.key_algorithm,
   k.key_length,
   k.percent_complete
FROM sys.dm_database_encryption_keys k
INNER JOIN sys.databases d
   ON k.database_id = d.database_id;

Sans titre

bonne chiffrement

dbatools pour migrer vos instance SQL Server

bonjour

  • Introduction:La communauté dbatool compte aujourd’hui plus de 50 contributeurs avec plus de 300 meilleures pratiques SQL Server, des commandes d’administration et de migration. Un aperçu des commandes peut être trouvé ici:
    https://dbatools.io/functions/
  • Installation: j’aime  la facilité et la simplicité d’installation de dbatools. Tant que vous avez accès à Internet vous pouvez simplement installer le module depuis la Galerie PowerShell en utilisant
Install-Module dbatools
  • Migration:Vous n’avez généralement besoin que d’une seule commande pour migrer tout un serveur SQL vers un autre. Comme décrit dans la documentation d’aide, il s’agit d’un « clic d’un bouton » dbamigration                                                         

 

Cela migre les parties suivantes comme indiqué ci-dessous. Chaque partie peut être ignorée avec un paramètre -no *** comme décrit dans la documentation d’aide – par exemple, utilisez -NoLogins si vous ne souhaitez pas transférer les connexions

 

 Start-DbaMigration -Source ServerA -Destination ServerB -Verbose -BackupRestore -NetworkShare \\Partage

 

Sans titre

Copy-DbaDatabase -Source ServerA -Destination ServerB -verbose
-AllDatabases -Exclude AdventureWorksLT2014 -BackupRestore
-NetworkShare \\partage -Force

Vous pouvez ajouter l’option -Force pour forcer la recréation des bases

Sans titre

Sans titre

Bonne configuration

Expression ssis pour Récupérer le nom de fichier à partir du chemin complet

bonjour

Je partage avec vous une super astuce SSIS qui vous permet rapidement de récupérer le non de fichier a partir du chemin complet

RIGHT( @[User::FullPath] , FINDSTRING(REVERSE( @[User::FullPath] ) , "\\", 1) - 1)

Mettons cette Expression dans une variable Et essayer d’afficher le a travers un composant Task Script

public void Main()
		{
			// TODO: Add your code here
            MessageBox.Show(Dts.Variables["User::File"].Value.ToString());
            MessageBox.Show(Dts.Variables["User::File_name"].Value.ToString());
			Dts.TaskResult = (int)ScriptResults.Success;
		}

Sans titre

Sans titre

Bonne configuration

 

Tester Existence du Fichier a travers SSIS

Bonjour

J’ai créé un package SSIS qui vérifie si un fichier spécifié existe, Si oui il fait leur importation si non  je m’envoie un courrier électronique pour me faire savoir que le fichier est Absent

Dans cette méthode, j’utiliserai la tâche du composant script. Je vais utiliser script C# pour vérifier l’existence du fichier. Pour utiliser cette méthode, faites glisser « Script Task » dans le package. Je déclare une variables de  booléenne nommé dans cette Exemple FileExists

Ensuite, assurez-vous que notre variable FileExists a été déclarée dans le champ « Script Task Editor » pour le champ « ReadOnlyVariables » comme indiqué ci-dessous et que la langue sélectionnée est définie sur Microsoft Visual C#2012

 

Sans titre

Nous sommes maintenant prêts à créer un simple script C# qui remplit la variable FileExists (paramètre TRUE ou FALSE) selon que le fichier que nous souhaitons vérifier leur existence

n’oublier au début du votre script d’ajouter Using System.IO

Sans titre

public void Main()
{
string filelocation = @"c:\source\production.txt";
if (File.Exists(filelocation) == true)
{
Dts.Variables["FileExits"].Value = true;
}
else
{
Dts.Variables["FileExits"].Value = false;
}
Dts.TaskResult = (int)ScriptResults.Success;
}

a Travers une autre méthode

	public void Main()
		{
		if (System.IO.Directory.GetFiles(@"c:\dossier", "*.*").Length > 0)
{
    Dts.Variables["User::result"].Value = true;
}
else
{
    Dts.Variables["User::result"].Value = false;
}
			Dts.TaskResult = (int)ScriptResults.Success;
		}

Tout ce qui est dans  le script ci-dessus est  de vérifier si le fichier existe sur le lecteur c: \source , puis de remplir notre variable de package SSIS FileExists avec une valeur « TRUE » si elle existe et « FALSE » si ce n’est pas le cas. Cela peut ensuite d’être utilisé en contrôlant le flux des conteneurs de package suivants en fonction de la logique appliquée dans la contrainte de priorité qui suit la tâche de script. Ensuite, nous allons appliquer une logique simple dans le champ d’expression des deux contraintes de priorité à la manière de procéder à l’exécution. Dans le premier, définissez l’opération d’évaluation sur Expression et tapez l’expression suivante dans le champ ‘Expression’:

Sans titre

La deuxième contrainte de priorité sera presque identique à l’exception de l’expression réelle. Ici, nous le changeons en @ FileExists == FALSE. Lorsque vous avez terminé, Jusqu’à présent, la partie du paquet que nous venons de développer devrait ressembler à ceci

Sans titre

Pour vérifier si le paquet fonctionne, il suffit de placer votre  fichier CSV dans le répertoire cible (c: \source\c dans notre cas) et l’exécution doit suivre le chemin de la «contrainte de priorité», où elle était définie sur ‘@ FileExists == TRUE’

Sans titre

 

Si nous supprimons le fichier, l’exécution doit aller de paire avec l’autre contrainte de précision

 

 

 

Sans titre

bonne configuration

Supprimer les lignes en double d’une table SQL Server

bonjour,

Plusieurs fois, notre base de données contient des lignes en double qui peuvent être filtrées en utilisant certaines colonnes.  Un développeur devait supprimer ces lignes dupliquées avec une requête TSQL  nous  avons vu ensemble dans l’ancien article comment le faire a travers SSIS a travers le composant Tri Suppression les lignes dupliquées avec SSIS

Ici, je montre un moyen simple de supprimer les lignes en double

j’utilise le table [ProductCategory] du base AdventureWorks 2014

Sans titre

Le CTE commence par le mot « With » suivi d’un nom d’expression et de noms de colonnes. Ensuite, la requête de sélection qui remplit l’expression. Nous pouvons avoir plusieurs ensembles d’expression séparés par une virgule suivie de l’instruction finale. Nous n’entrons pas dans les détails de CTE car cela est hors de portée de cet article. Voyons comment nous pouvons utiliser CTE pour supprimer les lignes en double. Regardez le code ci-dessous:

with cte as
(
select
row_number()over (partition by ParentProductCategoryID,Name order by ParentProductCategoryID ) as classement,
 ParentProductCategoryID,Name
 from [SalesLT].[ProductCategory]
 where ParentProductCategoryID is not null
)delete from cte where classement >1

Autre Méthode

delete from SalesLT.ProductCategory
   where ParentProductCategoryID in
   (select ParentProductCategoryID from SalesLT.ProductCategory  group by ParentProductCategoryID
    having
    count(*) >1

Après l’exécution, ces codes affichent les données de la table, toutes les lignes uniques sont présentes

les deux méthode Fonctionne correctement mais si en fait une petit comparaison en terme performance avec le CTE il est plus performant  il  a le coût le plus bas

En supprimant les données et en examinant à nouveau les plans d’exécution, nous constatons que le plus rapide est la première commande DELETE et que la plus lente est la dernière, comme prévuSans titre.png