IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Avis sur code T-SQL de vérification de sauvegarde , truncate et creation d'index


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 81
    Points
    81
    Par défaut Avis sur code T-SQL de vérification de sauvegarde , truncate et creation d'index
    Bonjour,
    Je dois planifier la création d'un index et la suppression certaines données.
    Pour cela je vais créer un job
    je veux que se job vérifie dans un premier que ma base a bien été sauvegardé par un plan de maintenance .
    Pour cela ,je vérifie si j'ai bien un enregistrement dasn la table backupset.
    SI il n'y en a pas j'envoie un mail d'erreur et je ne fais rien.
    S'il il y en a un j'exécute mon Truncate et je crée l'index.

    Mes questions sont les suivantes :
    • la manière de procéder est elle correct et le code n'est il pas trop "moche" ?
    • Est il possible de récupérer le code retour d'une instruction (ici le truncate et la création de l'index) ?
    Si oui comment , je n'ai rien trouvé :/
    • Enfin l'ajout d'un RESTORE VERIFYONLY apporte t'il vraiment quelque chose ?

    merci à vous,

    le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Declare @body1 varchar(100)
     
    use msdb; 
     
    IF (select count (*) from backupset where database_name = 'ARAMIS_MSCRM'And backup_finish_date BETWEEN '2012/01/11' and '2012/01/12') = 0 
    	Begin
    		set @body1 = 'problème sur la sauvegarde de ARAMIS_MSCM le truncate et l index ne se feront pas ' 
    		EXEC msdb.dbo.sp_send_dbmail @recipients='toto@tata.f', 
    		@subject = 'la base n a pas ete sauvegardee ', 
    		@body = @body1, 
    		@body_format = 'HTML' ; 
    	END
    ELSE
    		Begin
     
    		use ARAMIS_MSCRM;
     
    		TRUNCATE TABLE DUPLICATERECORDBASE;
     
    		CREATE NONCLUSTERED INDEX CRM_DuplicateRecord_AsyncOperationID ON [dbo].[DuplicateRecordBase] ([AsyncOperationID])
     
     
    		set @body1 = 'Job Creation Truncate et Index OK' 
    		EXEC msdb.dbo.sp_send_dbmail @recipients='toto@tata.fr', 
    		@subject = ' ', 
    		@body = @body1, 
    		@body_format = 'HTML' ; 
    	END
    GO

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Le fond est là, la forme est peut-être à changer un peu
    En effet vous pouvez tout à fait créer cette procédure stockée dans la base de données ARAMIS_MSCRM, et référencer la base de données système msdb ... et inversement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    USE ARAMIS_MSCRM
    GO
     
    CREATE PROCEDURE usp_maintenance
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	DECLARE @date_deb datetime
    		, @date_fin datetime
    		, @mail_corps varchar(100)
    		, @mail_sujet varchar(100)
     
    	SELECT	@date_deb = CAST(FLOOR(CAST(GETDATE() AS float)) AS datetime)
    	SELECT	@date_fin = DATEADD(day, 1, @date_deb)
     
    	IF EXISTS
    	(
    		SELECT	*
    		FROM	msdb.dbo.backupset
    		WHERE	database_name = 'ARAMIS_MSCRM'
    		AND	backup_finish_date BETWEEN @date_deb AND @date_fin
    	)
    	BEGIN
    		TRUNCATE TABLE dbo.DUPLICATERECORDBASE
     
    		CREATE NONCLUSTERED INDEX CRM_DuplicateRecord_AsyncOperationID
    		ON dbo.DuplicateRecordBase (AsyncOperationID)
     
    		SELECT @mail_corps = 'Job Creation Truncate et Index OK'
    			, @mail_sujet = 'Sauvegarde et création de l''index  réussis !'
    	END
    	ELSE
    	BEGIN
    		SELECT @mail_corps = 'problème sur la sauvegarde de ARAMIS_MSCM le TRUNCATE et l index n''ont pas été créés' 
    			, @mail_sujet = 'Sauvegarde et création de l''index  échoués !'
    	END
     
    	EXEC msdb.dbo.sp_send_dbmail
    		@recipients = 'toto@tata.f', 
    		@subject = @mail_sujet,
    		@body = @mail_corps, 
    		@body_format = 'HTML' 
    END
    Vous pouvez aussi ne spécifier qu'un seul appel à la procédure stockée, ce qui en simplifiera sa maintenance

    Enfin je ne sais pas si la table dbo.DuplicateRecordBase a un index cluster, ni ce que vous faites dessus.
    Si vous créez l'index non-cluster en avance, et que vous faites un INSERT massif sur cette table, il y a de bonnes chances pour les statistiques de l'index ne soient pas correctes à la fin de l'INSERT.
    Donc vos requêtes qui utilisent cette table peuvent en souffir.
    En créer l'index après l'INSERT massif, vous évitez ce problème, et évitez un léger ralentissement du à la maintenance de cet index.

    @++

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Points : 81
    Points
    81
    Par défaut
    Re,
    Merci pour votre réponse et les corrections
    la manipulation est normalement exceptionnel et ne devrait plus être à faire c'est pourquoi je pensais mettre directement mon code dans le travaille. je n'avais pas pensé à passer par procédure stocké.
    La tables DUPLICATERECORDBASE contient bien un index cluster (je viens de vérifier).
    je vous avouerais que je ne sais pas non plus à quoi elle sert , je sais qu'elle sert pour un CRM et que c'est le support de Microsoft qui vient de nous demander de le créer suite à des lenteurs sur le CRM .
    Quand à la validation du Truncate et de la création de l'index avec de simple requêtes.
    Je testerai tout ça demain et vous ferai un retour.
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Votre avis sur deux requètes SQL
    Par americ dans le forum Développement
    Réponses: 6
    Dernier message: 05/11/2014, 17h25
  2. [Débutant] Remplir une ComboBox à partir d'une table SQL (avis sur mon code)
    Par thomas1989 dans le forum C#
    Réponses: 3
    Dernier message: 07/10/2013, 13h38
  3. Votre avis sur ma requête SQL
    Par deli2025 dans le forum Requêtes
    Réponses: 21
    Dernier message: 01/03/2013, 10h47
  4. avis sur un projet sql
    Par patricx dans le forum Modélisation
    Réponses: 0
    Dernier message: 01/09/2010, 15h09
  5. Quel est votre avis sur Code::Blocks ?
    Par doudoustephane dans le forum Code::Blocks
    Réponses: 54
    Dernier message: 12/06/2009, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo