You can use the query to monitor long-running DML operations and rollback. 
If the update field is not included in the index, then the value of the `used_urec` field from the `v$transaction` view will be very close to the number of rows.
When the update operation is performed, these values increase, if rollback is performed, the values are reduced to zero.

 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

For example 1. If you update a column that is not indexed, then the number of rows 39915830 and USED_UREC 40000562 approximately coincide .

 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 
Session 1

 update test_update 
 set p2=1234567890
 ==>
 39915830 row(s) updated

Session 2
start update

 USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1 
 ---------------- ---------------------- ------------------- --------------------
 ASUDS sqlnavigator.exe 6 4181959 62690 Update 

stop update 

 USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1 
 ---------------- ---------------------- ------------------- --------------------
 ASUDS sqlnavigator.exe 6 40000562 601871 Update 

For example 2. if you update the field indexed then the number of lines * 3 is approximately the 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 asuds.test_update a
 ==>
 COUNT(*) 
 -------------------------------------------- 
 39915830 

 CREATE INDEX test_ind ON test_update
 (
 p1 ASC
 )

Session 1

 update test_update 
 set p1=12
 ==>
 39915830 row(s) updated

Session 2
stop update

 USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1 
 ---------------- ---------------------- ------------------- --------------------
 ASUDS sqlnavigator.exe 6 116705429 1392538 Update 



For example 3. if you insert into table not indexed then the number of rows is exactly the USED_UREC = 500000.

 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

Session 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

Session 2

 USERNAME PROGRAM COMMAND USED_UREC USED_UBLK COMMAND_1 
 ---------------- ---------------------- ------------------- --------------------
 ASUDS sqlnavigator.exe 2 500000 5815 Insert