[20190918]shrink space与ORA-08102错误.txt
[20190918]shrink space与ORA-08102错误.txt
1.环境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
2.再现ORA-08102错误:
SCOTT@test01p> create table t(x int, pad varchar2(100)) enable row movement;
Table created.
SCOTT@test01p> insert /*+ append*/ into t select level, lpad('x', 100, 'x') from dual connect by level<=1e4;
10000 rows created.
SCOTT@test01p> alter table t add y int default 10 not null;
Table altered.
SCOTT@test01p> create index i_t_xy on t(x,y);
Index created.
SCOTT@test01p> delete t where x<=5000;
5000 rows deleted.
SCOTT@test01p> commit ;
Commit complete.
SCOTT@test01p> alter table t shrink space;
alter table t shrink space
*
ERROR at line 1:
ORA-08102: index key not found, obj# 27979, file 11, block 2445 (2)
SCOTT@test01p> host oerr ora 8102
08102, 00000, "index key not found, obj# %s, file %s, block %s (%s)"
// *Cause: Internal error: possible inconsistency in index
// *Action: Send trace file to your customer support representative, along
// with information on reproducing the error
3.10046跟踪看看.
SCOTT@test01p> alter session set events '10046 level 12';
Session altered.
SCOTT@test01p> alter table t shrink space;
alter table t shrink space
*
ERROR at line 1:
ORA-08102: index key not found, obj# 27979, file 11, block 2445 (2)
SCOTT@test01p> alter session set events '10046 off';
Session altered.
--//检查转储发现:
oer 8102.2 - obj# 27979, rdba: 0x02c0098d(afn 11, blk# 2445)
kdk key 8102.2:
ncol: 3, len: 12
key: (12): 03 c2 64 31 ff 06 02 c0 1d a5 00 00
mask: (2048):
--//通过bbed观察看看.
--//03 c2 64 31 ,03表示长度.后面3位表示oracle数字.
SCOTT@test01p> @ conv_n c26431
N20
----------
9948
BBED> set dba 11,2446
DBA 0x02c0098e (46139790 11,2446)
--//注:windows下bbed,无法识别10g以上版本的os头,block存在+1的偏移.
BBED> map
File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
Block: 2446 Dba:0x02c0098e
------------------------------------------------------------
KTB Data Block (Index Leaf)
struct kcbh, 20 bytes @0
struct ktbbh, 72 bytes @20
struct kdxle, 32 bytes @100
b2 kd_off[399] @132
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ub1 freespace[822] @930
ub1 rowdata[6380] @1752
ub4 tailchk @8188
BBED> x /rnnx *kd_off[3]
rowdata[6352] @8104
-------------
flag@8104: 0x00 (NONE)
lock@8105: 0x00
data key:
col 0[3] @8107: 9583
col 1[2] @8111: 10
col 2[6] @8114: 0x02 0xc0 0x1d 0x9f 0x00 0x19
--//9948-9583+3 = 368
BBED> x /rnnx *kd_off[368]
rowdata[516] @2268
------------
flag@2268: 0x00 (NONE)
lock@2269: 0x00
data key:
col 0[3] @2271: 9948
col 1[2] @2275: 10
col 2[6] @2278: 0x02 0xc0 0x1d 0xa5 0x00 0x00
BBED> x /rxxx *kd_off[368]
rowdata[516] @2268
------------
flag@2268: 0x00 (NONE)
lock@2269: 0x00
data key:
col 0[3] @2271: 0xc2 0x64 0x31
col 1[2] @2275: 0xc1 0x0b
col 2[6] @2278: 0x02 0xc0 0x1d 0xa5 0x00 0x00
--//可以看出原来的key是 03 c2 64 31 02 c1 0b 06 02 c0 1d a5 00 00
--//而shrink space后,索引的键值发生了变化,变为如下:
--//key: (12): 03 c2 64 31 ff 06 02 c0 1d a5 00 00
--//0xff表示NULL,参考链接:http://blog.itpub.net/267265/viewspace-2120439/=>[20160619]NULL在数据库的存储.txt
--//也就是索引的第2字段oracle认为是NULL,也就是遇到这样的情况shrink space时.oracle错误的认为Y=null,
--//因为这样的情况Y=10的值并没有保存在数据块中,而是放在sys.ecol$中.
SCOTT@test01p> SELECT * FROM sys.ecol$ WHERE tabobj# IN (SELECT DATA_OBJECT_ID FROM dba_objects WHERE owner = USER AND object_name = 'T');
TABOBJ# COLNUM BINARYDEFVAL GUARD_ID
---------- ---------- ------------------------------ ----------
27978 3 C10B
--//c10b对应number类型是数字10.
--//对于这样的情况如果要降低HWM,仅仅ctas建立表以及索引.
--//如果增加字段时写入数据块中,应该不会出现这样的情况.看了一下隐含参数,应该是_add_col_optim_enabled.
SYS@test> @ hide _add_col_optim_enabled
NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD
---------------------- ---------------------------------- ------------- ------------- ------------ ----- ---------
_add_col_optim_enabled Allows new add column optimization TRUE TRUE TRUE TRUE IMMEDIATE
SCOTT@test01p> alter session set "_add_col_optim_enabled"=false;
Session altered.
create table t1(x int, pad varchar2(100)) enable row movement;
insert /*+ append*/ into t1 select level, lpad('x', 100, 'x') from dual connect by level<=1e4;
alter table t1 add y int default 10 not null;
create index i_t1_xy on t1(x,y);
delete t1 where x<=5000;
commit ;
alter table t1 shrink space;
SCOTT@test01p> alter table t1 shrink space;
Table altered.
--//当然这样增加字段就很慢!!
总结:
如果要做shrink space,最好先检查看看是否曾经这样增加过新字段.
[20190918]shrink space与ORA-08102错误.txt的更多相关文章
- [20181122]模拟ORA-08103错误.txt
[20181122]模拟ORA-08103错误.txt $ oerr ora 810308103, 00000, "object no longer exists"// *Caus ...
- 【转载】alter table move 和 alter table shrink space的区别
move 和shrink 的共同点1.收缩段2.消除部分行迁移3.消除空间碎片4.使数据更紧密 shrink 语法: alter table TABLE_NAME shrink space [com ...
- [20180904]工作中一个错误.txt
[20180904]工作中一个错误.txt --//昨天看我提交一份修改建议,发现自己写的sql语句存在错误.--//链接:http://blog.itpub.net/267265/viewspace ...
- [20170914]tnsnames.ora的管理.txt
[20170914]tnsnames.ora的管理.txt --//昨天朋友讲tnsnams.ora的内容太长了,而且许多不需要的.管理不方便.我记得以前写[20150409]tnsnames.ora ...
- Oracle shrink space
一.开启表的行迁移 alter table table_name enable row movement; select 'alter table '||s.owner||'.'||s.table_n ...
- No space left on device错误解决
No space left on device错误解决笔记 今天准备重启下数据库(linux oracle11g) conn /as sysdba; 出现这样的错误No space left on d ...
- SHRINK SPACE Command : Online Segment Shrink for Tables, LOBs and IOTs
ORACLE-BASE - ALTER TABLE ... SHRINK SPACE Command : Online Segment Shrink for Tables, LOBs and IOTs ...
- Oracle中shrink space命令
shrink_clause: http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_3001.htm#i2192484 ...
- ubuntu 上运行的django 出现No space left on device错误
运行django出现错误信息: [2016-02-16 14:33:24,476 pyinotify ERROR] add_watch: cannot watch /usr/local/lib/pyt ...
随机推荐
- 企业架构如何实施的简介(TOGAF深度好文)
本文来自企业架构学院: BangEA:如何实施企业架构? IT不仅是开展业务的手段,而且正在迅速演变为业务,IT绩效会直接影响企业的盈利能力,但很多企业并没有适时或充分的让IT组织参与业务的规划和决策 ...
- git命令教程
git教程笔记 Git是什么? Git是一个分布式版本控制系统 版本控制方式 集中式版本控制:从版本库中先取得最新的版本,改完之后再上传到版本库中,需要联网 分布式版本控制:每个合作者电脑上都有一个版 ...
- KumuluzEE - Java EE的微服务框架
KumuluzEE - Java EE的微服务架构 https://www.jdon.com/soa/kumuluzEE.html
- linux下关闭selinux
找到 /etc/sysconfig/selinux 文件 修改 SELINUX=enable 使之 SELINUX=disable 重启 reboot
- Paper慢慢读 - AB实验人群定向 Learning Triggers for Heterogeneous Treatment Effects
这篇论文是在 Recursive Partitioning for Heterogeneous Casual Effects 的基础上加入了两个新元素: Trigger:对不同群体的treatment ...
- Leetcode 216. 组合总和 III
地址 https://leetcode-cn.com/problems/combination-sum-iii/ 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并 ...
- matlab练习程序(图像投影到点云)
最近接触点云比较多,如果把图像投影到点云应该挺有意思. 首先需要载入图像,然后做个球或其他什么形状的点云,这里可以参考球坐标公式. 最后通过pcshow将像素输出到点云上即可. 原图: 投影后的点云: ...
- [题解向] PAM简单习题
\(1\) LG5496 [模板]回文自动机 对于 \(s\) 的每个位置,请求出以该位置结尾的回文子串个数. \(|s|\leq 1e6\) 然后就是PAM的板子题咋感觉好像没有不是很板的PAM题呢 ...
- Apollo服务端设计原理剖析
本文摘自于<Spring Cloud微服务 入门 实战与进阶>一书. 1 配置发布后的实时推送设计 配置中心最重要的一个特性就是实时推送了,正因为有这个特性,我们可以依赖配置中心做很多事情 ...
- 时间time()和$_SERVER['REQUEST_TIME']
文件ab1.php <?phpforeach($i=0;$i<1000;$i++){ echo $time();} 结果: 文件ab2.php <?php foreach($i=0; ...