问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

怎样用dbms_rowid获取rowid的详细信息?

发布网友 发布时间:2022-04-29 22:53

我来回答

3个回答

懂视网 时间:2022-05-01 20:38

在使用v$session视图在查询会话的行锁的等待事件时,视图中提供了会话等待的对象号(ROW_WAIT_OBJ#)、文件号(ROW_WAIT_FILE#)、块号(ROW_WAIT_BLOCK#)和行号(ROW_WAIT_ROW#)但是如何使用这些信息定位出会话等待的是哪一行呢?答案就是使用DBMS_ROWID

打开两个会话同时更新同一条数据

#session 1
zx@ORCL>select distinct sid from v$mystat;

       SID
----------
	22

zx@ORCL>
zx@ORCL>update zx set name=‘zx‘ where id=1;

1 row updated.

#session 2
zx@ORCL>select distinct sid from v$mystat;

       SID
----------
       145
       
zx@ORCL>update zx set name=‘zx‘ where id=1;

此时session2会被session1阻塞,查询v$session会话145在等待enq: TX - row lock contention

zx@ORCL>col event for a40
zx@ORCL>select SID,EVENT,ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW# from v$session where sid=145;

       SID EVENT				    ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW#
---------- ---------------------------------------- ------------- -------------- --------------- -------------
       145 enq: TX - row lock contention		    99754	      18	   15571	     7

查询v$lock确认会话145在请求会话22的TX锁

zx@ORCL>select sid,type,id1,id2,lmode,request from v$lock where sid=145 or sid=22 order by 1;

       SID TYPE 	 ID1	    ID2      LMODE    REQUEST
---------- ------ ---------- ---------- ---------- ----------
	22 AE		 100	      0 	 4	    0
	22 TM	       99754	      0 	 3	    0
	22 TX	     4390915	    581 	 6	    0
       145 TM	       99754	      0 	 3	    0
       145 TX	     4390915	    581 	 0	    6
       145 AE		 100	      0 	 4	    0

使用如下语句查询会话145等待哪个表的哪个行

zx@ORCL>col owner for a10
zx@ORCL>col object_name for a10
zx@ORCL>col rowid for a30
zx@ORCL>select b.owner,b.object_name,dbms_rowid.rowid_create(1,s.ROW_WAIT_OBJ#,s.ROW_WAIT_FILE#,s.ROW_WAIT_BLOCK#,ROW_WAIT_ROW#) "rowid" from v$session s,dba_objects b where s.ROW_WAIT_OBJ#=b.object_id and s.si
d=145;
OWNER	   OBJECT_NAM rowid
---------- ---------- ------------------------------
ZX	   ZX	      AAAYWqAASAAADzTAAH
--使用上面查询出的rowid查看数据,即为session2等待的行
zx@ORCL>select * from zx.zx where rowid=‘AAAYWqAASAAADzTAAH‘;

	ID NAME
---------- ------------------------------
	 1 ZX

官方文档:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_rowid.htm#ARPLS053

使用下面语句查找会话之间的阻塞关系

SELECT (‘节点‘ || a.inst_id || ‘ session ‘ || a.sid || ‘,‘ || a_s.serial# ||
       ‘阻塞了节点‘ || b.inst_id || ‘ session ‘ || b.sid || ‘,‘ || b_s.serial#) blockinfo,
       a.inst_id,
       a_s.sid,
       a_s.schemaname,
       a_s.module,
       a_s.status,
       a_s.event,
       a.type lock_type,
       a.id1,
       a.id2,
       decode(a.lmode,
              0,
              ‘none‘,
              1,
              NULL,
              2,
              ‘row-S(SS)‘,
              3,
              ‘row-X(SX)‘,
              4,
              ‘share(S)‘,
              5,
              ‘S/Row-X(SSX)‘,
              6,
              ‘exclusive(X)‘) lock_mode,
       a.ctime time_hold,
       ‘后为被阻塞信息‘ remark_flag,
       b.inst_id blocked_inst_id,
       b.sid blocked_sid,
       b.type blocked_lock_type,
       decode(b.request,
              0,
              ‘none‘,
              1,
              NULL,
              2,
              ‘row-S(SS)‘,
              3,
              ‘row-X(SX)‘,
              4,
              ‘share(S)‘,
              5,
              ‘S/Row-X(SSX)‘,
              6,
              ‘exclusive(X)‘) blocked_lock_request,
       b.ctime time_wait,
       b_s.schemaname blocked_schemaname,
       b_s.module blocked_module,
       b_s.status blocked_status,
       b_s.sql_id blocked_sql_id,
       b_s.event,
       obj.owner blocked_owner,
       obj.object_name blocked_name,
       obj.object_type blocked_object_type,
       CASE
         WHEN b_s.row_wait_obj# <> -1 THEN
          dbms_rowid.rowid_create(1,
                                  obj.data_object_id,
                                  b_s.row_wait_file#,
                                  b_s.row_wait_block#,
                                  b_s.row_wait_row#)
         ELSE
          ‘-1‘
       END blocked_rowid, --被阻塞数据的rowid
       decode(obj.object_type,
              ‘TABLE‘,
              ‘select * from ‘ || obj.owner || ‘.‘ || obj.object_name ||
              ‘ where rowid=‘‘‘ ||
              dbms_rowid.rowid_create(1,
                                      obj.data_object_id,
                                      b_s.row_wait_file#,
                                      b_s.row_wait_block#,
                                      b_s.row_wait_row#) || ‘‘‘‘,
              NULL) blocked_data_querysql
  FROM gv$lock     a,
       gv$lock     b,
       gv$session  a_s,
       gv$session  b_s,
       dba_objects obj
 WHERE a.id1 = b.id1
   AND a.id2 = b.id2
   AND a.block > 0 --阻塞了其他人
   AND b.request > 0 --AND ((a.INST_ID=b.INST_ID AND a.SID<>b.SID) OR (a.INST_ID<>b.INST_ID ))
   AND a.sid = a_s.sid
   AND a.inst_id = a_s.inst_id
   AND b.sid = b_s.sid
   AND b.inst_id = b_s.inst_id
   AND b_s.row_wait_obj# = obj.object_id(+)
 ORDER BY a.inst_id, a.sid;


本文出自 “DBA Fighting!” 博客,请务必保留此出处http://hbxztc.blog.51cto.com/1587495/1896136

使用DBMS_ROWID获取被阻塞行的rowid

标签:oracle rowid session

热心网友 时间:2022-05-01 17:46

declare
ss char(18); -- rowid变量
begin
select rowid into ss from dept where deptno=10; -- 查询部门是10记录的rowid
dbms_output.put_line(ss); -- 显示rowid的值
end;
结果:AAAR3qAAEAAAACHAAA

热心网友 时间:2022-05-01 19:04

SQL> create table test(id int);
表已创建。
SQL> insert into test values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from test;
ID
----------
1
SQL> select rowid id from test;
ID
------------------
AAANYWAABAAAPsKAAA

如果要使用这个包的话,自己可以写个函数。
比如:
function dbms_rowid.rowid_block_number
(row_id in rowid)
return number
怎样获取sql表数据的最后更新时间?

第一种方式(块级跟踪):select ora_rowscn,dbms_rowid.ROWID_BLOCK_NUMBER(rowid) blockid,scn_to_timestamp(ora_rowscn)from hs_futures.fuentrust t order by scn_to_timestamp(ora_rowscn);dbms_rowid.ROWID_BLOCK_NUMBER(rowid):是为获取数据所在块的ID scn_to_timestamp(ora_rowscn):获取...

原生ip - StormProxies

StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企业网络中获取的IP地址,这种类型的IP地址通常被认为是更加真实和可靠的代理服务。使用住宅原生IP可以更好地保护您的隐私和匿名性,并且可以提供更快的代理服务速度。2. 高匿名性:StormProxies的代理服务支持高匿名性,这意味着使用其服务的用户可以更好地保护自己的隐私和匿名性。高匿名性代理服务的匿名性更高,可以更好地避免被追踪和识别的…StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...

怎么获取SQL语句数据库表中rowid值

这个无需更改,他相当于数据库中数据的唯一标识,你插入数据他就会自动生成这个值,你可以插入一条数据,然后再查询出该条数据看,插入时是没有rowid的,查询出来就有这个字段值了!

使用rowID查询数据位于分区表哪个分区中

--使用rowID获取table的object_ID select rowID,dbms_rowid.rowid_object(rowid) object_id,dbms_rowid.rowid_relative_fno(rowid) file_num,dbms_rowid.rowid_block_number(rowid) block_number,dbms_rowid.rowid_row_number(rowid) row_number,dbms_rowid.rowid_to_absolute_fno(rowid,'SYS',...

在oracle 数据伪列 rowid中删除重复的数据时。为什么数据插入的早,rowid...

比较简单的方法是ROWID最后一位的字母越靠前,ROWID就越小。因此,最先插入的记录的ROWID最后一位是A,然后依次是B、C、D……复杂一点的方法,可以ORACLE自带的DBMS_ROWID包,用法如下:SQL&gt; select dbms_rowid.rowid_row_number(rowid) N,rowid,t.empno from EMP_TEMP t; N ROWID EMPNO--...

如何得知某个表空间实际大小使用情况

网上说verify_shrink_candidate可以进行判断收缩空间情况,但好像不怎么好用,表比较小或比较大的时候就不准了 还可以用 select count(distinct dbms_rowid.rowid_block_number(rowid))*db_block_size from tablename 可以得到实际存储数据的块数,但比dbms_space.space_usage要差点 ...

gbase查看一张表是否锁表

1、被锁定的资源在tblspace中的编号:该编号小于10000,则表示有EnterpriseReplicationpseudolocks。2、rowid行标识号:rowid等于0,则该锁是表锁。rowid以两个零结尾,则该锁是页锁。rowid为六位或更少且不以零结尾,则该锁可能是行锁。rowid超过六位,则该锁是索引键值锁。3、索引键号或者是VARCHAR...

informix怎么设置rowid

ALTER TABLE table_name ADD ROWIDS;或在建表时使用 WITH ROWIDS表达式。通过上面的操作, 数据库会为此表增加一个4字节唯一字段,并自动为此字段增加一个内部索引,并且在sysfragments表中为此索引增加一条记录。在建完ROWID之后,对ROWID做一下统计更新:update statistics high for table table_name(...

如何通过Oracle的缓冲区内部机制调整性能

已使用数据块的真实数量要通过查看DBMS_ROWID以获得真实的数据库地址来确定,就像下面这样:select sum(blocks)from dba_data_files;随着数据库的扩展,你必须不忘增加参数的值。在数据库的启动阶段,你需要调用一个脚本加载缓冲区,这一步很简单,就像执行select count(*) from xxx;这样的命令,因为...

oracle中如何删除第十条及以后的所有记录

oracle每条记录都有一个唯一的物理记录rowid,可以通过rowid作为唯一主键进行删除。1、首先根据rownum编号 SELECT ROWID,ROWNUM RN FROM 表2、筛选rn&gt;=10的记录的rowid SELECT ROWID FROM (SELECT ROWID,ROWNUM RN FROM 表) WHERE RN&gt;=103、根据rowid删除第十条以及以后的记录 DELETE FROM 表 where ...

关于oracle数据库表空间可以有多个数据文件问题

问题1:这张表是储存在那个数据文件中呢?能够查询到吗?回答:可以通过表中每一行数据的rowid,查询到这条数据存储在那个数据文件中。方法:select file_name, file_id from dba_data_files where file_id in (select distinct dbms_rowid.rowid_relative_fno(rowid) from scott.emp);问题2:在建表...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
66除以4,商15,余数是6,对吗 6+10么?除以4=15 6➕多少➗4等于15? 原神见闻一共有几章介绍_原神见闻一共有几章是什么 游戏原神见闻一共有几章 干吃麦片有哪些新鲜吃法? 鲁迅笔下的油菜是什么菜 格力空调谦者变频用哪种压缩机 格力谦者频采用的是--冷媒? 该冷媒的优点是? 做梦梦到追猪一家还用石头砸死一只小猪…后来还向猪人形父母跪下讲和... ps/sql中oracle的select语句有rowid进行查寻编辑修改报错 oracle select rowid from t a where a.rowid &lt;&gt; (select min(b.rowi... oracle sql select 语句为何里头有rowid就成可编辑了? 膝盖刺痛怎么办 select t.*, t.rowid from studyinfo t这条语句是什么意思?谢谢 坐一会起来膝盖后面就是部分的中间痛 膝盖中间疼痛,不能下蹲,是十字韧带受损吗? 利用rowid高效删除重复数据SQL如下,语句是怎么执行的? SQL自动编号 rowid是怎么执行?是再创建一张表么? select for update和select t.*,rowid的区别 膝盖刺痛 select t.*,rowid 能用, select *,rowid为什么不能用? 为什么膝盖一直有刺痛的感觉 膝盖痛是因为什么? 膝盖疼痛是怎么回事,像是里面有什么东西,刺痛的感觉,很痛 dw手表一般能用多少年 我找一年前的QQ聊天记录 高手来帮忙 高手进!!我和 一个站长的聊天记录 你相信吗?求解!!! 请各位感情高手帮我分析一下 我上传我们的聊天记录 道路交通安全警示教育心得体会 db2 查询时怎么用rowid 阜阳咸馍的做法? 微粒贷为什么不扣微信零钱 家常咸馍怎么做 阜阳卷馍怎么做 阜阳正宗粉鸡做法 阜阳哪里的小吃有名? 我在微粒贷申请了20000已经放款额度了,钱没有到卡里,要说交啥工本费,就没交,算不算借钱? IReport 3.60报表工具 连接数据源问题? 请大家帮忙看看。 怎么才能做好销售业绩 照蓝底照的时候穿什么颜色的衣服比较好 蓝底照片穿什么颜色衣服照好看 我爱你真不是闹着玩是什么歌,什么歌曲的歌词 歌词里唱有一句我爱你真的不是闹着玩的歌名是什么 世博路线问题 我爱你真的不是闹着玩,我要风光的把你,是什么歌 烟台港到烟台汽车总站距离多远? 歌词,,我爱你不是闹着玩 是什么歌 那一天突然就看对了眼是哪首歌的歌词? 为什么我们的公路经常是坏了修,修了又坏,朋友曾经去过日本,说日本人修的路管五十年,难道真的是日本
  • 焦点

最新推荐

猜你喜欢

热门推荐