J'ai un référentiel Oracle opérationnel et a dit 10 millions d'enregistrements. L'un de la table est de direMise à niveau du schéma Oracle avec une nouvelle contrainte: comment puis-je réduire les temps de mise à niveau?
CREATE TABLE TABLE_A
NAME VARCHAR2(128),
VER VARCHAR2(128),
TYPE VARCHAR2(32),
DESCRIPTION VARCHAR2(256),
CONSTRAINT TABLE_A_PK PRIMARY KEY ("NAME","VERSION");
Ce tableau est utilisé pour longtemps et dire maintenant, j'ai une obligation de changer la contrainte de clé primaire. Maintenant, j'ai l'obligation d'avoir une autre colonne dire ID et clé primaire pour être la combinaison de NAME, VER, TYPE et LANG.
Dans le script de mise à niveau que je peux avoir quelque chose comme
EXECUTE IMMEDIATE
ALTER TABLE TABLE_A ADD LANG VARCHAR2(32);
EXECUTE IMMEDIATE
UPDATE TABLE TABLE_A SET LANG ='|| 'en_US';
EXECUTE IMMEDIATE
UPDATE TABLE TABLE_A SET TYPE='||'n/a'||' WHERE TYPE IS NULL;
Avant TYPE peut avoir des valeurs et parfois nulle. Puisque après la mise à niveau sa partie de clé primaire, elle ne peut pas être nulle, ce qui la rend n/a si elle est nulle.
Mais faire plus de chose pour 10 millions d'enregistrements nécessite un temps d'arrêt de mise à niveau de 5 heures au moins. Y a-t-il un autre moyen de rendre une colonne précédente comme clé primaire et de ne pas exiger beaucoup de temps d'arrêt? Veuillez également me suggérer si je me trompe dans mon approche. Merci à l'avance