事务管理

Oracle Undo的学习

戏子无情 提交于 2020-01-15 16:07:12
回滚段 可以说是用来保持数据变化前映象而提供一致读和保障事务完整性的一段磁盘存储区域。当一个事务开始的时候,会首先把变化前的数据和变化后的数据先写入日志缓冲区,然后把变化前的数据写入回滚段,最后才在数据缓冲区中修改(日志缓冲区内容在满足一定的条件后可能被写入磁盘,但在事务提交的时候日志必须写入磁盘,而数据缓冲区中的数据依赖于检查点的发生和DBWR进程的活动) Rollback是一个代价昂贵的操作,如果一个系统的事务回退率过高,应该检查系统是否正常或者程序设计思路是否存在问题。查询数据库启动依赖的 事务回退率,如果发现太高,一定要引起重视。 --查询回退率的sql SELECT NAME, VALUE FROM v$sysstat WHERE NAME IN ('user commits', 'transaction rollbacks'); 关于回滚段的数据,如果是delete操作,则回滚段将回记录整个行的数据;如果是update,则只记录被修改了的字段的变化前的数据(前映像);如果是insert,则只记录插入记录的rowid。所以,假如commit,那么回滚段中简单标记该事务已经提交;假如rollback,则操作是 delete的话,把回滚段中的数据重新写回数据块,操作是update的话则把变化前的数据修改回去,操作是insert的话则根据rowid把该记录删除

MySQL InnoDB Cluster 详解

我们两清 提交于 2020-01-15 08:55:49
导读 本文转载自MySQL解决方案工程师 作者:徐铁韬 这篇文章将详细地介绍MySQL的高可用解决方案—— MySQL InnoDB Cluster。 说到高可用性,首先要了解一下什么是高可用性? 高可用性要求的实际上是对可靠性的要求,从本质上来说,是通过技术和工具来提高可靠性,尽可能长时间保持数据的可用和系统的正常运行时间。实现高可用性的原则为排除单点故障、通过冗余实现快速恢复,并且具有容错机制。 上面一页主要介绍了几个关键词汇,以及相关的定义,这些有助于理解可靠性和高可用性。 MySQL的高可用性解决方案目前大致分为5种,按照高可用的级别(99.9999%为最高级)排序依次为,主从复制、具有自动故障转移功能的主从复制、利用共享存储、OS或虚拟化软件实现主备架构、MySQL Group Replication 群组复制,以及MySQL NDB Cluster。 MySQL Replication:允许数据从一台实例上复制到一台或多台其它的实例上。 MySQL Group Replication:群组复制提供更好的冗余性、自动恢复以及写入扩展。 MySQL InnoDB Cluster:基于群组复制,提供了易于管理的API、应用故障转移和路由、易于配置,提供比群组复制更高级别的可用性。 MySQL NDB Cluster:容易与MySQL InnoDB Cluster混淆

分布式事务,EventBus 解决方案:CAP【中文文档】

可紊 提交于 2020-01-14 03:00:47
原文: 分布式事务,EventBus 解决方案:CAP【中文文档】 最新文档地址: https://github.com/dotnetcore/CAP/wiki 前言 很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对 CAP 还不知道的同学可以先看一下 这篇文章 。 本文档为 CAP 文献(Wiki),本文献同时提供中文和英文版本,英文版本目前还在翻译中,会放到Github Wiki 中。 目录 前言 1、Getting Started 1.1 介绍 1.2 应用场景 1.3 Quick Start 2、API接口 2.1 发布/发送 2.1.1 事务 2.2 订阅/消费 2.2.1 例外情况 3、配置 3.1 Cap Options 3.2 RabbitMQ Options 3.3 Kafka Options 3.4 SqlServer Options 3.5 MySql Options 4、设计原理 4.1 动机 4.2 持久化 4.3 通讯数据流 4.4 一致性 5、实现 5.1 消息表 5.2 消息格式 5.3 EventBus 5.4 重试 6、分布式事务 6.1 异步确保 7、FAQ 1、Getting Started 1.1 介绍 CAP 是一个遵循 .NET Standard 标准库的C#库

使用事件和消息队列实现分布式事务

◇◆丶佛笑我妖孽 提交于 2020-01-14 02:59:39
原文: http://skaka.me/blog/2016/04/21/springcloud1/ 不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下, 可以使用两阶段或者三阶段提交协议来完成分布式事务.但是使用这种方式一般来说性能较差, 因为事务管理器需要在多个数据源之间进行多次等待. 有一种方法同样可以解决分布式事务问题, 并且性能较好, 这就是我这篇文章要介绍的使用事件,本地事务以及消息队列来实现分布式事务. 我们从一个简单的实例入手. 基本所有互联网应用都会有用户注册的功能. 在这个例子中, 我们对于用户注册有两步操作: 1. 注册成功, 保存用户信息. 2. 需要给用户发放一张代金券, 目的是鼓励用户进行消费. 如果是一个单一架构应用, 实现这个功能非常简单: 在一个本地事务里, 往用户表插一条记录, 并且在代金券表里插一条记录, 提交事务就完成了. 但是如果我们的应用是用微服务实现的, 可能用户和代金券是两个独立的服务, 他们有各自的应用和数据库, 那么就没有办法简单的使用本地事务来保证操作的原子性了. 现在来看看如何使用事件机制和消息队列来实现这个需求.(我在这里使用的消息队列是kafka, 原理同样适用于ActiveMQ

MySQL高可用——PXC简介

六眼飞鱼酱① 提交于 2020-01-14 02:45:04
PXC简介: galera产品是以galera cluster方式为mysql提高高可用集群解决方案的。galera cluster就是集成了galera插件的mysql集群。galera replication是codership提供的mysql数据同步方案,具有高可用性,方便扩展,并且可以实现多个mysql节点间的数据同步复制与读写,可保障数据库的服务高可用及数据强一致性。 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galera cluster最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。本身galera cluster也是一种多主架构。galera cluster最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证MySQL集群的数据一致性; 对galera cluster的封装有两个,虽然名称不同,但实质都是一样的,使用的都是galera cluster。一个MySQL的创始人在自己全新的MariaDB上实现的MAriaDB cluster;一个是著名的MySQL服务和工具提供商percona实现的percona

保证分布式系统数据一致性的6种方案

China☆狼群 提交于 2020-01-13 23:18:47
问题的起源 在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性? 具体业务场景如下,比如一个业务操作,如果同时调用服务 A、B、C,需要满足要么同时成功;要么同时失败。A、B、C 可能是多个不同部门开发、部署在不同服务器上的远程服务。 在分布式系统来说,如果不想牺牲一致性,CAP 理论告诉我们只能放弃可用性,这显然不能接受。为了便于讨论问题,先简单介绍下数据一致性的基础理论。 强一致 当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。 弱一致性 系统并不保证续进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。 最终一致性 弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。 在工程实践上,为了保障系统的可用性,互联网系统大多将强一致性需求转换成最终一致性的需求,并通过系统执行幂等性的保证,保证数据的最终一致性。但在电商等场景中,对于数据一致性的解决方法和常见的互联网系统(如

四级数据库

流过昼夜 提交于 2020-01-13 08:22:00
一、 1.关系模型中数据的逻辑结构是一张二维表。 2.关系演算比关系代数具有更强的表达能力。 3.DBMS不可以直接处理基于非结构化复杂对象的值的选择条件及其他操作。 4.模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,即模式实际上是数据库数据的逻辑视图,逻辑模式的基础是数据模型。 5.SQL语言提供预定义的数据类型,除此之外,用户可以自行定义自己专用的数据类型。 6.数据仓库特点:面向主题的、数据是集成的、数据是相对稳定对的、数据是反映历史变化的。 二、 1.动态SQL语句的执行方式包括:立即执行方式和先准备后执行方式。 2.Armstrong公里的基本推理规则:自反律、增广律、传递率。 3.系统发生错误,进入一种不良状态(例如死锁),导致事务无法正常执行,但该事务可以在以后的某个时间重新执行。这种故障属于事务故障。 4.NOSQL数据库便于大量数据的写入处理、对简单查询可以快速返回结果、可方便处理表模式的变更,很多NOSQL系统不支持JOIN(连接)操作,Join操作需要再应用程序中实现。 5.逻辑数据模型有:层次模型、网状模型、关系模型、面向对象模型和对象关系模型。 6.SQL预定义数据类型包括:数值型、字符串型、位串型、时间型和布尔型。 7.记录的聚簇存放是指将不同类型的记录存放到相同的物理区域。 8.索引是数据库中一种非常重要的数据存取路径。 9

SAP关闭正在执行的缓慢的程序

回眸只為那壹抹淺笑 提交于 2020-01-13 01:04:34
更多内容关注公众号:SAP Technical 各位可以关注我的公众号:SAP Technical 第一种最简单的方法就是右键任务栏——结束会话。 第二种也很简单,就是点击左上角的小图标——停止事务。 第三种则是利用事务代码SM50——选中条目——菜单“管理”——删除会话。 至于网上所说利用SM12踢出用户所执行的程序,这个仅仅用于对象被锁住的情况。 第四种还是利用事务代码SM04——工具栏“会话”——删除会话。 第五种还是利用事务代码SM66,同SM50类似。 其他的欢迎补充。 来源: CSDN 作者: SAPmatinal 链接: https://blog.csdn.net/SAPmatinal/article/details/103948364

MySQL基础知识点大全

守給你的承諾、 提交于 2020-01-11 20:24:35
一、为什么要学习数据库 二、数据库的相关概念 DBMS、DB、SQL 三、数据库存储数据的特点 四、初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停止 ★ MySQL服务的登录和退出 ★ MySQL的常见命令和语法规范 五、DQL语言的学习 ★ 基础查询 ★ 条件查询 ★ 排序查询 ★ 常见函数 ★ 分组函数 ★ 分组查询 ★ 连接查询 ★ 子查询 √ 分页查询 ★ union联合查询 √ 六、DML语言的学习 ★ 插入语句 修改语句 删除语句 七、DDL语言的学习 库和表的管理 √ 常见数据类型介绍 √ 常见约束 √ 八、TCL语言的学习 事务和事务处理 九、视图的讲解 √ 十、变量 十一、存储过程和函数 十二、流程控制结构 数据库的好处 1.持久化数据到本地 2.可以实现结构化查询,方便管理 数据库相关概念 1、DB:数据库,保存一组有组织的数据的容器 2、DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 3、SQL:结构化查询语言,用于和DBMS通信的语言 数据库存储数据的特点 1、将数据放到表中,表再放到库中 2、一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。 3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。 4、表由列组成,我们也称为字段

PL/SQL:锁及事务的高级使用

邮差的信 提交于 2020-01-11 09:40:25
-------------------锁及事务的高级使用-------------------- 锁是数据库用来控制共享资源并发访问的机制。 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 一致性 - 一次只允许一个用户修改数据 完整性 - 为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户 并行性 -允许多个用户访问同一数据 ----------------------行级锁 行级锁:对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行 行级锁是一种排他锁,防止其他事务修改此行 在使用以下语句时,Oracle会自动应用行级锁: INSERT UPDATE DELETE SELECT … FOR UPDATE SELECT … FOR UPDATE 语句允许用户一次锁定多条记录进行更新 使用 COMMIT 或 ROLLBACK 语句释放锁 SELECT … FOR UPDATE 语法:   SELECT … FOR UPDATE [ OF columns ] [ WAIT n | NOWAIT ] ; 说明:  OF 子句用于指定即将更新的列,即锁定行上的特定列。  WAIT 子句指定等待其他用户释放锁的秒数,防止无限期的等待 SQL > SELECT * FROM order_master WHERE