จะทราบได้อย่างไรว่าตาราง Oracle ถูกล็อคหรือไม่?


22

เราใช้ซอฟต์แวร์ BI และฐานข้อมูลพื้นที่เก็บข้อมูลที่ติดตั้งใน Oracle Enterprise 11gR2

รายงานแบทช์บางส่วนจะพยายามเข้าถึงตารางฐานข้อมูลซึ่งอาจยังถูกล็อค ฉันจะทราบได้อย่างไรว่าตาราง Oracle ถูกล็อคหรือไม่ มีคำสั่ง SQL ที่แสดงเหมือนรายละเอียดประวัติเพื่อการวิเคราะห์หรือไม่?


ฉันหมายถึงฉันต้องการแสดงสิ่งต่าง ๆ ภายในช่วงเวลาที่กำหนด
Selahattin

ตัวอย่างเช่นฉันต้องการแสดงรายการตารางที่ถูกล็อคทั้งหมดระหว่าง 02:00:00 PM - 05:00:00 น. เพื่อการวิเคราะห์เพิ่มเติม
Selahattin

โดยทั่วไปฉันต้องการค้นหาตารางที่ถูกล็อคใน oracle?
Selahattin

1
@Selahattin คุณกำลังพูดถึงล็อคระดับแอปพลิเคชันหรือไม่ Oracle ไม่ได้โดยทั่วไปดำเนินการล็อคตารางเนื่องจากระดับอนุกรมและการออกแบบ
Philᵀᴹ

คำตอบ:


32

แบบสอบถามต่อไปนี้ให้รายละเอียดของการล็อคทั้งหมด

SELECT B.Owner, B.Object_Name, A.Oracle_Username, A.OS_User_Name  
FROM V$Locked_Object A, All_Objects B
WHERE A.Object_ID = B.Object_ID

10

สคริปต์ต่อไปนี้สามารถใช้เพื่อระบุวัตถุล็อคทั้งหมดภายในระบบ Oracle ของคุณได้อย่างรวดเร็ว

select
   c.owner,
   c.object_name,
   c.object_type,
   b.sid,
   b.serial#,
   b.status,
   b.osuser,
   b.machine
from
   v$locked_object a ,
   v$session b,
   dba_objects c
where
   b.sid = a.session_id
and
   a.object_id = c.object_id;

การอ้างอิง: เคล็ดลับ -Oracle โดย Burleson Consulting http://www.dba-oracle.com/t_find_oracle_locked_objects.htm


2

ท่านสามารถสอบถามปัจจุบันวัตถุล็อคจากV $ LOCKED_OBJECT

แม้ว่าจะไม่มีประวัติล็อค แต่การบันทึกล็อกทั้งหมดจะทำให้ประสิทธิภาพการทำงานสูงและมีข้อมูลจำนวนมากที่จะเก็บไว้

ฐานข้อมูลที่ใกล้เคียงที่สุดคือประวัติเซสชันที่ใช้งานอยู่V $ ACTIVE_SESSION_HISTORY , DBA_HIST_ACTIVE_SESS_HISTORY (ถ้าคุณมีสิทธิ์ใช้งานที่ถูกต้องในการใช้งาน) ซึ่งคุณสามารถดูเซสชันบล็อกคำสั่งและข้อมูลอื่น ๆ แต่ไม่ได้ล็อคตาราง มิฉะนั้นคุณสามารถลองสอบถามมุมมองที่เหมาะสมและบันทึกข้อมูลที่ต้องการด้วยสคริปต์ที่กำหนดเองของคุณเอง


2

ใช้แบบสอบถามด้านล่างคุณสามารถค้นหาล็อคในตาราง

column oracle_username format a15;
column os_user_name format a15;
column object_name format a37;
column object_type format a37;
select a.session_id,a.oracle_username, a.os_user_name, b.owner "OBJECT OWNER", b.object_name,b.object_type,a.locked_mode from 
(select object_id, SESSION_ID, ORACLE_USERNAME, OS_USER_NAME, LOCKED_MODE from v$locked_object) a, 
(select object_id, owner, object_name,object_type from dba_objects) b
where a.object_id=b.object_id;

บล็อกการล็อค


0

หากคุณต้องการปลดล็อคการล็อควัตถุแล้วฆ่าเซสชั่นที่เกี่ยวข้อง

-- Query to Get List of all locked objects
SELECT B.Owner, B.Object_Name, A.Oracle_Username, A.OS_User_Name  
FROM V$Locked_Object A, All_Objects B
WHERE A.Object_ID = B.Object_ID ; 
-- and A.OS_USER_NAME = 'mahendar' 

-- Query to Get List of locked sessions        
select SID,SERIAL#,INST_ID from gv$session a  where schemaname = 'SYSTEM';
-- and osuser =  'mahendar';
-- o/p: 314 26513   1

-- Statement to Kill the session [pass values in the same order and append @ for inst_id]
alter system kill session '314,26513,@1';

0

คุณสามารถตรวจสอบล็อคตารางจากv$lockและdba_objectsดู แบบสอบถามด้านล่างจะให้รายละเอียดการล็อค

select a.sid||'|'|| a.serial#||'|'|| a.process
from v$session a, v$locked_object b, dba_objects c
where b.object_id = c.object_id
and a.sid = b.session_id
and OBJECT_NAME=upper('&TABLE_NAME');

ข้อความค้นหา 2:

select
(select username from v$session where sid=a.sid) blocker,
a.sid,
' is blocking ',
(select username from v$session where sid=b.sid) blockee,
b.sid
from
v$lock a,
v$lock b
where
a.block = 1
and
b.request > 0
and
a.id1 = b.id1
and
a.id2 = b.id2;

คุณสามารถใช้แบบสอบถามด้านล่างซึ่งจะให้รายละเอียดเพิ่มเติม ล็อคตาราง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.