2023年11月14日

Database: 共124篇!墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PostgreSQL)

大家期待的高可用篇来啦!在上期《墨天轮高分技术文档分享-Oracle升级迁移篇》中大家对数据库高可用架构相关文档呼声较高,这不就来啦!文末征集反馈送墨值中,欢迎大家参与~ 数据库的高可用架构能够在发生宕机或意外中断等故障时起到重要的作用,减小了业务因故障中断受到的影响。高可用的方案大都是通过数据冗余的方式来实现的,即将数据复制到多个存储设备以实现高可用。常见的高可用架构包含主从、主备、双主、半同步复制、集群、分区等等,那么不同的数据库适用何种高可用架构方案呢? 本文为大家整理了墨天轮社区上一些受欢迎的数据库高可用架构实践主题文档,包含Oracle、PostgreSQL、MySQL三类数据库相关文档124个,欢迎大家下载、补充?。 目录导读 Oracle - RAC (Real Application Clusters) - ADG(…
2023年11月11日

Database: Oracle/MySQL/PG/SQL Server数据库中NULL与空字符串的区别

Oracle数据库 在Oracle数据库中,''(空字符串)与null是什么关系呢? ''(空字符串)是否会等同(或者说等价于)于null值呢?''跟' '(长度为零的空字符串或包含一个或多个空格的空字符串)是否又等价?下面我们测试一下 SQL> create table test(id number not null, name varchar2(16)); Table created. SQL> insert into test(id, name) values(1, null); 1 row created. SQL> insert into test(id, name) values(2, ''); 1 row created. SQL> insert into test(id, name) values(3, ' '); --符号中' '有一个空格 1 row crea…
2023年11月6日

Database: Oracle中的CR块详解

1、概述 Cr块consistent read块也就是用来维护oracle的读一致性的数据块。当查询某些数据的时候,发现数据块的版本比我们要查询的新,例如session1执行了dml操作并没有提交,session2此时查找跟session1相关的dml操作的数据信息,此时查询的数据却是原来的数据信息。 查询的过程会在undo段中查找该数据块的前映像后,然后把前映像和current块合并形成了一个CR block,通过查询cr block就可以满足数据的一致性了。 CR block存在与sga的buffer cache中,在db cache里申请一个数据块,然后对应的回滚段的前映像生成cr block。 cr块的数量是由隐含参数_db_block_max_cr_dba控制的,默认是最高同时存在5个cr块,构造cr块时cr block cr…
2023年11月6日

Database: Oracle中redo和undo的区别

redo--> undo-->datafile insert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, redo 便可恢复那些已经commit 了的数据. redo解释:在Oracle数据库中,执行数据修改操作后,并不是马上写入数据文件,而是首先生成重做信息,并写入SGA中的一块叫LOG_BUFFER的固定区域,LOG_BUFFER的空间并不是无限大,事实上它非常小,一般设置在3~5MB左右。LOG_BUFFER有一定的触发条件,当满足触发条件后,会有相应进程将LOG_BUFFER中的内容写入一个特定类型的文件,就是传说中的联机重做日志文件。 UNDO: undo->记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到…
2023年11月6日

Database: Oracle/MySQL/PostgreSQL的MVCC实现及redo/undo/wal/binlog相关概念

本文主要的目的是把Oracle、MySQL、PostgreSQL三大主流的关系型数据库中关于MVCC实现及redo log、undo log及binlog的关系描述清楚。 Oracle Oracle中只有REDO日志和UNDO日志,没有BINLOG日志的概念。 REDO日志是Oracle在线或归档重做日志文件中记录的信息,可以用于重放事务信息。REDO日志在语句执行时生成并写入到SGA中的Redo log Buffer内存中,然后在COMMIT提交时刷新到磁盘上进行持久化保存。如果正好事务提交但数据库发现故障,此时REDO日志已经落盘但实际的数据还没来得及刷新到磁盘,可以在实例恢复的时候从REDO日志中进行重做,把数据进行恢复。 UNDO日志是Oracle在UNDO段中记录的信息,用于撤销或回滚事务。当对数据进行修改时,同时也…
2023年11月5日

Database: 数据库函数依赖 平凡函数依赖 非平凡函数依赖 完全函数依赖 部分函数依赖 传递依赖 多值依赖

在我们学习数据库的范式之前,我们需要理解一下有关函数依赖的一些知识。 我们数据库中常说的函数依赖其实是数据依赖的一种,数据依赖除了函数依赖还有多值依赖和连接依赖。其中最重要的是函数依赖。 函数依赖的概念 函数依赖是关系模式中各个属性之间的一种依赖关系,是规范化理论中最为重要和基础的概念。 为了便于理解,直接通过以下一个例子进行讲解。 学生表 学号 姓名 专业名 性别 出生日期 本学期学分 42014601 小明 信管 男 2000-2-11 24 42014602 小红 电商 女 2001-8-7 24 42014603 二丫 财会 女 2001-9-4 24 42014604 狗蛋 物流 男 2002-10-18 24 我们观察以上的表,其中学号、姓名、性别、出生日期、本学期学分,这些我们可以看作是不同的属性,假设我们已知一个同学的学号为42014603,我们就可以得到这个人的姓…
2023年11月5日

Database: 数据库三大范式及BCNF范式详细讲解

首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。 接下来就对每一级范式进行一下解释,首先是第一范式(1NF)。 符合1NF的关系(你可以理解为数据表。“关系模式”和“关系”的区别,类似于面向对象程序设计中”类“与”对象“的区别。”关系“是”关系模式“的一个实例,你可以…
2023年11月5日

Database: 范式的概念

范式的概念 首先,什么是范式,范式的英文是 Normal Form,其实就是标准形式的意思,就是说数据库就该设计成这样,这就是数据库的标准形式(当然,并不总是要遵守,有些时候可能需要反范式化)。 除了范式的定义,还需要先理解以下几个概念: 属性(attribute): 数据库中的字段,即数据库中表的列。 超键(super key): 在关系中能唯⼀标识元组的属性集称为关系模式的超键 候选键(candidate key): 不含有多余属性的超键称为候选键 主键(primary key): ⽤户选作元组标识的⼀个候选键称为主键 主属性(Prime Attributes / Key attributes): 候选键中的属性称为主属性。 非主属性(Non Prime attributes / Non Key attributes): 不属于任何候选键的属性称为非主属性。 外键(…
2023年11月4日

Database: 数据库关系范式详解

1 前言 关系模式规范化过程 函数依赖:若 Y=f(X) ,则称X函数决定Y,或Y函数依赖于X,记为:X->Y。在数据库中,通常将X置为关键字,将Y置为非主属性。 2 范式 2.1 1NF 1NF定义:关系的所有分量都必须是不可分的最小数据项。 如日期可以拆分为年、月、日三项。 2.2 2NF 2NF定义:满足1NF,且每个非主属性都完全依赖于关键字,即不存在非主属性部分依赖于关键字。 单关键字中非主属性一定是完全依赖于关键字,所以所有单属性关键字关系都是2NF关系。 案例:存在关系(A,B,C,D,E,F)(下划线表示关键字,下同),具体依赖关系如下:(蓝色表示关键字,橙色表示非主属性,下同)  A、B为关键字,但是D、F都只依赖于B,所以不是2NF,可以将其拆分为两个关系,使其满足2NF: (A,B,C,E)、(B,D,F),具体关…
2023年11月4日

Database: 用实例解释数据库关系范式

函数依赖其实就如数学上的函数,Y=X+1,自变量X一定的情况下,因变量Y也确定了,那么就可以说Y的取值就依赖于X的取值。 函数依赖:(其实就是一一对应,知道A的值可以确定B的值,A→B,则称B依赖于A) 两个实例化的属性集X,Y,如果属性集X中的两个元组取值相同,必有对应的另外一个属性集Y中元组取值相同,则称Y函数依赖于X函数。 注意:如果属性集X中不存在两个取值相同的元组集合,则Y必定依赖于函数X,且函数X的属性集为超键。 部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。 例如:通过(A, B)→C,如果 A或B→C ,那么说C部分依赖于(A, B)。 完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称…