आप लंबे समय से चल रहे DML संचालन और रोलबैक की निगरानी के लिए क्वेरी का उपयोग कर सकते हैं। यदि अद्यतन फ़ील्ड अनुक्रमणिका में शामिल नहीं है, तो used_urec
का मान v$transaction
. से फ़ील्ड दृश्य पंक्तियों की संख्या के बहुत करीब होगा। जब अद्यतन कार्रवाई की जाती है, तो ये मान बढ़ जाते हैं, यदि रोलबैक किया जाता है, तो मान शून्य हो जाते हैं।
V$TRANSACTION lists the active transactions in the system.
USED_UREC Number of undo records used
USED_UBLK Number of undo blocks used
select
substr(s.username,1,28) username,
substr(s.program,1,25) program,
s.command,
t.used_urec,
t.used_ublk,
decode(s.command,
0,'No Command',
1,'Create Table',
2,'Insert',
3,'Select',
6,'Update',
7,'Delete',
9,'Create Index',
15,'Alter Table',
21,'Create View',
23,'Validate Index',
35,'Alter Database',
39,'Create Tablespace',
41,'Drop Tablespace',
40,'Alter Tablespace',
53,'Drop User',
62,'Analyze Table',
63,'Analyze Index',
s.command||': Other') command
from
v$session s,
v$process p,
v$transaction t
where s.paddr = p.addr
and s.taddr = t.addr
order by 1
उदाहरण के लिए 1. यदि आप किसी ऐसे कॉलम को अपडेट करते हैं जो अनुक्रमित नहीं है, तो पंक्तियों की संख्या 39915830 और USED_UREC 40000562 लगभग मेल खाते हैं।
create table test_update(p1,p2,p3,p4 )
PCTFREE 1
INITRANS 1
MAXTRANS 255
TABLESPACE arhiv_data
as
SELECT a.n_p_u, a.id_reg, a.id_vag, a.vrsvop
FROM a_vag_atr a;
SELECT count(*)
FROM test_update a
==>
COUNT(*)
--------------------------------------------
39915830
सत्र 1
update test_update
set p2=1234567890
==>
39915830 row(s) updated
सत्र 2शुरूआत अपडेट
USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1
---------------- ---------------------- ------------------- --------------------
ASUDS sqlnavigator.exe 6 4181959 62690 Update
अपडेट रोकें
USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1
---------------- ---------------------- ------------------- --------------------
ASUDS sqlnavigator.exe 6 40000562 601871 Update
उदाहरण के लिए 2. यदि आप अनुक्रमित फ़ील्ड को अपडेट करते हैं तो लाइनों की संख्या * 3 लगभग USED_UREC है। 39915830 *3=~116705429
create table test_update(p1,p2,p3,p4 )
PCTFREE 1
INITRANS 1
MAXTRANS 255
TABLESPACE arhiv_data
as
SELECT a.n_p_u, a.id_reg, a.id_vag, a.vrsvop
FROM a_vag_atr a;
SELECT count(*) FROM test_update a
==>
COUNT(*)
--------------------------------------------
39915830
CREATE INDEX test_ind ON test_update
(
p1 ASC
)
सत्र 1
update test_update
set p1=12
==>
39915830 row(s) updated
सत्र 2स्टॉप अपडेट
USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1
---------------- ---------------------- ------------------- --------------------
ASUDS sqlnavigator.exe 6 116705429 1392538 Update
उदाहरण के लिए 3. यदि आप तालिका में सम्मिलित करते हैं जो अनुक्रमित नहीं है तो पंक्तियों की संख्या बिल्कुल USED_UREC है।
create table test_update(p1,p2,p3,p4 )
PCTFREE 1
INITRANS 1
MAXTRANS 255
TABLESPACE arhiv_data
SELECT count(*)
FROM test_update a
==>
COUNT(*)
--------
0
सत्र 1
declare
i pls_integer:=1;
begin
for i in 1..500000 loop
insert into test_update(p1,p2,p3,p4)
values(1,2,3,sysdate);
end loop;
end;
select count(*) from test_update
==>
COUNT(*)
-----------
500000
सत्र 2
USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1
ASUDS sqlnavigator.exe 2 500000 5815 Insert
उदाहरण के लिए 4. यदि आप तालिका से हटाते हैं जो अनुक्रमित नहीं है तो पंक्तियों की संख्या बिल्कुल USED_UREC है।
सत्र 1
SELECT count(*) FROM test_update a
==>
COUNT(*)
--------
500000
delete from test_update
==>
500000 row(s) deleted
सत्र 2
USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1
---------------- ---------------------- ------------------- --------------------
ASUDS sqlnavigator.exe 7 500000 9616 Delete