回滚

Liquibase 使用(全)

廉价感情. 提交于 2020-01-25 04:12:38
聊一个数据库脚本的版本工具 Liquibase,官网在这里 ,初次看到,挺神奇的,数据库脚本也可以有版本管理,同类型的工具还有 flyway 。 开发过程经常会有表结构和变更,让运维来维护的话,通常会有很大的沟通成本,有时在开发方案有问题的时候,提测失败整个项目需要回滚,代码回滚起来是很容易的,通常有备份,但数据库的话就要人工来逐行分析并写出回滚语句,Liquibase 这时候就有用了。 Liquibase 适用场景感觉不多,所以可能有人没听过它的名头; 首先这种自动执行的家伙肯定是不适合于生产环境的,然后在数据量大的时候是不可能用数据库自带的 alter 语句的,一般都是手动创建另一张表,然后用 sql 语句将数据批量复制过去,再者使用容器化也比它好,个人觉得它一般用于开发和测试环境,比较厉害的一个功能是可以比较两个库的差异然后生成补丁包,上线时可以这么玩。 这篇文章说得不错,我是在这篇基本上写的 核心概念 比奇文学网 https://www.biqi.org/ 首先它是用于管理数据库版本的,所以就会有这些概念:版本号,管理的数据,差异比较,版本回滚 它的版本号由开发人员来维护,使用 author + id 管理的数据最小单元为 changeSet ,这个 changeSet 看官网说是可以用 xml,yaml,json,sql 来编写 提交数据,比较差异,版本回滚

Spring事务控制

我怕爱的太早我们不能终老 提交于 2020-01-24 21:12:14
事务控制 spring中基于XML的声明式 配置事务管理器 配置事务的通知 tx:method isolation:用于指定事务的隔离级别,默认为DEFAULT,表示使用数据库的默认隔离级别。 propagation:用于指定事务的传播行为,默认值为REQUIRED,表示是一定会有事务,增删改查的选择。查询方法可以选择SUPPORTS read-only:用于指定事务是否只读,只有查询方法才能设置为true。默认值为false,表示读写 rollback-for:用于指定一个异常,当发生该异常时,事务回滚,产生其他异常时事务不回滚。没有默认值,表示任何异常都回滚 no-rollback-for:用于指定一个异常,事务不回滚,产生其他异常时事务回滚,没有默认值,表示任何异常都回滚 timeout:用于指定事务的超时时间,默认值为-1,表示永不超时。如果指定了该值,以秒为单位。 使用tx:advice标签配置事务通知 id:唯一标识 transaction-manager:事务管理器引用 配置aop通用切入点表达式 建立事务通知和切入点表达式的对应关系 示例 <!--配置连接池--> < bean id = " dataSource " class = " org.springframework.jdbc.datasource.DriverManagerDataSource " > <

强烈推荐好用的文本编辑器Notepad++

你说的曾经没有我的故事 提交于 2020-01-24 07:35:44
我们经常需要写代码,查看代码,查看代码时一般会用记事本,但是记事本的功能太弱,而写代码时有的编译器大的编辑功能太弱,像IAR keil之类的,因此需要一个小巧好用的替代记事本的编辑软件。Notepad++我用了很久了,以前主要是用他来查看代码,他有语法高亮功能,这是相对于记事本来说最大的特点,对于代码他还有很多实用的功能,如将一段文字给注释掉,以前需要手动添加/**/,现在只需要选择一段文本使用快捷键就可以,另外不知道大家在用VS2008的时候单词和函数的自动提示功能是不是很爽,但是很多的编辑器都没有这个功能,Notepad就有这个功能。前面只是介绍了一部分,下面说一下怎样在IAR中调用Notep++,选择tools-options-editor-External Editor选择notepad安装目录下的exe文件,比如我的路径D:/Program Files/Notepad++/notepad++.exe,在下面的Arguments中填上$FILE_PATH$即可,这样在双击相应的文件时就会自动在Notep中打开,编辑完之后保存一下即可,然后就可以在编译器中编译了,其他的功能需要自己探索,合理的使用可以很好的提高效率。 这是些MSP430程序的自动完成功能,很方便哦。 下面是一些常用的功能,网上抄的。 0、 关闭标签页 UltraEdit 是双击窗口就可以关闭, Notepad

Spring 事务归纳

雨燕双飞 提交于 2020-01-23 22:30:39
Spring transaction 什么是事务 A用户向B用户转帐100,第一步要从A帐户扣出100,第二步要将B帐户加上100。其中无论是第一步失败,还是第二步失败。都应该将A、B帐户的余额保持和转帐操作之前一致。 事务就是一系列相关联操作的集合,一个事务可以是多个步骤组成,如果一个步骤失败,那么整个流程都应该回滚到初始状态。 事务的四个特性 原子性(Atomicity) 一个事务是一个整体,无论有多少个步骤组成,要么所有步骤都成功,要么所有步骤都失败。 一致性(Consistency) 一个事务完成(无论是成功还是失败),所有的业务都应该处于一致的状态,不应该部分步骤成功,部分步骤失败,显示中的数据一致性不会被破坏。 隔离性(Isolation) 多个事务处理相同的数据的时候,事务间应该是相互隔离的,防止数据损坏。 持久性(Durability) 一旦事务完成,无论系统发生什么异常,结果都不应该受到影响,通常事务的结果被写入到数据库中。 Spring处理事务的核心接口 Spring涉及到事务管理的核心接口相互关系如下 Spring并没有直接提供事务管理的实现,而是提供了一个接口PlatformTransactionManager。具体的实现依赖项目中所使用的持久化接口。 PlatformTransactionManager 定义了所有的具体实现类必须要有的方法

Fescar原理

纵然是瞬间 提交于 2020-01-23 15:53:27
Fescar原理 1、概述 fescar刚推出不久,没几天。看了github的Issues,有人问:可以直接商用吗? 作者的回复: image 我们也看一下fescard的历史: 阿里是国内最早一批进行应用分布式(微服务化)改造的企业,所以很早就遇到微服务架构下的分布式事务问题。 2014 年,阿里中间件团队发布 TXC(Taobao Transaction Constructor),为集团内应用提供分布式事务服务。 2016 年,TXC 经过产品化改造,以 GTS(Global Transaction Service) 的身份登陆阿里云,成为当时业界唯一一款云上分布式事务产品,在阿云里的公有云、专有云解决方案中,开始服务于众多外部客户。 2019 年起,基于 TXC 和 GTS 的技术积累,阿里中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback, FESCAR),和社区一起建设这个分布式事务解决方案。 TXC/GTS/Fescar 一脉相承,为解决微服务架构下的分布式事务问题交出了一份与众不同的答卷。 阿里出品的中间件有一种精神是值得赞扬的,就是出品的任何中间件都是业务中已经使用多年的产品。都是经过锤炼的产品,开源的话,去除和内部业务耦合的代码,开源出来。至少有一点,底层的代码是经历过双11这种高并发请求量打磨过的代码

事务详解

人走茶凉 提交于 2020-01-23 01:27:59
事务 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。 而一个逻辑工作单元要成为事务,就必须满足ACID属性。 事务的四大特性(ACID): 原子性(atomicity) 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位. 事务中的操作要么都不做,要么就全做。 一致性(consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 例:拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 事务执行的结果必须是从数据库从一个一致性状态转换到另一个一致性状态。 隔离性(Isolation) 一个事务的执行不能被其他事务干扰 隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。关于事务的隔离性数据库提供了多种隔离级别 脏读 不可重复读 幻读

【转载】蓝绿部署、红黑部署、AB测试、灰度发布/金丝雀发布、滚动发布的概念与区别

一笑奈何 提交于 2020-01-22 16:29:08
原文转载 https://blog.csdn.net/wangyinghong_2013/article/details/78650290 在有关微服务、DevOps、Cloud-native、系统部署等的讨论中,蓝绿部署、A/B 测试、灰度发布、滚动发布、红黑部署等概念经常被提到,它们有什么区别呢?通过搜索相关资料,做一个简单的辨析,如下: 蓝绿部署(Blue/Green Deployment) 过去的 10 年里,很多公司都在使用蓝绿部署(发布)来实现热部署,这种部署方式具有安全、可靠的特点。蓝绿部署虽然算不上“ Sliver Bullet”,但确实很实用。 蓝绿部署是最常见的一种0 downtime部署的方式,是一种以可预测的方式发布应用的技术,目的是减少发布过程中服务停止的时间。蓝绿部署原理上很简单,就是通过冗余来解决问题。通常生产环境需要两组配置(蓝绿配置),一组是active的生产环境的配置(绿配置),一组是inactive的配置(蓝绿配置)。用户访问的时候,只会让用户访问active的服务器集群。在绿色环境(active)运行当前生产环境中的应用,也就是旧版本应用version1。当你想要升级到version2 ,在蓝色环境(inactive)中进行操作,即部署新版本应用,并进行测试。如果测试没问题,就可以把负载均衡器/反向代理/路由指向蓝色环境了

mysql数据库的常见基本问题

落花浮王杯 提交于 2020-01-22 06:10:34
题目1:依次写出“主键”、“自增”、“唯一”、“默认”、“非空”、“外键”的关键字英文表示。 答:主键:primary key 自增:auto_increment 唯一:unique 默认:default 非空:not null 外键:foreign 题目2:依次写出“可变字符”、“字符”、“整型”、“浮点型”、“双精度浮点型”、“日期”、“时间”、“日期时间”、“枚举”类型的英文表示。 答: 可变字符varchar 字符 char 整型 int 浮点型 float 双精度浮点型 double 日期 data 时间 time 日期时间 data time 枚举 enum 题目3:请描述drop、truncate、delete的区别。 答:drop 删除表,直接删除所有,包括表数据以及表结构,不能回滚 truncate 截取表中数据,保留表结构,快速删除所有,不能指定范围,不能回滚 delete 可以回滚,可以删除指定内容 题目4:请说出模糊查询中“%”和“_”的区别。 答:%是任意字符 _是一个任意字 题目5:请写出5个聚合函数的函数名 答:COUNT计数 MAX 最大 MIN 最小 AVG 平均数 SUN 求和 题目6:请分别描述以下SQL命令的作用 create database 数据库名; 创建数据库 show databases 数据库名; 查看数据库 drop

Git Note

五迷三道 提交于 2020-01-21 19:03:20
目录 日常使用的6个命令 git status git add -u git show <commit-id> git diff <filename> git stash git blame <filename> 查看commit记录 回滚 日常使用的6个命令 图片来源:阮一峰《常用 Git 命令清单》 git status 展示在哪个分支。查看对repo哪些文件进行修改,这里是还没有经过 git add 操作的 git add -u 添加已经在 repo 中,但进行修改的文件。比如下两个命令好用且安全得多: 添加所有文件 git add . → \rightarrow → 容易误加文件 手动添加一堆文件 git add → \rightarrow → 效率太低 git show <commit-id> 显示某条 commit 的修改,不加 commit id, 则默认显示最近一条 commit git diff <filename> 还没 commit 前,查看修改的内容,filename 不加则默认显示所有文件的 diff。 注意 git status 不显示被修改的内容,这是二者的区别 git stash 缓存在 repo 里但做过修改的文件,和 git add 的区别在于这种缓存是暂时的,并不希望形成一个节点。例如项目开发到一半,需要 git pull

说说如何做oracle的SQL审核呢

谁说我不能喝 提交于 2020-01-21 15:52:34
说说如何做oracle database 的sql审核: 1. 如何做到预先的语法检查呢 首先要熟悉繁杂的oracle语法规范,并能提前报错(这不是问题) 2. DDL 语句列的检查,索引的检查这些是直接执行才会发现的,难道要把表的结构全部导出来,操作检查一遍吗 (貌似可行) 那么要准备一个存储其他库表结构的 oracle database 3.DML 语句如何检查数据冲突呢? 可以使用不提交事物的方式检查,但如果碰到大量数据的操作呢?会造成锁的 4. 如何记录回滚语句? 能否解析日志呢,日志先写入redo,logminer 会降低oracle性能 可不去回滚DDL 语句,和insert ,delete 语句, 主要预防update 语句,那么提前把update前 语句的数据select 备份起来,而不直接生成回滚update. 5. 这个工作流程是什么样子的呢? a. 目标库的元数据备份到审核库 b. 外部传参给 审核程序,参数包括(ip,port,username,password,sql, backip,backport, backuser,backpass) c. 审核程序先在审核库预执行,看看是否有语法错误,对于DDL 语句就直接更新了,对于insert 语句就直接执行了, d. 对于delete语句检查句法,因此,delete 之前要先备份 导入到审核库