回滚

ORA-00742:Log read detects lost writein thread 1 sequence 1202 block 137840

对着背影说爱祢 提交于 2020-03-17 10:29:09
问题背景: 客户数据库环境遭遇断电宕机,启动数据库失败,协助查看。 报错如下: 1 Total System Global Area 6442450944 bytes 2 Fixed Size 8807168 bytes 3 Variable Size 1375735040 bytes 4 Database Buffers 5049942016 bytes 5 Redo Buffers 7966720 bytes 6 Database mounted. 7 ORA-00742: Log read detects lost write in thread 1 sequence 1202 block 137840 8 ORA-00312: online log 18 thread 1: '/u01/app/oracle/oradata/orcl/redo18.log' 9 10 11 alter pluggable database all open 12 * 13 ERROR at line 1: 14 ORA-01109: database not open 问题解决: 宕机过程中redolog丢失 1 SQL> RECOVER DATABASE UNTIL CANCEL; //尝试recover 2 ORA-01547: 警告: RECOVER 成功但 OPEN

MySQL:5.6 大事务show engine innodb status故障一例

纵然是瞬间 提交于 2020-03-16 17:26:40
某厂面试归来,发现自己落伍了!>>> 导读: 作者:高鹏(网名八怪),《深入理解MySQL主从原理32讲》系列文的作者。 今天遇到一个朋友的线上问题,大概意思就是说,我有一个线上的大事务大概100G左右,正在做回滚,当前看起来似乎影响了线上的业务,并且回滚很慢,是否可以减轻对线上业务的影响。并且朋友已经取消了双1设置,但是没有任何改观。版本MySQL 5.6首先我们需要知道的是,MySQL并不适合大事务,大概列举一些MySQL中大事务的影响: binlog文件作为一次写入,会在sync阶段消耗大量的IO,会导致全库hang主,状态大多为query end。 大事务会造成导致主从延迟。 大事务可能导致某些需要备份挂起,原因在于flush table with read lock,拿不到MDL GLOBAL 级别的锁,等待状态为 Waiting for global read lock。 大事务可能导致更大Innodb row锁加锁范围,导致row锁等待问题。 回滚困难。 基于如上一些不完全的列举,我们应该在线上尽可能的避免大事务。好了我们下面来进行问题讨论。 一、问题 前面已经说了,我们已经取消了双1设置,所谓的双1就是 sync_binlog=1和 innodb_flush_log_at_trx_commit=1。这两个参数线上要保证为1,前者保证binlog的安全

@Transactional注解

心不动则不痛 提交于 2020-03-16 11:18:09
1.作用简述 br/> 作用由于业务需求,在**Service的方法A中使用一个for循环,每次循环里面的业务可能会发生异常,这个时候需要将循环内的所有数据库操作给回滚掉**,但又不能影响到之前循环里数据的更改,并且后面的循环里不发生异常的情况下也需要正常操作数据库。 **2.用法简述** 为了保证事务的一致性,事务管理对企业应用是至关重要的。Sring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理两种实现方式:1)TransactionTemplate;2)直接使用底层的PlatformTransactionManager。对于编程式事务管理,Spring推荐使用方式1)。 声明式事务管理建立在AOP之上,其本质是对方法前后进行拦截,然后再目标方法开始之前创建一个或加入一个事务,在执行完目标方法之后,根据情况执行或回滚事务。声明式事务管理也有两种方式:1)基于tx和aop名字空间的xml配置文件;2)基于@Transactional注解。注解方式更简单易用。 3.Transactional注解使用说明 br/> 当作用于类上,该类的所有public方法都具有该事务属性。也可以**作用于方法级别上**。 在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚

Oracle事务

孤街浪徒 提交于 2020-03-15 11:52:17
目录 一、事务的基本概念 二、事务的特征 1、原子性(Atomicity) 2、一致性(Consistency) 3、隔离性(Isolation) 4、持久性(Durability) 三、事务控制 1、设置事物属性 2、数据异常 3、选择隔离层 4、保存点 四、版权声明 一、事务的基本概念 在数据库中事务是工作的逻辑任务,一个事务是由一个或一组SQL语句组成,通过事务机制确保这一组SQL语句的操作要么全部成功执行成功,完成整个工作任务,如果任何一条SQL执行失败,对数据表所做的操作全部撤销。 事务的目的就是为了保证数据的完整性,以银行转换业务为例: A用户向B转账1000元,步骤如下: 1)A用户账户余额减少1000元; 2)B用户账户余额增加1000元; 3)记录A用户的交易日志。 4)记录B用户的交易日志。 一笔转帐交易将产生四次数据库操作,要么全部都成功,如果有一个失败,其它操作也应该全部被撤销。 转账交易有四次数据库操作,即四条SQL语句,第一条SQL执行的时候是事务的开始,如果全部的SQL语句执行成功,提交事务,如果有任何一条SQL语句执行失败,回滚事务。 commit; -- 提交事务。 rollback; -- 回滚事务。 二、事务的特征 对一组SQL语句操作构成的事务,数据库系统必须保证这些操作的原子性、一致性、隔离性和持久性,即ACID原则。 1、原子性

SQLSERVER数据库经常置疑的原因

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-14 16:47:17
近段时间经常收到客户的求助电话,说他们的SQLSERVER业务数据库置疑了,因为系统不能使用,所以他们也不能加油正常营业 (我们是做加油站IC卡管理系统的)因为我们的系统损坏的话,加油站也不能加油,然后我们使用DBCC CHECKDB命令帮客户修复 数据库,客户的数据库一共置疑了两次 我们怀疑是不是他们的硬盘有问题,但是因为计算机是我们配给客户的是DELL商用机(2011年购买的),按道理质量应该不错的。 后来得知是他们油站停过电。我们大概知道置疑的原因了。 我们推测的原因: 停电之前有加油数据要插入数据库,因为SQLSERVER我们都是使用默认设置,什么都没有改,就是说数据插入数据库的时候事务还没有提交, SQLSERVER尝试回滚事务,但是计算机已经关机了,当计算机关机的时候回滚操作会被中断。但是这个回滚动作在下次计算机开机的时候 (即SQLSERVER重启的时候)回滚动作重新开始,由于SQLSERVER做每一个事务都是先写日志,再写入硬盘。 有可能由于内存中的数据丢失或者某些原因造成数据库不能回滚操作,那么整个数据库就置疑了 使用DBCC CHECKDB命令帮客户修复数据库 我们当时使用下面的sql脚本修复的 --修复数据库DBCC ALTER DATABASE test SET EMERGENCY ALTER DATABASE test SET SINGLE_USER

回滚代码

夙愿已清 提交于 2020-03-12 00:34:55
之前回滚代码一直停留在 git revert 的时代,这种方式当然可以解决问题,但操作起来相当繁琐。每个提交都需要执行一次 revert 操作。 最近使用到了一个新的回滚方式,就是 git push -f ,原理就是回滚到某个特定版本,执行一次强制覆盖。 操作的具体步骤: git reset --hard xxxx git push -f 来源: oschina 链接: https://my.oschina.net/u/3017278/blog/3192034

Git项目的学习——01—(Git实战、Git学习、Git三大区域)

元气小坏坏 提交于 2020-03-11 02:29:12
1、Git实战 什么是Git Git是一个分布式的版本控制软件。 软件,类似于QQ、office等安装到电脑上才能使用的工具; 版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保留原历史数据; – 分布式 – 文件夹拷贝 – 本地版本控制 – 集中式版本控制 – 分布式版本控制 安装Git 网上有安装教程,下载链接如下: Git for Windows 2、 Git学习 第一阶段:写代码 版本控制 进入要管理的文件夹 右键 Git Bash Here 1.初始化 git init 2.管理目录下的文件状态 git status 3.管理指定文件 git add index.html git add . (添加管理所有修改的文件) 个人信息配置:用户名、邮箱 git config --global user.email “you@example.com” git config --global user.name “Your Name” 4.生成版本 git status git commit -m ‘描述信息’ 5.查看版本 git log 完整的流程如下: 第二阶段:拓展新功能 git add git commit -m “v2版本” 第三阶段:回滚功能 1.回滚至之前版本 git log git reset --hard 版本号 2.回滚之后版本 git

没想到MySQL还会问这些...

我怕爱的太早我们不能终老 提交于 2020-03-10 09:45:27
前言 文本已收录至我的GitHub精选文章,欢迎Star : https://github.com/ZhongFuCheng3y/3y 在前一阵子,大哥问过我:”你知道MySQL的原子性是怎么保证的吗“。我懵逼了,MySQL怎么保证原子性?我不会啊。 谁都知道在事务里边原子性的意思:” 一个事务包含多个操作,这些操作要么全部执行,要么全都不执行 “ 于是大哥就给我讲:”用的就是 undo log 啊“。 我:”卧槽,又是知识盲区“ 后来在网上翻了一下,MySQL里边还有几种常见的 log ,分别为: undo log binlog redo log 如果你也未曾关注过这些 log ,麻烦在评论区给我留个言, 让我觉得不是只有我一个人这么菜,行不行 ? 后来我又去搜了一下,其实这几种log在 面试 的时候也经常会问到,这篇文章以最简单的方式来讲讲,希望对大家有帮助。 一、什么是binlog binlog 其实在日常的开发中是听得很多的,因为很多时候数据的更新就依赖着 binlog 。 举个很简单的例子:我们的数据是保存在数据库里边的嘛,现在我们对某个商品的某个字段的内容改了(数据库变更),而 用户检索的出来数据是走搜索引擎的 。为了让用户能搜到最新的数据,我们需要把引擎的数据也改掉。 一句话: 数据库的变更,搜索引擎的数据也需要变更 。 于是,我们就会监听 binlog 的变更,如果

MySQL事务的实现原理

扶醉桌前 提交于 2020-03-09 08:47:27
天天用事务,但是你知道MySQL事务的实现原理吗? 1. 开篇 相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等。今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题: 事务想要做到什么效果? 按我理解,无非是要做到可靠性以及并发处理。 可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态,所以就有了undo log和redo log。 并发处理:也就是说当多个并发请求过来,并且其中有一个请求是对数据修改操作的时候会有影响,为了避免读到脏数据,所以需要对事务之间的读写进行隔离,至于隔离到啥程度得看业务系统的场景了,实现这个就得用MySQL 的隔离级别。 下面我首先讲实现事务功能的三个技术,分别是日志文件(redo log 和 undo log),锁技术以及MVCC,然后再讲事务的实现原理,包括原子性是怎么实现的,隔离型是怎么实现的等等。最后在做一个总结,希望大家能够耐心看完 redo log与undo log介绍 mysql锁技术以及MVCC基础 事务的实现原理 总结 2 redo log 与 undo log介绍 1. redo

Innodb MVCC工作原理

北慕城南 提交于 2020-03-08 16:52:27
《MySQL》高性能的说法: 为何需要MVCC 对于事务型的存储引擎实现,仅仅依赖锁是不够的,还需要MVCC( Multiversion Concurrency Control )的帮助,可以简单的将MVCC理解成为一个row lock的一个变种,只是在必要的时候加行锁。 InnoDB的MVCC实现方式 每个事物存储引擎的MVCC实现方式是不一样的,InnoDB的MVCC简单来讲是通过给表添加两列隐藏列。 一列(创建列)存储行的insert(如果行不存在)时间或者update(如果行已存在)时间,一列存储行的删除时间,当然,这里的时间并非我们所说的时分秒,而是系统版本号(system version number),列存储的SVN是事物开始时刻的SVN,每开始一个新的事物,SVN号递增。 MVCC只有在隔离级别是READ COMMITED(Oracle默认)和REPEATABLE READ(MySQL默认)两个隔离级别下工作。 现在讨论在REPEATABLE READ下的MVCC实现: SELECT a. Innodb查找SVN小于等于当前事物的SVN的行,如果是小于,说明行之前就已经存在,如果是等于,说明这行是事物本身修改过的. b.行的删除时间列要么为空(说明该行未被删除)要么删除时间列的SVN大于当前事物的SVN(表示行是在事物开始之后被删除的). 只有记录满足以上两条