Bonjour,
Je cherche à améliorer une solution de "réplication maison" en place depuis quelques années, et je préfère demander un avis aux pros.
Notre fournisseur principal utilise une base de données SQL-Server (on va l'appeler BASE) et j'ai accès à ce serveur en lecture (ainsi qu'en écriture, mais je ne me permet pas de faire des modifs structurelles).
Appelons ce serveur SQL
Il y a quelques années, j'avais greffé une solution de reporting/analyse de données en faisant une lecture des certaines données pour faire des ETLs (1 fois par période de 24h durant la nuit) dont le résultat était stocké dans une autre base de données (DWH) sur un autre serveur (DWH).
Afin de ne pas pénaliser l'accès à la base source, j'ai très vite préféré, chaque nuit, avant les ETLs, récupérer une copie des données sources dont j'avais besoin (certaines tables seulement).
Globalement, chaque nuit, je remet à zéro la base "recopiée" la veille sur DWH, puis réalimente l'ensemble des tables depuis la base source sur SQL, et cela à partir une simple requête du style (INSERT INTO DWH.BASE.Table_xyz SELECT * FROM SQL.BASE.Table_xyz) pour chacune des tables Table_xyz.
En parallèle de cela, un prestataire (hors de mon LAN, accessible par FTP via un simple accès internet) a eu besoin de mettre en place une autre solution de reporting/analyse de données.
J'avais donc mis en place sur le serveur source SQL, un système d'export de données via fichiers CSV (1 fichier par table, 2-3 tables seulement).
Afin de ne pas pénaliser l'exploitation de mon serveur source (et l'accès internet qui a aussi une utilité prioritaire durant la journée) qui n'est que durant la journée, les exports se déclenchaient uniquement la nuit.
Je souhaite faire évoluer un peu les choses afin d'avoir moins de tâches nocturnes et répartir le travail tout au long de la journée.
Le but n'est, par contre, pas d'avoir une solution HA avec réplication temps-réel, je me satisferais d'avoir un retard de plusieurs minutes sur la partie répliquée, voire même de ne commencer la réplication qu'en milieu d'après-midi, même si la production a commencé le matin.
Après une première analyse du sujet, je comptais mettre en place un système de réplication transactionnelle depuis le serveur SRV-SQL vers le serveur SRV-DWH.
Pas faisable, car l'ensemble des tables de la base source ne contiennent aucune clé primaire (pas la peine de me critiquer, je ne gère pas cette base et je n'ai jamais réussi à faire comprendre à l'éditeur l'intérêt des clés primaires :-( )
Autre solution envisagée dernièrement, mettre en place un système de "réplication" via LogShipping entre mes 2 serveurs SRV-SQL et SRV-DWH.
Et "envoyer" en plus par FTP, chaque nouveau fichier de log vers le serveur du prestataire, afin qu'il regénère lui aussi la base.
Problème, si j'ai bien compris, je ne pourrais pas sélectionner que certaines tables, car les logs contiendront les données de toutes les tables de la base.
Cela ne convient pas car il est impératif que le partenaire n'ait pas accès aux données de certaines tables.
Donc quelles pourraient les solutions à envisager ?
A noter que mon serveur répliqué DWH pourrait se contenter des mêmes tables que celles nécessaires au partenaire externe.
De plus, le prestataire préfèrerait récupérer des fichiers LogShipping, afin d'avoir une homogénéité avec d'autres fournisseurs de données comme moi.
Donc :
- Réplication complète de la Base depuis SQL vers DWH à l'aide de LogShipping, puis de ce serveur DWH, mise en place d'un simple export partiel comme actuellement, via fichiers CSV envoyés par FTP ?
- Réplication partielle de la Base depuis SQL vers DWH à l'aide de scripts SQL, puis mise en place de LogShipping vers le prestataire ?
- La solution de réplication "Snapshot" (qui, si j'ai bien compris, permet de sélectionner seulement certaines tables) pourrait-elle être mise en place vue que la base source ne dispose d'aucune clé primaire ?
- Autre idée/suggestion ...
Merci par avance
Partager