Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Comment synchroniser la sauvegarde de plusieurs bases de données ?

Ou comment créer une sauvegarde consistante entre plusieurs bases de données. Ce besoin se fait sentir avec certains produits serveur Microsoft.

Simplement prenez 2 bases de données (BDA et BDB), et mettez y 1 table dans chaque. Il y a une relation entre ces 2 tables (il n'est pas possible de créer une relation basée sur une contrainte de clef étrangère entre 2 bases de données). Si on sauvegarde BDA et BDB séparément on s'expose lors de la restauration à une incohérence des données entre les 2 bases de données.

Une des solutions consiste à arrêter les services et à réaliser les sauvegardes via SQL Server. Cela est embêtant dans la mesure où les coupures de service sont souvent inacceptables en production.

La 2ème solution repose sur ce qu'on appelle une marque de transaction. Une marque sert à placer un enregistrement particulier dans le journal de transaction indiquant le début d'une transaction.

BEGIN TRANSACTION A WITH MARK 'Nom_de_la_marque'
    
-- Le contenu de la transaction
COMMIT

Pour utiliser cette fonctionnalité il faut impérativement être en mode de récupération complet (FULL) ou BULK_LOGGED, cela ne fonctionnera pas en mode simple. Cette marque permet de réaliser une restauration jusqu'à cette marque.

-- Suite à une restauration complète
-- On restaure jusqu'à notre marque
RESTORE LOG MaBase FROM DISK
= 'C:\monbackup.trn' WITH STOPATMARK = 'Nom_de_la_marque'

Pour une utilisation de plusieurs bases de données, nous allons imbriquer 2 transactions. Tout d'abord sur chaque base de données à sauvegarder je crée une table et une procédure stockée.

-- Prépare la table
-- qui nous servira à faire une action pendant la transaction
CREATE TABLE mark
(
    Id int NOT
NULL,
    Flag int NOT
NULL
)

INSERT INTO mark VALUES (1, 0
)

-- La procédure stockée
CREATE PROCEDURE ps_marque_bd @nom_tran nvarchar(128
)
AS
BEGIN TRANSACTION @nom_tran WITH MARK
'Marque de sauvegarde - ps_marque_bd'
UPDATE mark SET flag = flag + 1 WHERE Id = 1
COMMIT
GO

-- On teste
EXEC ps_marque_bd
'AAAAA'

-- Les marques sont aussi stockées dans msdb
SELECT * FROM msdb..logmarkhistory

Une fois les tables et les procédures stockées créées (sur nos 2 bases BDA et BDB) on exécute notre transaction globale

DECLARE @nom_tran nvarchar(128)
SET @nom_tran =
'ABCDEF'

BEGIN TRANSACTION
-- Execute sur BDA
EXEC BDA..ps_marque_bd @nom_tran
-- Execute sur BDB
EXEC BDB..ps_marque_bd @nom_tran
COMMIT

SELECT
* FROM msdb..logmarkhistory

A noter que cela est aussi possible avec un serveur distant, auquel cas il faudra avoir enregistré un serveur lié et exécuter  la commande suivante.

-- Execute sur DBA sur SERVEURA
EXEC SERVEURA.BDA..ps_marque_bd @nom_tran

Vous pouvez créer autant de marques que vous le souhaitez. Indiquez par exemple dans le nom de la transaction la date et l'heure pour retrouver facilement la marque qui vous intéresse.

Pour la restauration, chacune des bases sauvegardée est à restaurer jusqu'à la marque que nous avons créée.

RESTORE LOG BDA FROM DISK = 'C:\monbackup_BDA.TRN' WITH STOPATMARK = 'ABCDEF'
RESTORE LOG BDB FROM DISK = 'C:\monbackup_BDB.TRN' WITH STOPATMARK = 'ABCDEF'

Pour plus d'infos il y a un article traitant du sujet dans l'aide en ligne de SQL Server :
http://msdn2.microsoft.com/fr-fr/library/ms187014.aspx

Pour le cas particulier qu'est Biztalk :
http://msdn2.microsoft.com/fr-fr/library/aa577848.aspx

Merci aux 2 MVP SQL (Tibor et Jasper) qui m'ont orienté dans la bonne voie.

Bonne sauvegarde…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié jeudi 22 février 2007 11:50 par christian
Classé sous : ,

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01