Voici quelque chose que je fais. Il n'entraîne pas de temps d'arrêt nul, mais peut se terminer en moins d'une seconde.
Créez une base de données qui n'a que des éléments d'interface avec votre vraie base de données. Dans mon cas, il ne contient que des définitions de vue et toutes les requêtes des utilisateurs passent par cette base de données.
Créez une nouvelle base de données chaque nuit. Lorsque cela est fait, mettez à jour les définitions de vue pour faire référence à la nouvelle base de données. Je recommanderais soit de désactiver l'accès des utilisateurs à la base de données contenant les vues pendant que vous les mettez à jour, soit de supprimer toutes les vues et de les recréer - cela empêche l'accès partiel à l'ancienne base de données. Parce que la création de vues est rapide, cela devrait être une opération très rapide.
Nous faisons tout cela par le biais d'un travail. En fait, avant de changer les vues de production, nous testons la création des vues sur une autre base de données pour être sûr qu'elles fonctionnent toutes.
Évidemment, si vous utilisez alter view
au lieu d'exiger une cohérence entre toutes les vues, il n'y a pas de temps d'arrêt, juste une brève période d'incohérence.