北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3 ORACLE数据库存取管理
? 数据库管理员的任务是使所有运行 Oracle
数据库的系统能够有效的工作。数据库管
理员为每一个用户提供技术支持,并且应
当对 Oracle软件中出现的所有问题都相当
熟悉。除上一节介绍的 ORACLE实例设置外,
ORACLE数据库的存储对数据库的性能也有
很大影响,另外 ORACLE的安全性、备份与
恢复机制也在本节中介绍。
4.3.1 管理 ORACLE存储
4.3.2 ORACLE安全管理
4.3.3 ORACLE备份与恢复
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1 管理 ORACLE存储
? 在 2.1的数据库数据存储介绍中,我们
已经知道 ORACLE的数据存取是面向数据
块 (页 )的;在 4.1中,我们知道 ORACLE
数据库的存储体系是表空间、段、区间、
块,下面将集中讨论 ORACLE存储对性能
的影响。
4.3.1.1管理数据库对象
4.3.1.2理解数据库碎片
4.3.1.3管理回滚段
4.3.1.4鉴别存储问题
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 管理 Oracle块
Oracle服务器寻址的最小存储单元是 Oracle块。无
论段是一个表、索引、簇或者其他对象,块结构是相
同的。 设计一个性能最优的数据库要从对 Oracle块适
当的配置和管理开始 。
Oracle块是由三部分组成的:块头、数据存储区、
自由空间区。块头包含有关块的信息 (什么类型的段
数据存储在块中,什么段在块中有数据,块地址以及
指向存储在其中的实际行的指针 )。块头由一个固定
部分和一个可变部分组成,在块中块头通常使用 85到
100字节。
在 Oracle块中,主要关注管理数据存储区域和自由
空间区域 。数据区域是块中实际存储行的地方。自由
空间区是一个保留的区域,被定义为总的可用空间的
百分数,用于存储有关在块中的行将来更新的信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 理解 PCTFREE与 PCTUSED
PCTFREE和 PCTUSED是应用于段的两个存储
参数,当 Oracle向数据库中写信息时,它必须
首先在一个段的分配区中找到一个或更多块来
存储信息。
如果在块中自由空间的百分数比 PCTFREE参
数大得多,它就可以用来存储新信息。当自由
空间的百分数低于 PCTFREE时,块就被认为是
,满的, 。
当块中使用空间的百分数低于 PCTUSED时,
它就可以被用来存储新信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 理解 PCTFREE与 PCTUSED
使 Oracle保持足够的额外空间用于行增长
(修改结构 ),而不需要跨块存储 。保持行被限
制在一个单独的块中有助于使数据库以最高性
能运行。
PCTFREE和 PCTUSED的值不能等于 100%。由
数据库引擎处理引起的系统开销可以通过在
PCTFREE和 PCTUSED之间留至少 20%的裕量而得
到解决。缺省 PCTFREE为 10,PCTUSED为 40。
PCTFREE和 PCTUSED在数据库段的存储子句
中被指定。可以用 dba_tables,dba_clusters
或者 dba_indexes数据字典视图查询它们目前
的值。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 索引与 PCTUSED/PCTFREE
索引使用 PCTFREE和 PCTUSED与表相比不同。
只有当一个索引最初建立时这些参数适用 。
PCTFREE的设置应让索引结构最初在叶块中建
立时就有足够的空间,这样就可以增加辅助关
键字,而不必拆分已存在的叶块提供给新关键
字。 索引不必设置 PCTUSED。
当为一个已存在的表建立新索引时,如果
预料到表中的数据较稳定,修改不多时,可选
择较小的 PCTFREE,反之则应选择较大的值。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 管理表存储区
创建表时,系统自动在表空间中分配一个
区间,构成数据段。表的空间需求是平均行长
与行数的乘积。确定表的容量应该在表建立之
前的设计阶段完成。预期的增长和存储参数值
等问题应该在建表时处理。 ORACLE用如下方式
来为未来的数据预留空间 (参看 2.1内容 ):
1)为表的数据段设置存储参数,控制每次
分配的区间大小。
2)用存储参数 PCTFREE和 PCTUSED控制构成
数据段的区间中各个块的空间利用率。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 管理索引
当查询语句中的 WHERE子句表达式含有被索
引的关键字时,ORACLE将自动启动索引。
许多应用程序员 (以及 DBA)通过申请更多索
引的办法解决数据库的性能问题。但 更多的索
引不仅会影响修改性能,而且在一个查询中并
不是子句中涉及的索引都启用 。
过多的索引并不会一直提供比较好的 SELECT
性能 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 管理索引, 关于索引的管理和使用的几点技巧:
1)组合索引是提高性能的有力工具,特别是针对只需从
索引段读出而不用从数据段的查询。
2)如果在查询子句中包含 ‘ IS NULL’或 ‘ IS NOT NULL’,
索引将不在启用。
3)在查询条件中涉及多个索引,而又无明显优先可选项
的查询中,ORACLE一般按索引类型及列的性质选择启动
索引,当有唯一性和非唯一性索引均可使用时,选择只
启用唯一性索引。
4)在关键字列上进行运算可以屏蔽定义在此列上的索引。
5)在 WHERE子句中若包含不等于 (‘!=’或 ‘ NOT’)运算,
ORACLE将不在启用索引,但可对其他列使用索引。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 监控回滚段
回滚段实际上是动态的,DBA应该集中精力
保证每个回滚段及与之联系的表空间有足够
的空间用于增长 。
关心回滚段的目的在于合理地配置系统资
源,提高回滚段的利用率,关键是各个事务
要占用多大的存储空间,其活动时间有多长。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.1 管理 ORACLE数据库对象
– 管理临时表空间和段
临时段是 SELECT语句在需要的时候向 ORACLE申请的
存储资源,随 SELECT语句结束而注销。只有查询的直
接结果与查询的显示结果有差异时才会申请临时段,
保存中间结果,比如 DISTINCT,ORDER BY等。
在缺省情况下,临时段创建在系统表空间中,而临
时段频繁的创建和删除势必造成系统表空间的效率降
低,还会使系统表空间中的 ‘ 碎片 ’ 增加,影响存储
器的有效使用。
应该设计一个专门的表空间来存放临时段,最好将
其分配在与系统表空间和数据段不同的存储器上,减
少 I/O冲突 。在创建用户时,应同时为其指定临时段所
使用的表空间。 临时段表空间最起码的容积应有两倍
的单个数据表信息量,还要考虑用户数 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.2 ORACLE数据库碎片
? DBA面对的最常见问题就是 处理数据库对象的
碎片 。碎片浪费空间,导致性能问题,并给数
据库对象的管理带来困难。数据库碎片通常是
行被插入、修改和删除以及对象被建立和删除
的结果,一个新建立的数据库不会有碎片。只
有当在数据库上运行了一个或更多的活动应用
程序后,才开始看到数据库碎片的迹象。
? 数据库碎片包括分裂成碎片的数据库对象,分
裂成碎片的表空间、链接行和转移行 。 DBA应
该,注意数据库应用程序是如何执行任务的,
尽量避免数据库应用程序运行过程中产生碎片,
并且监测数据库运行状态,对产生的碎片进行
必要的处理。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.2 ORACLE数据库碎片
– 分裂成了碎片的表空间
表空间变成碎片是由于运行错误或者表空间中的数
据库对象的无计划撤消和重建造成的 。表空间不会由
于任何行级动作而变成碎片。
Oracle尽力帮助 DBA进行空间分配和管理。例如假
定一开始表空间有四个 10MB表段,现在删除其中的两
个表,这两个表都位于表空间的, 中间, 位置,SMON
后台进程自动地把两个 10MB的区间聚合为一个 20MB区
间。如果要删除的两个表不是位于表空间的, 中间,
位置,则形成表空间碎片。
表空间碎片会导致:表空间中的空间被分离且不能
有效地使用。
DBA_FREE_SPACE和 DBA_EXTENTS数据字典 可以查询
数据库的每个表空间中有多少自由空间是可用的和最
大自由区间的容量以及每个表空间中自由区间的数目。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.2 ORACLE数据库碎片
– 处理分裂成碎片的表空间
处理表空间碎片的最好方法是避免它,这需要仔细
地计划和管理。避免碎片的几种提示方法:
1)把对象用相似的空间和增长特性聚合在一起。
2)如果可能,把它们的区间设成相同的容量,这样
所有的对象可以共享释放对象回收的区间。
3)使每个段的 PCTINCREASE保持为 0(注意 Oracle7.3
后,设置 PCTINCREASE比 0大会导致 SMON自动聚合相邻
的自由区域 )。
对确实需要整理的分裂成碎片的表空间,简单的方
法是在表空间中导出损坏了的对象,删除该对象,再
把它们导入回来 。这不仅能够聚合自由空间,而且导
出操作也可以把数据库对象聚合到一个区域中。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.2 ORACLE数据库碎片
– 对象碎片
碎片问题可能发生在对象级。对象碎片会导致:由
于在表和索引块中的自由空间空洞导致空间的浪费;
读性能下降,因为数据不再被紧紧地排在一起,物理
磁盘驱动器必需从一个比需要的大的磁盘表面区域中
搜寻和读数据。
对象碎片的三个特殊碎片类型:行转移、行链接和
过分扩展的段 。
DELETE操作可能会产生 稀疏的块,因为这些块不满
足 PCTUSED条件,以至没有成为自由空间。处理对象
碎片的操作也会处理这类稀疏的块问题。
DBA在一个经常改变的表空间中发现空间分配问题,
并重建了表空间和它的所有对象,随后数据库性能提
高了。这种在性能上的提高是消除表空间碎片的结果,
但也可能是消除对象级碎片带来的性能的提高。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.2 ORACLE数据库碎片
– 行转移,行转移在对行的修改引起行的长度比块中可
利用空间大时发生 。当发生行转移时,行的一部分转
移到一个新的数据块中,这个新数据块的地址存储在
原始行单元中。当 Oracle需要读这个行时,它首先读
原始单元并找到一些数据和指向另一个块的指针,再
在这个块中找到剩下的行数据。
为什么 Oracle执行行转移而不是把整个行移到一个
新块中?因为移动一个行的单元会引发 ROWID的变化,
而 ROWID的变化引发一系列的变动,代价太大。
行转移存在两个问题:
1) Oracle必须读每一个包括行数据的一部分或者
是指向另一个包含着行数据的块的指针的块,无疑这
会导致相当大地全系统的额外开销。
2) Oracle必须和行数据一起存储额外的指针来供
给行转移机制,浪费了一些磁盘空间。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.2 ORACLE数据库碎片
– 行链接,行链接在行太长以致于不能放入任何一个数
据块时发生 。这导致该行被存储在一个或多个数据块
的链中。行链接伴随着包含 LONG,LONG RAW或者 LOB
数据类型的大行时发生。
– 消除链接和转移的行
链接和转移的行会对数据库的整体性能造成一系列
的问题。可以通过下面的 SQL语句检查链接和转移的
行:
analyze table customer list chained rows
into cha;
这个命令把 ROWID和数据库中所有链接和转移行的
表存储到 cha表中。直接查询 cha表,即可找出行和表
的特定信息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.2 ORACLE数据库碎片
– 消除链接和转移的行
消除转移的行的方法 是直接查询 cha表,把转移的行
从表中移出放入一临时表中,然后再集中将临时表中
数据添加进表,即可消除转移的行,该方法可能使原
来相邻存放的数据变得不再相邻,并不一定能提高性
能;另一个方法是使用全表导出,删除表,之后使用
导入重建该表,该方法最简单、最全面,肯定会消除
行转移引起的性能问题,但无疑是消耗时间最长的。
行链接 是非常难调整的。唯一的 解决办法是缩短表
的行长或者增加数据库块的大小 。选择前一种方法通
常需要对表结构进行重新设计,但是后一种方法需要
导出整个数据库,重新创建数据库然后全部导入,因
为块的大小调整必须重构数据库。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.3 管理回退段
? 像其他段一样,回滚段被定位在表空间中并且
包含区间。每个数据库有一个 SYSTEM回滚段,
它位于系统表空间中并在数据库建立时建立,
用户不允许使用它并且它不能被删除。正象第
三章所述,ORACLE数据库应该建立附加回滚段。
? 在有许多并行事务的系统上需要有更多区间的
更多回滚段。事务越大,回滚段也就需要越大。
因为 回滚段通常允许增长,然后收缩回到存储
参数 OPTIMUM的值,一定要特别小心以确保一个
回滚段需要的空间裕量。
? 当创建的回滚段空间太小或者创建的回滚段太
少时,Oracle通常出现, 快照太旧, 的错误信
息。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.3 管理回退段
– 回滚段操作
事务可以通过显式或者隐式方式被指定到一个特殊
的回滚段中。 Oracle用扩展 (存储子句 )和循环 (释放
的空间可以重用 )的方式使用回滚段。 如果达到了一
个回滚段的 maxextents,或者表空间中没有更多的空
间分配给回滚段的话,扩展就失败了 。应该给回滚段
分配预留扩展的表空间。
包含在任何给定的表空间中的所有回滚段应该被精
确地分配成相同的大小,如果设置了不匹配的区间大
小,那么可能出现前面讨论过的碎片问题。也即 尽量
为活动时间大致相同的事务创建一个回滚段,这样可
以使回滚段的区间利用率达到最好水平 。
特殊回滚段是为特殊事务类 (如 DSS和 OLTP)创建的,
这些可能被设置为不通用大小的回滚段,它们应该存
储在它们自己的表空间中以使碎片减到最小。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.3 管理回退段
– 设定回滚段大小
数据库设计者对回滚段通常考虑如下问题:
1)使用多少个回滚段;
2)给每个回滚段分配多少空间;
3)各个回滚段是专用的还是共享的;
4)各个回滚段分别住留在哪些表空间中。
当设定回滚段大小时,应该被设置得足够大,这
样系统就不必马上重新使用刚被一个完成的事务释
放的块,同时有足够的空间来存储非活动的或者被
提交的数据事务,而这些数据事务可能是其他长时
间运行的查询所需要的 (读一致性 )。
使用 SET TRANSACTION USE ROLLBACK语句在事务
开始时明确地使用某个回滚段。可以建立一个只被
长时间运行的批量工作使用的大回滚段。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.3 管理回退段
– 使用 OPTIMAL参数
当建立回滚段时,回滚段的目标容量可以用存储参
数 OPTIMAL定义。 OPTIMAL参数指定了回滚段要缩小到
的尺寸。
例, create rollback segment r05 tablespace rbs
storage (initial 10M next 10M optimal 20M
minextents 2 maxextents 100);
ORACLE尽力把回滚段的尺寸维持在指定的最佳值 20MB
上。当回滚段开始写入另一个区间时,Oracle总是检
查段是否比 OPTIMAL的尺寸大,如果大,并且下一个
区域是完全空闲的,Oracle就释放该区间。
如果回滚段的尺寸设置不适当,回滚段会由于
OPTIMAL子句的缘故持续地收缩,这种不断的区间分
配和释放会影响到性能。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.3 管理回退段
– 进行装载测试以获得回滚段估算
为了正确地设置回滚段的尺寸,需要对将由较大事
务产生的撤消信息的数量有个了解。可以在样本事务
中执行一个 装载测试,
1)建立两个表保存统计信息,undo_begin和 undo_end。
2)在与数据库连接后,发出一系列事务处理命令,使
用动态性能视图 v$rollstat把写入指定回滚段的原始
数据捕获到表 undo_begin中。
3)在事务处理结束后,再把写入指定回滚段的数据放
到表 undo_end中。
4)在表 undo_begin和 undo_end中已经有了开始和结束
值,将这两个值相减便可得到写入指定回滚段的数据。
这些值可以用于确定你的回滚段的尺寸需求。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.4 鉴别存储问题
? 当数据库启动和运行时,也需要查看数据库的
每个主要组件有多大。目的是要 确保表空间足
够大,能够存储它们所包含的段 。
– 开发表空间
表空间的开发包括了解表空间的总尺寸以及表空
间使用什么样的数据文件两方面。 DBA_DATA_FILES
表包含所有关于数据文件的信息,表空间的尺寸是
它的数据文件的总和。 DBA_FREE_SPACE表中保存数
据库中所有自由区间的清单,通过合计表空间中自
由区间的尺寸,会看到还剩多少自由空间、每个表
空间中的最大自由区域多少。 DBA_SEGMENTS表包含
了数据库的区间信息 。应该通过这三个表定期评价
你的表空间被分裂成碎片的程度。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.1.4 鉴别存储问题
– 表检查
表检查包括估计总的容量以及实际使用的空间。
一个已用空间与分配空间的比值很低的区间意味着
INITIAL和 NEXT区域值可能被设置得太高了。可以在
DBA_EXTENTS表中找到区间信息。
– 优化簇存储和检查索引
理想情况下,每个簇刚好有一个区间 。可以查询
DBA_EXTENTS计算每个簇的区间数目。可能的情况下,
重新计算最佳的存储参数,并重建一个簇。
同簇一样,理想情况下每个索引刚好有一个区间。
– 监控临时表空间
排序、链接和 GROUP BY子句等操作要使用临时表
空间。要监控临时段,可以检查 DBA_SEGMENTS中类
型为 TEMPORARY的所有段信息 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.2 ORACLE安全管理
? Oracle安全模型原理是基于最小特权原则。
此原则认为用户应该仅有完成他的任务所
必需的特权。 ORACLE的安全性主要通过 用
户 (USER)管理、权限 (PRIVILEGE)管理、
角色 (ROLE)管理 来实现。 ORACLE的安全管
理在第二章中已经作过介绍,下面的内容
是第二章的继续。
4.3.2.1 用户验证
4.3.2.2 权限管理
4.3.2.3 审计
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.2.1 用户验证
– 数据库验证
当创建用户时,可以为其选择资源限制文件。
资源限制文件 (profile)可以使用企业管理器 (OEM)
或 SQL*Plus创建环境资源文件,使资源限制文件生效
需在 init.ora中设置 resource_limit=TURE。
资源限制文件可以做到口令限制和资源限制 。
资源限制 包括会话级限制 (当达到限制要求时则断
开会话 )和调用级限制 (当达到限制要求时回退语句 )。
具体有:限制会话的数量、每个会话使用 CPU时间
(100秒为单位 ),CPU调用的次数、逻辑读的次数、每
次调用的逻辑读的次数、空闲时间以及连接时间等等。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.2.1 用户验证
– 数据库验证
口令限制包括
用户帐户的锁定,当一个用户多次注册失败后,该
帐户能够被锁定一段指定的时间;
口令使用期与到期,一个给定的口令在使用一段时
间后过期,此时必须修改该口令;
口令历史,口令历史选项检查每一个新近设定的口
令以确保口令在指定长度的时间内或指定次数的口令
修改中未重复使用;
口令复杂性验证,复杂性验证检查口令的长度以使
它更难被计算机破坏者所破解 (长度上至少为 4个字符,
不要与用户标识相同,至少包含一个字母字符、一个
数字字符和一个标点符号,不要与简单单词的一个内
部列表上的任何单词匹配,与以前的口令至少有 3个
字符不同)。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.2.1 用户验证
– 数据库验证
例,CREATE PROFILE d_prof LIMIT
SESSIONS_PER_USER 2 --限制会话的数量
CPU_PER_SESSION 10000 --会话使用 CPU时间
(100秒为单位 )
IDLE_TIME 60 --空闲时间
CONNECT_TIME 480; --连接时间
例,CREATE PROFILE grace LIMIT
FAILED_LOGIN_ATTEMPTS 3 --3次失败则锁定
PASSWORD_LIFT_TIME 30 --可以使用 30天
PASSWORD_GRACE_TIME 5; --30天到期后再提
示 5天
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.2.1 用户验证
– 外部验证
外部验证依赖于操作系统或网络验证服务。此类登
录不需要数据库口令。要使用外部验证,init.ora
参数 REMOTE_OS_AUTHENT必须被设置为 TRUE(缺省值
是 FALSE)。另外在 init.ora文件中设置
OS_AUTHENT_PREFIX参数表示任何同此值有相同前缀
的用户将在外部得到验证。比如,该值被设置为 ops
那么所有以 ops打头的用户将在外部得到验证。
– 企业验证
企业验证启用一个中央资源用于口令管理,该用户
被称为全局用户( global user)并且必须在每个使
用全局口令的数据库中创建。假如口令得到验证,用
户便能够访问 Oracle数据库。 Oracle安全服务与
Oracle企业管理器的接口集中了安全角色管理和企业
验证。这使得当前正在被管理的用户具有全局同一性。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.2.2 权限管理
? ORACLE权限有系统权限和对象权限,通过将权
限直接授予用户或通过将角色 (一定权限的集
合 )赋予用户完成用户的权限管理 (见第二章 )。
? 两种特权:
Category Examples
SYSOPER STARTUPSHUNTDOWN
ALTER DATABASE OPEN|MOUNT
ALTER DATABASE BACKUP CONTROLFILE TO
RECOVER DATABASE
ALTER DATABASE ARCHIVELOG
SYSDBA 不仅具有 SYSOPER权限,而且CREATE DATABASE
ALTER DATABASE BEGIN/END BACKUP
RESTRICTED SESSEION
RECOVER DATABASE UNTIL
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.2.3 审计
? Oracle能够审计并记录数据库中发生的活动。可
以使用 AUDIT命令允许审计操作或使用 NOAUDIT命
令禁止审计操作。有三种类型的审计操作:登录
尝试、对象存取 (具体对象上的具体语句 )和数据
库操作 (具体的系统特权和语句,不考虑对象 )。
? 任何一条命令,不管是成功的还是不成功的都可
以进行审计。要创建审计系统视图,以用户 SYS
的身份运行 CATAUDIT.SQL文件脚本,并设置
init.ora参数 AUDIT_TRAIL,该参数可以设置为
写入数据库或一个操作系统文件:
AUDIT_TRAIL=DB 写入数据库,所有已审计的活
动被写入 SYS.AUD$表中; AUDIT_TRAIL=OS 写入
一个操作系统文件。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3 ORACLE备份与恢复
? 数据丢失分为物理丢失和逻辑丢失两类。
物理数据丢失是指操作系统级的数据
库组件的丢失,例如数据文件、控制文
件、重做日志以及存档日志。
逻辑数据丢失是诸如表、索引或表记
录的数据库级组件的丢失。
Oracle能够实现物理数据备份与逻辑
数据备份 。有效的备份计划必须把两种
方案都包含在内才能完全避免数据丢失。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3 ORACLE备份与恢复
? 物理数据备份即为数据文件、控制文件、
归档重做日志的拷贝 。
物理备份应用于相同的 Oracle版本以及
引起物理备份的实例上的恢复,因此,物
理备份被认为是不可移植的,它们通常仅
用于保护同一台机器和实例中的数据免遭
数据丢失。物理备份通常按照预定的时间
间隔运行以防止数据库的物理丢失。
物理备份可以进一步分为冷备份 (脱机
备份 offline backup)与热备份 (联机备份
online backup)。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3 ORACLE备份与恢复
? 逻辑数据备份通常是 SQL语句的集合,这些 SQL语
句重新创建数据库对象 (表、索引、授权、角色
等 )和记录 。
当需要在不同实例之间移动指定的数据,或者
需要在不同的系统结构、操作系统版本或 Oracle
版本之间拷贝一个实例的全部数据时可以使用
Oracle的逻辑备份系统。逻辑备份用于实现数据
库对象的恢复,用来保证数据库能够从无意中的
修改 (例如 DELETE,DROP等 )中恢复出来。
在开发者环境中,应该设计一个逻辑备份策略。
一般存在两个数据库拷贝,一个是成品数据库,
另一个由开发者使用,用来调试他们的程序。开
发数据库将与成品数据库定期地保持同步。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.1 ORACLE逻辑备份
? Oracle提供了逻辑备份工具 EXP( IMP用于逻辑恢
复)。命令格式如下:
EXP [keyword=value[,keyword=value… ]]
– 完全逻辑备份
EXP可用于完全逻辑数据库备份。但条件是必须有
EXP_FULL_DATABASE权限和足够的存储空间。
写入缺省输出文件中的完全逻辑备份的例子:
exp USERID=SYSTEM/MANAGER FULL=Y
– 指定用户模式的逻辑备份
EXP支持指定用户模式的备份。导出一个指定的用
户组会导出用户定义的所有表、索引等相关的数据。
把 TGASPER模式导出到标准输出文件中的示例:
exp USERID=SYSTEM/MANAGER OWNER=TGASPER
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.1 ORACLE逻辑备份
– 指定表的逻辑备份
导出一组表的处理方法与用户导出的方法一样。用
TABLES关键字列举表的名字,可以导出一个或一组表。
下面的例子把 ABC表与 XYZ表从 BGE模式中导出到缺
省输出文件中:
exp USERID=SYSTEM/MANAGER OWNER=BGE TABLES
=XYZ,ABC
注意 EXP缺乏一些主要的功能,EXP使你不能导出一
条基于 SQL WHERE子句的信息。 Oracle的导出文件实
际上是一种专有格式 。市场上有许多第三方的工具提
供了这些缺少的功能。
运行 exp HELP=Y会显示 EXP的所有关键字及其描述。
ORACLE逻辑备份工具 EXP的对应恢复工具是 IMP,其
用法可以参照 EXP。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.2 ORACLE冷物理备份
? 冷物理备份是数据库管理员用来保护数据库系
统整体上免遭各种类型数据破坏的工具。定期
的冷备份以及一组好的归档重做日志与当前重
做日志能够把数据库恢复到失败前的最后一次
提交状态。
? 在 NT桌面环境出现以前,往往借助操作系统工
具执行冷物理备份。 NT环境是图形化界面,所
以 Oracle创建了一个叫做备份管理器的图形化
产品,备份管理器使用一个标准的 NT图形用户
界面程序执行物理备份与恢复。从 Oracle 8开
始,Oracle引入了一个称为恢复管理器(简称
为 RWAN)的新的备份与恢复系统。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.2 ORACLE冷物理备份
? 无论采用什么方法,冷物理备份都应包含如下
数据库元素:控制文件、数据文件、重做日志
文件、归档日志文件。
– 命令行驱动冷物理备份
在备份过程开始以前,要确保数据库已有足够长
的时间停留在脱机状态,这样才能得到完全备份。
执行一个冷备份所需要的基本步骤如下:
1)建立一个需要备份的操作系统级文件的列表。
2)选择使用 NORMAL或 IMMEDIATE方式关闭数据库 。
注意仅在使用 IMMEDIATE或 NORMAL模式关闭数据库
后才对它进行备份。
3)执行步骤 1中文件列表的操作系统级备份。
4)正常启动数据库。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.2 ORACLE冷物理备份
– 命令行驱动冷物理备份
建立一个需要备份的操作系统级文件的列表并不
是简单的过程,下面提供一个方法。
1) init.ora文件必须备份。还要查看一下此文件
是否有一个 ifile行,假如有一个使用 ifile关键字
列出的文件名,还必须备份那个文件。
2)查看可用的 init.ora文件,生成由数据库使用
的控制文件列表。
3)使用 DBA_DATA_FILES获得所有数据库数据文件。
4)下面的语句可生成重做日志文件的清单:
SELECT MEMBER FROM V$LOGFILE;
5)归档日志可由归档进程自动写到一个目录中。
init.ora文件中的 log_archive_dest关键字被设置
为目的目录,归档日志将被写入这里。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.2 ORACLE冷物理备份
– 桌面驱动冷备份
Oracle的备份管理器作为一个工具用于 Oracle数
据库的备份。备份管理器的界面操作相当容易。执
行一个冷物理备份步骤:
1)确保 Oracle数据库运行正常。 (因为备份管理器
需要在关闭数据库以前对该数据库进行访问以便它
能建立一个需要备份的数据库文件列表。 )
2)备份管理器中选择备份方式 (offline_full database)。
3)确定备份目标,数据备份到磁盘或磁带中。
4)开始备份,备份管理器完成工作后重启数据库。
一般不把数据备份在数据库所驻留的物理设备中。
备份管理器不备份 init.ora,config.ora或归档日
志文件。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.3 ORACLE热物理备份
? 热备份要求对 Oracle和操作系统具有较高的专
业知识。由于热备份的复杂性,必须事先测试
备份策略。只有从一个测试系统中的大量失败
中恢复出来时,热备份系统才被认为是可靠的。
? Oracle提供了两种热备份方法,一种用于命令
行 UNIX环境,另一种用于桌面( Windows)环境。
– 热备份复杂性
Oracle基本存储单元是数据块。数据块中存储数
据,数据块头存储包含在块中的数据的信息。数据
库处于联机状态时,备份程序和 Oracle可能都工作
于同一个块上。假定当 Oracle写新的数据和更新数
据块头时,备份程序仅完成了对块头部分的备份,
那么完成备份之后,该块具有老的块头和新的数据。
这个数据块成为 不纯的数据块 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.3 ORACLE热物理备份
– 热备份复杂性
针对不纯的数据块,Oracle的解决方案是实现一
种称为备份模式的特别模式,该模式在各个表空间
上依次被启用或禁用。 如果当前处于备份模式,那
么 Oracle更新的数据块被完整地拷贝到重做日志中 。
这样一来,Oracle数据文件的联机备份可能仍然存
在不纯的数据块,但有效的拷贝存在于重做日志中。
对于联机备份的数据,在恢复状态时,可能存在
不纯数据块的数据文件得到恢复,并且 Oracle使用
可能存在完整数据块 (有效块 )的重做 (或归档 )日志
来, 修补, 数据文件。这样,最终的结果是一个有
效且一致的数据库。
可以理解,联机备份时,日志文件 (联机日志和归
档日志 )是不可缺少的。否则恢复过程可能得不到一
个一致的数据库。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.3 ORACLE热物理备份
– 命令行驱动热物理备份
UNIX环境下的热备份是一系列命令。热备份操作顺序:
1)建立需要备份的表空间的列表 (DBA_Tablespaces)。
2)对于该列表中的每一个表空间,a.建立一个数据文
件列表 (DBA_data_files); b.让表空间处于备份模式
下 (ALTER TABLESPACE tsname BEGIN BACKUP;); c.
把数据文件列表中的数据文件作备份; d.使该表空间
脱离备份模式 (ALTER … END BACKUP)。
3)生成一个, 可备份的, 控制文件 (ALTER DATABASE
BACKUP CONTROL FILE TO fname REUSE;)。
4)强制执行日志切换 (ALTER SYSTEM SWITCH LOGFILE;)
5)延时等待重做日志得到归档。
6)把归档日志目录备份到一个备份设备中 (文件拷贝 )。
显然应该在数据库中的活动最少时进行联机备份。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.3 ORACLE热物理备份
– 桌面驱动热物理备份
使用 Oracle的备份管理器不仅可进行脱机备份,而
且也可以进行联机备份。如下步骤执行联机备份:
1)确保 Oracle数据库运行正常,打开备份管理器。
2)选择备份方式 (Online_selected tablespace)。
3)选择希望备份的表空间。
4)确定备份目标是到磁带还是磁盘中。
5)单击 Backup按钮,完成备份。
6)选择备份方式 (Online_Control File only)。
7)确定存储控制文件备份的目录名称。
在此过程结束后,备份管理器已经完成了对数据库
的备份并且已经使所有的表空间脱离备份模式。
备份管理器不能备份 init.ora,config.ora或归档
日志文件。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
4.3.3.4 用恢复管理器进行物理备份
? 恢复管理器( RMAN)是对 Oracle 8备份、恢复和
重建进行管理的一个软件。
? RMAN的特点:备份能发生在多级上:数据库、表
空间或者数据文件级;支持增量备份;备份能够
很容易地建立时间表和控制。另外,RMAN能够与
已经建立起来的第三方厂商硬件或软件集成。
? RMAN有两个主接口:命令行解释 (CLI)接口或 OEM
图形用户接口 (GUI)。 CLI接口是一个与 SQL*Plus
相似的应用。 GUI集成在 OEM中,并提供能够与第
三方应用相链接的 API库。
? RMAN提供直接使用 BACKUP,RECOVER和 RESTORE命
令或在脚本中嵌入的能力。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
作业,
1.引起碎片的原因有哪些?如何处置?
2.管理回退段有哪些工作?
3.简述资源限制文件的作用,
4.将没有任何权限的角色授予用户会起什么
作用?
5.ORACLE数据备份的方式有哪几种?
6.简述 ORACLE联机备份的机制,