Database Oracle adalah database yang banyak digunakan di industri. Di sini saya mencoba menjelaskan tentang kunci oracle, kunci tabel oracle
Daftar Isi
Apa itu Enqueue dan kunci Oracle
Enqueue adalah kunci Oracle yang membuat serial operasi ke struktur bersama. Struktur bersama dapat berupa tabel, pengulangan utas, dan transaksi.
Ketika pengguna A memperbarui baris 12 dalam tabel, itu memperoleh Enqueue transaksi (lock). Ini diperoleh sehingga Setiap pengguna yang saya coba perbarui baris yang sama 12 dalam tabel akan menunggu hingga pengguna A melakukan transaksi. Jadi sekarang jika pengguna B mencoba memperbarui baris yang sama, itu akan menunggu di enqueue.
Setelah pengguna A melakukan transaksi, transaksi Pengguna B akan dilanjutkan
Kami memiliki enqueue lokal dalam database instance tunggal sementara dengan Oracle RAC, kami memiliki enqueue lokal dan enqueue global untuk mengelola sumber daya bersama
Apa itu pengenal Enqueue
Enqueue diidentifikasi secara unik menggunakan format
Sumber daya dapat
TM -> kunci tabel
MR-> Pemulihan media
TX-> Transaksi
Id1 dan id2 adalah angka yang berbeda untuk jenis resource yang berbeda
Seperti untuk table lock (TM), ditulis sebagai
TM-
Ketika pengguna meminta akses ke sumber daya dalam mode tertentu, pengenal enqueue dihasilkan yang dijelaskan di atas
Enqueue ditahan dalam mode ini
SS: Mode berbagi baris
SX:Mode eksklusif baris
S: Mengunci tabel dalam mode berbagi
SSX:Kunci tabel dalam mode berbagi dan baris dalam mode eksklusif
X:Kunci meja dalam mode eksklusif
Apa itu sumber daya Enqueue
Setiap enqueue dipelihara melalui struktur sumber daya oleh server Oracle dan diidentifikasi seperti yang dijelaskan di atas. Struktur sumber daya memiliki tiga daftar
- Daftar pemilik
- Daftar tunggu
- Daftar pengonversi
Ketika pengguna meminta kunci pada sumber daya dalam mode tertentu, ia memperoleh struktur kunci dan membuat permintaan untuk memperoleh kunci pada sumber daya tertentu. Ini ditempatkan dalam daftar struktur sumber daya ini sesuai dengan kunci yang diperlukan.
Jadi pengguna pertama-tama meminta resource tersebut, kemudian akan ditempatkan di daftar pemilik
Struktur sumber daya diperoleh dari tabel Sumber daya dan struktur kunci diperoleh dari tabel Kunci. Keduanya dialokasikan di SGA
Jumlah baris dalam tabel resource ditentukan oleh parameter inisialisasi enqueue_resources. Nilai yang digunakan dapat dilihat di v$resource view
Jumlah baris dalam tabel struktur kunci ditentukan oleh parameter inisialisasi _enqueue_locks. Nilai yang digunakan dapat dilihat di v$enqueue_lock
Bagaimana pencarian dilakukan di tabel Resource?
- Tabel sumber daya berisi semua struktur sumber daya. Algoritme hashing digunakan untuk menemukan dan mengakses struktur sumber daya dalam tabel sumber daya.
- Tabel sumber daya diatur dalam keranjang hash. Setiap keranjang hash berisi daftar struktur sumber daya dalam bentuk daftar tertaut.
- Ketika sumber daya dicari, hashnya diperoleh menggunakan algoritma hashing dan kemudian latch diperoleh untuk menemukan keranjang hash yang sesuai dan kemudian sumber daya dicari pada daftar di keranjang hash. Jika sumber daya ditemukan, struktur Kunci diperoleh dan permintaan ditempatkan pada daftar pemilik, pelayan, dan konversi sesuai dengan tingkat kunci yang diminta
Contoh TM-575-0 resource hash ke bucket 1, Rantai hash enqueue latch diperoleh untuk mengakses hash bucket dan daftar diakses di bucket untuk mendapatkan struktur resource
- Jika sumber daya tidak ditemukan dalam daftar ember dan struktur sumber daya baru diperoleh dari daftar bebas sumber daya dan ditempatkan dalam daftar ember. Hal ini terjadi di bawah Enqueue latch. Struktur kunci juga dialokasikan
Permintaan kunci ditempatkan pada daftar pemilik struktur sumber daya
Bagaimana cara kerja operasi enqueue?
Ketika pengguna meminta kunci pada sumber daya, server Oracle melakukan hal-hal berikut
- Jika saat ini tidak dimiliki, sumber daya diberikan kepada pengguna
- Jika dimiliki dan ada pramusaji dan konverter, maka ditempatkan di bagian bawah antrian pramusaji
- Jika dimiliki tetapi tidak ada pelayan dan konverter maka jika sesuai dengan kunci pemilik, permintaan dikabulkan. Jika tidak kompatibel, maka ditempatkan pada daftar pelayan
- Konverter diizinkan untuk melanjutkan jika permintaan tidak terlalu membatasi daripada kunci yang dipegang saat ini atau mode yang diminta kompatibel dengan kunci yang dipegang oleh pemilik lain
- Pelayan diperbolehkan untuk melanjutkan jika daftar konverter kosong, tidak ada pelayan di depannya dan kunci yang diminta kompatibel dengan kunci yang ada saat ini
- Konverter selalu diproses sebelum pelayan.
- Server Oracle memeriksa antrean ini setiap kali kunci dilepaskan atau dikonversi.
Bagaimana antrian diperiksa ketika kunci Oracle dilepaskan atau dikonversi
- Proses menunggu sumber daya tidur pada semafor, dan semafor digunakan sebagai mekanisme tidur/bangun. Setelah masuk ke antrian, proses permintaan akan tidur di semaphore menggunakan panggilan sync_op.
sync_op(SYNC_WAIT, SYNCF_BINARY, 300) =1
- Setelah proses yang memegang sumber daya siap untuk melepaskan sumber daya, proses tersebut akan melihat antrian yang melekat pada struktur sumber daya. Jika ada proses dalam antrian, ia mengirimkan sinyal semaphore ke proses menunggu menggunakan
panggilan sync_op.
sync_op(0x0005, SYNCF_BINARY, 134491620) =1
- Proses menunggu akan menangani sinyal dan akan bangun. Proses menunggu ini mengubah status sesuai langkah-langkah yang diberikan dalam operasi enqueue
Jenis antrian yang umum
JQ – Antrian Pekerjaan. Ketika suatu pekerjaan (dikirim oleh DBMS_JOB.SUBMIT) sedang berjalan, pekerjaan tersebut dilindungi oleh enqueue JQ (yang berarti bahwa hanya satu proses SNP yang dapat menjalankan pekerjaan tersebut).
ST – Transaksi pengelolaan ruang . Enqueue ST perlu diadakan setiap kali sesi mengalokasikan/mengurangi alokasi (yang berarti ingin mengubah tabel kamus UET$ dan FET$), seperti penggabungan, segmen jatuhkan/potong, dan penyortiran disk. Jika sesi mendapatkan waktu tunggu saat meminta ST enqueue, “ORA-1575 timeout waiting for space management” akan ditampilkan.
TM – DML (Tabel) antrean. Setiap kali sesi ingin mengunci tabel, TM enqueue diminta. Jika sesi menghapus baris di tabel induk (DEPT) dan batasan referensial (kunci asing) dibuat tanpa indeks pada tabel anak (EMP), atau jika sesi memperbarui kolom yang referensi kunci untuk kemudian kunci berbagi (level 4) diambil di tabel turunan. Jika sesi lain mencoba melakukan perubahan pada tabel anak, mereka harus menunggu (karena mereka ingin enqueue dalam mode eksklusif baris, dan itu tidak kompatibel dengan mode berbagi). Jika indeks dibuat pada kolom kunci asing tabel anak, maka tidak ada kunci berbagi yang diperlukan pada tabel anak.
TX – Transaksi. Segera setelah transaksi dimulai, TX enqueue diperlukan. Sebuah transaksi secara unik ditentukan oleh nomor segmen rollback, nomor slot di tabel transaksi segmen rollback dan nomor urut nomor slot. Sesi dapat menunggu di enqueue TX karena beberapa alasan:
1) Sesi lain mengunci baris yang diminta.
2) Ketika dua sesi mencoba memasukkan kunci unik yang sama ke dalam tabel (tidak satupun dari mereka telah melakukan COMMIT), maka sesi terakhir menunggu yang pertama untuk COMMIT atau ROLLBACK.
3) Tidak ada ITL (Daftar Transaksi Tertarik) gratis di header blok (tambah INI_TRANS och PCT_FREE untuk segmen).
UL – Kunci Pengguna . Sesi telah dikunci dengan Fungsi DBMS_LOCK.REQUEST.
Tampilan dan Tabel untuk melihat enqueue Oracle dan kunci Oracle
V$session dan v$session_wait
Kapan sesi menunggu di enqueue atau mengunci, ini bisa menjadi sesi dari V$session (dalam 11g ke atas) dan v$session_wait
Pilih * dari v$session_wait tempat peristiwa seperti 'enq%';Parameter peristiwa tunggu enqueue memiliki arti sebagai berikutP1:jenis sumber daya dan mode yang diinginkanP2:ID1 sumber dayaP3:ID2 sumber daya
Kita dapat menggunakan query di bawah ini untuk mendapatkan semua enqueue dalam sistem
Pilih acara,p1, p2,p3 dari v$session_wait di mana wait_time=0 dan acara seperti 'enq%';
- V$lock adalah tampilan lain yang berguna untuk memeriksa enqueue's
- V$lock daftar semua struktur kunci yang saat ini disimpan di sistem
- Jenis kolom ,id1 dan id2 mewakili jenis resource ,id1 dan id2 dari struktur resource. sehingga dapat digabungkan dengan V$resource yang berisi daftar semua struktur resource
- LMODE dan permintaan memberi tahu kita antrian mana (pemilik, konverter, pelayan) yang merupakan sesi
LMODE | Permintaan | Nama antrian |
> 0 | =0 | Pemilik |
=0 | > 0 | Pelayan |
> 0 | > 0 | Konverter |
Permintaan di bawah ini dapat digunakan untuk menemukan pemegang dan pelayan
SELECT inst_id,DECODE(request,0,'Holder:','Waiter:')||sid sess,id1, id2, lmode, request, typeFROM V$LOCKWHERE (id1, id2, type) IN(SELECT id1 , id2, ketik FROM V$LOCK WHERE request>0)ORDER BY id1, request;
Dalam kasus RAC, kueri di bawah ini dapat digunakan untuk mengetahui pemblokir dan pelayan
SELECT inst_id,DECODE(request,0,'Holder:','Waiter:')||sid sess,id1, id2, lmode, request, typeFROM GV$LOCKWHERE (id1, id2, type) IN(SELECT id1 , id2, ketik FROM gV$LOCK WHERE request>0)ORDER BY id1, request;
V$locked_object
itu adalah tampilan lain yang berguna untuk kunci tabel Oracle
Ini berisi semua kunci TM dalam database. Ini memberikan slot transaksi, proses OS dan id sesi dari sesi yang memegang kunci TM
Ada beberapa tampilan yang dapat digunakan untuk menemukan informasi kunci. Tampilan ini dibuat oleh catblock.sql
DBA_LOCKS | Tampilkan semua kunci seperti v$lock |
DBA_DML_LOCKS | Menampilkan semua kunci DML™ yang ditahan atau diminta |
DBA_DDL_LOCKS | Menampilkan semua kunci DDL yang ditahan atau diminta |
DBA_WAiters | Menampilkan semua sesi menunggu, tetapi tidak menahan menunggu kunci |
DBA_BLOCKERS | Menampilkan sesi non-menunggu yang menahan kunci yang sedang menunggu |
Kueri untuk mengetahui sesi tunggu dan sesi mengadakan di Oracle
setel ukuran baris 1000column waiting_session heading 'WAITING|SESSION'column holding_session heading 'HOLDING|SESSION'column lock_type format a15column mode_held format a15column mode_requested format a15selectwaiting_session,holding_session,lock_type,mode_held,lock_mode_requestedKueri untuk mengetahui semua objek yang terkunci
set term on;set lines 130;column sid_ser format a12 heading 'session,|serial#';column username format a12 heading 'os user/|db user';kolom format proses a9 heading 'os|process';kolom spid format a7 heading 'trace|number';column owner_object format a35 heading 'owner.object';columnlocked_mode format a13 heading 'locked|mode';format kolom status a8 heading 'status';selectsubstr(to_char(l.session_id)| |','||to_char(s.serial#),1,12) sid_ser,substr(l.os_user_name||'/'||l.Oracle_username,1,12) nama pengguna,l.process,p.spid, substr(o.owner||'.'||o.object_name,1,35) owner_object,decode(l.locked_mode,1,'No Lock',2,'Row Share',3,'Row Eksklusif',4 tempat .object_id =o.object_idand l.session_id =s.sidand s.paddr =p.addrand s.status !='KILLED'/Bagaimana kunci DML ditangani di server Oracle
Saat pembaruan, penyisipan, penghapusan, atau pemilihan pembaruan dijalankan pada tabel oracle, Oracle mengambil dua kunci ini
- Kunci Tabel DML:Untuk memastikan konsistensi definisi objek selama durasi transaksi. Ini mencegah operasi DDL terjadi saat DML sedang berlangsung.
- DML Row Lock:Ini untuk memastikan konsistensi data selama eksekusi transaksi. Kita dapat menyusun ulang seperti Ini mendapatkan kunci pada baris tertentu yang disentuh dan transaksi lain yang mencoba mengubah baris yang sama akan diblokir, hingga transaksi yang sudah memilikinya selesai
Bagaimana kunci tabel Oracle Diimplementasikan
Kami sudah menjelaskan infrastruktur Enqueue di bagian sebelumnya. Kunci Tabel Oracle diimplementasikan sebagai TM Enqueue
Jadi struktur Enqueue adalah
TM-
Modenya adalah
RS:pembagian baris
RX:eksklusif baris
S:bagikan
SRX:bagikan baris eksklusif
X:eksklusif
Setiap kursor mempertahankan daftar struktur kunci tabel yang dibangun saat menguraikan pernyataan. Pada eksekusi pertama, panggilan fungsi dibuat untuk mengunci semua tabel dalam daftar. Kunci dilepaskan saat transaksi dilakukan atau dikembalikan.
Kemungkinan rollback, khususnya rollback ke save point, menambah dimensi lain dari kompleksitas penguncian kamus. Yaitu, jika transaksi dibatalkan melampaui titik di mana kunci ditingkatkan, maka kunci harus diturunkan secara bersamaan, sebagai bagian dari operasi rollback, untuk mengurangi risiko kebuntuan buatan.
Persyaratan penguncian kamus untuk transaksi dan, khususnya, pemeliharaan riwayat konversi kunci, disediakan oleh kunci DML bersama dengan TM enqueue. Setiap transaksi yang memegang kunci DML juga memiliki kunci enqueue TM. Fungsionalitas penguncian dasar disediakan oleh enqueue, dan kunci DML menambahkan pemeliharaan riwayat konversi.
Array tetap struktur kunci DML diukur dengan parameter DML_LOCKS. Daftar gratisnya dilindungi oleh kunci alokasi kunci dml, dan slot aktifnya terlihat di V$LOCKED_OBJECT .
Untuk menyetel DML_LOCK, periksa penggunaan di v$resource_limit. Kita dapat mengaturnya dengan murah hati karena membutuhkan ruang yang sangat sedikit
Bagaimana cara menonaktifkan kunci tabel?
- Kunci DML dan kunci enqueue TM terkait dapat dinonaktifkan, baik seluruhnya, atau hanya untuk tabel tertentu.
- Untuk menonaktifkan kunci ini sepenuhnya, parameter DML_LOCKS harus disetel ke nol. Dalam database server paralel, harus disetel ke nol di semua instance.
- Untuk menonaktifkan penguncian tersebut pada tabel tertentu, klausa DISABLE TABLE LOCKS dari pernyataan ALTER TABLE harus digunakan.
- Jika kunci dinonaktifkan untuk tabel, pernyataan DML masih dapat mengubah blok tabel, dan kunci tingkat baris tetap dipertahankan. Namun, kunci tabel mode sub-bersama yang biasanya terkait dengan kueri, dan kunci tabel mode sub-eksklusif yang biasanya terkait dengan DML, tidak diambil. Sebaliknya, transaksi terhadap tabel dilindungi dari DDL yang bertentangan dengan hanya melarang semua upaya untuk mengunci seluruh tabel, dan dengan demikian semua DDL terhadap tabel.
- Menonaktifkan kunci tabel dapat meningkatkan kinerja karena overhead akuisisi kunci berkurang Ini lebih penting khususnya jika RAC di mana overhead ini cukup tinggi.
- Menonaktifkan kunci tabel juga mencegah pembuatan indeks kunci asing. Sebagai kunci asing perlu diindeks untuk menghindari kunci tabel dari tabel anak sementara baris dimanipulasi dalam tabel induk. Jadi jika kita menonaktifkan kunci tabel bersama-sama maka indeks tidak diperlukan
- Lebih baik menggunakan tabel ubah untuk menonaktifkan kunci tabel pada beberapa tabel daripada mengatur ke tabel dml_locks. Seolah dml_locks disetel ke nol, kita perlu memantulkan instance untuk menyetelnya lagi
- Dalam penyisipan beban langsung, sesi akan mengambil TM enqueue dalam mode 'X'. Ini mencegah DML lain terjadi saat pemuatan langsung terjadi, selain memblokir semua DDL
Bagaimana kunci baris DML diterapkan
Kunci Baris DML diimplementasikan sebagai kombinasi dari dua hal berikut
- Kunci tingkat baris:Diimplementasikan sebagai byte kunci di setiap header baris dan ITL (daftar transaksi yang diminati) di setiap blok data atau indeks. Ini tidak di-cache di mana pun dan karena disimpan di blok itu sendiri, bukan di SGA yang terbatas, mekanisme Locking by oracle ini dapat diskalakan secara besar-besaran
- Kunci transaksi:Ini diimplementasikan sebagai TX Enqueue
Byte kunci menunjuk ke entri ITL di blok dan Semua entri ITL untuk transaksi menunjuk ke Enqueue TX yang pada akhirnya menentukan apakah transaksi dilakukan atau dibatalkan. Pelayan akan menunggu di kunci transaksi
Contoh
- Transaksi A ingin memperbarui baris 2 dan 3 di blok. Ini akan mengalokasikan ITL (daftar transaksi yang tertarik). Transaksi mengakses baris 2 dan 3 dan melihat byte kunci .Jika byte kunci adalah nol, byte kunci tidak terkunci. Transaksi akan memperbarui baris 3 ,3
- Sekarang transaksi B dimulai dan ingin memperbarui baris 1 . Ini akan mengalokasikan ITL (daftar transaksi yang tertarik). Transaksi mengakses baris 1 dan melihat byte kunci .Jika byte kunci adalah nol, byte kunci tidak terkunci. Transaksi akan memperbarui baris 1
- Sekarang transaksi ingin memperbarui baris 2. Ini akan mengakses baris dan akan menemukannya terkunci karena byte kunci tidak akan nol. Ini akan terlihat di ITL yang memegang kunci. Ia akan melakukan ITL cleanout untuk mengetahui apakah transaksi tersebut aktif atau tidak. Dalam hal ini, ia akan menemukan Transaksi A aktif. Jadi transaksi B harus menunggu transaksi A untuk melakukan rollback atau commit. Transaksi B akan menunggu untuk meminta Enqueue TX yang ditahan oleh transaksi A dalam mode eksklusif
Apa itu Daftar Transaksi Tertarik (ITL)
Ketika sebuah sesi ingin memodifikasi sebuah blok, ia harus mengalokasikan sebuah ITL di dalam blok tersebut. ITL adalah struktur data pada header blok yang berisi banyak slot yang diambil oleh transaksi. Ini didefinisikan oleh parameter INITRANS dan MAXTRANS ketika tabel dibuat. Jumlah awal slot dibuat sesuai INITTRANS dan mereka tumbuh secara dinamis hingga maksimum MAXTRANS
Apa itu transaksi?
Saat sesi memperbarui /delete/insert , maka transaksi dimulai. Itu selesai ketika komit atau rollback terjadi. Transaksi diidentifikasi oleh pengenal transaksi (XID). Identifikasi transaksi terdiri dari tiga bagian
- Kembalikan atau urungkan nomor segmen
- Nomor slot meja transaksi
- No urut atau bungkus
XID=usn#.slot#.wrap#
Setiap blok ITL akan berisi XID
Pembersihan ITL berarti mencari XID di ITL dan mencari segmen rollback berdasarkan ini dan mencari tabel transaksi dan nomor bungkus untuk memeriksa keaktifan transaksi.
Kita dapat menggunakan perintah di bawah ini untuk membuang segmen rollback apa pun
Ubah header undo dump sistem
Setiap transaksi yang aktif dapat dilihat pada tabel v$transaction
pilih addr, xidusn, xidslot, xidsqnfrom v$transaction;ADDR XIDUSN XIDSLOT XIDSQN-------- ---------- ---------- --- -------3C485875 50 5 3000
Pengenal transaksi (XID) juga dapat diperoleh di sesi sendiri menggunakan
pilih dbms_transaction.local_transaction_id dari dual;
Penantian di TX enq akan terlihat di v$session_wait
P1:Nama|modus
P2:rbs3|bungkus#
P3:slot#
Untuk meringkas kunci baris DML
DML pertama dalam sesi di mana transaksi belum ada secara implisit akan membuat transaksi.
- Nomor segmen, slot, dan bungkus akan ditetapkan
- antrean TX akan dipakai
Ketika baris yang akan dimodifikasi diidentifikasi, sesi akan mengambil entri di ITL dari blok data, menetapkannya ke transaksi
- USN/SLOT/WRAP akan ditulis ke slot ITL, menyimpan slot itu untuk transaksi saat ini
- Penguncian akan diambil pada baris, dengan mengatur byte kunci di direktori baris untuk menunjuk ke slot ITL transaksi saat ini
Baik TM dan TX Enqueue dapat dilihat di V$lock
- Jenis mengidentifikasi TM atau TX
- ID1 dan ID2 dapat membawa informasi tambahan, tetapi peka konteks sehubungan dengan JENIS enqueue
- Untuk TM enqueue, ID1 adalah OBJECT_ID dari objek yang dikunci, yang dapat dirujuk dalam DBA_OBJECTS, dan ID2 selalu 0
- Untuk TX Enqueue, ID1 dan ID2 menahan nomor segmen undo, nomor slot, dan wrap
Contoh Detail untuk menjelaskan cara kerja kunci oracle
- Buat tabel dummy
Buat tabel dari j sebagai pilih * dari dba_objects di mana rownum <3;Tabel dibuat Buat tabel dari j1 sebagai pilih * dari dba_objects di mana rownum <3;Tabel dibuat
- Sesi A
Pilih * dari j untuk pembaruan;
Mari kita lihat apa saja yang ada di v$lock
SQL> pilih sid yang berbeda dari v$mystat; SID----------2125SQL> pilih * from v$lock where sid=2125;ADDR KADDR SID TY ID1 ID2 LMODE---------------- --- ------------- ---------- -- ---------- ---------- ----- -----REQUEST CTIME BLOK---------- ---------- ----------00000006B5D9D0D0 00000006B5D9D148 2125 TX 2883613 16425600 60 44 FFDA 21488781 0 30 44 0
Jadi kita lihat di sini
Kunci tabel Oracle DML telah dibuat
TX(kunci transaksi) dibuat
- Mari kita mulai sesi B
SQL>Pilih * dari j1 untuk pembaruan;SQL> pilih sid yang berbeda dari v$mystat; SID----------2302SQL> pilih * dari v$lock where sid=2302;ADDR KADDR SID TY ID1 ID2 LMODE---------------- --- ------------- ---------- -- ---------- ---------- ----- -----REQUEST CTIME BLOK---------- ---------- ----------00000006AF7FF910 00000006AF7FF988 2302 TX 2949148 16884039 60 10 FFDA 0 FFDA 33544 0 30 10 000000006DC289D60 00000006DC289DB8 2302 AE 15062272 0 40Jadi kita lihat di sini
Kunci tabel DML dibuat
TX(kunci transaksi) dibuat
Sekarang mari kita coba lakukan
Pilih * dari j untuk pembaruan;Ini akan digantung
- Mari kita mulai sesi lain untuk menganalisis masalah
Jika Anda melihat detail sesi sid =2032 di V$lock
pilih * dari v$lock where sid=2302;ADDR KADDR SID TY ID1 ID2 LMODE---------------- ------------- --- ---------- -- ---------- ---------- ----------PERMINTAAN WAKTU BLOKIR-- -------- ---------- ---------- FFFFFFFF7DA4B360 FFFFFFFF7DA4B3C0 2302 TM 33544 0 30 47 000000006DC289D60 00000006DC289DB8 2302 2302 TX 2883613 16425600 0 6 7 0 FFFFFFFF7DA4B360 FFFFFFFF7DA4B3C0 2302 TM 21488781 0 30 7 0
Baris yang dicetak tebal adalah permintaan 6 (kunci eksklusif) pada beberapa enq TX
Sekarang kita dapat menggunakan kueri di bawah ini untuk menemukan sesi pemblokiran
pilih l1.sid, ' IS BLOCKING ', l2.sidfrom v$lock l1, v$lock l2where l1.block =1 and l2.request> 0and l1.id1=l2.id1and l1.id2=l2.id2SID 'ISBLOCKING' SID---------- ------------- ----------2125 ADALAH PEMBLOKIRAN 2302
Sekarang kita dapat melakukan atau mengembalikan sesi 2125 agar transaksi B dapat dilanjutkan. Kita dapat mematikan sesi 2125 menggunakan perintah di bawah ini juga untuk melepaskan kuncinya
Ubah sesi penghentian sistem '2125,';
Beberapa informasi tambahan lainnya
TX locks in v$lock tidak memberi tahu informasi baris tempat pertikaian muncul. Kita dapat melihat hal-hal itu menggunakan kueri
Kueri di bawah ini harus dijalankan dari sesi yang menunggu
SQL> pilih 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 pilih do.object_name,row_wait_obj#, row_wait_file #, row_wait_block#, row_wait_row#,dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW# )dari v$session s, dba_objects dowhere =WAID_OBJECT#dan lakukan .;OBJECT_WAIDs. OBJECT_NAME ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# DBMS_ROWID.ROWID_C------------- -------------- ----------- ---- ------------- ------------------J21488781 461 81063 0 ABR+SNAHNAAATynAAA SQL> Pilih * dari j tempat rowid =' ABR+SNAHNAAATynAAA';
Artikel terkait
Cara kerja penguncian Oracle
Cara menemukan detail sesi di database Oracle
Pemeriksaan Kesehatan Database Penting
pertanyaan wawancara dba aplikasi oracle
Permintaan untuk memeriksa kunci di database oracle
oracle dba pertanyaan wawancara
Kursus yang Direkomendasikan
Berikut ini adalah beberapa kursus yang direkomendasikan yang dapat Anda beli jika Anda ingin melangkah lebih jauh
Diberikan di bawah ini adalah tautan ke beberapa kursus
Oracle DBA 11g/12c – Administrasi Database untuk DBA Junior :Kursus ini baik untuk orang-orang yang memulai sebagai DBA Junior atau bercita-cita menjadi Oracle DBA. Ini akan memberikan pemahaman yang baik tentang pencadangan &pemulihan dan tugas administrasi Umum
Oracle Database:Oracle 12C R2 RAC Administration :Kursus ini mencakup instalasi, administrasi Oracle RAC. Kursus yang bagus untuk Oracle DBA yang ingin meningkatkan keterampilannya untuk Oracle RAC
Oracle Data Guard:Administrasi Database untuk Oracle 12C R2 :Kursus ini mencakup instalasi, administrasi Oracle Dataguard. Kursus yang bagus untuk Oracle DBA yang ingin meningkatkan keterampilannya untuk Oracle Dataguard