Comment trouver l’utilisateur qui a supprimé votre base sql server ?

bonjour

En tant que  DBA, vous été le premier responsable de  s’avoir qui fait quoi sur votre instance ,

imaginer q’une personne a un droit spécifique et il a supprimer un de vos objets (database,table ,sp..)

et malheureusement tu n’ a pas activer la fonction d’audit ou vous n’éte pas avec la version entreprise

Ton supérieur hiérarchie ta demander de s’avoir qui a fait cette opération ,et les gens sont devenus

très intéressés a savoir qui a  supprimé  la base de donnée

voyant cette exemple on procéde a suprimer mon base de test nommé « morpho »

USE [master]
GO
DROP DATABASE [morpho]
GO

Puis penser a exécuter cette requête

DECLARE @FileName VARCHAR(255) 

SELECT @FileName = SUBSTRING(path, 0, 
LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc' --'
FROM sys.traces WHERE is_default = 1; 

SELECT TOP 1 LoginName, HostName, ApplicationName, StartTime, TextData
FROM sys.fn_trace_gettable( @FileName, DEFAULT ) AS gt 
WHERE EventClass = 47 AND DatabaseName like '%mabase%'
ORDER BY StartTime DESC;

 

sans-titre311

 

Utilisez cette fonction pour faire plus de recherche dans votre fichier journal de transaction. Il y a beaucoup de données informative dans plus de 100 colonnes lorsque vous utilisez cette commande                            

cordialement

Utilisation d’un index couvrant pour l’amélioration des performances d’une requête

bonjour

Aujord’huit j’ai eu une réclamation envoyer par la production sur la présence d’un problème du lenteur détecter dans les lignes du productions

sans-titre46

 

on analysant le problème je viens de trouver que le problème viens d’une requête d’extraction ci joint leur syntaxe

La requête en question :SELECT count(distinct([Board_ID])) FROM Location where  Inspection_end_time between  ‘2015-08-27 14:00:00’ and ‘2015-08-27 22:00:00’  

Le plan de requête généré est le suivant  :

Sans titre

Ce qu’on peut déduire, c’est que l’optimiseur de requête a utilisé l’index non-cluster « IX_**** » pour identifier chaque ligne qui correspond aux critères de la requête. Et une fois l’index non-cluster utilisé, il a procédé à la recherche des informations desdites lignes de la colonne indexée en utilisant l’index en cluster. On parle alors de recherche sur clé, ou key lookup . Dans le cas d’une table sans index en cluster, on parle de RID lookup (ou recherche sur identifiant de ligne(voir le carré en rouge)

j’ai procéder donc a cré un index NONCLUSTERED en ajoutant le colonne [Inspection_end_time] [Location_ID] ,[Board_ID] afin d’assurer une couverture de la totalité de ma requête 

Ci joint le syntaxe du script d’index

« CREATE NONCLUSTERED INDEX [_dta_index_Location_9_1765581328__K6_K1_K4] ON [dbo].[Location]
(
[Inspection_end_time] ASC,
[Location_ID] ASC,
[Board_ID] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] »

Jetons, maintenant, un coup d’œil au plan d’exécution de la requête :
Ci joint Le nouveau plan du requête généré :

Sans titre2

Bref, on a gagné près de 50%…

On peut noter la réduction de la consommation des ressources I/O. En effet, en utilisant un seul index contenant toutes les informations qu’il recherche, l’optimiseur gagne beaucoup de temps lors du traitement de la requête

Un index contenant des colonnes non-clés peut améliorer considérablement les performances des requêtes lorsque toutes les colonnes de la requête sont incluses dans l’index en tant que colonnes clés ou non-clés.Les gains de performances sont due au fait que l’optimiseur de requête peut localiser toutes les valeurs des colonnes dans l’index ; l’accès aux données de table et d’index n’a pas lieu, produisant ainsi un nombre moindre d’opérations d’E/S sur le disque

Lorsqu’un index contient toutes les colonnes auxquelles une requête fait référence, on dit qu’il couvre la requête.(index couvrant)

Dans le cadre d’un index couvrant, le moteur privilégiera le parcours de l’arbre d’index plutôt que le scan de la table, d’où l’optimisation

cordialement

(AUTO SHRINK) doivent être Off

bonjour a tous

La réduction automatique est une mauvaise pratique dans un  environnement de production. Laissez ce paramètre à False  , Le shrink c’est le mal absolu : Y a pas mieux pour fragmenter les indexes !

Donc  autoschrink = true est une très mauvaise idée qui plombe les performances

 

tu peux désactiver AUTO_SHRINK :

ALTER DATABASE [Nom_de_votre_base_de_donnees] SET AUTO_SHRINK OFF 

sans-titre

Explication 

Le Shrink va libérer l’espace réservé par votre base de données. Mais il risque d’être aussi tôt re-réservé.Les opérations de Le Shrink sont très gourmandes en ressources CPU et opérations disques I/O,aussi elle provoque la fragmentation des indexes aussi elle vide le cache des données vers le disque, ce qui provoque un ralentissement considérable.
Globalement le Shrink est inutile sauf lors d’un traitement particulier qui a fait gonflé l’espace réservé inutilement.

Donc il faut toujours pensser a placez vos base avec ses options   AUTO_SCHRINK = FALSE,  AUTO_CREATE_STATISTICS = ON , AUTO_UPDATE_STATISTICS = ON

cordialement

comment Réduire la taille de fichier .LDF ?

bonjour

Le seul moyen pour vider le Fichier log Si vous été en mode de récupération complète est de sauvegarder le journal de transaction :

voyant ce ci dans cette exemple

DBCC SQLPERF(LOGSPACE) 

sans-titre

on est a 95%

sans-titre

 

Le fait est que pour des raisons diverses, ces fichiers peuvent continuer à croître sans limite (en général à cause d’erreur de ces backups) et poser de gros soucis de place sur les serveurs.

La solution proposé par Microsoft  était donc d’exécuter les commandes du backup LOG

BACKUP LOG [MaDB] WITH TRUNCATE_ONLY    

 A ce moment-là, une partie du journal de transactions est vidé. La plupart du temps, exécuter cette commande régulièrement suffira à maintenir la taille des fichiers du journal de transactions à une taille constante.

Une fois la sauvegarde a été effectuée, il nous reste que à réduire la taille du fichiers grâce à la commande DBCC SHRINKFILE 

DBCC SHRINKFILE(ligne9_log, 200)

En conclusion

  • Essayer de Sauvegardez régulièrement vos journal de transaction
  • Sinon pensez à passer en mode de récupération simple
  • N’utilisez jamais de SHRINKDATABASE

comment configurer le max et min mémory SQL server

bonjour

On va voir aujourd’hui comment Utilisez les deux options de mémoire du serveur,  min et max server mémory, pour reconfigurer la quantité de mémoire (en mégaoctets) dans le pool de mémoire tampon utilisé par une instance de SQL Server                                                                                                       Le réglage par défaut de la mémoire du serveur min est 0, et le paramètre par défaut pour la mémoire de serveur maximale est 2147483647 MB. Par défaut, SQL Server peut modifier ses exigences en matière de mémoire dynamiquement en fonction des ressources système disponibles.

Si vous n’avez pas limité la RAM utilisée par SQL Server,

Pour configurer la mémoire min par option de requête

  1. Dans l’Explorateur d’objets, cliquez-droit sur un serveur et sélectionnez Propriétés.
  2. Cliquez sur le Mémoire
  3. Dans le mémoire minimum par requête, saisissez le montant minimum de mémoire (en kilo-octets) qui sera alloué pour l’exécution d’une requête.

sans-titre112

 

Pour configurer la mémoire min par option de requête

SELECT
 name,
 value
FROM sys.configurations
WHERE name IN ('max server memory (MB)', 'min server memory (MB)')
USE SuiviTest;
GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE ;
EXEC sp_configure 'min server memory', '512'
GO
EXEC sp_configure 'max server memory', '13500'
GO

Le min memory n’a en pratique aucune importance.
Le max mémory est essentiel.
Si votre serveur est dédié, vous pouvez consacrer toutes la RAM, sauf un strict minimum pour l’OS à SQL Server.
Grosso modo si :
RAM < 16 Go => mettez RAM -2 à SQL Server.
RAM > 16 et < 32 => mettez RAM – 3 à SQL Servr
RAM > 32 et < 64 => mettez RAM – 4 à SQL Server
RAM > 64 et < 128 => mettez RAM – 5 à SQL Server
au delà, mettez RAM – 6 Go

Cordialement

Déployer un rapport Reporting Services 2012 sur un serveur de rapports grâce à Visual studio

Bonjour a tous                                                                                                                                               La publication d’un projet Report Server est la méthode la plus simple pour publier plusieurs rapports      Pendant le développement de rapports sur Visual Studio 2012, les déployer directement et simplement sur le serveur de rapports peut se révéler intéressant. Le serveur est donc accessible directement et les rapports se déploient en un clic.                                                                                                              Voyant comment le faire on fait un  clique avec le bouton droit sur ce rapport, puis cliquez sur Déployer

Sans titre

on aurait ce type du message d’erreur si on a pas, spécifier l’URL du serveur de reporting dans la propriété du projet

Sans titre2                                                                                            Donc  , il faudra aller dans le menu Projet -> Propriétés, et remplir l’adresse de vos serveur Web du reporting   comme c’est mentionner dans l’exemple ci dessous:

Sans titre3                                                                                            Si votre rapport utilise une source de données partagée, vous devez également aussi avoir ce type du message et vos rapport ne s’exécutera pas.

Sans titre4                                                                                         il il faut donc Cliquez avec le bouton droit sur la source de données partagée, puis cliquez sur Déployer.

Sans titre6

Lorsque vous publiez un projet Report Server, vous publiez tous les rapports de ce projet. Tous les rapports sont déployés à l’aide de la même configuration de projet : sur le même serveur de rapports, le même dossier sur le serveur, et ainsi de suite.

Sans titre9

Comme ça vous  pouvez  déployer vos rapports sans problèmes

Sans titre10

cordialement

comment configurer le Conteneur de boucle for « For Loop Container »?

bonjour a tous

On va voir Aujourd’hui  voir Comment configurer un simple conteneur de boucles For? Le conteneur de boucles For est un conteneur de répétition qui fait la répétition d’une  chose jusqu’à ce une condition évalue la valeur vrai.

On commence par la création d’une Variable

Créer une variable entière nommée un indice i. Cette variable est utilisée, le nombre jusqu’à 30.

Sans titre1

Sans titre2

2) Ajouter conteneur de boucles For
Faites glisser un conteneur de boucles For à votre flux de contrôle et de lui donner un nom approprié

Sans titre5

3) Modifier le conteneur de boucles For

  • Modifiez le conteneur de boucles For et régler la InitExpression à: @i = 0« .Ceci est la valeur initiale du compteur. Cet exemple commence à zéro.
  • Réglez le nécessaire evalExpression à: « @i <30« . Ceci est l’expression d’évaluation qui contient l’expression utilisée pour tester si la boucle doit arrêter ou continuer. L’exemple arrête au bout de 10 fois (0, 1, 2, 3, 4, 5, 6, 7, 8, 9).
  • Définir l’exige AssignExpression à: « @i= @i+ 1« . Ceci est une expression d’itération facultatif qui incrémente le compteur de boucle.

Sans titre3

et Finalement en exécute le package qui serai dans notre exemple exécuter 30 Foix

Sans titre5

cordialement

Comment désactiver et activer une contrainte SQL server ?

bonjour a tous

Parfois, il est utile de désactiver une ou plusieurs contraintes sur une table ,nous pouvons désactiver la contrainte en utilisant la commande ALTER TABLE

– Désactivez toutes les contraintes pour une base de donnée                                                               EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"                                                                                - activez toutes les contraintes pour une  base de donnée        
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

— Désactiver tous les contraintes de table                                                                                        ALTER TABLE Non du table  NOCHECK CONSTRAINT ALL
– Activer  tous les contraintes de table
ALTER TABLE Non du table   CHECK CONSTRAINT ALL

–Désactiver unique contrainte
ALTER TABLE yourtablename NOCHECK CONSTRAINT YourConstraint
– -Activer seule contrainte
ALTER TABLE yourtablename CHECK CONSTRAINT YourConstraint

cordialement

Difference between Full backup and Copy-only full backup

bonjour a tous

Lorsque vous avez une sauvegarde complète et un ensemble de sauvegardes de fichiers de journal, une chaîne de journal est maintenu en utilisant la LSN (Log Sequence Number) Si vous voulez faire une sauvegarde sans casser la chaîne de journal, vous devrez effectuez une sauvegarde en copie uniquement.Si vous ne faites pas une sauvegarde en copie seule, la chaîne de journal est cassé et la sauvegarde que vous prenez sera la dernière sauvegarde complète

Une copie de sauvegarde seule est une sauvegarde de SQL Server qui est séparé de la séquence des standards des sauvegardes SQL Server Ce type de sauvegarde permettra de préserver le point de l’archive journal existant et donc il n’a pas d’impact sur la séquence des sauvegardes régulières de journaux.

Si vous faite un backup sans cette Option et  vous allez  faire vos restaurations vous obtiendrez un message d’erreur de SQL Server telles que les suivantes:

Sans titre

Solution

En utilisant SSMS

à travers SSMS le processus est assez simple vous allez juste cocher une case pendant le processus de sauvegarde standard

Sans titre

en Utilisant  de T-SQL

BACKUP DATABASE myDatabase 
TO DISK = 'c: \ MyDatabase.bak'
WITH  COPY_ONLY

Essayer d’assurez que vous d’utiliser cette option lorsque vous avez besoin de faire une Telle sauvegarde de séquence pour une raison quelconque

cordialement

Comment attacher une base de données sans le fichier log

bonjour a tous

On va voir aujord’huit comment attacher une base de données SQL server d’extension mdf sans le fichier log *.LDF

Dans le cas où on a  perdu le fichier journal (.ldf) (corruption de disque, un fichier supprimé ou SQL Server , un problème de disque),

les transactions qui ne sont pas suivi par une procédure de Type commit seront perdus

On va procéder a supprimer le Fichier log du base de donnée aprés un arrêt du service MSSQL server

Sans titre

maintenant la base de donné est considérer non accessible Sans titre2

un clic droit / attacher une base ou exec sp_attachdb puis un clique sur le bouton Ajouter

Sans titre3

Il suffit alors de sélectionner le fichier du journal de transaction (qui n’existe pas), et de cliquer sur le bouton supprimer , puis sur OK :

sans-titre35

 

Le fichier du journal des transactions est automatiquement recréé, et la base de données est maintenant attachée.

Sans titre

Cela peut aussi se faire par un script, avec l’option ATTACH_REBUILD_LOG de l’instruction CREATE DATABASE :

USE master 
GO 
CREATE DATABASE abdallah
ON (FILENAME = N'D:\SQLServer\abdallah.mdf') 
FOR ATTACH_REBUILD_LOG 
GO

cordialement