Oracle:数据库架构

ORACLE发展规划

从事ORACLE有两个方向,一是数据开发,另一个是数据管理。
数据开发,后期也可以向ETL转型,
数据管理,即DBA,相当于运维中的数据库运维。
在这里插入图片描述

ETL

  1. 定义:是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。
  2. 举例说明:比如交话费,那么就会有这样的数据「谁 什么时间 什么地点 交了多少话费」,有成千上万条这样的数据,我不在乎每条数据是什么样的,我只需要把这些数据汇总,然后存储到Data Warehouse(数据仓库),根据数据分析,生成报表,以供管理层决策,比如,什么样的报表呢:A地区流量需求大,B地区话费用的多等等,那么就可以根据这些结果制定更利于他们自身发展的方案:向A地区推出各种各样的流量套餐啦等等,其目的就是预测未来,以便决策。
  3. ETL工具:Informatica
  4. 相关资料: https://www.cnblogs.com/yjd_hycf_space/p/7772722.html

不同的SQL 类型

提到Open Source,大致有以下几种

  • My SQL/Mariadb
  • Postgre
  • Mongo
  • Hadoop

下面简单介绍不同SQL所具备的特点,如下图所示:
在这里插入图片描述

分布式数据库

  • 像「挂机/柜机空调」这种,就类似于分布式数据存储,因为卧室的空调坏掉了,我还可用客厅的空调,这就是分布式数据库的存储理念
  • 像「中央空调」这种,室外机就相当于一个服务器,一旦down掉了,就完蛋了

在这里插入图片描述

分布式数据库典型代表(TIDB)

TIDB是分布式数据库典型模型
据说是比较符合Google F1思想的一种DB,它完全兼容MYSQL

假设有1,2,3,4,5,6,9,10,11,12这些数据,分别存储在三个不同的库里,那么在执行如下SQL语句后,TIDB接收,那么TIDB是如何与下图所示的三个库进行交互呢?
它是通过PD模块,与库进行交互,它将返回结果作为结果集(合并后的4,5,6,9,10,11,12结果集)返回
在这里插入图片描述

  • Google F1:是一篇论文,提出了一个DB的思想应该是什么样的
  • PD:用于存储原数据用的模块

DBA

在这里插入图片描述

高可用模式

假如我们是java开发,要往库里写数据
这个时候,我们要的是这个库7*24小时不down机,给我们个接口,能连DB就可以了,其他问题像哪个库down机了,不好用了,我们都不关心(一般大公司,分工明确,各司其职的情况)
试想一下,这里有三个库,我们向库里写入数据的时候是这个样子的,需要写入3次
很麻烦,谁都不愿这样干
在这里插入图片描述
作为java开发人员希望看到的是这样的,只向一个库里写,只写一次
但又不能这样做,因为如果这个库down掉了,怎么办,所以至少要准备两个以上的库以防down机等问题出现
在这里插入图片描述

下图虚线部分是隐藏封装起来了,向java人只提供了一个接口,通过一个接口把请求分发到3台机器上面
这样既满足了作java的人不用重复向库里写入数据,又保证了数据的安全性
这个接口就相当于Proxy(代理)
在这里插入图片描述
红框就相当于一个封装起来的盒子,对开发人员而言,对外的接口只是一个proxy,
但它还不够高可用,因为所有请求都给一个proxy,出于负载均衡的考虑,一旦proxy挂了怎么办?因此proxy也要back up。
如下图展示
DG是文件的高可用,Rac是内存的高可用
RAC,DataGurad,Stream是Oracle高可用性体系中的三种工具,每个工具即可以独立应用,也可以相互配合。他们各自的侧重点不同,适用场景也不同。

RAC它的强项在于解决单点故障和负载均衡,因此RAC方案常用于7*24的核心系统,但RAC方案中的数据只有一份,尽管可以通过RAID等机制可以避免存储故障,但是数据本身是没有冗余的,容易形成单点故障。

DataGurad通过冗余数据来提供数据保护,DataGurad通过日志同步机制保证冗余数据和主数据之前的同步,这种同步可以是实时,延时,同步,异步多种形式。DataGurad常用于异地容灾和小企业的高可用性方案,虽然可以在Standby机器上执行只读查询,从而分散Primary苏菊哭的性能压力,但是DataGurad决不是性能解决方案。
在这里插入图片描述

DG数据库有3份,对于Rac来说,这3份数据就是一份数据
库1,库2,库3的关系是 Master->Slave Replication ,Master->Master Replication,当主表挂掉了,则会重新选主,但是会有时间成本。

内存+进程+++++物理文件(文件不丢失,数据就不会丢失)
RDBMS = INSTANCE(RAC) + DB(DG)
INSTANCE=MEMORY + PROCESS
DB可以理解为物理文件(文件不丢失,数据就不会丢失)

Oracle体系结构

Oracle服务器(oracle server):
Oracle服务器(oracle server)由Oracle 例程(oracle instance)和Oracle数据库(database)两部分组成。


Oracle例程(oracle instance):
Oracle例程(oracle instance)是一组内存结构(memory structure)和后台进程(background processes)的集合。
是一种访问Oracle 数据库的方式,始终打开一个,并且只打开一个数据库。
Oracle数据库(database):
Oracle数据库(database)是一组系统文件的集合。他由数据文件(data files)、控制文件(control files)、重做日志文件(redo log files)组成。


系统全局区(SGA):
其内存结构(memory structure)主要包括:共享池(shared pool)、重做日志缓冲区redo log buffer)、数据库缓冲区高速缓存(database buffer cache) 3部分组成,这些内存结构(memory structure)就叫系统全局区(SGA)。系统全局区(SGA)还提供了两个可选的内存结构(memory structure):大型共享池(large pool)和Java池(javapool)。
后台进程(background processes):
后台进程(background processes)主要包括PMON、SMON、DBWR、CKPT、LGWR、ARCH等。
程序全局区(PGA): 为连接到Oracle 数据库的每个用户进程保留的内存


共享池(shared pool):
最近执行的SQL 语句 最近使用的数据定义,包括:库高速缓存(library cache)和数据字典高速缓存(data dictionary cache)。
库高速缓存(library cache):存储有关最近使用的SQL 和PL/SQL 语句的信息
数据字典高速缓存(data dictionary cache):数据库中最近使用的定义的集合 包括与数据库文件、表、索引、列、用户、权限和其它数据库对象相关的信息
重做日志缓冲区redo log buffer):记录对数据库数据块所做的全部更改
数据库缓冲区高速缓存(database buffer cache):存储已从数据文件中检索到的数据块的副本
大型共享池(large pool):SGA 中的可选内存区 分担了共享池的一部分工作
Java池(javapool):存储Java 命令的服务分析要求


PMON:维护用户进程的进程。
SMON:维护系统进程的进程。
DBWn:将数据库缓冲区高速缓存中的数据写入数据文件的进程。
CKPT:写检查点,文件头的进程。
LGWR:把从重做日志缓冲区信息写到重做日志文件的进程。
ARCn:把重做日志文件写到归档日志文件的进程。


数据文件(data files):存放真正的数据信息的文件。
控制文件(control files):存放控制信息的文件。
重做日志文件(redo log files):存放数据更改记录的文件。

Reference
https://blog.csdn.net/zq9017197/article/details/6440259

整理不当,欢迎指点,不喜勿喷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值