Mai mult
ORA-00054: resurse ocupat și de a dobândi cu NOWAIT specificate sau de expirare a expirat
De ce primesc aceasta eroare baza de date atunci când am actualiza un tabel?
EROARE la linia 1: ORA-00054: resurse ocupat și de a dobândi cu NOWAIT specificate sau de expirare a expirat
175
14
Masa este deja blocat de unele interogare. De exemplu, poate fi executat "selectați pentru a actualiza" și nu au comis/rollbacked și a tras-o altă interogare de selectare. Face un commit/rollback înainte de a executa interogarea.
de aici https://stackoverflow.com/questions/3075738/ora-00054-resource-busy-and-acquire-with-nowait-specified
De asemenea, puteți căuta sql,nume de utilizator,o mașină,un port de informații și de a ajunge la proces real care deține o conexiune
Vă Rugăm Să Omoare Oracle Sesiune
Folosesc de mai jos interogare pentru a verifica sesiune activă info
ucide ca
(De exemplu,
modifice sistemul de omor sesiune '13,36543'
;)Referință http://abeytom.blogspot.com/2012/08/finding-and-fixing-ora-00054-resource.html
Acolo este un foarte ușor de lucru în jurul valorii de această problemă.
Dacă tu a alerga un 10046 urme pe sesiune (google asta... e prea mult de explicat). Veți vedea că, înainte de orice DDL operare Oracle face următoarele:
MASĂ DE BLOCARE 'TABLE_NAME' NU AȘTEPTAȚI
Deci, dacă o altă sesiune a deschis o tranzacție obține o eroare. Deci fix este... tobele va rog. Problema propria dvs. de blocare înainte de DDL și lăsa 'NU AȘTEPTAȚI'.
Notă Specială:
dacă faci divizare/cădere partiții oracle doar blochează partiție. ... deci yo pot bloca doar partiția subpartition.
Deci... Următorii pași rezolva problema.
DML declarații va 'stai' sau ca dezvoltatorii numesc 'stea' în timp ce tabelul este blocat.
Eu folosesc acest lucru în codul care se execută la un loc de muncă să scadă partiții. Acesta funcționează bine. Acesta este într-o bază de date care este în mod constant introducerea la o rată de câteva sute de insertii/secundă. Fără erori.
dacă vă întrebați. Face acest lucru în 11g. Am făcut acest lucru într-10g înainte la fel de bine în trecut.
Această eroare se produce atunci când resursa este ocupată. Verificați dacă aveți orice constrângeri referențiale în interogare. Sau chiar tabele pe care le-am menționat în interogare poate fi ocupat. Acestea ar putea fi angajat cu un alt loc de muncă, care va fi cu siguranță enumerate în următorul rezultatele interogării:
Găsi SID,
În cazul meu, am fost destul de sigur că a fost unul dintre mea sesiuni care a fost blocarea. Prin urmare, este sigur să faceți următoarele:
SELECT * FROM V$SESSION UNDE OSUSER='my_local_username';
Sesiunea a fost inactiv, dar nu a avut loc încă de blocare într-un fel. Rețineți că poate fi necesar să utilizați o altă UNDE condiție în cazul dumneavoastră (de exemplu, încercați să "numele de UTILIZATOR" sau "MAȘINĂ" câmpuri).
modifice sistemul de omor sesiune de '<id>, <serial#>';
Editat de @thermz: Dacă niciuna din precedentele deschide-sesiune de întrebări munca încercați această unul. Această interogare poate ajuta pentru a evita erori de sintaxă în timp ce uciderea sesiuni:
SELECTA 'să MODIFICE SISTEMUL de OMOR SESIUNE '''||SID||','||SERIAL#||''' imediate;' DE la V$SESSION UNDE OSUSER='my_local_username_on_OS'
Acest lucru se întâmplă atunci când o sesiune alta decât cea utilizată pentru a modifica un tabel deține un sistem de blocare probabil din cauza unei DML (update/delete/insert). Dacă sunteți în curs de dezvoltare un nou sistem, este probabil ca tu sau cineva din echipa ta probleme declarația de actualizare și te-ar putea ucide sesiune fără prea mult consecință. Sau ai putea comite din acea sesiune odată ce știi cine a sesiunii deschise.
Dacă aveți acces la un SQL admin sistemul folosi pentru a găsi ofensatoare sesiune. Și poate ucide.
Ai putea folosi v$session și v$de blocare și altele, dar vă sugerez google cum de a găsi acea sesiune și apoi cum să-l omoare.
Într-un sistem de producție, depinde. Pentru oracle 10g și mai în vârstă, ai putea executa
Într-o sesiune separată, dar avea următoarele gata în cazul în care este nevoie de prea mult timp.
Depinde de ce sistem ai, sistemele mai vechi, sunt mult mai probabil pentru a nu comite de fiecare dată. Asta este o problemă, deoarece nu poate fi de lungă durată încuietori. Deci, de blocare ar împiedica orice nouă încuietori și așteptați pentru un sistem de blocare care cine știe când va fi lansat. Care este de ce aveți altă declarație gata. Sau ai putea să te uiți pentru UNIX script-uri de acolo, care fac lucruri similare în mod automat.
În versiunea 11g există o nouă variabilă de mediu, care stabilește o perioadă de așteptare. Cred că a face ceva similar cu ceea ce am descris. Tine minte ca de blocare probleme don't să dispară.
În cele din urmă că ar fi mai bine să așteptați până când sunt puțini utilizatori în sistem pentru a face acest tip de întreținere.
Doar verifica pentru procesul care deține sesiune și să-l Ucidă. Își reveni la normal.
Mai jos SQL va găsi procesul
Apoi l omoare
SAU
un exemplu l-am găsit online pare să aibă nevoie de la id de instanță, precum și modifica sistemul de omor sesiune '130,620,@1';
Problema ta se pare ca se amesteca DML & DDL operațiuni. A se vedea această adresă URL care explică această problemă:
http://www.orafaq.com/forum/t/54714/2/
Am reusit sa lovit de aceasta eroare, atunci când pur și simplu a crea un tabel! Acolo a fost, evident, nici un conflict problemă pe o masă care nu't există încă. `CREAȚI TABELUL declarația conținea o CONSTRÂNGERE fk_name CHEIE EXTERNĂ clauza de referire la o bine-populate de masă. Am avut de a:
Am avut această eroare se întâmplă atunci când am avut 2 script-uri am fost difuzate. Am avut:
Am făcut o masă picătură, apoi crearea de masă ca contul #1. Am dat un tabel de actualizare pe contul #2's-a sesiune. Nu a comis-o schimbă. Re-ran tabel drop/crearea script ca contul #1. Am eroare pe
drop table x
comanda.Am rezolvat-o prin rularea `a COMIS; în SQL*Plus a sesiune a cont #2.
Eu confruntă, de asemenea Problemă similară. Nimic programator trebuie să facă pentru a rezolva această eroare. Am informat-o pe a mea oracle DBA echipa. Ei ucid sesiunii și a lucrat ca un farmec.
Soluția dată de Shashi's link-ul este cel mai bun... nu are nevoie să contactați dba sau altcineva
face o copie de rezervă
șterge toate rândurile
introduce-ți rezervă.