Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle (11.2.0.1):उस पंक्ति की पहचान कैसे करें जो वर्तमान में अद्यतन विवरण द्वारा अद्यतन की गई है

आप लंबे समय से चल रहे 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  


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TO_TIMESTAMP_TZ() Oracle में फ़ंक्शन

  2. EXक्स्प () Oracle में फंक्शन

  3. खराब हाइबरनेट सीधे चलने की तुलना में प्रदर्शन का चयन करें - कैसे डिबग?

  4. सी # से ओरेकल प्रक्रिया में सरणी पास करना

  5. आप Oracle प्रक्रिया से अच्छी तरह से स्वरूपित परिणाम कैसे प्राप्त करते हैं जो एक संदर्भ कर्सर देता है?