Si vous vraiment ne pouvez pas attendre aussi longtemps pour lancer votre mise à jour, et peut vivre avec le drapeau étant nul au lieu de « N », alors vous pouvez le faire très rapidement (non testé, mais devrait fonctionner):
Vous pouvez par la suite supprimer les points de contrôle inutilisés si vous souhaitez récupérer de l'espace (notez que la suppression prendra un certain temps, donc faites attention si vous choisissez de le faire).
espoir qui aide
EDIT: Merci à @TTT pour cette article, apparemment dans Oracle 11g peut stocker une valeur par défaut dans le dictionnaire de données plutôt que d'effectuer une mise à jour toutes les lignes (ce que je pensais des expériences précédentes) . Cela signifie que vous pouvez utiliser la valeur 'N' au lieu de NULL. Assurez-vous que vous spécifiez NOT NULL, ainsi que la valeur par défaut:
SQL> set timing on
SQL> drop table test1
Table dropped.
Elapsed: 00:00:00.23
SQL> create table test1
(
col1 varchar2(10),
flag char(1)
)
Table created.
Elapsed: 00:00:00.14
SQL> insert into test1
select 'x','Y'
from dual
connect by level <= 1000000
1000000 rows created.
Elapsed: 00:00:02.09
SQL> alter table test1 set unused column flag
Table altered.
Elapsed: 00:00:00.07
SQL> alter table test1 add (flag char(1) default 'N' not null)
Table altered.
Elapsed: 00:00:01.01
Sans la « NOT NULL » et juste un défaut, il a fallu plus de 20 secondes, montrant cette astuce « rapide = true » ne fonctionne lors de la spécification non nulle et un défaut (ce qui a vraiment du sens).
utilisez d'abord l'indexation puis exécutez la mise à jour! – vijay
Asha n'a pas de condition, donc l'indexation de la table n'aidera pas. En plus de cela, la création de l'index prendra probablement plus de temps que la mise à jour de toute façon. –
@Asha: Vous devrez probablement vivre avec ... –