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

Administration SQL Server Discussion :

Restaurer plusieurs bases de données via un script sql


Sujet :

Administration SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Par défaut Restaurer plusieurs bases de données via un script sql
    Bonjour,

    je souhaiterais savoir s'il est possible de restaurer une liste de fichier .bak en raffale.
    Je m'explique nous avons besoin de temps en temps de restaurer sur une même instance sql plusieurs bases de données SQL.
    Nous avons a notre disposition ssms ; les sauvegardes
    soit les fichiers "mdf" et "ldf"
    soit les sauvegarde au format ".bak"

    Dans la plus part des cas nous avons une dizaine de bases à restaurer.
    Nous savons restaurer les fichiers base par base
    Donc on fait 10 fois la manipulation si nous avons 10 sociétés.

    Ma question est donc existe t il un moyen de traiter les 10 bases en une seule requête en tenant compte des deux méthodes.
    Dans le cas des fichiers bak la plus part du temps les fichiers sont stockés dans un dossier par société et non dans le même répertoire.

    dernière petite question
    Je dois exécuter cette requête après chaque restauration et sur chaque base de données restaurées.
    J'aurai aimé avoir le script me permettant de l'executer sur l'intégralité des bases de données présentes sur mon instance SQL.
    sp_change_users_login 'update_one','user_cbase','APPL_CBASE'

    Si vous pouviez également inclure dans le script le choix du serveur\instance sur laquelle la restauration aura lieu ça serait top.

    D'avance merci

    Cordialement

  2. #2
    Membre émérite

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 817
    Billets dans le blog
    2
    Par défaut
    Restore-DbaDatabase de l'outil dbatools il répond bien a ce type du demande

    https://dbatools.io/functions/Restore-DbaDatabase/

  3. #3
    Membre Expert
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Par défaut
    Tu peux faire un petit test et adapter ce script. Je ne l'ai utilisé qu'une fois, donc je te conseille de faire des tests et l'adapter si besoin.

    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
    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
    --https://www.datalytyx.com/restore-multiple-sql-databases-backup-files/
     
    -- L'idéal c'est de backuper sur un share directement sur une autre machine si on veut faire un restore ailleurs. On gagne le temps de la copie
     
    DECLARE @name VARCHAR(50) -- database name 
    DECLARE @path VARCHAR(256) -- path for backup files 
    DECLARE @fileName VARCHAR(256) -- filename for backup 
     
    DECLARE @fileDate VARCHAR(20) -- used for file name
     
    -- specify database backup directory
    SET @path = '\\ShareDrive1\sql\backup\'
     
    -- specify filename format
    SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
     
    DECLARE db_cursor CURSOR FOR 
    SELECT name
    FROM master.dbo.sysdatabases
    --WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases
     
    OPEN db_cursor  
    FETCH NEXT FROM db_cursor INTO @name  
     
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
           SET @fileName = @path + @name + '.BAK'
    	   BACKUP DATABASE @name TO DISK = @fileName
     
           FETCH NEXT FROM db_cursor INTO @name  
    END  
     
    CLOSE db_cursor  
    DEALLOCATE db_cursor
     
     
     
    -- LE RESTORE
     
    DECLARE @name VARCHAR(256) -- database name 
    DECLARE @backuppath NVARCHAR(256) -- path for backup files 
    DECLARE @datapath VARCHAR(256) -- path for data files 
    DECLARE @logpath VARCHAR(256) -- path for log files 
    DECLARE @backupfileName VARCHAR(256) -- filename for backup 
    DECLARE @datafileName VARCHAR(256) -- filename for database
    DECLARE @logfileName VARCHAR(256) -- filename for logfile
    DECLARE @logName VARCHAR(256) -- filename for logfile
     
    -- specify database backup directory
    SET @backuppath = 'D:\Database\Backup\Test\'
    SET @datapath = 'D:\Database\DATA\'
    SET @logpath = 'L:\Database\LOG\'
     
    print 'backup path is ' + @backuppath
    print 'data path is ' + @datapath
    print 'log path is ' + @logpath
     
    --Table to hold each backup file name in
     
    DROP TABLE #files -- remove any previous instance
    CREATE TABLE #files(fname varchar(200),depth int, file_ int)
    INSERT #files
    EXECUTE master.dbo.xp_dirtree @backuppath, 1, 1
    SELECT * FROM #files
     
    DECLARE files CURSOR FOR
    SELECT fname FROM #files 
     
    OPEN files
    FETCH NEXT FROM files INTO @name   
     
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
               DECLARE @cleanname AS VARCHAR(255)
               SET @cleanname  = REPLACE(@name, '.BAK', '')
               PRINT @cleanname
           SET @backupfileName = @backuppath + @name
           SET @datafileName = @datapath + @cleanname   + '.MDF'
           SET @logfileName = @logpath + @cleanname   + '_log.LDF'
            SET @logName = @cleanname + '_log'
            print 'backup file is ' + @backupfileName
            print 'data file is ' + @datafileName
            print 'log file is ' + @logfileName
     
           RESTORE DATABASE @cleanname
            FROM DISK = @backupfileName
            WITH NORECOVERY,
     
            MOVE @cleanname
            TO @datafileName,
            MOVE @logName
            TO @logfileName
     
     
           FETCH NEXT FROM files INTO @name  
    END  
     
    CLOSE files  
    DEALLOCATE files

  4. #4
    Membre confirmé Avatar de i.chafai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Décembre 2012
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 117
    Par défaut
    Ça devrait être Sage Ligne100 😁

Discussions similaires

  1. Réponses: 26
    Dernier message: 19/08/2015, 16h38
  2. Script générique de mise à jour de plusieurs bases de données
    Par yakitori dans le forum Administration
    Réponses: 2
    Dernier message: 20/06/2011, 14h03
  3. Réponses: 1
    Dernier message: 10/01/2011, 16h38

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