কিভাবে ওরাকল টেবিল লকড আছে তা নির্ধারণ করবেন?


22

আমরা বিআই সফ্টওয়্যার এবং একটি সংগ্রহস্থল ডাটাবেস ব্যবহার করছি যা ওরাকল এন্টারপ্রাইজ 11 জিআর 2 এ ইনস্টল করা আছে।

এই ব্যাচের কয়েকটি প্রতিবেদন একটি ডাটাবেস টেবিলটি অ্যাক্সেস করার চেষ্টা করবে যা এখনও লক হয়ে থাকতে পারে। ওরাকল টেবিলটি লক করা আছে কি না তা আমি কীভাবে জানতে পারি? এমন কোনও এসকিউএল বিবৃতি আছে যা বিশ্লেষণে ইতিহাসের বিবরণের মতো প্রদর্শন করে?


মানে আমি নির্দিষ্ট সময়ের ব্যবধানে জিনিসগুলি প্রদর্শন করতে চাই।
সেলাহাটিন

উদাহরণস্বরূপ: আরও বিশ্লেষণের জন্য আমি 02:00:00 অপরাহ্ন থেকে 05:00:00 অপরাহ্নের মধ্যে সমস্ত লক করা টেবিল তালিকা করতে চাই।
সেলাহাটিন

সাধারণত আমি ওরাকলে লক টেবিলগুলি সন্ধান করতে চাই?
সেলাহাটিন

1
@ সেলাহাতিন আপনি কি অ্যাপ্লিকেশন স্তরের লক সম্পর্কে কথা বলছেন? ওরাকল সাধারণত সিরিয়ালকরণ স্তর এবং ডিজাইনের কারণে টেবিল লকিং সম্পাদন করে না
ফিলি

উত্তর:


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

নীচের স্ক্রিপ্টটি আপনার ওরাকল সিস্টেমের মধ্যে থাকা সমস্ত লক অবজেক্টগুলি দ্রুত সনাক্ত করতে ব্যবহৃত হতে পারে।

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;

তথ্যসূত্র:-বুর্কসন কনসাল্টিংয়ের মাধ্যমে ওરેકল টিপস http://www.dba-oracle.com/t_find_oracle_locked_objects.htm


2

আপনি ভি $ LOCKED_OBJECT থেকে বর্তমানে লক করা অবজেক্টগুলিকে জিজ্ঞাসা করতে পারেন ।

লকগুলির জন্য কোনও ইতিহাস নেই যদিও, সমস্ত লক লগ ইন করা বিশাল কর্মক্ষমতা ওভারহেড এবং প্রচুর ডেটা সংরক্ষণ করতে পারে।

ডাটাবেসটির নিকটতম সক্রিয় ইতিহাস সক্রিয় ইতিহাস ভি $ ACTIVE_SESSION_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');

QUERY 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.