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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
| /* on se positionne dans la base master */
Exec('USE master;')
/* Définition des variables */
DECLARE @date_du_jour nvarchar;
DECLARE @nom_base_production sysname;
DECLARE @nom_base_test sysname;
DECLARE @nom_base_sauvegarde_test sysname;
DECLARE @emplacement_sauvegarde sysname;
DECLARE @emplacement_fic_donnees sysname;
DECLARE @bBaseTestExiste bit;
DECLARE @sql nvarchar
/* Initialisation des variables */
SET @date_du_jour = REPLACE(LEFT(CONVERT(varchar, getDate(),126),15),'T','_');
SET @nom_base_production = 'ERPALEX';
SET @nom_base_test = 'ERPALEXTEST';
SET @nom_base_sauvegarde_test = 'ERPALEXTEST_' + @date_du_jour
SET @emplacement_sauvegarde = 'C:\Poubelle\'
SET @emplacement_fic_donnees = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\'
SET @bBaseTestExiste = 0;
/* Si la base de données de test existe déjà */
SET @bBaseTestExiste = (SELECT COUNT(*) FROM sys.databases WHERE sys.databases.name = @nom_base_test);
IF @bBaseTestExiste > 0
BEGIN
/* ************************************************************************** */
/* Sauvegarde de la base de données de test avec contrôle d'intégrité */
/* ************************************************************************* */
SET @sql = 'BACKUP DATABASE ' + @nom_base_test +
' TO DISK = ''' + @emplacement_sauvegarde + @date_du_jour + '_BACKUP_'+@nom_base_test + '.BAK''' +
' WITH FORMAT, CHECKSUM, COPY_ONLY;'
EXEC(@sql)
/* ************************************************************************* */
/* Restauration de la base de test dans la base de sauvegarde de la base test */
/* ************************************************************************* */
/* On crée la base de la sauvegarde de la base de données de test et ses fichiers */
SET @sql = 'CREATE DATABASE ' + @nom_base_sauvegarde_test +
' ON' +
' (NAME = ' + @nom_base_sauvegarde_test +',' +
' FILENAME = ''' + @emplacement_fic_donnees + @nom_base_sauvegarde_test + '.mdf''' +
' )' +
' LOG ON' +
' (NAME = ' + @nom_base_sauvegarde_test + '_Log,' +
' FILENAME = ''' + @emplacement_fic_donnees + @nom_base_sauvegarde_test + '_Log.ldf''' +
' );'
EXEC(@sql)
/* Restauration de la base de test dans la base de sauvegarde de la base test */
SET @sql = 'RESTORE DATABASE ' + @nom_base_sauvegarde_test +
' FROM DISK = ''' + @emplacement_sauvegarde + @date_du_jour + '_BACKUP_'+@nom_base_test + '''' +
' WITH REPLACE, RECOVERY, FILE=1,' +
' MOVE ''' + @nom_base_test + ''' TO ''' + @emplacement_fic_donnees + @nom_base_sauvegarde_test+ '.mdf''' +
' MOVE ''' + @nom_base_test + '_Log'' TO ''' + @emplacement_fic_donnees + @nom_base_sauvegarde_test+ '_Log.ldf'';'
EXEC(@sql)
/*Modification du fichier data*/
SET @sql = 'ALTER DATABASE' +
' ' + @nom_base_test +' ' +
'MODIFY FILE' +
' (NAME= N''' + @nom_base_test +''',' +
' NEWNAME= N''' + @nom_base_sauvegarde_test +''');'
EXEC(@sql)
/*Modification du fichier de log*/
SET @sql = 'ALTER DATABASE' +
' ' + @nom_base_test +'_Log ' +
'MODIFY FILE' +
' (NAME= N''' + @nom_base_test + ''',' +
' NEWNAME= N''' + @nom_base_sauvegarde_test +'_Log'');'
EXEC(@sql)
/* Suppression de la base de test */
SET @sql = 'DROP DATABASE ' + @nom_base_test +';'
EXEC(@sql)
END;
/* ************************************************************************** */
/* Sauvegarde de copie seulement de la base de données de production avec contrôle d'intégrité */
/* ************************************************************************* */
SET @sql = 'BACKUP DATABASE ' + @nom_base_production + ' ' +
'TO DISK = ''' + @emplacement_sauvegarde + @date_du_jour + '_BACKUP_'+ @nom_base_production + '.BAK'' ' +
'WITH FORMAT, CHECKSUM, COPY_ONLY;'
EXEC(@sql)
/* ************************************************************************* */
/* Restauration de la base de production dans la base test */
/* ************************************************************************* */
/* On crée la base de données de test et ses fichiers */
SET @sql = 'CREATE DATABASE ' + @nom_base_test + ' ' +
' ON ' +
' (NAME = ' + @nom_base_test + ', ' +
' FILENAME = ''' + @emplacement_fic_donnees + @nom_base_test + '.mdf'' ' +
' ) ' +
' LOG ON ' +
' (NAME = ' + @nom_base_test + '_Log, ' +
' FILENAME = ''' + @emplacement_fic_donnees + @nom_base_test + '_Log.ldf'' ' +
' );'
EXEC(@sql)
/* Restauration de la base de production dans la base test */
SET @sql = 'RESTORE DATABASE ' + @nom_base_test + ' ' +
' FROM DISK = ''C:\Poubelle\20190326_1_backup_ERPALEX.bak'' ' +
' WITH REPLACE, RECOVERY, FILE=1, ' +
' MOVE ''' + @nom_base_production + ''' TO ''' + @emplacement_fic_donnees + @nom_base_production + '.mdf'', ' +
' MOVE ''' + @nom_base_production + '_Log'' TO ''' + @emplacement_fic_donnees + @nom_base_production + '_Log.ldf''; '
EXEC(@sql)
/*Modification du fichier data*/
SET @sql = 'ALTER DATABASE ' +
' '+ @nom_base_test + ' ' +
'MODIFY FILE ' +
' (NAME= N'''+ @nom_base_production + ''', ' +
' NEWNAME= N'''+ @nom_base_test + ''');'
EXEC(@sql)
/*Modification du fichier de log*/
SET @sql = 'ALTER DATABASE ' +
' '+ @nom_base_test + ' ' +
'MODIFY FILE ' +
' (NAME= N'''+ @nom_base_production + '_Log'', ' +
' NEWNAME= N'''+ @nom_base_test + '_Log'');'
EXEC(@sql)
/* ************************************************************************* */
/* Modification de la nouvelle base test */
/* ************************************************************************* */
/* On utilise la nouvelle base test */
SET @sql = 'USE ' + @nom_base_test + ';'
EXEC(@sql)
/* On ajoute TEST aux noms de dossiers */
SET @sql = 'UPDATE SOC SET SOC.NOM =RTRIM(LTRIM(SOC.NOM)) +'' ***TEST***'' WHERE SOC.DOS = 100 AND LTRIM(RTRIM(SOC.NOM)) = ''ASP''';
EXEC(@sql)
/* On ajoute TEST à tous les noms d'établissement */
SET @sql = 'UPDATE ETS SET ETS.NOM =RTRIM(LTRIM(ETS.NOM)) +'' TEST'' WHERE ETS.DOS = 100;'
EXEC(@sql)
/* Modification des chemins */
SET @sql = 'UPDATE MCHEMIN SET CHEMIN = REPLACE(RTRIM(LTRIM(CHEMIN)),''Ficjoints_exploit'',''ficjoints_test'') WHERE CHEMIN LIKE ''%Ficjoints_exploit%'';'
EXEC(@sql)
SET @sql = 'UPDATE MCHEMIN SET CHEMIN = REPLACE(RTRIM(LTRIM(CHEMIN)),''//Alex2/myerp/wpartage'',''//Alex2/myerp/wpartagetest'') WHERE CHEMIN LIKE ''%//Alex2/myerp/wpartage%'';'
EXEC(@sql)
SET @sql = 'UPDATE MCHEMIN SET CHEMIN = REPLACE(RTRIM(LTRIM(CHEMIN)),''wpartage'',''wpartage_test'') WHERE CHEMIN LIKE ''%wpartage%'' AND CHEMIN NOT LIKE ''%wpartagetest%'';'
EXEC(@sql)
SET @sql = 'UPDATE MCHEMIN SET CHEMIN = REPLACE(RTRIM(LTRIM(CHEMIN)),''//Alex2/myerp/edi/prod'',''//Alex2/edi/TEST'') WHERE CHEMIN LIKE ''%//Alex2/myerp/edi/prod%'';'
EXEC(@sql)
SET @sql = 'UPDATE MCHEMIN SET CHEMIN = REPLACE(RTRIM(LTRIM(CHEMIN)),''\\Alex2\extraction\'',''\\Alex2\wpartage_test\'') WHERE CHEMIN LIKE ''%\\Alex2\extraction\%'';'
EXEC(@sql) |
Partager