Réplication de table «maître-esclave» dans Oracle
Y aurait-il quelque chose de similaire à la base de données maître-esclave mais au niveau de la table dans la base de données?
Par exemple, j'ai le scénario suivant:
- J'ai une table avec des millions d'enregistrements et la raison en est que le système a plus de 15 ans.
- Je veux seulement montrer les records de l'année dernière (2019-2020).
- J'ai décidé de créer une vue qui n'affiche que les enregistrements de cette plage (1 an) à partir des informations de cette table qui contient des millions d'enregistrements.
- Grâce à la vue, le temps de chargement de cet écran système est plus léger, grâce au fait que j'ai moins de charge d'enregistrements.
Le problème: que se passe-t-il si l'utilisateur ajoute un nouvel enregistrement à la table contenant des millions d'enregistrements? comment faire modifier ma vue lorsque l'autre table est modifiée ...
Je peux utiliser des déclencheurs pour mettre à jour la vue, je pense, mais y a-t-il une fonctionnalité dans oracle qui me permet quelque chose de similaire à ce que je viens de demander (maître-esclave) où la table "esclave" est mise à jour car la table "maître" subit des changements ?
Réponses
Tout d'abord, vous avez mal compris. View n'est pas une table physique et ne stocke aucune information. Si vous insérez des données dans la vue, vous les insérez en fait dans la table source.
Étant donné que la vue n'est pas physique, vous ne faites que filtrer les données. Cela n'a aucun avantage en termes de performances.
Pour les grandes tables, vous pouvez utiliser le partitionnement qui améliore considérablement les performances. Et si vous avez encore besoin d'archivage, vous pouvez archiver les données partitionnées.
Le partitionnement est généralement la meilleure méthode, car vous pouvez généralement archiver des données en exécutant simplement une commande «échange» pour archiver d'anciennes données.
Les données ne «bougent» pas dans ce scénario, elles sont simplement «détachées» de la table via la manipulation du dictionnaire de données.
Y aurait-il quelque chose de similaire à la base de données maître-esclave mais au niveau de la table dans la base de données
Si vous posez des questions sur la réplication maître / esclave au niveau de la table, alors, je suppose, la relation table / vue matérialisée est appropriée pour appeler en tant que maître-esclave. Citation d' Oracle Docs :
Une vue matérialisée est un objet de base de données qui contient les résultats d'une requête. La clause FROM de la requête peut nommer des tables, des vues et d'autres vues matérialisées. Collectivement, ces objets sont appelés tables maîtres (un terme de réplication) ...
Lorsque vous avez besoin de "mettre à jour" ou, de manière plus appropriée, d'actualiser la vue mview, vous pouvez utiliser différentes options:
- update mview periodically and refresh it periodically
- update mview each time the data in the master table is changed and commited.
- update manually calling DBMS_MVIEW.REFRESH or DBMS_SNAPSHOT.REFRESH
Mview could be faster then view because each time you select from a mview you select from a different "table" which was replicated from the original one. Especially if you have complex logic in a sql, you can put the logic to mview definition.
The drawbacks are you need extra disk space for mview, and there will be a delay of refreshing the data.