博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle Database概念梳理
阅读量:2058 次
发布时间:2019-04-29

本文共 3804 字,大约阅读时间需要 12 分钟。

文章目录

概念梳理

数据库

即我们安装的Oracle Database这一整套程序。

数据库实例

指可以运行提供数据服务的一套数据库进程和服务,在8i版本之后一个Oracle数据库可以包含多个实例,即一个数据库可以对外提供多套数据服务。

为了便于理解,可以把数据库理解为代码中的类,而数据库实例就像代码中创建出来的实例,真正对外提供数据服务的是数据库实例。

Schema

描述:

  • 中文一般翻译为模式,从Oracle的官网描述,Schema是一个逻辑概念,包含一个用户所创建的所有schema objects,什么是schema objects呢,官方的定义是表、索引、视图、分区、序列等等这些Object都属于schema objects。

  • 在Oracle中,一个用户拥有切仅拥有一个Schema,并且这个Schema和该用户同名。

作用:

通过Schema,每一个schema object都将有一个唯一的名字,例如hr.employees指代的是hr这个Schema下的employees表,这样当一个用户需要操作多个Schema中的object时,即使两个object同名也能准确区分了。

关于Schema官方文档的描述:

Introduction to Schema Objects

A database schema is a logical container for data structures, called schema objects. Examples of schema objects are tables and indexes. You create and manipulate schema objects with SQL.

A account has a password and specific database privileges. Each user account owns a single schema, which has the same name as the user. The schema contains the data for the user owning the schema. For example, the hr user account owns the hr schema, which contains schema objects such as the employees table. In a production database, the schema owner usually represents a database application rather than a person.

Within a schema, each schema object of a particular type has a unique name. For example, hr.employees refers to the table employees in the hr schema. depicts a schema owner named hr and schema objects within the hr schema.

Figure 2-1 HR Schema

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMj0svSP-1583334233432)(Oracle Database概念梳理.assets\cncpt230.gif)]

ORACLE数据库存储结构简介

这是Oracle的官方技术共享,介绍了Oracle数据库存储结构,下面的引用文字即从这里复制而来,用于备忘。

https://blogs.oracle.com/database4cn/oracle-v6

逻辑存储结构

块:Oracle用来管理存储的最小单元,也是最小的逻辑存储结构。Oracle数据库在进行输入输出时,都是以块为单位进行读写操作的。我们建议数据块的尺寸为操作系统块尺寸的整数倍(1、2、4等)。另外,块的大小是在创建数据库的时候决定的,之后不能修改。当然,oracle同时也支持不同的表空间拥有不同的数据块尺寸。下面,我们对块的结构进行一些介绍。

块的头部信息区:
块头:包含块的一般属性信息 如块的物理地址、块所属的段的类型
表目录:如果块中存储的数据是表数据, 则在表目录中保存块中所包含的表的相关信息
行目录:行记录的相关信息 如ROWID
块的存储区:主要包含空闲空间和已经使用的空间。Oracle主要是通过下面的两个参数对这部分空间进行管理的
PCTFREE参数:指定块中必须保留的最小空闲空间比例。当块中的空闲存储空间减少到PCTFREE所设置的比例后,Oracle将块标记为不可用状态,新的数据行将不能被加入到这个块。
PCTUSED参数:制定一个百分比,当块中已经使用的存储空间降低到这个百分比只下时,这个块才被重新标记为可用状态。

请注意:以上两个参数既可以在表空间级别进行设置,也可以在段级别进行设置。段级别的设置优先级更高。

区:比块高一级的逻辑存储结构 由连续的块组成,它是oracle在进行存储空间的分配和回收的最小单位。在创建具有独立段结构的数据库对象时,例如表、索引等,Oracle会为数据库对象创建一个数据段,并为数据段分配一个‘初始区’。后续区的分配方式,则根据表的空间管理办法不同,而采用不同的分配方式,例如autoextent,uniform size 或者在创建表或表空间时设置default storage 子句。另外,用户还能够通过执行下面的命令来回收表、索引等对象中未使用的区:

SQL>alter table table_name deallocate unused;

段:由多个区组成,这些区可以是连续的,也可以是不连续的。当用户在数据库中创建各种具有实际存储结构的对象时(保存有数据的对象),比如表、索引等,Oracle将为这些对象创建“段”。 一般一个对象只拥有一个段。在创建段时,可以为它指定PCTFREE、PCTUSED等参数来控制其中的块的存储空间管理方式,也可以为它指定INITIAL、NEXT、PCTINCREASE等存储参数,以指定其中区的分配方式。如果没有为段指定这些参数,段将自动继承表空间的相应参数。不同类型的数据库对象拥有不同类型的段:

数据段:保存表中的记录
索引段:索引中的索引条目
临时段:在执行查询等操作时,Oracle可能会需要使用到一些临时存储空间,用于临时保存解析过的查询语句以及在排序过程中产生的临时数据。
回滚段:保存回滚数据。

表空间

表空间:最高级的逻辑存储结构,数据库是由多个表空间组成的。在创建数据库时会自动创建一些默认的表空间,例如 SYSTEM表空间,SYSAUX表空间等。通过使用表空间,Oracle将所有相关的逻辑结构和对象组合在一起。我们可以在表空间级别指定存储参数,也可以在短级别指定。

下面我们列出常见的表空间,和他们所存储的信息:

数据表空间:用于存储用户数据的普通表空间。
系统表空间:默认的表空间,用于保存数据字典(一组保存数据库自身信息的内部系统表和视图,及用于Oracle内部使用的其他一些对象),保存所有的PL/SQL程序的源代码和解析代码,包括存储过程和函数、包、数据库触发器等,保存数据库对象(表、视图、序列)的定义。
回滚表空间:用于存放回滚段,每个实例最多只能使用一个撤销表空间
临时表空间:存储SQL执行过程中产生的临时数据

Schema与表空间的关系

Schema和表空间两个概念个人感觉是比较容易混淆的,所以单独说明一下两者的关系。

由上面的叙述我们知道,Schema是一个用户其所属的各种数据库对象的总和,而表空间是一种Oracle数据库用来组织数据的逻辑结构。一个用户的数据是可以位于多个表空间的,而一个表空间也是可以存放多个用户的数据的,所以Schema和表空间之间其实是一种多对多的关系。

关系概括

我们可以用下面的比喻来描述逻辑结构关系:

块 :一张张白纸 —> 区:白纸组成的本子—> 段:多个本子放到一个文件袋中—> 表空间:文件柜(存放多个文件袋)

物理存储结构

Oracle数据库逻辑上由一个或多个表空间组成,每个表空间在物理上由一个或多个数据文件组成,而每个数据文件是由数据块构成的。所以,逻辑上数据存放在表空间中,而物理上存储在表空间所对应的数据文件中。我们可以用这张图来描述数据文件和表空间的关系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LcQYvnl1-1583334233433)(Oracle Database概念梳理.assets\db_physical_strtc.gif)]

构成数据库物的物理文件主要有三种:

数据文件:存放数据库数据。
控制文件:存放数据库的基本信息,告诉数据库到哪里找到数据文件和重做日志文件等。对数据库的成功启动和正常运行是很重要的。
重做日志文件:存放对数据的改变。至少两组,Oracle以循环方式来使用它们。

转载地址:http://mptlf.baihongyu.com/

你可能感兴趣的文章
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
Leetcode C++ 剑指 Offer 09. 用两个栈实现队列
查看>>
Leetcode C++《每日一题》20200707 112. 路径总和
查看>>
云原生 第十一章 应用健康
查看>>
Leetcode C++ 《第202场周赛》
查看>>
云原生 第十二章 可观测性:监控与日志
查看>>
Leetcode C++ 《第203场周赛》
查看>>