用oracle 11g bbed copy替换同一个表数据块block为另一个数据块之系列八
背景 学习用bbed替换同一个表中不同数据块,即用同一个表中1个数据块的内容替换另一个数据块的内容。结论1,可以使用bbed copy命令复制一个数据块内容到另一个数据块2,copy命令为BBED> help copyCOPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]3,使用bbed copy复制数...
library cache内容系列一之library hash bucket--library object handle--heap
由v$statname其指标TBS Extension: bytes extended想到一点小事
结论1,v$statname的指标可以由class列标识2,class值分为:1, User2, Redo4, Enqueue8, Cache16, OS32, Real Application Clusters64, SQL128, Debug3,通过class即可以把指标进行分类,便于以后针对性分类解决或对比某些类别的指标测试SQL> select * from v$version where rownum=1;BANNER-----...
通过dump library cache分析与学习oracle易碎解析锁v$lock之系列十
背景 在使用oracle 10704 event分析获取锁lock及死锁deadlock系列九 http://blog.itpub.net/9240380/viewspace-1819341/,本来想分析易碎解析锁,发现没有找到任何有价值的信息,本文想回答这个问题。结论1,ORACLE的易碎解析锁,从实质说不是锁,而是一种类似于latch一种的东西2,易碎解析锁...
使用oracle 10704 event分析获取锁lock及死锁deadlock系列九
结论1,EVENT 10704获取会话获取锁的详细信息2,产生的trace包括did信息,其分为3部分3,DID分为 数据库实例编号 ORACLE进程号(须由16进制转化为10进制) ORACLE会话对应的serial#(同上要转化)4,产生的TRACE文件内容如下:*** 2015-10-30 03:49:32.791ksqgtl *** CU-cf12e24...
oracle lock dba_ddl_locks获取表级共享锁及表级排它锁之系列八
背景 lock锁不止有DML锁,也有DDL锁,之前已经学习了诸多锁的知识与概念,现在我们学习DDL锁,力图更为全面了解ORACLE锁的知识体系,如此运维过程中方可稳中有胜。结论1,通过dba_ddl_locks可以获取ddl锁的信息2,使用select session_id,owner,name,type,mode_held,mode_requested from dba_ddl_locks w...
如何令暂时不想使用的procedure存储过程由valid变成invalid
背景 某群友问题,有一个存储过程,如果暂时不用,能让他暂时无效吗?结论1,如果想暂时禁用存储过程的对象状态为无用,其实底层是要更新基表obj$的status为非0和非12,user_objects所引用的基表"_CURRENT_EDITION_OBJ",它其实是一个视图3,"_CURRENT_EDITION_OBJ"视图是基于基表user$及obj$的包装4,操作基表非常...
由ORA-00997: illegal use of long datatype引发的血案之long转换为lob
背景: 在测试某个技术问题时,发现long列的表不能复制到另一个表中,报ora-00997错误SQL> create table cdef$_bak as select * from cdef$ where con#=11923;create table cdef$_bak as select * from cdef$ where con#=11923 ...
分析user_constraints为何不显示子表外键列构建的索引历险记
背景 通过select table_name,constraint_name,constraint_type,index_name from user_constraints where table_name in ('T_PARENT','T_CHILD');查询不到子表外键列构建的索引信息,仅可以查询到父表主键约束自动创建的索引,这到底是为何呢,底层处理机制是什么呢?结论1,user_constraints在oracl...
基于v$lock.block及request及dba_waiters或dba_blockers学习lock锁系列七
结论1,v$lock.block=1表明为持锁会话,而block=0,表示为被阻塞会话(当然前提是至少有2个会话,如果仅一个会话,block=0),也就是说至少要2个会话才有意义比较block的值2,v$lock虽然可以通过block的值来区分持锁会话或被阻塞会话,但并不直观,并且不能建立持锁会话与被阻塞会话的对应关系,当然,你可以对v$lock进...
基于v$lock.lmode分析父子表外键列是否索引持锁模式区别之系列六
结论1,oracle lock锁机制非常复杂,v$lock.lmode之间的区别以及适用场景还要研究2,本文基于3个并发会话进行测试,第1个会话操作基于子表DML操作,第2个会话操作基于父表的DML操作,第3个会话基于子表的DML操作(包含INSERT,UPDATE,DELETE)3,需要3个并发会话,基于子表外键列是否构建索引的行为区别 对...
v$lock之alter table drop column与alter table set unused column区别系列五
背景 之前文章: http://blog.itpub.net/9240380/viewspace-1814709/,涉及过如何删除表的某列,本文我们讨论下不同的删除表列语法参数,持锁模式的不同,便于大家在OLTP操作时选用不同的命令组合,减少对于业务的影响。结论1,alter table set unused column与alter table drop column持锁模式相...
通过10046分析v$lock持锁模式lmode之系列四
背景 在之前文章: http://blog.itpub.net/9240380/viewspace-1816522/ 学习了v$lock.lmode不同持锁模式的基本区别,本文准备从实际操作角度来理解下不同持锁模式的区别,便于大家从直观感觉ORACLE 不同锁模式的差异,我们准备采用大家熟知的10046进行分析。 结论10046分析我们采...
oracle v$lock系列之三
结论1,oracle11g测试环境2,产生事务时会同时在表上加2个锁,分别为事务锁tx锁以及表锁tm锁3,表锁tm锁又从锁定模式分为7个不同值 本文仅测试了其中5个不同值 分别为: 2 - row-S (SS) 3 - row-X (SX) 4 - share (S) 5 - S/Row-X (SSX) &nbs...
使用oracle 11g bbed dump undo header block报错之系列六
结论1,oracle 11g bbed不支持直接用map查看undo header block2, 得出上述结论有几个原因: A,BBED MAP报错 B,我MAP了UNDO HEADER BLOCK的前后相领块,即可以MAP测试 SQL> select * from v$version where rownum=1;BANNER-----------------------------------------...
oracle11g使用bbed运行help命令报错之系列五
结论1,oracle 11g bbed正常使用,必须要在ORACLE_HOME/rdbms/mesg包含2个消息文件 bbedus.msb及bbedus.msg,这些消息文件可以从oracle10g对应目录复制即可2,否则在bbed使用help会报错: Message 1013 not found; No message file for product=RDBMS, facility=BBED测试SQL> select * from v$versio...
bbed修改表记录内容系列四
背景 在之前几篇文章 http://blog.itpub.net/9240380/viewspace-1816245/,简短测试了如何修改表中数据数据为字符的列内容,本文开始测试如何修改数据数据类型为数字的列。结论1,用bbed修改数据块,不能仅修改列内容部分2,还要修改kcbh结构体中的chkval_kcbh,即用于校验数据块的,不...
bbed修改表记录内容系列三
背景 在上篇文章:http://blog.itpub.net/9240380/viewspace-1816241/,发现如果变更记录的列宽度变宽,会导致ora-01578错误,导致数据坏块。结论1,如果用bbed修改列宽度加大,会导致坏块出现2,不知为何加大列宽度,会导致坏块出现,唉,还是对于数据块结构理解不深3,在bbed中,可以用revert回退数据块...
bbed修改表记录内容系列二
结论1,可见如果我采用bbed修改表记录某列内容,且修改后的列宽度如果大于原来列宽度,会导致坏块出现报ora-015782,解决ora-01578的解决方案有如下几则方法: a,如有rman备份,则直接恢复这个数据块即可,block recover b,若无rman备份,且可以允许数据损失,采用10231 event暂时屏蔽SELECT...
bbed修改表记录内容系列一
结论1,用bbed修改表记录的方法为: 先获取记录的文件号,块号及记录号 然后进入bbed set dba 文件号,块号 offset 记录号 ----指定要修改的数据块位置 find /c 要修改记录的列内容 ...