Oracle培训-介绍与体系架构
一、Oracle介绍与数据库基础
1、Oracle 产品体系介绍
1977年Oracle公司成立,名称为: "软件开发实验室" (Software Develogment Labs , SDL)
1979年改名为"关系软件公司" (Relational Software Inc , RSI)
1982年公司改名为甲骨文公司(Oracle Corporation )
https://docs.oracle.com Oracle官方文档网站

Oracle产品体系
2、Oracle 数据库软件版本发展
1970年, IBM的研究人员Edgar Frank Codd发表了一篇关于“关系数据库"的论文。IBM当时有一个销售得还不错的层次数据库产品IMS ,因此并没有开发关系数据库产品。数据库在当时是静态的,无法交互工作。Oates最先看到了埃德加·考特的那篇著名的论文,连同其他几篇相关的文章并推荐Ellison和Miner,埃里森被其内容震惊,敏锐意识到在这个研究基础上可以开发商用软件系统。
1977年,埃里森和两个同事鲍勃迈纳尔总裁和埃德·奥德斯副总裁一起创办了一家数据库公司,公司的名字叫"软件开发实验室" ( Software Development Labs )。
1978年,公司开在DEC的小型机PDP-11上开发出一个基于关系型数据库的系统: Oracle 1 根据Ellison和Miner他们在前一家公司从事的一个由中央情报局投资的项目代码,他们把这个产品命名为ORACLE。因为他们相信, ORACLE (字典里的解释有“神谕,预言"之意)是一切智慧的源泉。
1979年,公司推出Oracle 2,这是计算机软件史上第一个由纯软件公司开发的商用关系型数据库管理系统。公司改名为"关系软件公司" (Relational Software Inc , RSI)客户: CIA
1981年, IBM的古普塔( Umang Gupta )加入RSI ,他为公司写了第一份商业计划书,明确公司发展方向:开发通用的关系型数据库管理系统(RDBMS )和开发工具。
1982年,鉴于RSI的数据库软件Oracle的名气已经比公司大了,公司改名为Oracle公司。
1983年,推出Oracle 3 , C语言编写,可移植性, SQL语句和事务处理的“原子性" ,引入了非阻塞查询使用存储在"Before Image File"中的数据来查询和回滚事务,从而避免了读锁定(read lock )的使用(虽然通过使用表级锁定限制了它的吞吐量),Scott离开了ORACLE ,研发由Miner独力承担。
1984年,推出Oracle 4,增强稳定性,增加了读一致性
1985年,推出Oracle 5 ,稳定性好,首批可以在Client/Server模式下运行的的RDBMS产品, RACLE并行服务( ORACLE Parallel Server , OPS )
1986年, 3月12日甲骨文上市,公司市值2.7亿; 3月13日微软上市,市值达到7亿。推出Oracle5.1,支持分布式查询
1987年,收入达到1.31亿美元,甲骨文一年后成为世界第四大软件公司
1988年,推出Oracle 6,引入了行级锁、PL/SQL和联机热备份等功能, rollback segment.
1992年,旗舰产品Oracle 7面世,测试细致充分。该版本增加了许多新的性能特性:分布式事务处理功能、增强的管理功能、用于应用程序开发的新工具以及安全性方法, CBO,公司走上快速发展之路。
1995, 1996年,埃里森提出网络PC概念,甲骨文发布自己的浏览器。虽然产品不成功,但是被认为是云计算概念的前身
1998年,推出Oracle 8i , i是指internet , ORACLE8支持面向对象的开发及新的多媒体应用,这个版本也为支持网络计算等奠定了基础。同时这一版本开始具有同时处理大量用户和海量数据的特性
2001年,推出Oracle 9i,推出了Oracle Real Application Clusters ( RAC集群) ,之前叫OPS Oracle Data Guard (DG容灾)等架构。性能也大幅度提升。
2003年,推出Oracle 10g , g是代表grid ,网格计算的功能
2005年,甲骨文在数据库市场的份额首次超过IBM和微软的总和。先后收购的HR和ERP应用公司PeopleSoft,J.D.Edwards(JDE)和Siebel三家公司。
2007年,推出Oracle 11gR1大幅提高了系统性能安全性,全新的Data Guard最大化了可用性,利用全新的高级数据压缩技术降低了数据存储的支出,明显缩短了应用程序测试环境部署及分析测试结果所花费的时间增加了RFID Tag, DICOM医学图像、3D空间等重要数据类型的支持,加强了对Binary XML的支持和性能优化。收购知名的绩效管理软件Hyperion。
2008年,甲骨文收购了BEA系统公司(中间件WebLogic ).
2009年,甲骨文收购了GoldenGate公司( OGG)
2010年,推出Oracle 11gR2 ,甲骨文在数据库系统市场的份额首次超过50%。同年完成对SUN公司的收购,巩固了软硬件集成设计的战略,成为Java的掌握者。
2011年,甲骨文开始大量收购基于云计算的企业级软件和服务公司,并高调进入云计算领域。
2013年,推出Oracle 12cR1 , c是cloud ,代表云计算, 12C引入了多租户架构, Oracle数据库上云。
2014年,埃里森辞去CEO一职,将甲骨文交给了赫德和卡茨。2016年,推出Oracle 12cR2
2017年,美国《财富》 500强,甲骨文公司排名第81位,营业收入370.47亿美元。ORACLE改变了以往的数据库软件发布流程和版本命名策略,采用年度Release和季度更新的策略
2018年,推出Oracle 18c , Oracle 18C号称是一款自治性的数据库
2019年,推出Oracle 19c , Data Guard备库DML自动重定向, Oracle Sharding特性的多表家族支持自动化索引创建和实施,多实例并行重做日志应用增强, Oracle的混合分区表支持等
2020年,推出Oracle 20c ,原生的区块链支持,持久化内存存储支持,自动化的In-Memory管理等。
3、Oracle 数据库体系架构介绍
Oracle数据库体系架构-单实例 non-CDB

Oracle数据库体系架构-PAC集群

Oracle数据库体系架构-Date Guard 容灾
Oracle数据库体系架构-12c多租户容器数据库
4、Oracle数据库中对象

1、 Oracle 数据库中的对象-表
2、Oracle 数据库中的对象-B-Tree索引
3、Oracle 数据库中的对象-bitmap索引

5、Oracle数据库权限管理
1、Oracle的权限管理-用户

2、Oracle的权限管理-权限

3、Oracle的权限管理-角色

4、Oracle数据库体系架构-单实例
二、Oracle体系架构
1、Oracle数据库体系架构-单实例non-CDB

1.1 存储结构

逻辑存储结构与物理存储结构

块大小 2 4 8 16 32 默认8k,block size 设置块大小
存储结构-表空间与数据文件

表空间包含一个或多个数据文件

存储结构-表空间的大小限制

存储结构-segmeng段

存储结构-表段

存储结构-extent区

存储结构-block块

存储结构-快内存储 row piece 行

存储结构-快内存储 行迁移与行链接

1.2 B-Tree索引

B-Tree索引 内部结构

2.Oracle内存结构与进程结构
2.1 单实例-解析SQL语句执行流程
datafiles 数据文件
control files 控制文件
online redo logfiles 联机日志文件
current 当前日志组
active 刚才写的 写满了 已经切换了
inactive
循环覆盖,只有inactive会被覆盖,可以满足实例恢复的需求
SGA 内存空间-系统全局区
PGA 内存空间-程序全局区 与程序相关
client process 客户端进程
Server Process 服务端进程
redo 日志 undo 数据 checkpoint 检查点
shared pool 共享池 解析步骤中缓存SQL文本、执行计划以及解析过程中调用的数据字典
data dictionary cache 数据字典定义信息缓存
library cache 库缓存,缓存文本及执行计划
server result cache 结果缓存
dbwr 写脏块(数据库的写进程)
Server processcong 把块的内容读取到dbbuffer
redo log buffer 日志缓冲区
ckpt 检查点进程 督促dbwr写脏块 3s
SCN system change number 系统改变号 代表事物发生顺序 时间
示例语句1 select ename,empno,sal,comm,deprno from emp where empno=7788;
解析 parse
语法检查
语义检查 包含权限检查 访问数据字典表(系统表,在datafiles 的 system 表空间中)
CBO 优化器的判断过程: 根据统计信息生成执行计划(最佳) 缓存最佳执行计划
解析过程调用共享池内存
执行 execute
获取 fetch
返回结果集
users表空间
database buffer cache 数据缓冲区

示例语句2 update emp set salary = 10000 where empno=7788; old = 3000
没有commit
undo 表空间
执行commit;
commit complete
ACID D:持久性
dbwr 写脏块 懒写 延迟写
checkpoint检查点
脏块太多达到阈值 内存空闲空间不足free
redo日志:block change eg. file4,block 100,row10,col7,value
实例恢复的基本原理:
1、应用日志(前滚)
2、把没有提交的回滚掉(undo)
3、打开数据库实例
undo块:file6,block200,row,col,value
lgwr 记日志 速写 频繁写
commit / 时间和空间维度的控制(3s、1m、1/3)
before dbwr
checkpoint position 检查点位置 视力恢复的起点
问题:
1、数据未提交,脏块是否能写入datafile?有可能。内存和磁盘的数据不一致。看dbwr,事务提交与否和dbwr没有影响。
2、未commit,日志是否有可能写入磁盘redofile?有可能
3、redo log buffer中残留日志,是否会导致数据丢失?只要提示 commit complete,就不会丢失。
备份恢复:
arch 归档进程
当前日志组不会被归档,要保证当前日志组要完好无损。数据文件和日志文件建议采用多路复用机制。

非归档:冷备(一致性备份) shutdown immediate/ 只能还原到最后一次备份
归档:冷备+热备(非一致性备份) open状态做备份 可以恢复到最后一次提交(不丢数据)
RMAN