sql >> Databáze >  >> RDS >> Oracle

Oracle Locks &table locks:Jak to funguje

Databáze Oracle je široce používaná databáze v průmyslu. Zde se snažím vysvětlit  zámky Oracle, zámky tabulek Oracle

Obsah

Co je Oracle Enqueue a zámky

Enqueue jsou zámky Oracle, které serializují operace do sdílené struktury. Sdílenou strukturou může být tabulka, redo vlákna a transakce.

Když uživatel A aktualizuje řádek 12 v tabulce, získá transakci Enqueue (zámek). To je získáno tak, že každý uživatel, kterému se pokouším aktualizovat stejný řádek 12 v tabulce, bude čekat, dokud uživatel A nepotvrdí transakci. Pokud se tedy nyní uživatel B pokusí aktualizovat stejný řádek, bude čekat ve frontě.

Jakmile uživatel A potvrdí transakci, transakce uživatele B bude pokračovat

V databázi jedné instance máme lokální frontu, zatímco s Oracle RAC máme lokální frontu a globální frontu pro správu sdíleného prostředku

Co je identifikátor Enqueue

Enqueue jsou jednoznačně identifikovány pomocí formátu

Zdroj může

TM -> stolní zámky

MR-> Obnova médií

TX-> Transakce

Id1 a id2 jsou čísla, která se liší pro různé typy zdrojů

Stejně jako u table lock (TM) se zapisuje jako

TM--0

Když uživatel požádá o přístup ke zdroji v určitém režimu, vygeneruje se identifikátor fronty, jak je vysvětleno výše

Enqueue jsou drženy v tomto režimu

SS:  Režim sdílení řádků

SX:Režim výhradní řádky

S:  Uzamkněte stůl v režimu sdílení

SSX:Uzamkněte tabulku v režimu sdílení a řádek ve výhradním režimu

X:Uzamčení stolu ve výhradním režimu

Co je prostředek Enqueue

Každá fronta je udržována prostřednictvím struktury prostředků serverem Oracle a je identifikována tak, jak je vysvětleno výše. Struktura prostředků má tři seznamy

  1. Seznam vlastníků
  2. Pořadník
  3. Seznam převaděčů

Když uživatel požádá o uzamčení zdroje v určitém režimu, získá strukturu zámku a požádá o získání zámku pro určitý zdroj. Je umístěn v těchto seznamech struktury zdrojů podle požadovaného zámku.

Uživatel tedy nejprve požaduje tento zdroj a poté bude umístěn do seznamu vlastníků

Struktura zdrojů se získá z tabulky zdrojů a struktura zámku se získá z tabulky zámků. Obě jsou alokovány v SGA

Počet řádků v tabulce zdrojů je definován inicializačním parametrem enqueue_resources. Použité hodnoty lze vidět v zobrazení v$resource

Počet řádků v tabulce struktury zámku je definován inicializačním parametrem _enqueue_locks. Použité hodnoty lze vidět v v$enqueue_lock

Jak se provádí vyhledávání v tabulce zdrojů?

  • Tabulka zdrojů obsahuje veškerou strukturu zdrojů. K nalezení a přístupu ke struktuře zdrojů v tabulce zdrojů se používá hashovací algoritmus.
  • Tabulka zdrojů je uspořádána do segmentu hash. Každý segment hash obsahuje seznam struktury zdrojů ve formě propojeného seznamu.
  • Když se zdroj hledá, jeho hash se získá pomocí hashovacího algoritmu a poté se získá latch pro nalezení odpovídajícího hashového segmentu a poté se zdroj vyhledá v seznamu v hashovém segmentu. Pokud je zdroj nalezen, je získána struktura zámku a požadavek je umístěn na vlastníka, číšníka a seznam převodníků podle zadané požadované úrovně zámku

Příklad prostředku TM-575-0 hašovaného do segmentu 1, je získán hašovací řetězec latch enqueue pro přístup k hašovacímu segmentu a seznam je zpřístupněn v segmentu za účelem získání struktury zdrojů

  • Pokud zdroj není nalezen v seznamu bucket a nová struktura zdrojů je získána ze seznamu bez zdrojů a umístěna do bucket listu. To se děje pod závorou ​​Enqueue. Je také přidělena struktura zámku

Požadavek na zámek je umístěn na seznam vlastníků struktury prostředků

Jak fungují operace fronty?

Když uživatel požádá o uzamčení zdroje, server Oracle provede následující věci

  • Pokud zdroj aktuálně nevlastníte, je uživateli přidělen
  • Pokud je ve vlastnictví a jsou tam číšníci a převaděč, je umístěn na konci fronty číšníků
  • Pokud je ve vlastnictví, ale není k dispozici žádný číšník a převaděč, pak pokud je kompatibilní se zámkem vlastníka, bude žádost schválena. Pokud není kompatibilní, je umístěn na seznam číšníků
  • Převodník může pokračovat, pokud je požadavek méně omezující než aktuálně držený zámek nebo je požadovaný režim kompatibilní se zámkem drženým druhým vlastníkem
  • Číšník může pokračovat, pokud je seznam převaděčů prázdný, nejsou před ním žádní číšníci a požadovaný zámek je kompatibilní se zámkem, který aktuálně má
  • Převodník je vždy zpracováván před číšníky.
  • Server Oracle kontroluje tyto fronty pokaždé, když je zámek uvolněn nebo převeden.

Jak se kontroluje fronta, když je zámek Oracle uvolněn nebo převeden

  • Procesy čekající na prostředky spí na semaforech a semafory se používají jako mechanismy spánku/probuzení. Po zařazení do fronty se žádající proces uspí na semaforu pomocí volání sync_op.

sync_op(SYNC_WAIT, SYNCF_BINARY, 300) =1

  • Jakmile je proces držící prostředek připraven uvolnit prostředek, podívá se na frontu připojenou ke struktuře prostředku. Pokud je ve frontě proces, odešle semaforový signál čekajícímu procesu pomocí

volání sync_op.

sync_op(0x0005, SYNCF_BINARY, 134491620) =1

  • Čekající proces zpracuje signál a probudí se. Tento proces čekání upraví stav podle kroků uvedených v operaci zařazování do fronty

Běžné typy fronty

JQ – Fronta úloh. Když je úloha (zadaná DBMS_JOB.SUBMIT) spuštěna, je chráněna frontou JQ (což znamená, že úlohu může spustit pouze jeden proces SNP).

ST – Transakce správy prostoru . Frontu ST je třeba držet pokaždé, když relace přiděluje/zrušuje přidělování oblastí (což znamená, že chce změnit slovníkové tabulky UET$ a FET$), jako je slučování, vypouštění/ořezávání segmentů a třídění disku. Pokud relaci vyprší časový limit při požadavku na frontu ST, vrátí se „Časový limit ORA-1575 čeká na správu prostoru“.

TM – fronta DML (tabulka). Pokaždé, když chce relace uzamknout tabulku, je požadována fronta TM. Pokud relace odstraní řádek v nadřazené tabulce (DEPT) a vytvoří se referenční omezení (cizí klíč) bez indexu v podřízené tabulce (EMP), nebo pokud relace aktualizuje sloupce, které cizí klíčové odkazy na zámek sdílení (úroveň 4) se převezmou na podřízenou tabulku. Pokud se jiná relace pokusí provést změny v podřízené tabulce, musí počkat (protože chtějí, aby fronta byla v režimu výhradního řádku a to není kompatibilní s režimem sdílení). Pokud je ve sloupci cizího klíče podřízené tabulky vytvořen index, pak není na podřízené tabulce vyžadován žádný zámek sdílení.

TX – transakce. Jakmile je transakce zahájena, je potřeba TX enqueue. Transakce je jednoznačně definována číslem segmentu vrácení, číslem slotu v tabulce transakcí segmentu vrácení a pořadovým číslem čísla slotu. Relace může čekat na frontě TX z několika důvodů:

1) Jiná relace uzamkne požadovaný řádek.

2) Když se dvě relace pokusí vložit stejný jedinečný klíč do tabulky (žádná z nich neprovedla COMMIT), pak poslední relace čeká na první, aby se COMMIT nebo ROLLBACK.

3) V záhlaví bloku nejsou žádné volné ITL (Interested Transaction List) (zvýšení INI_TRANS och PCT_FREE pro segment).

UL – Uživatelský zámek . Relace se uzamkla pomocí funkce DBMS_LOCK.REQUEST.

Zobrazení a tabulka pro zobrazení fronty Oracle a zámků Oracle

V$session a v$session_wait

Když relace čeká na frontu nebo zámek, může to být relace z V$session (v 11g a vyšší) a v$session_wait

Vyberte * z v$session_wait, kde událost jako ‚enq%‘;Parametr události čekání ve frontě   má následující významP1:typ zdroje a požadovaný režimP2:ID1 zdrojeP3:ID2 zdroje

Můžeme použít níže uvedený dotaz k získání celé fronty v systému

Vyberte událost,p1, p2,p3 z v$session_wait  kde wait_time=0 a událost jako 'enq%';
  1. V$lock je dalším užitečným zobrazením pro kontrolu enqueue ‘s
  2. V$lock uvádí všechny struktury zámku aktuálně uložené v systému
  3. Typ sloupce ,id1 a id2 představují typ zdroje , id1 a id2 struktury zdroje. Lze jej tedy spojit s V$resource, který obsahuje seznam všech struktur zdrojů
  • LMODE a požadavek nám říkají, která fronta (vlastník, převaděč, číšníci) je relace
LMODE Žádost Název fronty
> 0 =0 Vlastník
=0 > 0 Číšník
> 0    >  0 Převodník

Níže uvedený dotaz lze použít k nalezení držitele a číšníka

SELECT inst_id,DECODE(request,0,'Holder:','Waiter:')||sid sess,id1, id2, lmode, request, typeFROM V$LOCKWHERE (id1, id2, type) IN(SELECT id1 , id2, zadejte FROM V$LOCK WHERE request>0)ORDER BY id1, request;

V případě RAC lze níže uvedený dotaz použít ke zjištění blokujících a číšníků

SELECT inst_id,DECODE(request,0,'Holder:','Witer:')||sid sess,id1, id2, lmode, request, typeFROM GV$LOCKWHERE (id1, id2, type) IN(SELECT id1 , id2, zadejte FROM gV$LOCK WHERE request>0)ORDER BY id1, request;

V$locked_object

je to další užitečný pohled na zámky tabulek Oracle

Obsahuje všechny zámky PP v databázi. Poskytuje transakční slot, proces OS a ID relace relace, která drží zámky TM

Existuje několik pohledů, které lze použít k vyhledání informací o zámcích. Tyto pohledy vytváří catblock.sql

DBA_LOCKS Zobrazit všechny zámky jako v$lock
DBA_DML_LOCKS Zobrazuje všechny držené nebo požadované zámky DML™
DBA_DDL_LOCKS Zobrazuje všechny držené nebo požadované zámky DDL
DBA_WAITERS Zobrazuje všechny relace čekající na, ale nedržící čekání na uzamčení
DBA_BLOCKERS Zobrazuje nečekající relace, na kterých se čeká na zámky

Dotaz na zjištění relace čekání a pozastavení relací v Oracle 

set linesize 1000sloupce wait_session header 'WAITING|SESSION'sloupec holding_session header 'HOLDING|SESSION'formát sloupce lock_type a15sloupce formát mode_held a15sloupce formát_requested mode a15selectwaiting_session,holding_mode_idre 

Dotaz na zjištění všech zamčených objektů

Jak se zachází se zámky DML na serveru Oracle

Když se v tabulce Oracle provede aktualizace, vložení, odstranění nebo výběr aktualizace, Oracle vezme tyto dva zámky

  • Zámek tabulky DML:K zajištění konzistence definice objektu po dobu trvání transakce. To zabrání jakýmkoli operacím DDL, když probíhá DML.
  • DML Row Lock:Slouží k zajištění konzistence dat během provádění transakce. Můžeme to přeformulovat takto:Tím získáme zámek na konkrétním dotykovém řádku a jakákoli další transakce pokoušející se upravit stejný řádek bude zablokována, dokud nedokončí ten, který jej již vlastní.

Jak jsou implementovány zámky tabulek Oracle

Infrastrukturu Enqueue jsme již vysvětlili v předchozí části. Zámky tabulky Oracle jsou implementovány jako TM Enqueue

Struktura Enqueue by tedy byla

TM- -0

Režimy jsou

RS:sdílení řádků

RX:řádek exkluzivní

S:sdílet

SRX:sdílet řádek exkluzivní

X:exkluzivní

Každý kurzor udržuje seznam struktury uzamčení tabulky, která se vytváří při analýze příkazu. Při prvním spuštění se provede volání funkce, která uzamkne celou tabulku v seznamu. Zámky se uvolní, když se transakce potvrdí nebo vrátí zpět.

Možnost vrácení zpět, zejména vrácení zpět do bodu uložení, přidává další rozměr složitosti zamykání slovníku. Konkrétně, pokud je transakce vrácena zpět za bod, ve kterém byl zámek upgradován, pak musí být zámek odpovídajícím způsobem snížen v rámci operace vrácení zpět, aby se snížilo riziko umělých uváznutí.

Požadavky na zamykání slovníků pro transakce a zejména udržování historie převodů zámků zajišťují zámky DML ve spojení s TM enqueue. Každá transakce, která má zámek DML, má také zámek fronty TM. Základní funkce zamykání zajišťuje enqueue a zámek DML přidává údržbu historie konverzí.

Pevné pole zámkových struktur DML je dimenzováno parametrem DML_LOCKS. Jeho volný seznam je chráněn dml zámkem alokace a aktivní sloty jsou viditelné v V$LOCKED_OBJECT .

Chcete-li nastavit DML_LOCKs, zkontrolujte využití v $resource_limit. Můžeme to nastavit velkoryse, protože zabírá velmi méně místa

Jak deaktivovat zámky tabulky?

  • Zámky DML a související zámky fronty TM lze deaktivovat, buď úplně, nebo jen pro určité tabulky.
  • Chcete-li tyto zámky zcela zakázat, musí být parametr DML_LOCKS nastaven na nulu. V databázi paralelního serveru musí být ve všech případech nastavena na nulu.
  • Chcete-li zakázat takové zámky u konkrétní tabulky, je nutné použít klauzuli DISABLE TABLE LOCKS příkazu ALTER TABLE.
  • Pokud jsou pro tabulku zakázány zámky, mohou příkazy DML stále upravovat bloky tabulky a zámky na úrovni řádků jsou stále zachovány. Zámky tabulky sub-sdíleného režimu normálně spojené s dotazy a zámky tabulky sub-exkluzivního režimu normálně spojené s DML se však neberou. Místo toho jsou transakce proti tabulce chráněny před konfliktními DDL jednoduchým zákazem všech pokusů o zamknutí celé tabulky, a tím i všech DDL proti tabulce.
  • Deaktivace zámků tabulky může zvýšit výkon, protože se sníží režie získávání zámků   To je zvláště důležité v případě RAC, kde je tato režie poměrně vysoká.
  • Deaktivace zámků tabulky také zabrání vytváření indexů cizích klíčů. Jako cizí klíč je třeba indexovat, aby se zabránilo uzamčení tabulky podřízené tabulky, zatímco se s řádky manipuluje v nadřazené tabulce. Pokud tedy zakážeme zámek tabulky dohromady, indexy nejsou vyžadovány
  • Je vhodnější použít alter table k deaktivaci uzamčení tabulek u některé tabulky a poté nastavit na tabulku dml_locks. Jako kdyby byl dml_locks nastaven na nulu, budeme muset instanci vrátit zpět, abychom ji znovu nastavili
  • Při vložení přímého načtení přejde relace do fronty TM v režimu „X“. To zabrání jakémukoli jinému DML v průběhu přímého načítání a blokuje všechny DDL

Jak jsou implementovány zámky řádků DML

DML Row locks jsou implementovány jako kombinace následujících dvou věcí

  1. Zámek na úrovni řádku:Je implementován jako bajt zámku v záhlaví každého řádku a ITL (seznam zainteresovaných transakcí)  v každém bloku dat nebo indexu. Ty se nikde neukládají do mezipaměti a protože jsou uloženy v bloku samotném ne v omezeném SGA, je tento mechanismus zamykání pomocí oracle masivně škálovatelný
  2. Transakční zámky:Jsou implementovány jako TX Enqueue

Bajt zámku ukazuje na záznam ITL v bloku a Všechny záznamy ITL pro transakci ukazuje na TX Enqueue, který nakonec určuje, zda je transakce potvrzena nebo odvolána. Číšníci budou čekat na zámek transakce

Příklad

  • Transakce A chce aktualizovat řádky 2 a 3 v bloku. Přidělí ITL (seznam zainteresovaných transakcí). Transakce přistupuje k řádku 2 a 3 a vidí bajt zámku. Pokud je bajt zámku nula, není uzamčen. Transakce aktualizuje řádek 3 , 3
  • Nyní začíná transakce B a chce aktualizovat řádky 1 . Přidělí ITL (seznam zainteresovaných transakcí). Transakce přistupuje k řádku 1 a vidí bajt zámku. Pokud je bajt zámku nula, není uzamčen. Transakce aktualizuje řádek 1
  • Nyní chce transakce aktualizovat řádek 2. Přistoupí k řádku a zjistí, že je uzamčen, protože bajt zámku nebude nula. Podívá se do ITL, který drží zámek. Provede ITL cleanout, aby zjistil, zda je transakce aktivní nebo neaktivní. V tomto případě zjistí, že transakce A je aktivní. Transakce B tedy musí čekat na transakci A, aby se mohla vrátit zpět nebo potvrdit. Transakce B bude čekat na vyžádání TX Enqueue, kterou transakce A drží ve výhradním režimu

Co je seznam zainteresovaných transakcí (ITL)

Když chce relace upravit blok, musí v bloku přidělit ITL. ITL je datová struktura v hlavičce bloku, která obsahuje mnoho slotů, které transakce zabírá. Je definován parametrem INITRANS a MAXTRANS při vytváření tabulky. Počáteční počty slotů jsou vytvořeny podle INITTRANS a dynamicky rostou na maximum MAXTRANS

Co je transakce?

Když se relace aktualizuje/vymaže/vloží , spustí se transakce. Je dokončeno, když dojde k potvrzení nebo vrácení. Transakce je identifikována pomocí identifikátoru transakce (XID). Transakce identifikuje se skládá ze tří částí

  1. Vrátit zpět nebo vrátit číslo segmentu
  2. Číslo slotu tabulky transakcí
  3. Pořadí nebo číslo zalomení

XID=usn#.slot#.wrap#

Každý blok ITL bude obsahovat XID

Čištění ITL znamená vyhledat XID v ITL a na základě toho prohledat segmenty vrácení zpět a vyhledat tabulku transakcí a číslo zábalu pro kontrolu aktivity transakce.

Můžeme použít níže uvedený příkaz k výpisu jakéhokoli rollback segmentu

Alter system dump undo header ;

Každá aktivní transakce může být viděna v v$transaction table

vyberte addr, xidusn, xidslot, xidsqnfrom v$transaction;ADDR         XIDUSN    XIDSLOT     XIDSQN-------- ---------- ---------- --- -------3C485875         50         5      3000

Identifikátor transakce (XID) lze také získat ve vlastní relaci pomocí

vyberte dbms_transaction.local_transaction_id z dual;

Čekání na TX enq bude vidět ve v$session_wait

P1:Název|režim

P2:rbs3|wrap#

P3:slot#

Shrnutí zámků řádků DML

První DML v relaci, kde transakce ještě neexistuje, implicitně vytvoří transakci.

  • Bude přiřazeno číslo segmentu zpět, blok a zalomení
  • Dojde k vytvoření instance fronty TX

Když je identifikován řádek, který má být upraven, relace provede záznam v ITL bloku dat a přiřadí jej k transakci

  • USN/SLOT/WRAP bude zapsán do ITL slotu, čímž se tento slot vyhradí pro aktuální transakci
  • Řádek se uzamkne nastavením bajtu zámku v adresáři řádku tak, aby ukazoval na slot ITL aktuální transakce.

Jak TM, tak TX Enqueue lze vidět ve V$lock

  • Typ identifikuje TM nebo TX
  • ID1 a ID2 mohou obsahovat další informace, ale jsou kontextově citlivé s ohledem na frontu TYPE
  • Pro TM enqueue je ID1 OBJECT_ID uzamčeného objektu, na který lze odkazovat v DBA_OBJECTS, a ID2 je vždy 0
  • U TX Enqueue ID1 a ID2 podrží číslo segmentu zpět, číslo slotu a obal

Podrobný příklad pro vysvětlení fungování zámků Oracle

  • Vytvořte fiktivní tabulku
Vytvořte tabulku z j jako select * z dba_objects kde rownum <3;Tabulka vytvořena Vytvořte tabulku z j1 jako select * z dba_objects kde rownum <3;Table created
  • Relace A
Pro aktualizaci vyberte * z j;

Podívejme se, co je přítomno ve v$lock

SQL> vyberte odlišnou stranu z v$mystat; SID----------2125SQL> vyberte * z v$lock, kde sid=2125;ADDR             KADDR                    SID TY     -   ID1   ---   ID2 --------------------------- ------------- ---------- ----------- ---------- ----- ----- Žádost o blok Ctime ---------- ---------- ---------- 00000006B5D9D0D0 00000006B5D9D148 2125 TX 2883613 16425600 60 44 0ffffff7DA4B360 FFFFFFFFF7DA4B3C0 2125 TM 21488781          0          30         44           0

Tak to vidíme zde

Je vytvořen zámek tabulky DML Oracle

TX (transaction lock) je vytvořen

  • Začněme relaci B
SQL>Vyberte * z j1 pro aktualizaci;SQL> vyberte odlišné sid z v$mystat; SID----------2302SQL> vyberte * z v$lock, kde sid=2302;ADDR             KADDR                    SID TY     -   ID1   ---   ID2 ------ - - - - ------ ------------- ---------- ----------- ---------- ----- ----- Žádost o blok Ctime ---------- ---------- ---------- 00000006AF7FF910 00000006AF7ff988 2302 TX 2949148 16884039 60 10 0FFFFFFFFFF7DA4B360 FFFFFFFFFF7DA4B3C0 2302 TM 33544 0 30 10 000000006DC289D60 00000006DC289DB8 2302 AE 15062272 0 40 106 0 

Tak to vidíme zde

Je vytvořen zámek tabulky DML

TX (transaction lock) je vytvořen

Nyní to zkusíme udělat

Pro aktualizaci vyberte * z j;

Toto bude viset

  • Začněte další relaci k analýze problému

Pokud  vidíte podrobnosti relace sid =2032 ve V$lock

vyberte * z v$lock kde sid=2302;ADDR              KADDR                   SID TY        ID1        ID2 ----- LMODE------------------- --- ---------- -- ---------- ---------- ----------ŽÁDOST      CTIME      BLOCK-- -------- ---------- ---------- fffffff7da4b360 ffffffff7da4b3c0 2302 tm 33544 0 30 47 000000006dc289d60 00000006dc289db8 2302 AE 15062272 0 40 143 0  0000000000660608088888000. 2302 TX    2883613   16425600          0          6          7          0 FFFFFFFF7DA4B360 FFFFFFFF7DA4B3C0       2302 TM   21488781          0          30          7          0

Tučný řádek je požadavek 6 (exclusive lock ) na nějakém TX enq

Nyní můžeme použít níže uvedený dotaz k nalezení blokující relace

vyberte l1.sid, ' JE BLOKOVÁNO ', l2.sidfrom v$lock l1, v$lock l2 kde l1.block =1 a l2.request> 0a l1.id1=l2.id1and l1.id2=l2.id2SID 'ISBLOCKING'         SID---------- ------------- -----------2125  BLOKUJE SE        2302

Nyní můžeme potvrdit nebo vrátit zpět relaci 2125, aby transakce B mohla pokračovat. Můžeme zabít relaci 2125 pomocí níže uvedeného příkazu také k uvolnění zámku

Změňte relaci zabíjení systému ‘2125,’;

Několik dalších doplňujících informací

Zámky TX ve v$lock neříkají informace o řádku, kde se spor nachází. Tyto věci můžeme zobrazit pomocí dotazů

Níže uvedený dotaz je třeba provést z relace, která čeká

SQL> vybrat row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#from v$session where sid=2302ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW#---------- --------- --------------- -------------21488781             461           81063           , 0 vyberte řádek do.wait_ob waj_název_objektu waj #, row_wait_block#, row_wait_row#,dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW# )z v$session s, dba_objects dowhere s.JECTOB_ID#_WAIT_ID do.23 OBJECT_NAME ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# DBMS_ROWID.ROWID_C------------- ------------- ----------- ---- ------------- ------------------J21488781             461            81063              0 ABR+SNAHNAAATid řádek =' ABR+SNAHNAAATynAAA';

Související články

Jak funguje zamykání Oracle
Jak najít podrobnosti o relaci v databázi Oracle
Důležitá kontrola stavu databáze
Dotazy k rozhovoru dba aplikací Oracle
Dotazy na kontrolu zámků v databázi Oracle
oracle dba otázky k rozhovoru

Doporučené  kurzy

Níže jsou uvedeny některé z doporučených kurzů, které si můžete zakoupit, pokud se chcete dostat o krok dále

Níže jsou uvedeny odkazy na některé kurzy


Oracle DBA 11g/12c – Správa databáze pro Junior DBA :Tento kurz je vhodný pro lidi, kteří začínají jako Junior DBA nebo aspirují na Oracle DBA. To vám umožní dobře porozumět úlohám zálohování a obnovy a obecné správy
Oracle Database:Oracle 12C R2 RAC Administration :Tento kurz se zabývá instalací a správou Oracle RAC. Dobrý kurz pro Oracle DBA, kteří chtějí upgradovat své dovednosti pro Oracle RAC
Oracle Data Guard:Správa databáze pro Oracle 12C R2 :Tento kurz se zabývá instalací a správou Oracle Dataguard. Dobrý kurz pro Oracle DBA, kteří chtějí upgradovat své dovednosti pro Oracle Dataguard


  1. připojit klauzulí v regex_substr

  2. Výpočet procent pomocí dotazu GROUP BY

  3. NOW() Příklady – MySQL

  4. Jak vybrat data mezi dvěma daty z sqlite db ve formátu dd-mm-yyyy?