记录一次金仓V8R3数据库坏块处理过程、PostgreSQL数据库适用
因数广政务云华为业务存储固件升级,导致数据库产生坏块,业务SQL查询报错如下:
ERROR: missing chunk number 0 for toast value 38166585 in SYS_TOAST_30170
CONTEXT: PL/SQL function inline_code_block line 12 at FOR over EXECUTE statement
解决办法:
1、先查询出 SYS_TOAST_30170 属于哪张表的大字段。
select
n.nspname AS schema_name,
c.relname AS table_name,
a.attname AS column_name,
bb.relname as TOAST_name
from
sys_class c
inner join (select substring(sc.RELNAME from '[0-9]+') gg, sc.relname from sys_class sc) bb on c.oid = bb.gg
inner join sys_attribute a on a.attrelid = c.oid
inner join sys_namespace n ON n.oid = c.relnamespace
WHERE
a.attnum > 0
AND NOT a.attisdropped
AND a.atttypid = (SELECT oid FROM sys_type WHERE typname = 'text')
and bb.relname = 'SYS_TOAST_30170';

PostgreSQL使用以下脚本:
select
n.nspname AS schema_name,
c.relname AS table_name,
a.attname AS column_name,
bb.relname as TOAST_name
from
pg_class c
inner join (select substring(sc.RELNAME from '[0-9]+') gg, sc.relname from pg_class sc) bb on c.oid = bb.gg
inner join pg_attribute a on a.attrelid = c.oid
inner join pg_namespace n ON n.oid = c.relnamespace
WHERE
a.attnum > 0
AND NOT a.attisdropped
AND a.atttypid = (SELECT oid FROM pg_type WHERE typname = 'text')
and bb.relname = 'SYS_TOAST_30170';
2、创建一张记录含有坏块行的表、row_error_table
CREATE TABLE row_error_table (
err_ctid tid,
err_tablename varchar2(1000),
err_cloum varchar2(500),
err_CONTEXT text
);
3、使用下面脚本找到坏块在哪些行进行处理。
DO $$
DECLARE
rec RECORD;
/* 需要检测坏块的表、手动输入 */
v_tablename text := 'g_inbox';
/* 需要检测坏块的列、手动输入 */
v_columnname text := 'PROCESS_CONTENT';
BEGIN
FOR rec IN EXECUTE format('SELECT ctid, %I FROM %I ORDER BY ctid ', v_columnname, v_tablename) LOOP
BEGIN
RAISE NOTICE 'CTID Parameter is: %', rec.ctid;
RAISE NOTICE 'ROW Parameter is: %', rec.PROCESS_CONTENT;
EXCEPTION WHEN others THEN
/* 遇到 ERROR: missing chunk number 0 for toast value ... 异常 直接记录在 row_error_table*/
INSERT INTO row_error_table (err_ctid, err_tablename,err_cloum,err_CONTEXT) VALUES (rec.ctid, v_tablename,v_columnname,SQLERRM);
END;
END LOOP;
END;
$$
LANGUAGE plpgsql;

这个脚本会对需要检测坏块的表进行全表扫描,逐行验证是否有坏块。
v_tablename text := 'g_inbox'; /* 需要检测坏块的表、手动输入 */
v_columnname text := 'PROCESS_CONTENT'; /* 需要检测坏块的列、手动输入 */
检测坏块的时间取决于表的数据量。

脚本跑完以后会显示DO。
4、上面脚本跑完以后检查哪些行是有坏块。
SELECT * FROM row_error_table;

保存坏块的表名和列名都有显示,保存着CTID。
5、校验行是否有坏块。

查询整行记录报错,确定是有坏块
6、找到坏块的主键id。

找到主键ID以后,可以通过备份集找到原来的备份在异机进行恢复,然后通过主键ID找到着5行数据导出,然后在生产库导入即可。
记录一次金仓V8R3数据库坏块处理过程、PostgreSQL数据库适用的更多相关文章
- 13 oracle数据库坏块-逻辑坏块(模拟/修复)
13 oracle数据库坏块-逻辑坏块 逻辑数据坏块的场景1)oracle bug也可能导致逻辑坏块的产生. 特别是parallel dml. 例如:Bug 5621677 Logical corru ...
- 12 oracle 数据库坏块--物理坏块-ORA-01578/ORA-01110
oracle 数据库坏块--物理坏块 数据坏块的类型物理坏块:通常是由于硬件损坏如磁盘异常导致.内存有问题.存储链有问题. IO有问题.文件系统有问题. Oracle本身的问题等逻辑坏块:可能都是软件 ...
- undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致
本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...
- Oracle数据库坏块的恢复
模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...
- 对Oracle数据库坏块的理解
1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说 ...
- 使用BBED模拟Oracle数据库坏块
BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢 ...
- [转]RMAN检测数据库坏块
backup validate check logical database; select * from v$database_block_corruption; RMAN> backup v ...
- PostgreSQL 恢复大法 - 恢复部分数据库、跳过坏块、修复无法启动的数据库
转载自:https://yq.aliyun.com/articles/582880 背景 一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB). 如果访问有坏块的表. 如何从无法启动的数据库中 ...
- PostgreSQL物理坏块和文件损坏案例分享
作者简介 王睿操,平安好医数据库架构岗,多年postgresql数据库运维开发工作.曾就职于中国民航信息,迪卡侬.对其他数据库产品也有一定的涉猎. 背景 笔者最近发现很多朋友经常遇到PostgreSQ ...
- oracle坏块问题的处理
一.背景 今天有用户反映数据库连不上了,查看日志发现有数据库坏块. 查看数据库日志,有如下报错: ORA-01578: ORACLE , 93642) ORA-01110: 1: '/oracle/a ...
随机推荐
- EasyExcel中使用表头模板示例
解决方案 在EasyExcel的官方示例中,使用模板导出Excel,其结果仍然还会重新打印表头.不满足使用表头模板的需求.在参考源码后,找到如下解决方案. String templateFileNam ...
- Blazor前后端框架Known-V1.2.10
V1.2.10 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Git ...
- Unity的UnityStats: 属性详解与实用案例
UnityStats 属性详解 UnityStats 是 Unity 引擎提供的一个用于监测游戏性能的工具,它提供了一系列的属性值,可以帮助开发者解游戏的运行情况,从而进行优化.本文将详细介绍 Uni ...
- Unity的AssetPostprocessor之Model之动画:深入解析与实用案例 3
Unity AssetPostprocessor的Model的动画相关的函数修改实际应用 在Unity中,AssetPostprocessor是一个非常有用的工具,它可以在导入资源时自动执行一些操作. ...
- 状压DP-学习笔记
状压DP 状压 \(DP\) 是一种基于二进制数的 \(DP\). T1 题目大意 将一个整数 \(N\) 分解成若干个小整数的乘积,满足: 分解出的整数必须来自集合 \(S\). 分解出的整数必须互 ...
- 通过实战操作学git
虽然说 "好记性不如烂笔头",但是学习不看等于没学,学习不用等于不会,所以说"实战才是检验真理的唯一标准",通过实战则会学到很多东西. 因为陈** 太懒,并且不 ...
- SQL技巧:WITH RECURSIVE递归运算
SQL技巧:WITH RECURSIVE递归运算 1.累加求和运算 -- 计算递归 WITH RECURSIVE t(n) AS ( VALUES (1) UNION ALL SE ...
- 文心一言 VS 讯飞星火 VS chatgpt (83)-- 算法导论8.1 4题
四.用go语言,假设现有一个包含n个元素的待排序序列.该序列由 n/k 个子序列组成,每个子序列包含k个元素.一个给定子序列中的每个元素都小于其后继子序列中的所有元素,且大于其前驱子序列中的每个元素. ...
- LeetCode952三部曲之一:解题思路和初级解法(137ms,超39%)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 题目描述 难度:困难 编程语言:Java 给定一个由不 ...
- 性能调优 session 1 - 计算机体系结构 量化研究方法
近期本人参与的存储系统项目进入到性能调优阶段,当前系统的性能指标离项目预期目标还有较大差距.本人一直奉行"理论指导下的实践",尤其在调试初期,更要抓住主要矛盾,投入最少的资源来获取 ...