Quelles sont les opérations autorisées et interdites sur une base de données Oracle en cours d'exécution? Plus précisément, comment est-ce géré lors de l'ajout, la suppression et le changement de nom des colonnes?Oracle: ajout, renommage et suppression de colonnes dans une base de données active
Répondre
Vous pouvez ajouter, supprimer et renommer des colonnes sans problème.
Défauts,
l'ajout d'une colonne avec une valeur par défaut force la base de données à émettre une déclaration de mise à jour des lignes existantes. Soyez prudent sur les grandes tables ou la charge va augmenter. Renommer une colonne peut casser votre application.
Prévoyez cela mais sinon, ça devrait aller. Sachez également que vous générez des erreurs pour les requêtes qui tentent d'accéder à la colonne, sauf si vous planifiez correctement les choses.
Vous pouvez effectuer presque toutes les modifications de ce type sur une instance en cours d'exécution. Bien sûr, je ne recommanderais pas de faire cela avec des utilisateurs dans le système. Cela dit, Oracle 11.2 a une nouvelle fonctionnalité appelée EBR, Edition-Based-Redefinition. Pensez-y comme être capable de "commettre" et "rollback" des changements DDL. Cela pourrait être utile, selon les circonstances.
Si j'avais besoin de faire cela (surtout sur une grande table très utilisée), je programmerais certainement la tâche quand les utilisateurs ne sont pas sur le système ou ferment l'application pour une fenêtre de maintenance. – HLGEM
EBR est massivement complexe et est une option de licence supplémentaire. Je ne peux penser qu'à quelques cas quand c'est pratique. – erbsock
J'ai compris que EBR faisait partie intégrante de la base de données, mais elle pourrait être erronée. Et "massivement complexe" peut être sans importance si l'utilisation de la fonctionnalité est nécessaire. C'était simplement présenter une option. –
vous pouvez faire ces choses. Si la base de données trouve une raison d'interdire le changement, vous obtiendrez un joli code malveillant avec un code d'erreur cool, vous pouvez vérifier ce que vous devez faire ensuite.
vous aurez moins de problèmes s'il n'y a pas d'autres requêtes runnign d'utilisateurs ou aucun travail en arrière-plan tc.
changements en ligne (par exemple alors que d'autres sessions sont actives) peut être effectuée à l'aide DBMS_REDEFINITION (décrit here, here et here) mais qui est une Enterprise Edition feature
Cela semble très utile. Avez-vous déjà échoué à cause d'une recompilation de paquets? C'est généralement notre plus gros problème de changer la base de données active. De plus en plus bizarre, la session 11i semble perdre son user_id alors fnd_global.user_id renvoie -1. – JOTN
Je serais extrêmement prudent de renommer les colonnes. Il y a beaucoup de choses que vous pourriez casser en faisant cela. – HLGEM