Rumah pangkalan data Oracle kunci paparan oracle dan sql pelaksanaan sesi (perkongsian ringkasan)

kunci paparan oracle dan sql pelaksanaan sesi (perkongsian ringkasan)

Jul 01, 2022 pm 12:23 PM
oracle

Artikel ini membawa anda pengetahuan yang berkaitan tentang Oracle, yang terutamanya memperkenalkan isu yang berkaitan dengan menyemak kunci dan sql dalam pelaksanaan sesi Mari kita lihat bersama-sama. .

kunci paparan oracle dan sql pelaksanaan sesi (perkongsian ringkasan)

Tutorial yang disyorkan: "Tutorial Video Oracle"

Persekitaran pangkalan data untuk data ujian dalam artikel ini: Oracle 11g

Mengapa dikatakan bahawa ia adalah sql dalam pelaksanaan sesi Nampaknya rekod pelaksanaan sql sesi tertentu Saya juga telah membaca banyak catatan di Internet katakan bahawa sql_id dikaitkan dengan paparan v$active_session_history dan v$sqlarea Anda boleh menanyakan rekod pelaksanaan sql sesi tertentu Selepas latihan, saya mendapati ia tidak berfungsi (saya mencubanya jadual dba_hist_active_sess_history tetapi ia juga tidak berfungsi) sql_id bagi sesetengah sql tidak direkodkan sama sekali dalam v$active_session_history. Saya menyemaknya dan mendapati bahawa nilai parameter adalah normal dan pangkalan data parameter dibuka Rujuk catatan blog: Pertanyaan Oracle V$ACTIVE_SESSION_HISTORY tidak mempunyai data - wazz_s - Blog Park

Rekod pelaksanaan bagi. sql boleh disoal melalui pandangan v$sqlarea, tetapi sessionid yang melaksanakan sql tidak dapat dijumpai.

Jika saya ingin menanyakan sql yang menyebabkan jadual dikunci, kebanyakan catatan blog di Internet mengajar ini saya mendapat nilai medan prev_sql_addr yang sepadan dengan menanyakan paparan v $session, yang direkodkan sebagai Nilai A, dan kemudian gunakan nilai A sebagai nilai keadaan pertanyaan bagi alamat medan pandangan v$sqlarea, dan kemudian rekod SQL yang sepadan boleh disoal. Sebagai ujian amalan, anda boleh menemui SQL yang mencari jadual kunci, tetapi dalam kebanyakan kes anda tidak boleh mendapatkannya dalam persekitaran pengeluaran biasa Mengapa?

Artikel ini menggunakan pendekatan penerokaan untuk mengkaji untuk memastikan ketepatan data, saya membuka tiga sesi pangkalan data, direkodkan sebagai sesi1, sesi2 dan sesi3 seperti berikut:

1 Cipta jadual ujian dan data ujian baharu dalam sesi sesi1

--新建测试表
create table zxy_table(zxy_id int,zxy_name varchar2(20));
--插入数据
insert into zxy_table(zxy_id,zxy_name) values(1,'zxy1');
insert into zxy_table(zxy_id,zxy_name) values(2,'zxy2');
insert into zxy_table(zxy_id,zxy_name) values(3,'zxy3');
insert into zxy_table(zxy_id,zxy_name) values(4,'zxy4');
commit;
Salin selepas log masuk
2 Lihat ID sesi daripada sesi1

 select userenv('sid') from dual;
Salin selepas log masuk

Anda boleh melihat bahawa ID sesi ialah 2546

3 Dalam sesi1, kunci baris jadual zxy_table melalui pilih untuk kemas kini , seperti berikut:

 select * from zxy_table where zxy_name='zxy1' for update;
Salin selepas log masuk
4 Dalam sesi2, tanya id sesi sebagai 2189:

Kemudian dalam sesi2, semak baris jadual zxy_table dengan value zxy_name='zxy1' Kemas kini, seperti berikut:

update zxy_table set zxy_name='zxy1_modify' where zxy_name='zxy1';
Salin selepas log masuk
Kemudian kita lihat bahawa sql telah disekat, seperti yang ditunjukkan di bawah:

5 Kemudian kita datang ke session3 untuk melihat Situasi meja terkunci

Mula-mula semak jadual v$locked_object

select * from v$locked_object;
Salin selepas log masuk

Anda boleh melihat bahawa sesi id yang menyebabkan jadual terkunci ialah 2546, iaitu satu sesi1 sebelumnya, dan object_id ialah 110154. Sudah tentu, dalam persekitaran penjanaan, anda pasti akan melihat lebih daripada satu rekod Anda perlu melaksanakannya beberapa kali lagi melaksanakan n kali, anda masih boleh melihat rekod, yang membuktikan bahawa rekod ini ialah jadual kunci

Pertanyaan melalui object_id: 110154

dba4_objects table Pertanyaan maklumat jadual kunci terperinci <.>

select object_name as 被锁的表名称,obj.* from dba_objects obj where object_id='110154';
Salin selepas log masuk

Pertanyaan melalui sessionid: 2546 Paparan v$session

select 
       s.prev_sql_addr,
       module as 客户端工具名称,
       s.user# as 数据库账号名,
       s.osuser as 连接数据库客户端对应的window账号名称,
       s.machine as 连接数据库客户端对应的计算机名称,
       s.* 
from v$session s where sid='2546';
Salin selepas log masuk
Salin selepas log masuk

mendapat nilai prev_sql_addr: 00000000 dan kemudian menanyakan pandangan v$sqlarea

select * from v$sqlarea where address='000000012E045E28';
Salin selepas log masuk

Daripada gambar di atas, anda boleh melihat kenyataan yang menyebabkan jadual dikunci, tetapi banyak catatan blog telah selesai pada langkah ini. Adakah pertanyaan ini benar-benar boleh dipercayai? Jawapannya tidak boleh dipercayai. Anda boleh kembali ke session1 dan laksanakan sql sesuka hati, seperti berikut:

Kemudian anda boleh pergi ke session3 untuk melaksanakan
 select * from zxy_table;
Salin selepas log masuk

select 
       s.prev_sql_addr,
       module as 客户端工具名称,
       s.user# as 数据库账号名,
       s.osuser as 连接数据库客户端对应的window账号名称,
       s.machine as 连接数据库客户端对应的计算机名称,
       s.* 
from v$session s where sid='2546';
Salin selepas log masuk
Salin selepas log masuk

 再看看prev_sql_addr是不是变了,从000000012E045E28变为了00000001FB03CEC0,再通过00000001FB03CEC0查询视图v$sqlarea

select * from v$sqlarea where address='00000001FB03CEC0';
Salin selepas log masuk

得到的sql_text是select * from zxy_table,你敢说这条sql导致了锁表吗?所有只能说是session1当前执行的sql,而且你很难保证session1执行完锁表的sql: select * from zxy_table where zxy_name='zxy1' for update且在提交前不再执行别的sql,这就是前文提出的问题的答案。

推荐教程:《Oracle视频教程

Atas ialah kandungan terperinci kunci paparan oracle dan sql pelaksanaan sesi (perkongsian ringkasan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Berfungsi untuk mengira bilangan hari antara dua tarikh dalam oracle Berfungsi untuk mengira bilangan hari antara dua tarikh dalam oracle May 08, 2024 pm 07:45 PM

Fungsi dalam Oracle untuk mengira bilangan hari antara dua tarikh ialah DATEDIFF(). Penggunaan khusus adalah seperti berikut: Tentukan unit selang masa: selang (seperti hari, bulan, tahun) Tentukan dua nilai tarikh: tarikh1 dan tarikh2DATEDIFF(selang, tarikh1, tarikh2) Kembalikan perbezaan hari

Berapa lama log pangkalan data Oracle akan disimpan? Berapa lama log pangkalan data Oracle akan disimpan? May 10, 2024 am 03:27 AM

Tempoh pengekalan log pangkalan data Oracle bergantung pada jenis log dan konfigurasi, termasuk: Buat semula log: ditentukan oleh saiz maksimum yang dikonfigurasikan dengan parameter "LOG_ARCHIVE_DEST". Log buat semula yang diarkibkan: Ditentukan oleh saiz maksimum yang dikonfigurasikan oleh parameter "DB_RECOVERY_FILE_DEST_SIZE". Log buat semula dalam talian: tidak diarkibkan, hilang apabila pangkalan data dimulakan semula dan tempoh pengekalan adalah konsisten dengan masa berjalan contoh. Log audit: Dikonfigurasikan oleh parameter "AUDIT_TRAIL", dikekalkan selama 30 hari secara lalai.

Urutan langkah permulaan pangkalan data oracle ialah Urutan langkah permulaan pangkalan data oracle ialah May 10, 2024 am 01:48 AM

Urutan permulaan pangkalan data Oracle ialah: 1. Semak prasyarat 2. Mulakan pendengar 3. Mulakan contoh pangkalan data 5. Sambungkan ke pangkalan data; . Dayakan perkhidmatan (jika perlu );

Cara menggunakan selang dalam oracle Cara menggunakan selang dalam oracle May 08, 2024 pm 07:54 PM

Jenis data INTERVAL dalam Oracle digunakan untuk mewakili selang masa Sintaksnya ialah INTERVAL <precision> <unit> Anda boleh menggunakan operasi tambah, tolak, darab dan bahagi untuk mengendalikan INTERVAL, yang sesuai untuk senario seperti menyimpan data masa dan. mengira perbezaan tarikh.

Berapa banyak memori yang diperlukan oleh oracle? Berapa banyak memori yang diperlukan oleh oracle? May 10, 2024 am 04:12 AM

Jumlah memori yang diperlukan oleh Oracle bergantung pada saiz pangkalan data, tahap aktiviti dan tahap prestasi yang diperlukan: untuk menyimpan penimbal data, penimbal indeks, melaksanakan pernyataan SQL dan mengurus cache kamus data. Jumlah yang tepat dipengaruhi oleh saiz pangkalan data, tahap aktiviti dan tahap prestasi yang diperlukan. Amalan terbaik termasuk menetapkan saiz SGA yang sesuai, saiz komponen SGA, menggunakan AMM dan memantau penggunaan memori.

Bagaimana untuk melihat bilangan kemunculan watak tertentu dalam Oracle Bagaimana untuk melihat bilangan kemunculan watak tertentu dalam Oracle May 09, 2024 pm 09:33 PM

Untuk mencari bilangan kemunculan aksara dalam Oracle, lakukan langkah-langkah berikut: Dapatkan jumlah panjang rentetan Dapatkan panjang subrentetan di mana aksara berlaku; daripada jumlah panjang.

Bagaimana untuk menggantikan rentetan dalam oracle Bagaimana untuk menggantikan rentetan dalam oracle May 08, 2024 pm 07:24 PM

Kaedah menggantikan rentetan dalam Oracle adalah dengan menggunakan fungsi REPLACE Sintaks fungsi ini ialah: REPLACE(string, search_string, replace_string). Langkah penggunaan: 1. Kenal pasti subrentetan yang akan diganti; Penggunaan lanjutan termasuk: penggantian berbilang, kepekaan huruf besar, penggantian aksara khas, dsb.

Keperluan konfigurasi perkakasan pelayan pangkalan data Oracle Keperluan konfigurasi perkakasan pelayan pangkalan data Oracle May 10, 2024 am 04:00 AM

Keperluan konfigurasi perkakasan pelayan pangkalan data Oracle: Pemproses: berbilang teras, dengan frekuensi utama sekurang-kurangnya 2.5 GHz Untuk pangkalan data yang besar, 32 teras atau lebih disyorkan. Memori: Sekurang-kurangnya 8GB untuk pangkalan data kecil, 16-64GB untuk saiz sederhana, sehingga 512GB atau lebih untuk pangkalan data yang besar atau beban kerja yang berat. Storan: Cakera SSD atau NVMe, tatasusunan RAID untuk lebihan dan prestasi. Rangkaian: Rangkaian berkelajuan tinggi (10GbE atau lebih tinggi), kad rangkaian khusus, rangkaian kependaman rendah. Lain-lain: Bekalan kuasa yang stabil, komponen berlebihan, sistem pengendalian dan perisian yang serasi, pelesapan haba dan sistem penyejukan.

See all articles