错误信息产生:

下面的报错一般为有坏块的产生。

test=# select max(create_time) from public.tbl_table where create_time>='2010-11-08';

ERROR: could not read block 365 of relation 16779/5348/2486: read only 0 of 8192 bytes

看到这个错误信息,首先想到的是表 tbl_table 上有坏块。

--查看执行计划

test=# \d tbl_table;

Table "public.tbl_table"

Column | Type | Modifiers

----------------+-----------------------------+------------------------

total | integer |

logined | integer |

logining | integer |

http | integer |

rawtcp | integer |

create_time | timestamp without time zone | not null default now()

logincountdesc | character varying |

logincountaddr | character varying | not null

Indexes:

"tbl_table_pkey" PRIMARY KEY, btree (create_time, logincountaddr)

"index_tes" btree (create_time)

test=# select max(create_time) from public.tbl_table where create_time>='2010-11-08';

ERROR: could not read block 365 of relation 16779/5348/2486: read only 0 of 8192 bytes

test=# explain select max(create_time) from public.tbl_table where create_time>='2010-11-08';

QUERY PLAN

------------------------------------------------------------------------------------------------------------------------------------------------

Result (cost=0.04..0.05 rows=1 width=0)

InitPlan

-> Limit (cost=0.00..0.04 rows=1 width=8)

-> Index Scan testward using index_tes on tbl_table (cost=0.00..66.28 rows=1507 width=8)

Index Cond: (create_time >= '2010-11-08 00:00:00'::timestamp without time zone)

Filter: (create_time IS NOT NULL)

(6 rows)

发现上面的查询走的索引 index_tes,所以很可能索引有问题。

--根据报错信息,从relation后面的数字分析

test=# select oid,relname from pg_class where oid=2486;

oid | relname

-------+-----------------------------------------

2486 | index_tes

(1 row)

Time: 0.596 ms

可以看到 2486正好是表上的索引 index_tes。

select relname,relkind from pg_class where relfilenode = '2486';

如果查询结果中relkind = i,表示损坏的是一个索引

--查看索引状态

test=# select * from pg_index where indexrelid=2486;

indexrelid | indrelid | indnatts | indisunique | indisprimary | indisclustered | indisvalid | indcheckxmin | indisready | indkey | indclass | indoption | indexprs | indpred

------------+----------+----------+-------------+--------------+----------------+------------+--------------+------------+--------+----------+-----------+----------+---------

2486 | 24823 | 1 | f | f | f | t | f | t | 6 | 10053 | 0 | |

(1 row)

indisvalid=t 表示索引处于可用状态。

--尝试下重建索引

test=# \timing

Timing is on.

test=# reindex index concurrently index_tes; 注:REINDEX 命令和 CREATE INDEX 持有表级锁为 SHARE 锁,会阻塞表上的 DML 操作。

REINDEX

Time: 107796.232 ms

--索引重建后,查询恢复正常

test=# select pg_size_pretty(pg_relation_size('index_tes'));

pg_size_pretty

----------------

31 MB

(1 row)

另一种情况,主键损坏:

需要注意,损坏的可能是普通索引,也可能是主键或唯一键。如果索引的名称中有“_pkey”等很可能属于主键,而名称中含有 “key”则很可能属于唯一键。

如果表名是“pg
”开头的,则说明它是系统表。

pgclass.relkind 的值的几种:

r: 表示ordinary table(普通表);

i: 表示index(索引);

S: 表示sequence(序列);

V: 表示view(视图);

m: 表示materialized view(物化视图);

c: 表示composite type(复合类型);

t: 表示TOAST table(TOAST 表);

f: 表示foreign table(外部表)

如果损坏的是主键或唯一键,首先要找到它所在的表,

例如:

select tablename,indexname from pg_indexes where indexname = 'tb_pkey';

查询结果:

t1, tb_pkey

获取索引的定义:

select pg_get_constraintdef((select oid from pg_constraint where conname = ' tb_pkey '));

查询结果:PRIMARY KEY (id)

重建主键约束:

Alter table t1 drop constriant tb_pkey;

Alter table t1 add constraint tb_pkey PRIMARY KEY (id);

总结: 索引上有坏块可以通过重建索后,查询恢复正常。

KingbaseES索引坏块的更多相关文章

  1. PostgreSQL 索引坏块处理

    今天应用反应有张表查询报错,报错信息如下 back=# select max(create_time) from public.tbl_index_table where create_time> ...

  2. 对Oracle数据库坏块的理解

    1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说 ...

  3. Oracle数据库坏块的恢复

    模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...

  4. Oracle corrupt block(坏块) 详解

    转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接 在看坏块之前,先看几个相关的链接,在后面 ...

  5. 【转】基于RMAN实现坏块介质恢复(blockrecover)

    本文转自:乐沙弥的世界 对于物理损坏的数据块,我们可以通过RMAN块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据 ...

  6. 使用 DBMS_REPAIR 修复坏块

    对于Oracle数据块物理损坏的情形,在我们有备份的情况下可以直接使用备份来恢复.对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等.对于这几种方式我们需要 ...

  7. ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1)

    ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1) (一)NOLOGGING操作引起的坏块(ORA-01578和ORA-26 ...

  8. 无备份时用dbms_repair恢复坏块的方法

    份的情况下可以直接使用备份来恢复. 对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等. 对于这几种方式我们需要实现基于数据库以及文件级别的恢复.RMAN同 ...

  9. oracle坏块问题的处理

    一.背景 今天有用户反映数据库连不上了,查看日志发现有数据库坏块. 查看数据库日志,有如下报错: ORA-01578: ORACLE , 93642) ORA-01110: 1: '/oracle/a ...

  10. Oracle 处理坏块

    本文主要介绍如何去处理在Oracle数据库中出现坏块的问题,对于坏块产生在不同的对象上,处理的方法会有所不同,本文将大致对这些方法做一些介绍.因为数据库运行时间长了,由于硬件设备的老化,出现坏块的几率 ...

随机推荐

  1. MySQL 8.0.25从节点自动故障转移测试

    从MySQL 8.0.23开始,复制结构中,增加了从节点自动故障转移功能.测试一下起功能: 用dbdeployer快速安装测试环境,我这边安装的是:dbdeployer1.8.5    -- 安装脚本 ...

  2. 微信小程序云开发项目-个人待办事项-04【我的】模块开发

    上一篇: 微信小程序云开发项目-个人待办事项-03[主页]模块开发 https://blog.csdn.net/IndexMan/article/details/124538576 模块开发步骤 本篇 ...

  3. ultraISO方式制作win10安装U盘

    说明 最近帮朋友安装下win10,用了2种制作U盘启动盘的方式.记录一下也方便大家少走弯路. 准备的工具: 1.utralISO(软通牒) 2.win10镜像 3.16GB U盘,U盘容量 > ...

  4. 《深入理解Java虚拟机》(四) 调优工具、指令

    目录 JVM 调优的概念 jps 1.options 功能选项 2.hostid jstat 1.vmid格式 2.interval 和 count 3.option jinfo jmap jhat ...

  5. C++ 多线程的错误和如何避免(4)

    对共享的资源或者数据做加锁处理 在多线程的环境下,有时需要多个线程对同一个资源或者数据进行操作,如果没有加锁,容易出现未定义的行为. 比如: #include <iostream> #in ...

  6. .net+bootstrap写的一个还不错的音乐网站

    以前做的一款设计音乐网站,分享下. 技术用的是.net +sqlserver 大致的样子是这样的. 1.首页如下: 2.播放歌词页面如下:歌词自动滚动,且可悬停. 3.歌单信息页面如下: 详细页面如下 ...

  7. java图书管理系统

    一 .需求 1.使用数组存储学生(学号.姓名.性别.年级.院系.班级)信息数据和图书(书号.书名.出版日期.作者.价格.类别)信息数据 2.学生管理功能:增加学生.删除学生信息.修改学生信息.查询学生 ...

  8. 【Azure 存储服务】如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?

    问题描述 如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?因为有时候出现误操作删除了某些Blob文件,想通过查看删除日志来定位被删除的文件信息. 问 ...

  9. [python]将多张图片合并为单个pdf文件

    前言 最近有个个人需求是要把多个图片文件合并为一个PDF文件,这样方便用PDF阅读器连续看,避免界面点一下,只会图片放大.(比如看漫画) 主要思路是先把单张图片转换成单个PDF文件,然后把PDF文件进 ...

  10. 十四: Mysql数据结构选择的合理性

    Mysql数据结构选择的合理性 从MySQL的角度讲,不得不考虑一个现实问题就是磁盘I/O. 如果我们能让索引的数据结构尽量减少硬盘的I/O操作,所消耗的时间也就越小.可以说,磁盘的I/O操作次数对索 ...