Oracle 的体系结构

二. Oracle 的体系结构


Oracle 服务器是由 实例和数据库 组成
实例:实例是数据库启动时初始化的一组进程和内存结构
数据库:数据库则指的是用户存储数据的一些物理文件
从实例和数据库的概念上来看,我们能知道,实例暂时的,它不过是一组逻辑划分的内存结构和进程结构,它会随着数据库的关闭而消失,而数据库它其实就是一堆物理文件(控制文件,数据文件,日志文件等等),它是永久存在的(除非磁盘损坏)。数据库和实例通常是一对一的,这种结构我们成为单实例体系结构;当然还有一些复杂的分布式的结构,一个数据库可以对多个实例,像 Oracle 的 RAC(有兴趣的童鞋可以了解下)。
下边这张图,简单的介绍下单实例体系结构的交互流程

用户进程可以是一般的 客户端软件 ,像 Oracle 的 sqlplus,sql developer,或
者是一些驱动程序等等都属于用户进程。
服务器进程有时会称为 前台进程 ,当然是相对于后台进程(后面会提到的数据库写入器,日志写入器等)来说的,服务器进程的主要作用就是 处理连接到当前实例的用户进程的请求,对客户端发来的 sql 进行执行并返回执行结果。 在专有服务器结构中,用户进程和服务器进程是一对一的,也就是说,当监听程序监听到客户端来了一个请求,会为其分配一个对应的服务器进程。还有一种结构为共享服务器,这种结构就不是一个用户进程对应一个服务器进程了,会通过调度程序进行协调处理,关于共享服务器连接,这里就不在赘述了。
Oracle  实例的内容结构: SGA( 系统全局区 ) 和 PGA( 程序全局区 ) ,SGA 是一块共享的内存区域,也是最大的一块内存区域;PGA 则是用户会话专有的内存区域,每个会话在服务器端都有一块专有的内存区域就是 PGA。
SGA 体系结构 :
1、 、 数据库缓冲区
缓冲区缓存 是 Oracle 用来执行 sql 的工作区域,在更新数据时,用户会话不会直接去更新磁盘上的数据,想想,如果允许这么做,那么频繁的磁盘 IO 对于系统性能的影响是毁灭性的。
所以,实际的处理流程是这样的:
Select ename,salary from emp where name=”东方不败”;
我们来看这么一条简单的查询语句,oracle 是如何处理的。首先,当用户提交了该条 sql 语句,由对应的用户进程(比如我们常用的 sql developer)将其发送给服务器,监听程序监听到该条请求,会为其建立一个对应的服务器进程,然后服务器进程会先扫描缓冲区中有没有包含关键行("东方不败")的数据块,如果有,这就算一次缓存命中了,然后相关行会传输到 PGA 进行进一步处理,最终经过格式化后展示给用户;如果没有命中,那么服务器进程会首先将对应行复制到缓冲区内,然后再返回给客户端。
2、 、 日志缓冲区
日志缓冲区是一块比较小的内存区域,它是用来短期存储将写入到磁盘中的重做日志文件中的变更向量的。日志缓冲区存在的意义依然是为了 减少磁盘 IO ,减少用户的等待时间 ,试想下,如果每一次用户 DML操作都要进行等待重做记录被写入到磁盘中去,体验会有多差劲。
3、 、 共享池
共享池是最复杂的 SGA 结构,它有许多子结构,我们来看看常见的几个共享池组件:
1. 库缓存:库缓存这块内存区域会按已分析的格式缓存最近执行的代码,这样,同样的 sql 代码多次执行的时候,就不用重复地去进行代码分析,可以很大程度上提高系统性能。
2. 数据字典缓存:存储 oracle 中的对象定义(表,视图,同义词,索引等数据库对象),这样在分析 sql 代码的时候,就不用频繁去磁盘上读取数据字典中的数据了
3.PL/SQL  区:缓存存储过程、函数、触发器等数据库对象,这些对象都存储在数据字典中,通过将其缓存到内存中,可以在重复调用的时候提高性能。
4.大池:大池是个可选的内存区域,前面我们提到专有服务器连接和共享服务器连接,如果数据库采用了共享服务器连接模式,则要使用到大池;RMAN(Oracle 的高级备份恢复工具)备份数据也需要大池。
5 、Java  池
Oracle 的很多选项使用 java 写的,Java 池用作实例化 Java 对象所需的堆空间
6、 、 流池
从重做日志中提取变更记录的进程 和 应用变更记录的进程会用到流池(如实例不正常关闭,譬如断电导致实例关
闭,在重启时,Oracle 会自动执行实例恢复过程,在此过程需要提取重做日志记录和应用重做日志两个动作)
Oracle 的存储结构: 物理存储 和 逻辑存储 两个部分
物理存储结构 

 1、 、 控制文件:
控制文件虽小,但作用重大,它包含指向数据库其余部分的指针(包括重做日志文件,数据文件,归档日志
文件等的位置),存储重要的序列号和时间戳,存储 RMAN 备份的详细信息。控制文件一旦受损,那实例会
立马终止,一般对数据文件的保护采用多路复用机制,就是冗余多份在不同物理位置。
2、 、 重做日志文件: :
重做日志按时间顺序存储应用于数据库的一连串的变更向量(包含联机重做日志文件和归档日志文件)。由 SMON
(一种安装和打开数据库的进程,数据库恢复也就这个进程负责)在数据库启动时自动执行的实例恢复 和 磁盘损
坏所要求的提取备份恢复都会应用到重做日志进行相应的数据恢复
3、 、 数据文件: :
数据文件存储着实际的数据,DBWn 会将数据库缓冲区中的内容写入到这类文件中去,数据文件的大小和数量是不
受限制的。Oracle 从 10g 开始,创建一个数据库至少需要两个数据文件,一个用于 SYSTEM 表空间,该表空间用
来存储数据字典;一个用于 SYSAUX 表空间,这个表空间用来存储一些数据字典的辅助数据。
4、 、 参数文件: :
这个文件存储了数据库所需的一些参数设置,比如各个内存区域的大小,可允许的最大进程数,最大会话数,控制
文件的位置,数据库的名称等等,参数文件也是实例启动时首先要加载的文件。
5、 、 口令文件: :
一般称为外部口令文件。一般的用户名和口令是存放在数据字典中,不会存放在这个文件中。在一些特殊场景下,
比如实例还未启动,这时,我可能需要以管理员的身份登入系统去执行一些恢复或者启动操作,然而此时,数据字
典由于实例还没启动是不存在的,这时就需要外部口令文件进行用户身份的验证。

6、 、 归档日志文件: :
ARCn 将联机重做日志文件会备份归档到这类文件中去,归档日志文件保留了数据更改的完整历史信息。
逻辑 存储结构 :
Oracle 将其物理结构从逻辑存储结构中抽象出来,物理机构是系统管理员能看到的,逻辑结构则是用户所能感知
到的。比较典型的逻辑结构就是 "段"和"表空间"。
1 、表空间:
表空间是 Oracle 数据库最大的逻辑结构,一个 Oracle 数据库在逻辑上由多个表空间组成,一个表空间只隶属于一
个数据库。
表空间从逻辑上是多个段的结合,在物理上是多个数据文件的集合,相当于在段和数据文件的对应中加入了一个中
间层来解决这种多对多的关系,也就是说:一个表空间可以有多数据文件,但是一个数据文件只能属于一个表空间。
一个表空间就是一片磁盘区域,他由一个或者多个磁盘文件组成,一个表空间可以容纳许多表、索引或者簇等。每个
表空间有一个预制的磁盘区域称为初始区间(initial extent)用完这个区间后再用下一个,直到用完表空间,这时
候需要对表空间进行扩展,增加数据文件或者扩大已经存在的数据文件。
2 、段: :
段就是包含所有数据的逻辑结构,比较典型的段就是"表",称为表段,还有索引段,撤销段等等。
Oracle 中的段可以分成 4 种类型:数据段、索引段、回滚段、临时段。
数据段用来存储用户的数据,每个表都有一个对应的回滚段,其名称和数据表的名字相同。索引段用来存储系统、
用户的索引信息。回滚段用来存储用户数据修改前的值,回退段与事务是一对多的关系,一个事务只能使用一个回
退段,而一个回退段可存放一个或多个事务的回退数据。临时段用于 order by 语句的排序以及一些汇总。
3 、区: :
区是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区。区存储于段中,它由连续的数据块组成。区
的分配过程中,每次至少分配 5 个区。如果所剩的空闲空间不够 5 个区,就会出现错误:ORA-01653。
4 、块: :
数据块是数据中中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库 I/O 的最小单位,
数据块大小由 DB_BLOCK_SIZE 参数决定,不同的 oracle 版本 DB_BLOCK_SIZE 的默认值是不同的。

逻辑结构和物理结构的简要对应

三. Oracle 中的名词解释
a) RDBMS:关系型数据库管理系统
b) DBMS:数据库管理系统
c) DBA:数据库管理员
d) DB:数据库
e) PGA:程序全局区
f)  SGA:系统全局区
g) LGWR:日志写入器,就是把日志缓冲区内的内容写入到磁盘的重做日志
文件中去
h) SMON:安装和打开数据库进程
i)  PMON:进程监视器,主要监视服务器进程,当某个会话发生异常,PMON
会销毁对应的服务器进程,回滚未提交的事务,并回收会话专有的 PGA
内存区域。
j)  ARCN:归档进程,所谓归档,就是将重做日志文件永久保存(生产库一
般都会配置为归档模式)到归档日志文件中。归档日志文件和重做日志
文件作用是一样的,只不过重做日志文件会不短被重写,而归档日志文
件则保留了关于数据更改的完整的历史记录。

四. 表空间、用户、权限|角色
a) 创建表空间
1.创建表空间

CREATE TABLESPACE 表空间名称 DATAFILE ‘文件路径’ SIZE 大小 M
[AUTOEXTEND ON NEXT 大小 M MAXSIZE 大小 M]
文件名应该以 .dbf 结尾
autoextend on next:允许数据文件自动增长,规定每次增长多少
maxsize:最大值

2.创建临时表空间

CREATE TEMPORARY TABLESPACE 表空间名称 TEMPFILE ‘文件路径’ SIZE
大小 M
[AUTOEXTEND ON NEXT 大小 M MAXSIZE 大小 M]
这里需要加入关键字 temporary

3、 、 增加当前表空间的数据文件( 给表空间进行了扩容)
ALTER TABLESPACE 表空间名称 ADD DATAFILE ‘文件路径’ SIZE 大小 M
[AUTOEXTEND ON NEXT 大小 M MAXSIZE 大小 M]
注意:扩容有多种方式,这个只是其中一种,效果是在给表空间添加一
个数据文件
4 、修改表空间的名字
ALTER TABLESPACE 原名字 RENAME TO 新名字;
5 、设置表空间为只读( 当前表空间不能新建表操作)
ALTER TABLESPACE 表空间名 READ ONLY;
6 、删除表空间
DROP TABLESPACE 表空间名称 INCLUDING CONTENTS AND DATAFILES;
删除表空间并且将表空间对应的文件也一并删除

b) 创建用户
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 表空间
名称 TEMPORARY TABLESPACE 表空间名称
注意:密码必须以字母开头,有些版本不支持数字开头密码
oracle 有三个默认的用户名和密码:
1 、用户名 :sys 密码 :change_on_install
2 、用户名 :system 密码 :manager
3 、用户名 :scott 密码 :tiger( 默认锁住了,需要解锁操作 )
c) 授予撤销权限|角色
GRANT 权限|角色 TO 用户名;//授予权限或者角色给用户
REVOKE 权限|角色 FROM 用户名;//撤销用户的权限或者角色
权限:特指 特定 SQL 命令 的权利;
角色: 角色是一组权限的集合,目的是为了简化对权限的管理,从而达
到简单的对用户的管理。
的 刚刚提到的 Oracle 权限

1 、sys;// 系统管理员,拥有最高权限
2 、system;// 本地管理员,次高权限
3 、scott;// 普通用户,密码默认为 tiger, 默认未解锁
常见的用户权限:
1、create session //允许用户登录数据库权限
2、create table //允许用户创建表权限
3、unlimited tablespace //允许用户在其他表空间随意建表
4、alter、delete、update、insert、select、all 等 on  表名 //允许用户执行
相应操作
例如:
GRANT ALTER ON USERS TO ZHANGSAN;// 授予 zhangsan  用户修改 users  表的权限
GRANT ALL ON USERS TO ZHANGSAN;// 授予 zhangsan  用户 所有作 操作 users  表的权限
常见的用户角色:
CONNECT 角色: 是授予最终用户的典型权利,最基本的权力, 能够连接
到 到 ORACLE  数据库中,并在对其他用户的表有访问权限时,做 SELECT、 、
UPDATE 、INSERTT  等操作。
1、ALTER SESSION --修改会话
2、CREATE CLUSTER --建立聚簇
3、CREATE DATABASE LINK --建立数据库链接
4、CREATE SEQUENCE --建立序列
5、CREATE SESSION --建立会话
6、CREATE SYNONYM --建立同义词
7、CREATE VIEW --建立视图
RESOURCE 角色: 是授予开发人员的, 能在自己的方案中创建表、序列、
视图等。
1、CREATE CLUSTER --建立聚簇
2、CREATE PROCEDURE --建立过程
3、CREATE SEQUENCE --建立序列
4、CREATE TABLE --建表
5、CREATE TRIGGER --建立触发器
6、CREATE TYPE --建立类型
DBA 角色: 是授予系统管理员的, 拥有该角色的用户就能成为系统管理
员了,它拥有所有的系统权限

五. T-SQL(Transact-StructuredQuery Language)
a) DML:数据操作语言
b) DDL:数据定义语言
c) DCL:数据控制语言
d) TCL:事务控制语言 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值