Introduction
PAPER & FORM possède quatre commandes, mais la sauvegarde s’arrête à R-103. Vous devez ouvrir cet état antérieur à côté de l’original, examiner ses articles et prouver que le service restauré peut accepter une commande de test indépendamment.
Ce laboratoire commence indépendamment. La base originale et backups/cutoff.dump sont prêts, avec le même point de trois commandes que dans le parcours précédent. Une connaissance élémentaire du terminal est nécessaire ; les concepts de base et de connexion sont réexpliqués. Utilisez Workstation pour les commandes, Original Shop pour l’original et Restored Copy pour la cible de test.
Vous pouvez restaurer et réinitialiser uniquement la base jetable shop_copy. Préservez source, programme fourni, sauvegarde et fichier sans rapport dans uploads/. Toutes les données sont fictives ; aucun paiement ni courriel. Deux bases sur une instance de formation montrent l’export logique et l’isolation, pas une reprise complète après sinistre, une redondance matérielle ou PITR.
Restaurer uniquement dans la cible indépendante vide
Dans cette étape, vous ouvrirez une copie fonctionnelle des commandes au point limite. Ouvrez Original Shop, puis Orders. Quatre enregistrements existent, R-101 à R-104. Dans R-103, les deux Print pair de Rae totalisent $36.00. R-104 appartient à Sol et a été ajouté après le point sauvegardé. Il doit rester dans l’original, mais pas apparaître dans l’archive restaurée.
Ouvrez Restored Copy. Son bandeau rouille indique shop_copy. La page d’accueil répond, mais Orders explique que la base indépendante est vide. Une réponse de l’accueil ne prouve pas une boutique restaurée.
Passez dans Workstation. pwd affiche le répertoire courant :
pwd
/home/labex/project/shop-backup
./shopctl identity lit les connexions réelles. Les services enregistrés choisissent base, hôte, port et compte : shop-source connecte à shop_source avec d09_reader en lecture seule ; shop-copy connecte à shop_copy avec d09_copy accessible en écriture. Ils partagent le serveur 127.0.0.1:5432, mais le rôle de copie ne peut pas se connecter à la source :
./shopctl identity
pg_restore --list lit l’archive personnalisée sans écrire dans une base. Vérifiez son nom source et les entrées orders et order_items :
pg_restore --list backups/cutoff.dump
Une base conserve des enregistrements structurés ; les articles sont liés à leur commande parente. Les archives personnalisées incluent définitions, données, séquences pour les nouveaux identifiants et contraintes préservant les relations. Elles se restaurent avec pg_restore, pas en envoyant le binaire à psql. Les clients préparés sont tous deux PostgreSQL 14.
L’action empty affiche l’identité réelle de la cible et refuse une base contenant des tables ou séquences utilisateur. Une cible non vide pourrait contenir du travail à préserver. N’utilisez pas --clean ou --create : ces options peuvent supprimer des objets existants ou reprendre le nom original de la base archivée.
Dans la commande suivante, && n’exécute la partie droite que si le contrôle de vide réussit. --dbname=service=shop-copy choisit explicitement la cible indépendante. --no-owner --no-privileges évite d’importer comptes et autorisations source. --single-transaction traite l’import comme une unité : un échec l’annule. --exit-on-error s’arrête à la première erreur de base. Exécutez la commande protégée complète :
./shopctl empty && pg_restore --dbname=service=shop-copy --no-owner --no-privileges --single-transaction --exit-on-error backups/cutoff.dump
Vous devez voir l’identité cible puis EMPTY: restore may proceed. Une restauration pg_restore réussie n’affiche généralement rien. Si une répétition affiche REFUSED: target is not empty, le premier import a peut-être réussi : examinez la copie avant toute réinitialisation.
records copy lit les vraies lignes liées des commandes et articles :
./shopctl records copy
Attendez R-101, R-102 et R-103, total $98.00, sans R-104. Dans Restored Copy, ouvrez Orders, R-103 et son reçu. Les deux Print pair et $36.00 doivent être présents. Original Shop doit toujours contenir R-104 de Sol et totaliser $124.00 pour ses commandes.
Si vous avez choisi une mauvaise archive ou devez reprendre un échec, réinitialisez uniquement la cible jetable du cours. L’outil affiche son identité et exige son nom exact. Cette commande est une récupération facultative, pas une routine après réussite :
./shopctl reset-copy shop_copy
Elle supprime uniquement shop_copy. Répétez ensuite la restauration protégée. Ne réinitialisez ou supprimez jamais l’original et n’utilisez aucune suppression générale des bases. Le contrôle observe votre copie réelle ; il ne la restaure pas pour vous.
Prouver que la copie écrit sans modifier l’original
Dans cette étape, vous testerez une écriture réelle dans la copie. Un affichage en lecture seule peut sembler correct alors que séquences, relations ou connexion d’écriture sont défaillantes. Vous passerez une vraie commande de test dans la copie indépendante, puis comparerez les boutiques. Restez dans Restored Copy, ouvrez Collection et descendez au formulaire. Avant l’envoi, lisez Writing to: shop_copy · RESTORED COPY et le bandeau rouille. Ne faites pas ce test dans Original Shop.
Saisissez exactement :
| Champ | Valeur |
|---|---|
| Reference | R-901 |
| Name | Copy test |
| Item | Print pair |
| Quantity | 1 |
Sélectionnez Place order ↗. R-901 contient un article et totalise $18.00. Téléchargez le reçu et confirmez shop_copy. Cette commande utilise la séquence et la relation de clé étrangère restaurées ; ce n’est pas une page préécrite. Un nouvel envoi de la même référence renvoie Already recorded sans créer une seconde commande.
Ouvrez Orders dans cette même copie. Elle doit contenir R-101, R-102, R-103 et R-901, sans R-104. Dans Original Shop, ouvrez Orders : R-101 à R-104 restent présents, sans R-901. Deux bandeaux différents ne suffiraient pas si les applications écrivaient dans la même base.
Dans Workstation, affichez les deux identités puis lisez les jeux de données réels :
./shopctl identity
./shopctl records copy
./shopctl records source
La copie totalise $116.00 ; la source reste à $124.00. Exiger que toutes les lignes restent éternellement identiques serait incorrect : R-104 appartient uniquement à la source ultérieure, et R-901 uniquement à la copie restaurée. Comparez les commandes communes au point limite et la différence permise de chaque côté.
Le formulaire original refuse R-901 sans l’écrire. Si vous avez choisi le mauvais onglet, lisez Check the destination, passez dans Restored Copy et envoyez là. Les références inconnues sont aussi refusées : corrigez puis réessayez. Si un R-901 existant comporte un mauvais nom, article ou quantité, ./shopctl correct copy R-901 affiche la cible réelle et corrige uniquement ce test en Copy test / Print pair / 1. Les autres commandes de la copie et toutes les données source restent intactes. Si seule la copie jetable nécessite un nouvel essai propre, utilisez exactement la récupération reset-copy shop_copy de l’étape 1, restaurez à nouveau et ajoutez le test une seule fois.
Le contrôle final lit bases et sites actifs, préserve le fichier téléversé sans rapport et teste l’archive dans une autre base jetable. Il ne crée pas votre commande et ne répare pas la copie. Votre sauvegarde dispose maintenant de preuves de données complètes, d’une limite claire et d’une restauration indépendante accessible en écriture.
Résumé
Vous avez identifié la source et la cible réelles, protégé une destination vide, restauré une archive personnalisée dans une transaction et lu les détails complets. La nouvelle commande propre à la copie a démontré un service indépendant accessible en écriture, tandis que l’original conservait sa commande ultérieure. Cet exercice prouve une répétition de restauration logique, pas une stratégie complète de reprise en production.


