Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 11117|Répondre: 0

[Source] Nouvelles fonctionnalités de l’ORACLE 11g - Permet aux verrous DDL d’attendre les verrous DML

[Copié le lien]
Publié sur 26/11/2014 15:54:15 | | |
J’en ai aussi déjà parléORACLEArticle sur les nouvelles fonctionnalités 11G, maintenantORACLELe 11g est devenu grand publicORACLEversion de la base de données, comprendre et apprendreORACLELes nouvelles fonctionnalités du 11G sont cruciales, et moi aussiORACLEPour les débutants des nouvelles fonctionnalités de 11G, j’aimerais partager ici mon processus d’apprentissage et mon expérience.
Cet article rapporte principalement que :ORACLEUne nouvelle fonctionnalité du 11g permet aux verrous DDL d’attendre les verrous DML, un thème également partagé par M. Zhang Leyi (kamus) lors de l’événement ACOUG le 30 juin.
Dans les versions antérieures à 11g, par défaut, les verrous DDL n’attendent pas les verrous DML, et si vous effectuez des opérations DDL sur une table avec des verrous DML, cela reviendra immédiatement à une défaillance (sauf pour la même SESSION), faisons une expérience simple, insérons des données dans le STREAM de la table en SESSION1, ne soumettez pas, à ce moment-là le STREAM de la table aura un verrou DML, et exécutez l’opération STREAM de la table tronque en SESSION2, et il retournera immédiatement une défaillance :
SESSION1 >insérer dans le flux sélectionner * depuis dbdream ; 10 lignes créées. SESSION2 > tronque du flux de table ; tronquer le flux de table * ERREUR à la ligne 1 : ORA-00054 : resource busy and acquire with NOWAIT specified ou timeout expired in version 11g,ORACLEIntroduit DDL_LOCK_TIMEOUT paramètre, permettant aux verrous DDL d’attendre les verrous DML, qui contrôlent le temps d’attente des verrous DDL ; en secondes, la valeur par défaut est 0, c’est-à-dire que les verrous DDL n’attendent pas les verrous DML, la valeur maximale est de 1 million, c’est-à-dire 11,5 jours, ce paramètre peut être défini globalement ou au niveau SESSION.
SESSION2 >paramètre de montrer ddl_lock_timeout VALEUR DU TYPE DE NOM ----------------------- ----------- ------ ddl_lock_timeout entier 0 SESSION2 >modifier l’ensemble de session ddl_lock_timeout=2000000 ; ERREUR : ORA-00068 : valeur invalide 2000000 pour le paramètre ddl_lock_timeout, doit être comprise entre 0 et 1000000 Ce qui suit démontre l’effet du paramètre DDL_LOCK_TIMEOUT suivant, et prend également la table STREAM ci-dessus comme exemple : la table STREAM actuelle possède toujours un verrou DML, dans la SESSION2 sera DDL_LOCK_ TIMEOUT est réglé à 60 secondes, puis l’opération TRONQUE est exécutée, et la défaillance ne sera pas immédiatement renvoyée, mais attendra 60 secondes, et si le verrouillage DL de la table STREAM n’est pas libéré dans les 60 secondes, il reviendra à un échec.
SESSION2 >alter session set ddl_lock_timeout=60 ; Session modifiée. SESSION2 > définir le timing sur SESSION2 > flux de table tronqué ; --À ce stade, SESSION2 suspend, attend que SESSION1 libère le verrou DML dans les 60 secondes, retours échoués après 60 secondes tronque le flux de table * ERREUR à la ligne 1 : ORA-00054 : resource busy and acquire avec NOWAIT spécifié ou timeout expiré Elapsed : 00:01:00.01 L’émergence de DDL_LOCK_TIMEOUT paramètres simplifie grandement le fonctionnement des DBA, par exemple, nous voulons ajouter un champ à une table, mais cette table comporte beaucoup d’opérations DML, et nous ne pouvons pas utiliser la méthode ALTER SYSTEM KILL SESSION pour mettre fin à ces opérations, donc si nous voulons ajouter des champs à cette table, nous devons effectuer l’opération d’ajout de champs d’innombrables fois, ou écrire des scripts pour faire ce travail, et maintenant nous avons DDL_ LOCK_TIMEOUT paramètre, il suffit de régler la valeur de ce paramètre légèrement plus grande, et nous n’avons pas à nous soucier d’exécuter SQL, montrons ce processus ci-dessous.
SESSION2 ajouter des champs :
SESSION2 >modifier table stream ajoute jpg_path varchar2(255) par défaut '/home/Oracle/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 > engagé ; Commit terminé. SESSION2 >modifier table stream ajoute jpg_path varchar2(255) par défaut '/home/Oracle/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/Oracle/ 2 18-0221-003 1 /home/Oracle/ 3 18-0221-003 2 /home/Oracle/ 4 18-0221-003 3 /home/Oracle/ 5 18-0223-005 1 /home/Oracle/ 6 18-0223-005 2 /home/Oracle/ 7 18-0223-005 3 /home/Oracle/ 8 18-0223-005 4 /home/Oracle/ 9 18-0223-005 5 /home/Oracle/ 10 18-0223-005 6 /home/Oracle/ 10 rows selected.




Précédent:Déclaration SQL pratique : estimation de la date
Prochain:Oracle ORA-12541 : solution de contournement TNS :sans erreur d’écouteur
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com