数据库是什么东西
A database is an organized collection of data. It is the collection of schemas, tables, queries, views, and other objects.
——Wikipedia
数据库就是管理和组织数据的一组集合。数据库在现实生活中处处可寻:抽屉、冰箱、衣柜、钱包等等都可以说是一个数据库,拿钱包来说,里面存放的钱、名片则就是数据,而钱包会通过分层和夹层的方式来存放钱和名片,我们将钱放到分层和夹层就是一种管理和组织数据的方式。
比如我所学习的Oracle数据库,目前我对它的认识是这样子的:Oracle数据库当中有两个比较重要的概念,一是数据库,二是实例;
**数据库 = 物理结构+逻辑结构;实例 = 后台进程 + 内存 **。
物理结构
我是真实存在的文件,也就是你钱包里面存的钱:比如10块、50块、100块 ,在操作系统里面就是占用了你的磁盘空间,在数据库里面来说就是一群实实在在存在的文件,比如控制文件、数据文件、日志文件、密码文件和参数文件。
下面将这些文件的作用简单描述一般。
控制文件:没有了控制文件就无法装载(mount)数据库。控制文件里头大概包含了数据库的名字、ID、创建的时间戳;表空间信息;日志文件、数据文件存放的路径;检查点信息以及归档和备份信息。
可以查看 V$CONTROLFILE 了解它数据文件:数据文件存放在表空间里面,数据库mount后会使用到它,里面存放的是以block为单位的数据。
可以查看 V$DATAFILE 看看它里面的信息日志文件:对数据库每做的任一事务都会记录到日志文件里面,以redo record的方式记录在数据库数据文件中发生的block变化。可以利用日志文件实现rollback操作。
它对应的视图是 V$LOG 和 V$LOGFILE口令文件:这是Oracle的安全认证机智,口令文件里面可以使用Oracle用户名密码验证,也可以使用OS认证(必须属于OS中的DBA用户组)。与口令文件息息相关的是sqlnet.ora文件
参数文件:在mount数据库之前,需要依靠参数文件打开实例,没有了参数文件,实例就不能启动,更不能管理和组织数据库。
在V$PARAMETER里是它的全部
其实,我们新手来说,能够清楚地知道Oracle数据库启动的全过程,这就是很大的一步探索了。
逻辑结构
物理结构占用了磁盘空间,逻辑结构定义一系列的对象存放数据文件。这些对象有:表空间、段、区、块。下面来说说逻辑结构的作用。
- 表空间(Tablespace):Oracle 官方是这样子介绍它的:A database is divided into logical storage units called tablespaces.
表空间存放数据文件,呈一对多的关系。并且各个表空间里的数据文件作用也不一样;建库时默认建的表空间有:SYSTEM表空间、SYSAUX表空间、UNDO表空间、USERS表空间和TEMP表空间。
常用的视图:V$TABLESPACE 、V$DATAFILE、V$TEMPFILE
- 段(Segments):由一个或多个连续的区组成段,段里面有特定的数据库对象:Table、Index、Cluster Table,还有 user segments 、undo segments 和所有类型的segements。
相关表:DBA_SEGMENTS 、 USER_SEGMENTS
区(Extents):由多个连续的数据块集合组成区,每一个表的数据段都会有一个初始区。当段中的空间耗尽时,会自动分配一个新的区给段。
> 相关表:DBA_EXTENTS 、USER_EXTENTS块(Data Block):是Oracle数据库中数据存储的最小逻辑单元,也被称为Oracle block 或 pages。一个数据块对应物理磁盘中特定的bytes大小。
在参数文件中可以指定block的大小,name为db_block_size,默认值为8192 bytes。
看了数据库、物理结构和逻辑结构的基本概念之后,对Oracle数据库的大概框架会明白不少。想要深刻地学习某个东西,必须得深刻了解它的架构。