Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

deadlock i ORA-00060 greska kako resiti problem ?

[es] :: Oracle :: deadlock i ORA-00060 greska kako resiti problem ?

[ Pregleda: 3235 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ctpaba
Robert IVKOVIC
System admin, network admin, webmaster,
dziber, ...
Paris

Član broj: 597
Poruke: 318
*.206-83.static-ip.oleane.fr.

ICQ: 230666231
Sajt: www.ctpaba.org


+1 Profil

icon deadlock i ORA-00060 greska kako resiti problem ?28.03.2006. u 16:21 - pre 219 meseci
Imam WebLogic i Oracle 9i (na Solarisu 8) i ekipa za developement radi sa JMS-om
sad razvili su jedan program u J2EE koji se kaci na Oracle i taj isti radi na druga dva systema bez problema ali kod mene blokira mi kompletno Oracle, naime jedna komanda delete mi generise deadlock i sve stane dok ne ubijem proces (sa kill -9)

na jednom mestu sam nasao da treba da uradim ovo

To fix this, recreate the segment with higher INITTRANS and/or PCTFREE values. This will allow more space in the data blocks for Oracle to allocate more transaction entries (24 bytes at a time) when required.


e sad ako samo moze neko da mi objasni kako da ovo uradim ??

10x
CTPABA uber alles
www.ctpaba.org
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?30.03.2006. u 09:27 - pre 219 meseci
Mozda ne moras mijenjati PCTFREE i INITTRANS - pokusaj prvo u aplikaciji da cesce potvrdjujes izmjene (COMMIT). Recimo nakon svakih 500 ili 1000 obrisanih redova, potvrdi te izmjene sa COMMIT.

Ako to ne bude proslo, onda imas vjerovatno malene rollback segmente ili malen UNDO tablespace. Povecaj velicinu tih rollback segmenata (hint: ALTER ROLLBACK SEGMENT) ili velicinu UNDO tablespacea (hint: postavi ga da bude AUTOEXTEND ili ga povecaj sa ALTER TABLESPACE ADD DATAFILE '/path/do/fajlova/undo02.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M; ili sa ALTER DATABASE DATAFILE '/path/do/undofajla/undo01.dbf' RESIZE 200M;).
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

_simma_
Predrag Simovic
Kragujevac

Član broj: 89818
Poruke: 32
213.137.106.*



Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?30.03.2006. u 10:33 - pre 219 meseci
Deadlock se jako retko javlja kod oracle-a. Najčešće se javlja u sledeća dva slučaja:
- kad imaš neindexiran forign key na child tabeli
- ili ako se jako često i konkurnetno radi update kolone nad kojom je bitmap index (zato što mora da se obnovi kompletna bitmapa kod svakog update-a).

E sad ovaj drugi slučaj otpada kod tebe pošto ti radiš delete, a i iluzorno je da se stavlja bitmap index nad kolonom koja se često ažurira.
Pre će biti da je kod tebe ovaj prvi slučaj. Ako ti nije indexirana kolona u child tabeli nad kojom je foreign key onda će pri brisanju sloga u parent tabeli oracle da zaključa celu child tabelu. I onda ako ti je još aplikacija napisana tako da neko hoće da radi neki DML nad tom tabelom - eto tebi deadlock-a
Znači proveri da li ti je indexiran foreign key u child tabeli!!

Imaš na internetu (asktom.oracle.com) skriptove da pronađeš neindexirane foreign key-ove. Ja lično mislim da ovo nema veze sa brojem transakcija koje dozvolajvaš na nekom bloku, dedalock može da izazovu dve trasnakcije ako se izvrše u nezgodnom terminu.
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?30.03.2006. u 11:46 - pre 219 meseci
Pogledaj trace file u UDUMP direktoriju i pronadji sta uzrokuje tu deadlock gresku.
Mozes prvo podesiti session ovako:
Code:
alter session set events '60 trace name errorstack, level 10';

po pokreni opet aplikaciju i vidi sta ce se nalaziti u trace fajlu.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

ctpaba
Robert IVKOVIC
System admin, network admin, webmaster,
dziber, ...
Paris

Član broj: 597
Poruke: 318
*.206-83.static-ip.oleane.fr.

ICQ: 230666231
Sajt: www.ctpaba.org


+1 Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?30.03.2006. u 13:02 - pre 219 meseci
u trace fajlu pise kao "ovo nije oracle greska..... bla bla" medjutim ekipa iz developement centra baca svu krivicu na oracle koji se nalazi na masini u mom domenu, a usput DBA momentalno nije tu tako da sam stesnjen posto je moje poznavanje Oracla jako slabo.

Evo sta stoji u fajlu .trc

Code:

*** 2006-03-27 20:12:39.621
*** SESSION ID:(24.31) 2006-03-27 20:12:39.610
DEADLOCK DETECTED
Current SQL statement for this session:
delete from OrderEappro where id=:1
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TM-00007be3-00000000        26      24    SX   SSX       27      25    SX   SSX
TM-00007be3-00000000        27      25    SX   SSX       26      24    SX   SSX
session 24: DID 0001-001A-0000000A      session 25: DID 0001-001B-0000000A
session 25: DID 0001-001B-0000000A      session 24: DID 0001-001A-0000000A
Rows waited on:
Session 25: obj - rowid = 00007BE5 - AAAHvlAABAAAAAAAAA
  (dictionary objn - 31717, file - 1, block - 0, slot - 0)
Session 24: no row
Information on the OTHER waiting sessions:
Session 25:
  pid=27 serial=6 audsid=25749 user: 70/EAPPRO2
  O/S info: user: , term: , ospid: 1234, machine: GR9SOXNB
            program:
  Current SQL Statement:
  delete from OrderEappro where id=:1
End of information on OTHER waiting sessions.


[Ovu poruku je menjao ctpaba dana 30.03.2006. u 14:03 GMT+1]
CTPABA uber alles
www.ctpaba.org
 
Odgovor na temu

_simma_
Predrag Simovic
Kragujevac

Član broj: 89818
Poruke: 32
213.137.106.*



Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?30.03.2006. u 13:46 - pre 219 meseci
I nije oracle greška nego je do projektanta koji nije video da ovo može da se desi.
Ovde tebi sesija 25 čeka na sesiju 24 i obrnuto. A izvršava operaciju delete from OrderEappro where id=:1. Sesija 25 čeka na slog koji ima rowid 'AAAHvlAABAAAAAAAAA' a sesija 24 izgleda da ne traži nikakav slog trenutno (što je malo čudno), ali se vidi da obe sesije gađaju isti objekat odnosno verovatno ovu tabelu OrderEappro. To se vidi iz kolone Resource Name.

Vidi za početak da li je možda tabela OrderEappro parent tabela za neki foreign key. Ako jeste onda proveri da li ti je taj foreugn key indexiran i proveri na šta liče te iste tabele na ona druga dva sistema koja ti se ne bune.

Imam ovde sličan slučaj od AskTom-a pa vidi dal' ti liči:
Code:
Reviewer:  Branka  from VA, USA

In following case how to find out objects involved in deadlock.  It's showing no 
rows and problem is with delete, not with update.
Also, what does it mean when you have 2 same Resource Name? 
I know that second package call first one and delete statement is in that first 
one. Is resource name name of that Stored Procedure?

DEADLOCK DETECTED
Current SQL statement for this session:
DELETE FROM PARTY WHERE PARTY_ID = :b1
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
3c38b45b8      6184  package body PROD_USR.PARTY_CHG_PKG
3cf9d0ff0      1554  package body PROD_USR.IG_PKG
3d5d6de10         3  anonymous block
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TM-0000743c-00000000        49     356    SX   SSX       87      97    SX   SSX
TM-0000743c-00000000        87      97    SX   SSX       49     356    SX   SSX
session 356: DID 0001-0031-0000441C    session 97: DID 0001-0057-00002C3E
session 97: DID 0001-0057-00002C3E    session 356: DID 0001-0031-0000441C
Rows waited on:
Session 97: no row
Session 356: no row
Information on the OTHER waiting sessions:
Session 97:
  pid=87 serial=55565 audsid=8033546 user: 60/PROD_USR
  O/S info: user: nobody, term: , ospid: 14814, machine: web3.att.teetimes.com
            program: [email protected] (TNS V1-V3)
  application name: [email protected] (TNS V1-V3), hash value=0
  Current SQL Statement:
  DELETE FROM PARTY WHERE PARTY_ID = :b1
End of information on OTHER waiting sessions.


 


Followup:

is party a parent table in a parent child relationship? 


GOTO a page to Bookmark Review | Bottom | Top
DEADLOCK DETECTED   November 30, 2004
Reviewer:  Branka  from VA, USA

yes it is.
That is last statement in the Stored Procedure. Before it, all child records are 
deleted. 


Followup:

is the foreign key in the child table INDEXED? 


GOTO a page to Bookmark Review | Bottom | Top
DEADLOCK DETECTED   November 30, 2004
Reviewer:  Branka  from VA, USA

Only one of child tables has index on foreign key column (PARTY_ID). Party table 
has 5 child tables.
I find one thing, but I am not sure is that relevant (I changed it any way).
At the beginning of the Stored procedure I have:
SELECT NVL(MIN(COUPON_ID),0) INTO N_TARGET
   FROM COUPON_PLAY
   WHERE PARTY_ID = nParty_id;

IF N_TARGET > 0 THEN
     DELETE FROM COUPON_PLAY
     WHERE COUPON_ID = N_TARGET
     AND PARTY_ID    = nParty_id;
   END IF;

And than on the end:
    DELETE FROM COUPON_PLAY
      WHERE PARTY_ID = nParty_id;

I commented out first part, because it does not seem to have any reason for 
that.

This is not table with index on foreign key.

 


Followup:

this is totally due to unindexed foreign keys.

(and think about it -- you delete from T where fkey = :x -- full scan?  not 
exactly what you probably want)


run this:



set echo on
                                                                                
drop table c;
drop table p;
                                                                                
create table p ( x int primary key );
create table c ( x references p );
REM create index c_idx on c(x);
                                                                                
insert into p select rownum from all_users where rownum <= 2;
insert into c select * from p;
commit;
                                                                                
delete from c where x = 1;
set echo off
prompt in another session:
prompt delete from c where x = 2;;
set echo on
pause
set echo off
prompt in another session:
prompt delete from p where x = 2;;
prompt right after this blocks...
delete from p where x = 1;

------------------------------------------------------------

Try it with the index on and off.




Šta da ti kažem puno sreće i nemoj da te lože developeri uglavnom su oni krivi :-))
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?30.03.2006. u 13:49 - pre 219 meseci
Aplikacija je lose uradjena. Vidis da se session medjusobno blokiraju...
Code:
Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TM-00007be3-00000000        26      24    SX   SSX       27      25    SX   SSX
TM-00007be3-00000000        27      25    SX   SSX       26      24    SX   SSX


[Ovu poruku je menjao Dejan Topalovic dana 30.03.2006. u 14:49 GMT+1]
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

ctpaba
Robert IVKOVIC
System admin, network admin, webmaster,
dziber, ...
Paris

Član broj: 597
Poruke: 318
*.206-83.static-ip.oleane.fr.

ICQ: 230666231
Sajt: www.ctpaba.org


+1 Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?30.03.2006. u 16:14 - pre 219 meseci
ok izlozio sam problem developer-u i on kaze da bi u tom slucaju oracle trebao da stavi jednu od sesija u st-by dok se prva ne zavrsi i ne bi trebalo to da blokira ceo oracle vec eventualno samo jednu instancu dok se meni sve blokira. Kad sodje taj famozni deadlock onda pokusam da se logujem sa sqlplus-om i login prodje ok a kad unesem password onda mi se tu "zaledi". Znaci mogu li krivicu baciti kompletno na njih ili mogu ja izmeniti neki parametar na mojoj masini da ovo "prodje" jer koliko sam u toku ova aplikacija je u test fazi vec tri meseca i zasad je sve bilo ok?

10x
CTPABA uber alles
www.ctpaba.org
 
Odgovor na temu

_simma_
Predrag Simovic
Kragujevac

Član broj: 89818
Poruke: 32
213.137.106.*



Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?31.03.2006. u 07:39 - pre 219 meseci
Vidi ovako. Deadlock se i dešava zato što dve sesije blokiraju jedna drugu, inače se ne bi ni zvalo deadlock nego samo lock. E kad se to desi oracle reši da jednu od te dve sesije "žrtvuje", odnosno toj sesiji uradi rollback i to ti prijavi u alertlog-u. Druga sesija nastavi normalno da radi. Znači nema nikakvog stand by režima za sesije, on samo ima neki time-out dok ne dodje do zaključka da je u pitanju deadlock i reši da jednu sesiju otkači.

Developer je u pravu, deadlock ne bi smeo da blokira celu instancu, jedino ako ti taj lock nije uzrokovao da ti ostale sesije dugo čekaju pa ti se nagomilalo toga i onda ti pojedeni resursi na mašini. Kad on oslobodi deadlock, jel ti se onda sve vrati u normalu?

Malo si mi nejasan ovde: Kažeš da ti login prođe bez problema ali da kad uneseš password da ti tu pravi problem. Onda ti login nije ni prošao nego si samo uneo username. Vidi kako ti se ponaša sam server, koliko je oracle.exe zauzeo procesora i memorije u tom trenutku.


A pre svega jesi uopšte video ono što sam ti rekao za index-e?????!!!!
 
Odgovor na temu

ctpaba
Robert IVKOVIC
System admin, network admin, webmaster,
dziber, ...
Paris

Član broj: 597
Poruke: 318
*.206-83.static-ip.oleane.fr.

ICQ: 230666231
Sajt: www.ctpaba.org


+1 Profil

icon Re: deadlock i ORA-00060 greska kako resiti problem ?31.03.2006. u 16:00 - pre 219 meseci
EVO RESEN PROBLEM !

indexi su bili u pitanju ;) mada je i u samom kodu bila neka greska koju su otkrili skoro u isto vreme kada smo cackali indexe tako da sa grebes ga sta je rezultovalo da sve proradi inace oracle je zauzimao oko 80% CPU a da kada sam rekao login mislio sam unos username-a, lose sam se izrazio.

Eh da on nije mogao nikako osloboditi deadlock jer bi mu se zakucao i webLogic i TOAD jedino sam ja mogao da ubijem proces koji je imao najduze trajanje i onda mi je to oslobadjalo sve ostalo.

Hvala momci

[Ovu poruku je menjao ctpaba dana 31.03.2006. u 17:03 GMT+1]
CTPABA uber alles
www.ctpaba.org
 
Odgovor na temu

[es] :: Oracle :: deadlock i ORA-00060 greska kako resiti problem ?

[ Pregleda: 3235 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.