Oracle运维笔记之事务回滚处理

简介: Oracle运维笔记之事务回滚处理

客户的跑批任务由于逻辑放生错误,导致了insert上亿条数据,表空间使用率即将爆满,在和开发商量后,只能kill跑批,回滚事务。在回滚期间,观察了以下3个视
有关回滚的几个视图:

v$session_longops

该视图记录了所有时间超过6秒(绝对时间)的操作,这些操作包括:备份、恢复、统计信息收集、查询等,以及
Oracle的每个版本中新增的操作。

sofar:到目前为止完成的工作量,单位为units列值,一般为block
totalwork:总共的工作量,单位为units列值,一般为block
time_running:预计完成操作的剩余时间,单位为秒
elapsed_seconds:从操作开始总花费时间,单位为秒

v$fast_start_transactions

该视图记录了Oracle的回滚事务。
实际上不是所有的回滚都会记录在该视图中,例如一般的rollback就不会记录;当服务进程在提交事务(commit)前意外终止的话就会形成死事务(dead transaction),PMON进程负责轮询Oracle进程,找出这类意外终止的死进程(dead process),通知SMON将与该dead process相关的dead transaction回滚清理,这才会记录在该视图中,例如事务在提交前会话被kill,以及数据库实例意外关闭,shutdown abort等。

STATE: TO BE RECOVERED(即将回滚), RECOVERED(回滚完毕), or RECOVERING(回滚中)
UNDOBLOCKSDONE:当前回滚的undo blocks数量
UNDOBLOCKSTOTAL:总共需要回滚的undo blocks数量

v$transaction

记录了所有active的事务。
需要重点关注used_ublk,多次查询,如果used_ublk在增大,说明正在执行数据处理;如果used_ublk在减小,说明正在执行rollback,一直到used_ublk为0表示rollback结束,可以通过这个值大致估算出rollback的时间。

在事务回滚时,修改FAST_START_PARALLEL_ROLLBACK参数为true,以加快回滚速度。同时还需要观察undo空间的使用率,通常是需要临时增加undo文件,以避免undo没有空余空间。

with free_sz as
(select tablespace_name, sum(f.bytes) / 1048576 / 1024 free_gb
from dba_free_space f
group by tablespace_name),
a as
(select tablespace_name,

    sum(case
          when status = 'EXPIRED' then
           blocks
        end) * 8 / 1048576 reusable_space_gb,
    sum(case
          when status in ('ACTIVE', 'UNEXPIRED') then
           blocks
        end) * 8 / 1048576 allocated_gb

from dba_undo_extents
where status in ('ACTIVE', 'EXPIRED', 'UNEXPIRED')
group by tablespace_name),
undo_sz as
(select tablespace_name, df.user_bytes / 1048576 / 1024 user_sz_gb
from dba_tablespaces ts
join dba_data_files df
using (tablespace_name)
where ts.contents = 'UNDO'

and ts.status = 'ONLINE')

select tablespace_name,

  user_sz_gb,
  free_gb,
  reusable_space_gb,
  allocated_gb,
  free_gb + reusable_space_gb + allocated_gb total

from undo_sz
join free_sz
using (tablespace_name)
join a
using (tablespace_name);

相关文章
|
27天前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
5月前
|
运维 Oracle 容灾
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
|
5月前
|
运维 Linux Docker
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
|
28天前
|
运维 Java 关系型数据库
【Java笔记+踩坑】SpringBoot基础2——运维实用
SpringBoot程序的打包与运行、临时配置、多环境配置、日志
【Java笔记+踩坑】SpringBoot基础2——运维实用
|
2月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
60 2
|
2月前
|
SQL 运维 Oracle
入门级Oracle 11g日常运维命令总结
入门级Oracle 11g日常运维命令总结
28 1
|
2月前
|
应用服务中间件 API 网络安全
运维笔记:宿主机转发实现多容器复用CA证书
运维笔记:宿主机转发实现多容器复用CA证书
30 4
|
2月前
|
数据采集 运维 监控
运维笔记:流编辑器sed命令用法解析
运维笔记:流编辑器sed命令用法解析
47 5
|
2月前
|
运维 安全 网络安全
运维笔记:基于阿里云跨地域服务器通信
运维笔记:基于阿里云跨地域服务器通信
86 1
|
2月前
|
SQL 存储 关系型数据库
运维笔记.MySQL.基于mysqldump数据备份与恢复
运维笔记.MySQL.基于mysqldump数据备份与恢复
42 0

推荐镜像

更多