Bonjour a tous je vais vous présenter une méthode d'archivage de BDD SQL SERVER par programmation sur 3 étapes : Sauvegarde , consultation et restauration 1 - Sauvegarde : le backup va être crée dans le serveur BDD dans le chemain sDossBackup Code (Windev): sReq est une chaîne = [ USE MASTER DECLARE @BACKUPDESTINATION VARCHAR(500) = '%2'; DECLARE @MyBACKUP VARCHAR(MAX)='%1_'+REPLACE(REPLACE(CONVERT(VARCHAR(16), GETDATE(), 120 ),' ','_' ),':','-')+'.BAK' SET NOCOUNT ON; DECLARE @DIRECTORYEXISTS INT; EXEC MASTER.DBO.XP_FILEEXIST @BACKUPDESTINATION, @DIRECTORYEXISTS OUT; IF @DIRECTORYEXISTS = 0 EXEC MASTER.SYS.XP_CREATE_SUBDIR @BACKUPDESTINATION; SET NOCOUNT OFF; SET @BACKUPDESTINATION=@BACKUPDESTINATION+'\'+@MyBACKUP ; BACKUP DATABASE %1 TO DISK =@BACKUPDESTINATION ; USE %1 SELECT @BACKUP AS MyBACKUP ] sReq=Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(sReq,sBaseDeDonnées ,sDossBackup ) mareq est Source de Données SI PAS Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(mareq,CONNEXION_DATA,hRequêteSansCorrection,sReq) ALORS Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! (Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!) SINON Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(mareq) Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(mareq.MyBACKUP +" a été crée avec sucés ") RemplireBackUps() FIN 2 Consultation : le procédure RemplireBackUps c'est pour consulter la liste des backup enregistrés dans le serveur et remplire le TABLE_Archive : Code (Windev): PROCEDURE RemplireBackUps() Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(TABLE_Archive) sReq est une chaîne= [ use master DECLARE @TF TABLE (FNAME VARCHAR(256), FDATE DATETIME2(0)) DECLARE @T TABLE (F VARCHAR(512)); DECLARE @COM VARCHAR(1048); DECLARE @DIR VARCHAR(1048)='%1\'; SET @COM = ' DIR "' + @DIR + CASE WHEN SUBSTRING(@DIR, LEN(@DIR), 1) = '\' THEN '' ELSE '\' END + '*.*"'; INSERT INTO @T EXEC xp_cmdshell @COM; DELETE FROM @T WHERE F IS NULL OR SUBSTRING(F, 1, 1) = ' '; DELETE FROM @T WHERE SUBSTRING(F, 22, 5) = '<REP>'; DELETE FROM @T WHERE F NOT LIKE '%.bak'; SET DATEFORMAT DMY; INSERT INTO @TF SELECT SUBSTRING(F, 37, 475), REPLACE(SUBSTRING(F, 1, 17), ' ', ' ') FROM @T; SELECT * FROM @TF ORDER BY FDATE DESC use %2 ] mareq est une Source de Données sReq=Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(sReq,sDossBackup,sBaseDeDonnées) SI PAS Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(mareq,CONNEXION_DATA,hRequêteSansCorrection+hSansBind,sReq) ALORS Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!()) RETOUR FIN POUR TOUT mareq Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(TABLE_Archive,mareq.FNAME,Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(mareq.FDATE,8))+" "+Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(mareq.FDATE,9),"HH:MM")) FIN[/windev] 3 Restauration : lors de de double click sur une colonne de table archive on va restaure le backup enregister dans le colonne COL_BakUP de table Code (Windev): sReq = [ USE MASTER declare @mdf VARCHAR(MAX) declare @ldf VARCHAR(MAX) SELECT @mdf = (SELECT sys.master_files.physical_name FROM sys.master_files WHERE RIGHT(sys.master_files.physical_name,3) = 'mdf' AND sys.databases.database_id = sys.master_files.database_id), @ldf = (SELECT sys.master_files.physical_name FROM sys.master_files WHERE RIGHT(sys.master_files.physical_name,3) = 'ldf' AND sys.databases.database_id = sys.master_files.database_id) FROM sys.databases WHERE name ='%1' GROUP BY sys.databases.name, sys.databases.database_id ALTER DATABASE %1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE ; RESTORE DATABASE %1 FROM DISK = '%2' WITH MOVE '%1' TO @mdf, MOVE '%1_log' TO @ldf ,REPLACE ; ALTER DATABASE SAVE_CRUISE SET MULTI_USER; USE %1 ] sReq=Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(sReq,mabase,Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(sDossBackup)+COL_BakUP) Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!(mareq,CONNEXION_DATA,hRequêteSansCorrection+hSansBind,sReq) Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!("Restauration terminé !! ") j'attend vos remarques bonne lecture
De rien les amis une remarque a propos de l’étape Consultation la fonction xp_cmdshell elle permet a sql server d'exécuter de fonctions Windows j'ai l'utilise ici pour consulter le répertoire de sauvegardes a travers la fonction Windows DIR parfois sql server bloque cette fonction par défaut et un message d'erreur a cause de ça Cette requête va arranger l'erreur EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO EXEC sp_configure 'xp_cmdshell', 1 GO RECONFIGURE GO