iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >大表delete删数据导致数据库异常怎么解决
  • 602
分享到

大表delete删数据导致数据库异常怎么解决

2023-07-02 15:07:42 602人浏览 泡泡鱼
摘要

今天小编给大家分享一下大表delete删数据导致数据库异常怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一

今天小编给大家分享一下大表delete删数据导致数据库异常怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、问题描述

早上正在上班路上,群里客户说,有一张24G的大表,delete删了26小时还没有跑完,目前进程还在跑让帮忙处理下,停止当前进程,并保留对应条件的数据,多余数据删掉。

二、查看数据库情况

未开归档

UNDO表空间爆满

三、提出方案

经过沟通,该表为测试数据表,目前没有在使用;

于是打算rename该表,通过ctas的方式去将需要的数据捞出来,重建索引和相关约束。

存在一个问题:delete进程已经执行了26小时,如果kill进程,必然会导致undo回滚,回滚默认开启并行会导致数据库和系统负载很高,于是需要提前处理下,设置参数_fast_start_parallel_rollback_关掉UNDO并行。

--查看回滚参数设置,是否是默认并行sql> show parameter fast_start_parallel_rollbackNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------fast_start_parallel_rollback         string      LOW--LOW 代表 开启CPU*2并行--设置spfile取消并行SQL> alter system set fast_start_parallel_rollback=false;System altered.

四、执行过程

备份保留 表创建语句。

记录当前无效对象。

SELECT  d.OWNER       ,d.OBJECT_NAME       ,d.OBJECT_TYPE       ,d.statusFROM dba_objects dWHERE d.status = 'INVALID' AND d.owner = '**';

查看delete进程pid,系统级kill掉。

--查询SID, SERIAL#select s.SQL_TEXT, se.SID, se.SERIAL#  from v$session se, v$sql s where s.sql_id = se.SQL_ID   and username = '**'   and status = 'ACTIVE'   and s.SQL_TEXT like '%delete * from *****%';--数据库级kill进程alter system kill session '2953,31083';

报错

ERROR at line 1:
ORA-00031: session marked for kill
--系统级 kill进程
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=2953;
kill -9 105257

观察undo回滚情况

--查看等待事件select inst_id,event,count(*)  from gv$session a where a.status='ACTIVE' and not (a.type = 'BACKGROUND' and a.state='WaiTING' and  a.wait_class='Idle') group by inst_id,event order by a.inst_id,count(*) desc;---------------------------------------------------1wait for a undo record611resmgr:cpu quantum291enq: RO - fast object reuse221enq: CR - block range reuse ckpt201free buffer waits17--查看当前数据回滚情况alter session set nls_date_fORMat='yyyy-mm-dd hh34:mi:ss';select usn,       state,       undoblockstotal "Total",       undoblocksdone "Done",       undoblockstotal - undoblocksdone "ToDo",       decode(cputime,              0,              'unknown',              sysdate + (((undoblockstotal - undoblocksdone) /              (undoblocksdone / cputime)) / 86400)) "Estimated time to complete"  from v$fast_start_transactions  where state = 'RECOVERING';---------------------------------------------------83RECOVERING9026713455902625826-4月 -21

观察系统负载,IO负载,内存使用情况

等待回滚完成,持续时间较久。

回滚成功后,rename 原表。

rename table to table_20210410;

CTAS将需要的数据捞到新表(原来的表名)中。

create table USER.TABLEnologging parallel 8tablespace TBSas select  * from USER.TABLE_20210410where *** like '******%';--取消并行alter table USER.TABLE noparallel;--开启loggingalter table USER.TABLE logging;

rename索引,并重建索引。

alter index USER.INDEX1 rename to INDEX1_20210410;--重建索引create index USER.INDEX1 on USER.TABLE (***) tablespace TBS parallel 8;--取消并行alter index USER.INDEX1 noparallel;

创建约束,授权。

比对无效对象,数据是否一致

drop掉rename的表。

drop table USER.TABLE_20210410 cascade;

以上就是“大表delete删数据导致数据库异常怎么解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: 大表delete删数据导致数据库异常怎么解决

本文链接: https://www.lsjlt.com/news/342901.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 大表delete删数据导致数据库异常怎么解决
    今天小编给大家分享一下大表delete删数据导致数据库异常怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一...
    99+
    2023-07-02
  • oracle数据库delete删除的数据怎么恢复
    oracle数据库中删除的数据可以通过以下方法恢复:事务回滚:可还原事务内已删除数据。闪回查询:访问特定时间点已删除的数据。闪回表空间:创建数据库副本,包含已删除数据。日志文件:使用专业...
    99+
    2024-04-18
    oracle
  • 怎么解决数据库ora-600异常
    本篇内容介绍了“怎么解决数据库ora-600异常”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一,问题描述...
    99+
    2024-04-02
  • redis和数据库数据不一致怎么解决
    redis和数据库数据不一致的解决方法有:开启redis持久化;使用事务或锁;定期同步数据;使用缓存失效策略;使用主从复制;定期检查和修复。 Redis和数据库数据不一致的解决方法 R...
    99+
    2024-04-08
    redis 数据丢失 同步机制
  • 怎么将数据库表数据导出
    有多种方法可以将数据库表数据导出,以下是其中几种常用的方法: 使用数据库管理工具:许多数据库管理工具(如MySQL Workbe...
    99+
    2024-04-02
  • sqlserver怎么导出数据库表数据
    可以使用SQL Server Management Studio (SSMS) 或者命令行工具bcp命令来导出数据库表数据。 使...
    99+
    2024-04-09
    sqlserver 数据库
  • oracle数据库怎么导出表数据
    在Oracle数据库中,可以使用以下方法导出表数据: 使用SQL Developer工具 打开SQL Developer工具并...
    99+
    2024-03-15
    oracle
  • 数据库Delete怎么用
    数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。数据库的Delete操作是用来删除数据库中的数据记录的,它是数据库操作中的一种重要操作,能够帮助用户删除不需要的数据,以便保持数...
    99+
    2023-11-13
    数据库 delete
  • Mysql数据库delete操作没报错却删除不了数据的解决
    1、在操作页面执行删除操作,但没有删除成功,删除过程无报错(以下为删除操作的控制台日志) 2、在数据库执行删除操作 表数据 执行删除语句删除staffId为3的数据 结果却没有删除成功 3、原因 staffId为...
    99+
    2023-01-04
    Mysqldelete报错 MySQL无法删除
  • 大文本数据怎么导入导出到数据库
    这篇文章主要介绍“大文本数据怎么导入导出到数据库”,在日常操作中,相信很多人在大文本数据怎么导入导出到数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”大文本数据怎么导入导...
    99+
    2024-04-02
  • qt串口接收大量数据导致卡顿怎么解决
    如果Qt串口接收大量数据导致卡顿,可以尝试以下几种解决办法:1. 优化串口接收代码:确保串口接收代码是高效的,可以使用Qt提供的异步...
    99+
    2023-09-22
    qt
  • plsql怎么导出数据库表和数据
    PL/SQL无法直接导出数据库表和数据,但可以使用SQLPlus或者Oracle SQL Developer等工具来导出数据库表和数...
    99+
    2023-10-20
    plsql 数据库
  • 数据库怎么导出大表到服务器
    要将数据库中的大表导出到服务器,可以使用数据库管理工具或命令行工具来完成这个操作。以下是一种常用的方法: 使用数据库管理工具(如M...
    99+
    2024-04-09
    数据库
  • oracle数据库delete的数据怎么恢复
    oracle数据库中已删除的数据可以通过以下步骤恢复:检查回收站:进入回收站查看已删除的数据,如在则恢复。使用flashback query:在数据不在回收站时使用flashback q...
    99+
    2024-04-18
    oracle 数据丢失
  • 怎么用C++实现数据库删除大表
    本篇内容介绍了“怎么用C++实现数据库删除大表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景:数据库的IO压力非常大,如果在线上删除大表...
    99+
    2023-06-03
  • SQLSERVER2008 errorlog过大导致数据库无法启动怎么办
    这篇文章主要介绍了SQLSERVER2008 errorlog过大导致数据库无法启动怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。早上...
    99+
    2024-04-02
  • mysql怎么导出数据库表
    要导出 MySQL 数据库表,可以使用以下两种方法: 使用 MySQL 命令行工具导出: 打开终端或命令提示符,并登录到 My...
    99+
    2024-04-09
    mysql 数据库
  • sqlserver数据库怎么导出表
    要导出 SQL Server 数据库中的表,可以使用 SQL Server Management Studio (SSMS) 或者 ...
    99+
    2024-04-19
    sqlserver
  • oracle数据库表怎么导出
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • mysql怎么删除数据库表
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作