为什么会出现大型数据库?
应用系统向复杂化、大型化方向发展,使得数据库成为整个系统的核心。
常用的大型数据库
以关系型数据库为主导的数据库管理系统产品,技术比较成熟。有
ORACLE
、
MicrosoftSQL Server
、
SYBASE
、
INFORMIX
、
INGRES
,
DB2
等。
大型数据库的发展方向
(
以
Oracle
为例
)
对互联网的支持更多,如
XML
技术,对大量访问的优化;
对数据仓库
OLAP
应用的支持更强,包括对大数据处理的优化;
数据管理的智能化,减少部分
DBA
的工作;
向平台化,集成化发展,即现在的数据库不只是一个存放数据的容量,它还具有程序开发平台等功能。
DBA
的职责是什么?
了解数据库的体系结构
负责数据库管理系统的安装和升级
启动和关闭数据库
管理和监控数据库用户
管理数据库特权
管理存储空间
建立数据库
后备和恢复数据库
数据库
database
Ø
一个数据集合,数据存放在数据文件中。
实例
instance
Ø
通俗的讲,实例就是操作数据库的一种手段;
Ø
也称作服务器
,
是用来访问数据库文件集的存储结构及后台进程的集合;
Ø
一个数据库可以被多个实例访问。
Oracle
体系结构的组成
Oracle
数据库
Ø
数据库文件
Ø
相关
DBMS
的集合
Oracle
实例
Ø
内存结构
Ø
后台进程
Oracle
数据库
是安装在磁盘上的
Oracle
数据库文件和相关的数据库管理系统(
DBMS)
的集合。
Ø
数据文件
(Datafiles)
Ø
控制文件
(Controlfiles)
Ø
重做日志文件
(Redolog files)
Ø
初始化参数文件
(Parameterfile)
Ø
口令文件
(Passwordfile)
Ø
归档重做日志文件
(Archivedlog files)
等
Oracle
实例
一个实例:
Ø
是连接数据库的入口
Ø
仅打开并连接至一个数据库
Ø
它包括后台进程和内存进程
后台进程包括:
Ø
数据库写入进程
(DBWR)
Ø
日志写入进程
(LGWR)
Ø
日志归档进程
(
ARCn
)
Ø
检查点进程
(CKPT)
Ø
系统监控进程
(SMON)
Ø
进程监控进程
(PMON)
内存结构组织称为系统全局区(
SystemGlobal
Area,SGA
)。SGA
是由所有用户进程共享的一块内存区域。
Ø
数据库缓冲存储区
(DatabaseBuffer Cache)
Ø
重做日志缓冲区
(RedoLog Buffer)
Ø
共享池
(SharedPool)
Ø
Java
池
(JavaPool)
Ø大型池
(LargePool)
等。
Oracle
用户环境
用户进程发布并执行
SQL
语句的用户环境
Ø
用户进程
(Userprocess)
Ø
服务器进程
(Serverprocess)
Ø
程序全局区
(ProgramGlobal
Area,PGA
)
Ø
当用户连接到
Oracle
服务器时,
Oracle
便创建一个服务器进程与之交互,并代表该用户进程完成与
Oracle
数据库间的交互。
程序全局区
PGA
是用户专用的内存结构,存储该用户连接期间与
SQL
语句执行相关的信息。
Oracle
数据库的两种内存结构
系统全局区
(SystemGlobal
Area,SGA
)
Ø
一组共享内存结构,
用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。
Ø
程序全局区
(ProgramGlobal
Area,PGA
)
Ø
是用户进程连接到数据库并创建一个会话时,由
Oracle
服务器进程分配的专门用于当前用户会话的内存区,该区域是私有的
。
1.
系统全局区
SGA
数据库缓冲存储区
Ø
用于存放最近访问的数据块;
Ø
大小由初始化参数定义;
Ø
采用
LRU(LeastRecently Used,
最近最少使用
)
算法管理数据库缓冲存储区。
重做日志缓冲区
Ø
用于存放数据进行的所有更改;
Ø
大小由初始化参数定义;
Ø
当重做日志缓冲区被添满时,由日志写入进程把重做日志缓冲区的内容写到磁盘的重做日志文件中保存。
共享池
Ø
用于存放最近执行的
SQL
语句
(
库高速缓存
)
和数据字典信息
(
数据字典高速缓存
)
;
Ø
大小由初始化参数定义,可动态变化;
Ø
其大小影响数据库的性能。
大型池
Ø
为大的内存需求提供内存空间;
Ø
大小由初始化参数
LARGE_POOL_SIZE
定义。
Java
池
Ø
用于存放
Java
代码、
Java
语句的语法分析表、
Java
语句的执行方案和支持
Java
程序开发;
Ø
大小由初始化参数
JAVA_POOL_SIZE
定义。
2.
程序全局区
PGA
排序区
Ø
存放执行
GROUPBY
和
ORDERBY
等包含排序操作所产生的临时数据;
Ø
大小由初始化参数
SORT_AREA_SIZE
设置。
会话区
Ø
存储该会话所具有的权限、角色、性能统计等信息。
游标状态区
Ø
存储用户会话中当前使用的各游标所处的状态。
堆栈区
Ø
存储该会话中的绑定变量
(BindVariable)
和会话变量
(SessionVariable)
及
SQL
运行时的内存结构信息。
Oracle
数据库的进程
用户进程
Ø
当用户运行一个应用程序时,就建立一个用户进程
后台进程
Ø
为所有数据库用户异步完成各种任务
Ø
用于数据库的各种数据操作
服务器进程
Ø
处理用户进程的请求
1.
后台进程
数据库写入进程
(
DBWn
)
Ø
作用是将已更改的数据块从内存写入数据文件;
Ø
默认情况下,启动实例时只启动一个数据库写入进程,即为
DBW0
。
日志写入进程
(LGWR)
Ø
将重做日志缓冲区的数据写入重做日志文件中永久保存;
Ø
是唯一一个能够读
/
写重做日志文件的进程。
日志归档进程
(
ARCn
)
Ø
将重做日志的事务变化复制到归档日志文件中;
Ø
是一个可选进程,默认情况下只有两个归档日志进程(
ARC0
和
ARC1)
。
检查点进程(
CKPT)
Ø
作用是发出检查点(
Checkpoint),
实现同步数据库的数据文件、控制文件和重做日志;
Ø
是一个可选进程,确保数据文件、控制文件和重做日志文件的一致性。
系统监控进程(
SMON)
Ø
在数据库系统启动时执行恢复工作;
Ø
合并空间碎片并释放临时段。
进程监控进程(
PMON)
Ø
监控服务器进程的执行,并在服务器进程失败时清除该服务器进程;
Ø
用于恢复失败的数据库用户的强制性进程。
2.
服务器进程
专用服务器模式
Ø
Oracle
用于支持客户连接的最简单的进程结构;
Ø
为每一个连接到实例的客户进程启动一个专门的前台服务进程;
Ø
一般只用在密集的批操作,能让服务器进程大部分时间保持繁忙;
Ø
当预期客户机连接总数较少,或客户机向服务器发出的请求持续时间较长时,应采用专用服务器模式;
共享服务器模式
Ø
少数共享服务器进程执行了许多连接客户的数据访问操作,
很少的进程开销就可以满足大量的用户群;
Ø
其组件包括:调度器、共享服务器进程和队列。
Oracle
数据库的存储结构
物理存储结构
Ø
是实际的数据存储单元,如文件或数据块等,主要包括:
数据文件
日志文件
控制文件
参数文件
1.
数据文件
是物理存储
oracle
数据库数据的文件;
每一个数据文件只与一个数据库相联系;
数据文件一旦被建立则不能修改其大小,
一般位于
目录
“
ORACLE_BASE\
oradata
\ORACLE_SID
”
;
一个表空间可包含一个或多个数据文件。
2.
重做日志文件
用于记录所有对数据库数据的修改,以备恢复数据时使用;
每一个数据库至少包含两个日志文件组;
日志文件组以循环方式进行写操作;
Ø
日志开关
(
LogSwitch
)
是为实现日志文件组的循环使用而设置的。出现日志开关的情况如下:
当一个日志文件组被填满时
关闭数据库时
DBA
手动转移日志开关
Oracle
数据库有两种运行模式:
Ø
归档日志
(ARCHIVELOG)
模式
所有的事务重做日志都将保存
在一个重做日志被覆盖前为其建立一个副本
在重做日志归档工作完成之前,
Oracle
不对其进行覆盖
数据库运行在
ARCHIVELOG
模式时可能增加系统开销并成为系统的瓶颈
Ø
非归档日志
(NOARCHIVELOG)
模式
为系统默认模式
系统不保留旧的重做日志
有限的恢复能力
3.
控制文件
是一个较小的二进制文件,用于描述数据库结构;
描述信息如下:
Ø
数据库建立的日期
Ø
数据库名
Ø
数据库中所有数据文件和日志文件的文件名及路径
Ø
恢复数据库时所需的同步信息
在打开和存取数据库时都要访问该文件;
一个实例只能访问一个数据库,通过控制文件在实例和数据库之间建立关联;
数据库运行时,控制文件被不断更新。
4.
参数文件
一个文本文件,可直接使用操作系统下的文本编辑器对其进行修改;
该文件只在建立数据库或启动实例时才被访问,在修改该文件之前必须关闭实例;
其作用是:
Ø
确定存储结构的大小
Ø
设置数据库的全部缺省值
Ø
设置数据库的范围
Ø
设置数据库的各种物理属性
Ø
优化数据库性能。
5.
口令文件
存放具有
SYSDBA
或
SYSOPER
权限的用户信息
初始特权用户为
SYS
6.
警告文件
由连续的消息和错误信息组成
查看
Oracle
内部错误也可以监视特权用户的操作
应从文件尾部开始查看
7.
后台进程跟踪文件
用于记载后台进程的警告或错误信息
8.
服务器进程跟踪文件
用于跟踪
SQL
语句,诊断
SQL
语句的性能,并做出相应的调整
数据库的逻辑结构是
面向用户
的
Oracle
的逻辑结构由一个或多个表空间组成:
每个表空间由多个段
segment
组成
每个段由多个区间
extent
组成
每个区间由多个数据块
block
组成
每个数据块对应多个物理磁盘块
1.
表空间
(
Tablespace
)
是数据库的逻辑组成部分,对应一个或多个数据文件,其大小是所对应数据文件大小的总和;
一个
Oracle
数据库中至少要包含一个
SYSTEM
表空间和一个
SYSAUX
表空间;
一般还包含数据表空间、索引表空间、临时表空间和
UNDO
表空间等表空间;
一个表空间只能属于一个数据库。
系统表空间
Ø
SYSTEM
表空间
每个数据库至少要有一个表空间,即
SYSTEM
表空间,用于存放系统信息。
Ø
SYSAUX
表空间
Oracle 10g
新增加的辅助系统表空间
非
系统表空间
Ø
撤销表空间
UNDOTBS1
用于保存事务回退(
Rollback)
信息
Ø
用户表空间
USERS
用于存放用户的私有信息
Ø
临时表空间
TEMP
用于存放临时表和临时数据
表空间的实际应用
Ø
建议将不同类型的数据部署到不同的表空间,以提高数据访问性能,便于数据管理、备份、恢复等操作;
Ø
一个
Oracle
数据库应用方案应该包括专用的数据表空间(可能需要建立多个)、索引表空间(可能需要建立多个)、临时表空间;
Ø
表空间对应的数据文件分开存储到不同的磁盘上;
Ø
SYSTEM
表空间应该只包含系统数据(如数据字典)。
表空间的状态和工作模式
Ø
Oracle
允许控制基于表空间的数据库数据的可用性,表空间可以是脱机或联机的;
Ø
联机表空间中的数据对用户是可用的;
Ø
脱机表空间中的数据对用户是不可用的;
Ø
一个新的表空间创建时,总是一个可读写表空间;
Ø
当一个表空间的数据不能被改变时
(
如数据仓库中的历史数据
)
,可将其设置为只读表空间;
Ø
只读表空间能节约数据库备份时间。