Afficher les données du table au format XML

bonjour a tous

L’instruction SELECT dispose de l’option FOR XML qui permet de mettre au format XML les données issues de la requête.

for xml raw

/****** Script de la commande SelectTopNRows à partir de SSMS ******/
SELECT *
FROM [Track_appli_portail].[dbo].[AchatHPR_InfGen]
for xml raw

xml for xml path

 

cordialement

 

Surveillance l’activité disque SQL Server

bonjour

Si tu cherche à récupérer la consommation de vos serveurs SQL  en I/O Disque sur une journée de prod ?

voici deux petit requête qui répond bien a votre besoin

La Première voir quels sont les fichiers de base de données qui sont les plus de goulot d’étranglement IO

 

SELECT DB_NAME(fs.database_id) AS [Database Name] ,
mf.physical_name ,
io_stall_read_ms ,
num_of_reads ,
CAST(io_stall_read_ms / ( 1.0 + num_of_reads ) AS NUMERIC(10, 1)) AS [avg_read_stall_ms] ,
io_stall_write_ms ,
num_of_writes ,
CAST(io_stall_write_ms / ( 1.0 + num_of_writes ) AS NUMERIC(10, 1)) AS [avg_write_stall_ms] ,
io_stall_read_ms + io_stall_write_ms AS [io_stalls] ,
num_of_reads + num_of_writes AS [total_io] ,
CAST(( io_stall_read_ms + io_stall_write_ms ) / ( 1.0 + num_of_reads
+ num_of_writes ) AS NUMERIC(10,
1)) AS [avg_io_stall_ms]
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
INNER JOIN sys.master_files AS mf WITH ( NOLOCK ) ON fs.database_id = mf.database_id
AND fs.[file_id] = mf.[file_id]
ORDER BY avg_io_stall_ms DESC
OPTION ( RECOMPILE );

 

La requête suivante retourne l’activité disque enregistrée par SQL Server depuis le démarrage de l’instance, par fichier de base de données.

SELECT
DB_NAME(mf.database_id) as db,
mf.name,
LEFT(mf.physical_name, 2) as disque,
fs.num_of_reads, fs.num_of_bytes_read,
fs.num_of_writes, fs.num_of_bytes_written,
fs.io_stall, fs.io_stall_read_ms, fs.io_stall_write_ms
FROM sys.dm_io_virtual_file_stats(null,null) AS fs
INNER JOIN sys.master_files AS mf
ON fs.database_id = mf.database_id
AND fs.[file_id] = mf.[file_id]

pour info toutes les stats systèmes sont collectées depuis la dernière redémarrage.

cordialement

Tracer les Opérations DROP Alter Create

bonjour

parmi les taches Quatidienne d’un DBA C’est de tracer  Tout les opérations qui peuvent impacter la perfermance de son instance ou n’importe quel opération du modification de schéma (create ,drop,alter)

Un nouvel outil, en complément des Audits  c’est les ÉvénementsÉtendus qui aussi peuvent remplacer le Tracer Profiler

je vais vous donner un exemple de session pour tracer les deux opérations create ,Drop Table                                                                                                                 on va pensser a récupérer le  nom de login utilisé , ainssi le nom du  machine depuis laquelle la tentative a été faite, le nom de la base de données à laquelle l’utilisateur a tenté de se connecter                                         Les événements étendus fournissent deux interfaces utilisateur graphiques (Assistant Nouvelle session et Nouvelle session) permettant de créer, modifier, afficher et analyser vos données de session

event1

Event2

Event3

Event4

Event8

event9

 

 

Ci joint le trace en T sql

CREATE EVENT SESSION [Event_SQL] ON SERVER
ADD EVENT sqlserver.object_altered(
ACTION(sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.username)),
ADD EVENT sqlserver.object_created(
ACTION(sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.username)),
ADD EVENT sqlserver.object_deleted(
ACTION(sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.username))
ADD TARGET package0.event_file(SET filename=N’C:\Event.xel’)
WITH (STARTUP_STATE=OFF)
GO

Coloration des lignes alternativement SSRS

Bonjour

nous allons voir comment  colorer une ligne sur 2 dans un rapport ssrs    Dans la propriété background de la cellule, tu choisis Expression et tu lui met une condition =IIF(RowNumber(Nothing) Mod 2=0, « LemonChiffon », »White »)

pour plus de détaille consulter le site de Micorsoft

https://msdn.microsoft.com/fr-fr/library/dd255249(v=sql.120).aspx

 

 

Erreur sur tâche de flux de données [Destination OLE DB] : Impossible de convertir la colonne  » xxx  » en raison de type de données de chaîne unicode et non_Unicode

Bonjour

Ce message peut apparaître en raison de l’un des problèmes suivants :

  • Vous utilisez la source Excel et vous n’avez pas configuré de transformation de conversion de données pour convertir les colonnes de chaîne des données Unicode qui ont été chargées à partir de la source Excel.
  • Vous utilisez la destination Excel et vous n’avez pas configuré de transformation de conversion de données pour convertir au format Unicode les données qui sont enregistrées dans la destination Excel

Sans titre

 

  •  Solution                                                                                                                                   Tu doit ajouter une Tache de convention entre la source et ta destination   –> Ajoutez des transformations de conversion de données pour convertir les chaînes des colonnes de chaîne du format non Unicode (DT_STR) au format Unicode (DT_WSTR) et vice versa
  • Sans titreSans titre2Sans titre33Remarque Lorsque vous utilisez l’Assistant Importation et Exportation SQL Server pour créer un package, l’Assistant crée et configure toutes les transformations de conversion de données dont vous avez besoin      

Ci joint la coressponance entre les type SQL server avec leur coreespont SSIS

 nvarchar————DT_WSTR                     varchar————-WSTR                            Text—————-DT_text

Cordialement

 

 

 

 

Comment tracer un déclencheur en utilisant SQL Profiler?

bonjour

Qestion

j’ai réalisé un trigger mais j’aimerais savoir comment tracer son exécution ?

Pour tracer l’exécution du trigger en utilisant SQL profiler  il faut activer La fonction SP:StmtStarting – SP:StmtCompleted ?

Sans titre

Bonne lecture

Script pour trouver la taille de tous Vos Indexes dans une base de données

bonjour a tous

Si vois été intéresser de s’avoir l’espace occupé par vos index alors c’est ce script qui vous permet de   trouver la taille de tous vos index dans une base de donnée avec la table et le groupe de fichiers sur lequel réside l’index J’utilise la base de données AdventureWorks2012 à titre d’exemple. S’il vous plaît remplacer le nom DB pour lequel vous voulez trouver l’information

 
USE AdventureWorks2012
go
IF OBJECT_ID('tempdb..#Indexdata', 'U') IS NOT NULL
DROP TABLE #Indexdata
 
DECLARE
@SizeofIndex BIGINT, @IndexID INT,
@NameOfIndex nvarchar(200),@TypeOfIndex nvarchar(50),
@ObjectID INT,@IsPrimaryKey INT,
@FGroup VARCHAR(20)
 
create table #Indexdata (name nvarchar(50),
IndexID int, IndexName nvarchar(200),
SizeOfIndex int, IndexType nvarchar(50),
IsPrimaryKey INT,FGroup VARCHAR(20))
DECLARE Indexloop CURSOR FOR
SELECT idx.object_id, idx.index_id, idx.name, idx.type_desc
,idx.is_primary_key,fg.name
FROM sys.indexes idx
join sys.objects so
on idx.object_id = so.object_id JOIN sys.filegroups fg
ON idx.data_space_id = fg.data_space_id
where idx.type_desc != 'Heap'
and so.type_desc not in ('INTERNAL_TABLE','SYSTEM_TABLE')
 
OPEN Indexloop
 
FETCH NEXT FROM Indexloop
INTO @ObjectID, @IndexID, @NameOfIndex,
@TypeOfIndex,@IsPrimaryKey,@FGroup
 
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT @SizeofIndex = sum(avg_record_size_in_bytes * record_count)
FROM sys.dm_db_index_physical_stats(DB_ID(),@ObjectID,
@IndexID, NULL, 'detailed')
 
insert into #Indexdata(name, IndexID, IndexName, SizeOfIndex,
IndexType,IsPrimaryKey,FGroup)
SELECT TableName = OBJECT_NAME(@ObjectID),
IndexID = @IndexID,
IndexName = @NameOfIndex,
SizeOfIndex = CONVERT(DECIMAL(16,1),(@SizeofIndex/(1024.0 * 1024))),
IndexType = @TypeOfIndex,
IsPrimaryKey = @IsPrimaryKey,
FGroup = @FGroup
 
FETCH NEXT FROM Indexloop
INTO @ObjectID, @IndexID, @NameOfIndex,
 @TypeOfIndex,@IsPrimaryKey,@FGroup
END
CLOSE Indexloop
DEALLOCATE Indexloop
 
select name as TableName, IndexName, IndexType,
SizeOfIndex AS [Size of index(MB)],
case when IsPrimaryKey = 1 then 'Yes' else 'No' End as [IsPrimaryKey]
,FGroup AS [File Group]
from #Indexdata order by SizeOfIndex DESC

Fonction de partition sql server

bonjour

Aujourd’hui, je vais discuter la façon pour  partitionner un table  pour  meilleures performances avec SQL Server 2012  Je vais me contenter de mettre en évidence la fonction du SQL Server Management Studio 2012 pour le partitionnement de table.

la fonction du Partitionnement de table est un opération qui vous permettre  de diviser une grande table en parties plus petites sans besoin d’avoir créer des tables distinctes pour chaque partie Les données d’une table partitionnée est physiquement stockés dans des groupes de lignes appelées partitions et chaque partition est accessible et peuvent être conservés séparément 

une table partitionnée se comporte comme une table logique lorsqu’il est interrogé

Nous allons créer tout d’abord un groupe du Fichier nommé FG_2007 . Rendez vous pour cela dans les propriétés de la base de données touchée. La fenêtre suivante apparaitre

ALTER DATABASE test ADD FILEGROUP FG_2007;

part1

Cliquez alors naturellement sur ajouter, après vous être rendu sur la partie Fichier en haut à gauche de la fenêtre, pour ajouter un fichier de donnée, qui fera obligatoirement partie d’un groupe de fichier. Une troisième ligne apparaître alors, contenant les différentes informations :

part2

part3

Les données dans une table partitionnée est partitionné basé sur une seule colonne, la colonne de la partition, souvent appelée la clé de partition. Une seule colonne peut être utilisé en tant que colonne de séparation, mais il est possible d’utiliser une colonne calculée

Le paramètre d’entrée de cette fonction correspond au type de données de la clé de partitionnement. Cette clé de partition peut être de n’importe quel type scalaire (il ne peut pas être de type varchar(max), nvarchar(max), xml, varbinary(max), text, ntext, image CRE Chaque plage de valeur de la clé va correspondre à un numéro de partition.

part4

Je vais crée une fonction  de partition

part2006

Puis une schéma de partition Cette derniére permet de définir le groupe de fichier attribué à chaque partition, il est défini à l’aide de l’instruction CREATE PARTITION SCHEME

part5

puis on définit les  limites de chaque intervalle qui sont définies avec la clause FOR VALUES. Pour savoir si la limite est incluse dans l’intervalle inférieur ou bien supérieur, on utilisera les termes LEFT ou RIGHT.

part10

part12

part13

part14

cordialement

vvvv