培训教材

更新时间:2023-01-04 08:26:11 阅读: 评论:0


2023年1月4日发(作者:安徒生童话故事mp3)

Oracle数据库系统培训讲义

1

目录

第一讲数据库及其C/S系统概述...........................................................................5

一.客户/服务器构架...............................................................................................5

二.访问ORACLE服务器的基本过程.....................................................................6

第二讲ORACLE系统体系结构.............................................................................7

一.数据库和实例....................................................................................................7

1.数据库(Databa)........................................................................................7

2.实例(Instance).............................................................................................8

二.数据库对象及其概念........................................................................................9

三.内部内存结构..................................................................................................15

1.系统全局区域.................................................................................................16

2.程序全局区域.................................................................................................16

四.后台进程..........................................................................................................16

1.SMON(SystemMonitor)...........................................................................17

2.PMON(ProeessMonitor)...........................................................................17

3.DBWR(DatabaWriter)...........................................................................17

4.LGWR(LogWriter)...................................................................................18

5.CKPT(CheckpointProcess).......................................................................18

6.ARCH(ArchieveProcess)..........................................................................18

7.RECO(RecovererProcess)........................................................................18

五.外部结构..........................................................................................................18

1.数据文件.........................................................................................................19

2.重做日志.........................................................................................................19

3.控制文件.........................................................................................................19

4.跟踪文件和警告文件*...................................................................................19

第三讲实例与数据库管理.....................................................................................21

一.数据库实例管理..............................................................................................21

1.创建数据库实例.............................................................................................22

2.启动和关闭数据库实例.................................................................................23

3.修改数据库实例.............................................................................................25

二.创建和删除数据库..........................................................................................25

1.创建数据库.....................................................................................................26

2.使用新数据库的准备工作.............................................................................31

3.删除数据库.....................................................................................................32

三.回滚段管理......................................................................................................32

1.回滚段的分类.................................................................................................32

2.创建回滚段.....................................................................................................33

3.激活回滚段.....................................................................................................33

4.删除回滚段.....................................................................................................34

Oracle数据库系统培训讲义

2

四.联机重做日志管理..........................................................................................34

1.规划联机重做日志.........................................................................................35

2.创建联机重做日志组和成员.........................................................................36

3.重新命名或定位联机重做日志成员.............................................................38

4.删除联机重做日志组和成员.........................................................................39

5.控制检查点和日志切换.................................................................................40

五.控制文件管理..................................................................................................41

1.创建控制文件.................................................................................................42

2.删除控制文件.................................................................................................44

六.创建数据库实例..............................................................................................44

1.创建数据库实例.............................................................................................45

2.创建数据库PXDB.........................................................................................46

3.运行SQL文件...............................................................................................46

4.在系统表空间创建回滚段.............................................................................46

5.修改监听文件.................................................................................................46

6.重新启动计算机.............................................................................................47

第四讲定制数据库实例.........................................................................................48

一.图形化方式创建数据库..................................................................................48

二.脚本方式创建数据库......................................................................................55

第五讲表空间管理.................................................................................................58

一.创建表空间......................................................................................................58

1.创建普通表空间.............................................................................................59

2.创建临时表空间.............................................................................................61

二.表空间的存储空间管理..................................................................................61

1.修改表空间的存储设置.................................................................................61

2.合并自由空间.................................................................................................62

三.改变表空间的可用性......................................................................................62

1.表空间联机.....................................................................................................62

2.表空间脱机.....................................................................................................63

四.只读表空间管理..............................................................................................64

五.删除表空间......................................................................................................65

六.查看表空间信息..............................................................................................66

第六讲数据文件管理.............................................................................................68

一.规划数据文件..................................................................................................68

二.创建数据文件..................................................................................................69

三.改变数据文件的尺寸......................................................................................70

四.改变数据文件的可用性..................................................................................71

五.重新命名数据文件..........................................................................................72

六.查看数据文件的信息......................................................................................74

第七讲数据库用户管理.........................................................................................76

一.ORACLE用户的分类........................................................................................76

Oracle数据库系统培训讲义

3

1.初始数据库用户.............................................................................................76

2.数据库用户的一般划分.................................................................................78

二.会话和用户许可..............................................................................................79

1.并发使用许可.................................................................................................79

2.命名用户许可.................................................................................................80

3.查看许可限制和当前值.................................................................................81

三.用户身份验证..................................................................................................81

1.数据库验证.....................................................................................................82

2.外部验证.........................................................................................................82

3.企业验证.........................................................................................................82

四.用户管理..........................................................................................................83

1.创建用户.........................................................................................................83

2.修改用户信息.................................................................................................85

3.删除用户.........................................................................................................86

五.使用PROFILE管理资源................................................................................86

1.创建PROFILE..............................................................................................87

2.修改PROFILE的信息..................................................................................89

3.为用户指派PROFILE...................................................................................90

4.删除PROFILE...............................................................................................90

5.允许和禁止资源限制.....................................................................................90

6.查看数据库用户和资源限制信息.................................................................91

第八讲系统权限管理.............................................................................................93

一.用户特权管理..................................................................................................93

1.系统特权.........................................................................................................93

2.对象特权.........................................................................................................98

二.角色管理..........................................................................................................99

1.预定义角色.....................................................................................................99

2.创建角色.......................................................................................................100

3.修改角色信息...............................................................................................101

4.删除角色.......................................................................................................102

三.用户特权与角色的授予和收回....................................................................102

1.系统特权和角色的授予...............................................................................102

2.系统特权和角色的收回...............................................................................103

3.对象特权的授予...........................................................................................103

4.对象特权的收回...........................................................................................104

4.查看角色和特权信息...................................................................................105

第九讲系统备份与恢复.......................................................................................107

一.备份与恢复概述............................................................................................107

1.什么是备份?...............................................................................................107

2.什么是恢复?...............................................................................................107

3.备份与恢复的关系.......................................................................................108

4.数据库备份与恢复的基本原则...................................................................108

5.恢复管理器...................................................................................................109

Oracle数据库系统培训讲义

4

二.数据库日志操作模式的管理........................................................................109

1.事务日志的概念...........................................................................................110

2.数据库日志操作模式的类型.......................................................................110

3.日志操作模式的设置...................................................................................112

4.归档模式的分类...........................................................................................113

三.制作备份的方法............................................................................................114

1.数据库备份的种类.......................................................................................114

2.物理备份.......................................................................................................115

3.逻辑备份.......................................................................................................117

4.备份方法小结...............................................................................................121

5.制定数据库备份的策略...............................................................................122

四.恢复数据库的方法........................................................................................123

1.数据库的故障种类.......................................................................................123

2.介质失败故障的恢复方法...........................................................................124

3.物理恢复.......................................................................................................124

4.逻辑恢复.......................................................................................................128

五.典型故障恢复方法........................................................................................131

1.用户表空间损坏...........................................................................................132

2.SYSTEM表空间文件损坏..........................................................................133

3.控制文件损坏...............................................................................................134

4.联机重做日志文件损坏...............................................................................135

六.备份与恢复数据库实例................................................................................136

六.备份与恢复小结............................................................................................139

第十讲ORACLE编程概要.................................................................................141

一PL/SQL的基本语法........................................................................................141

1.变量申明与赋值...........................................................................................141

2.条件语句.......................................................................................................141

3.循环语句.......................................................................................................141

二光标..................................................................................................................142

三处理异常..........................................................................................................142

四存储过程与存储函数......................................................................................143

附录:数据库设计基础...........................................................错误!未定义书签。

一.数据库设计的基本概念....................................................错误!未定义书签。

1.库表的规范化...................................................................错误!未定义书签。

2.数据的完整性约束...........................................................错误!未定义书签。

二.数据库建模技术................................................................错误!未定义书签。

1.数据库建模的一般过程...................................................错误!未定义书签。

2.数据库建模的几个重要概念...........................................错误!未定义书签。

3.PowerDesigner简介.........................................................错误!未定义书签。

Oracle数据库系统培训讲义

5

第一讲数据库及其C/S系统概述

一.客户/服务器构架

Oracle是一种建立在客户/服务器体系结构上的对象关系数据库管理系统。

需要指出的是数据库应用的多层体系结构(n_tier)仍然是以两层的C/S结构

为基础的。因此我认为C/S结构永远不会过时。

什么是客户/服务器体系结构?

从硬件角度看,客户/服务器体系结构是指将某项任务在两台或多台机器之间

进行分配。从功能上看,客户机(Client)用来运行提供用户接口和前端处理的

应用程序,服务器机(Server)提供客户机使用的各种资源和服务。

从软件角度看,客户/服务器体系结构是把某项应用或软件系统按逻辑功能划

分为客户软件部分和服务器软件部分。客户软件部分一般负责数据的表示和应

用,处理用户界面,用以接收用户的数据处理请求并将之转换为对服务器的请求,

要求服务器为其提供数据的存储和检索服务;服务器端软件负责接收客户端软件

发来的请求并提供相应服务。

客户/服务器融合了大型机的强大功能和中央控制以及PC机的低成本和较好

的处理平衡。客户/服务器为任务的集中/局部分布提供了一种新的方法,这种体

系能够使用户对数据完整性、管理和安全性进行集中控制。在缓解网络交通和主

机负荷以及满足用户需要方面,客户/服务器体系提供了良好的解决方案。

总之,客户/服务器的工作模式是:客户与服务器之间采用网络协议(如

TCP/IP、IPX/SPX)进行连接和通讯,由客户端向服务器端发出请求,服务器端

响应请求,并进行相应服务。

数据库应用的客户/服务器模式如下图所示:

DBMS

请求

响应

Oracle数据库系统培训讲义

6

二.访问Oracle服务器的基本过程

1.建立客户与服务器之间的连接,包括网络连接、客户进程与服务器进程之间

的连接;

2.客户端通过网络发送SQL语句给服务器,用来查询或操作服务器中的数据

或数据库对象;

3.服务器接收到SQL语句后,对其进行语法分析、优化和编译后执行;

4.如果执行的语句产生一个结果集,服务器通过网络把结果集返回给客户;

5.客户端对收到的结果作相应的处理。

在客户/服务器体系,有两种数据库引擎结构,即多进程数据库引擎和单进程、

多线程引擎结构。

多进程结构即多个可执行程序同时运行。每当用户登录到数据库系统时实际

上都启动了数据库引擎的一个独立实例。存在起协调作用的进程协调进程之间的

通讯以保证当多用户访问相同数据时数据的完整性。多进程数据库引擎一般用在

大型机数据库上。

单进程多线程数据库引擎在原理上和多进程数据库引擎类似,不同的是多线

程数据库引擎自己负责调度各应用程序占用CPU的时间,而不依赖于操作系统。

这样,多线程数据库引擎自我保护的能力更强。

OracleServer是一个真正的多进程数据库引擎,Syba数据库管理系统采用

的是单进程多线程的引擎结构。

Oracle数据库系统培训讲义

7

第二讲Oracle系统体系结构

我们知道,Oracle是一家著名的软件公司,也是世界上最大的关系数据库和

信息管理软件供应商。Oracle的核心产品——Oracle数据库占有全球数据库市

场50%以上的市场份额,是目前最优秀的数据库管理系统之一。Oracle历时多年

开发出的划时代的新产品——Oracle8/8i——更是将我们带入一个崭新的数据

库领域。

和其它数据库系统相比,Oracle是一个庞大而复杂的系统,掌握这样一个复

杂的系统需要阅读大量的文献并进行大量的研究工作。我个人认为,在学习

Oracle这样一个复杂的系统时,重要的是要分清主次、抓住重点,首先对该系

统的主要组成部分、各部分之间的关系以及系统的运行方式有一个总体的了解,

然后再分别对每一部分进行深入的学习和研究的话,通常可以收到事半功倍的效

果。本讲义正是这样安排和编写的。

在这一讲中,我们将对Oracle数据库系统的体系结构、系统组成以及各成

分之间的关系做一个简要的介绍,以让学员们对Oracle这个大型关系数据库的

全貌有一个粗略的了解,从而为以后各讲的学习打下一个良好的基础。

一.数据库和实例

在Oracle数据库管理系统中,最重要的两个概念就是数据库(Databa)

和实例(Instance)。下面我们分别介绍这两个概念。

1.数据库

数据库实质上就是一个数据的集合,它为用户提供了一种并发访问数据的途

径。对于Oracle数据库,从逻辑上看,它是由表空间(Tablesapce)构成的,

数据库和表空间之间是一对多的关系。也就是说,一个数据库可以包含一个或多

个表空间。而且,每个Oracle数据库至少得包含一个叫做SYSTEM的表空间。从

物理上看,Oracle数据库是由数据文件(Datafile)构成的。数据文件直接对

应磁盘文件,它物理地存储着数据库中的信息(系统数据和用户数据)。有关表

空间和数据文件的概念将在下一节讲述。在Oracle数据库系统中,数据库、表

空间和数据文件三者之间的关系如下图所示:

Oracle数据库系统培训讲义

8

2.实例

一个数据库实例(Instance)就是一套Oracle后台进程和内部内存结构的集

合,这些进程和内存结构被所有的用户所共享,Oracle用它们来访问数据库中的

数据。

后台进程分为两类。一类是用户进程,用于运行应用程序(例如,Oracle

Forms应用)和Oracle工具(例如,OracleEnterpriManager);另一类是

Oracle进程,用于实现数据库服务。

内部内存结构分为两部分:系统全局区域(SGA)和程序全局区域(PGA),

这些内存结构主要用于在数据库用户之间传递信息、保存共享数据等目的。关于

后台进程和部内存结构的详细内容,我们将在以后的讲义中讨论。

实例和数据库之间的对应关系有两种:

一对一关系

通常,实例和数据库之间是一对一关系。也就是说,一个实例只能访问一个

数据库中的数据。

多对一关系

在有些情况下,多个实例可以同时访问一个数据库(Oracle并行服务器选

项),即实例和数据库之间是多对一关系,如下图所示:

数据库表空间数据文件

实例1实例2

数据库

Oracle数据库系统培训讲义

9

二.数据库对象及其概念

在这一节中,我们将简单地讲解一下Oracle数据库中包含的内部数据结构

(数据库对象类型)以使学员对它们有一个大体的了解。如果你想详细地了解某

一类对象(例如表)的使用方法,可以查阅相关的资料。

1.表、列和数据类型

在Oracle数据库中,存储数据的机制是表。表由一至多列构成,每一列由

列名、数据类型和长度等决定。在Oracle中,可用的数据类型如下表所示:

数据类型描述

CHAR一种固定长度的数据类型,最多可以存储2000个字符

VARCHAR2一种可变长度的数据类型,最多可以存储4000个字符

VARCHAR

目前和VARCHAR2类型的含义相同,但是在将来的版

本中有可能改变。因此,最好保用VARCHAR2类型的

列存储可变长度的字符串

DATE

一种列定长度的7字节数据类型,用于存储日期和时

间类型的数据

NUMBER

一种可变长度的数字数据类型,可以存储正数、负数

和零

LONG一种可变长度的字符数据类型,最大容量可达2GB

RAW

一种用于二进制数据的、可变长度的数据类型,最大

长度为4000个字符

LONGRAW

一种用于二进制数据的、可变长度的数据类型,最大

长度为2GB

MLSLABEL

这种数据类型的列每行在2到5个字节之间,开且仅

用于TrustedOracle

BLOB二进制大对象数据关型,最大长度为4GB

CLOB字符型大对象数据类型,最大长度为4GB

NCLOB用于多字节字符集的CLOB数据类型,最大长度为4GB

BFILE外部二进制文件数据类型,大小由操作系统决定

Oracle数据库系统培训讲义

10

2.约束

在Oracle数据库中,可以为表设置约束(Constraint)。当为某个表定义了

约束后,对该表做的所有操作都必须满足约束的要求,否则操作将失败。

例如,下面的语句在创建auths表时为其定义了主键约束PK_AUTHS:

CREATETABLEAUTHS

SEQNONUMBER(10)NOTNULL,

AUTHOR_CODECHAR(10)NOTNULL

NAMEVARCHAR2(10)NOTNULL,

SEXNUMBER(1)NULL

BIRTHDATEDATENOTNULL,

ADDRESSVARCHAR2(30)NULL

POSTCODECHAR(6)NULL,

SALARYNUMBER(8,2)NULL,

ENTRY_DATE_WIMEDATENOTNULL,

REMARKVARCHAR2(255)NULL,

PICTURELONGRAWNULL,

CONSTRAINTPK_AUTHSPRIMARYKEY(AUTHOR_CODE));

因此,在向anths表中录入数据时必须满足主键约束,即author_code列的

值必须是唯一的,否则系统将拒绝接受该数据。

3.抽象数据类型*

在Oracle8/8i企业版中,你可以定义自己的数据类型(也称抽象数据类型

或自定义数据类型)。例如,定义一个学生数据类型STUD_TY,它包括学号、姓

名、性别、出身日期和系别五部分。创建这个数据类型的命令如下:

CREATETYPESTUDTYASOBJECT

STUDNOCHAR(10)

NAMEVARCHAR2(12)

SEXNUMBER(l),

BIRTHDAYDATE,

DEP_IDCHAR(5)

);

用户自定义的数据类型和其它的系统数据类型在使用上是相同的,你可以在

Oracle数据库系统培训讲义

11

任何可以使用系统数据类型的地方使用自定义数据类型。例如,我们可以在创建

表auths时使用上面创建的自定义数据类型STUDTY。

CREATETABLEAUTHS

SEQNONUMBER(10)NOTNULL,

AUTHOHCODECHAR(10)NOTNULL,

NAMESTUDHY,

SEXNUMBER(1)NULL,

BIRTHDATEDATENOTNULL,

);

4.分区*

对于Oracle8/8i,在创建表时可以为表指定可用的数据库区域。换句话说,

就是可以把一个大表分为几个小表,这些小表就叫做分区(Partition)。

对大表分区有以下优点:

1)简化对大表的管理

例如,可以使用TRUNCATE命令删除某一个分区中的数据,但不影响其它

分区中的数据。

2)对提高应用性能

因为在查询时,优化器可以直接在某一个分区中查找数据,这就比在整

个大表中搜索数据的工作量要少的多,因此查询的效率也就更高。

与表类似,索引也可以被分区。

5.用户

用户(Ur)是Oracle数据库的访问控制机制,任何一个应用如果要访问

数据库,它必须给出一个合法的数据库用户名和口令,否则访问将被拒绝。

另外,在Oracle中对象是按用户来组织的,也就是说,用户拥有数据库对

象。例如,SYS用户拥有所有的数据字典表,在这些表中存储着有关数据库结构

的信息。

6.模式(Schema)

模式(Schema)是数据库用户拥有的对象的集合。每个模式对应一个用户,

在模式中包含了该用户的所有对象,例如表、视图、索引等。

Oracle数据库系统培训讲义

12

7.索引

索引(Index)是一种用于加快数据查找的数据库对象。在Oracle中,索引

分为三类:聚族索引(clusterindex)、表索引和位图索引(bitmapindex)。

索引由入口列表构成,其中每一个入口项包含一个键值和一个RowID(标识

某一行的物理位置)。健值是数据行在索引列(一列或多列)上的值。当查询数

据时,首先根据键值在索引中找到一个入口项,然后就可以由RowID直接访问数

据行了。

8.簇和哈希簇*

簇(Cluster),有些书上也称为集群,它由一组共享相同数据块的表构成。

这些表共享公共的列,并且经常被一起使用。簇表中的共享列称为簇键,簇健用

一个聚簇索引来索引。如果几个表组成了一个簇,Oracle会把这些表的公共列

(簇键)的数据物理地存储在相同的数据块中,并且只存储一次。因此,使用簇

会带来以下优点:

减少磁盘I/O;

减少连接查询时连接簇表的时间;

减少磁盘容量的需求;

另外,在使用簇时既要仔细考虑是否必要,又要考虑簇列定义的是否合适,

否则会带来负面的影响。

在Oracle中还存在另一种类型的簇——哈希簇(HashCluster)。这种簇与

普通簇的区别是在确定数据行的物理存储位置时,需在簇列上使用哈希函数。这

种簇的特点是在进行等值查询时速度最快。

9.视图

视图(VIEW)是从一个或几个基本表(或视图)导出的表。但视图和基本表

不同,视图是一个虚表,即视图所对应的数据不实际存储在数据库中,数据库中

只存储视图的定义(存在数据字典中)。使用视图可以简化应用程序的复杂度并

增强数据的安全性。

10.序号生成器

序号生成器(Sequence)是Oracle中的一种特殊对象,它可以给应用程序

提供基本连续并唯一的号码。这类号码经常用于类似需要流水号的应用程序中。

Oracle数据库系统培训讲义

13

11.存储过程

存储过程(Procedure)是一组被存放在数据字典中的PL/SQL语句,它被所

有授权的用户所共享。通过存储过程,我们可以把经常使用的应用逻辑存放到数

据库中。当运行存储过程时,它包含的所有PL/SQL语句将被作为一个整体执行。

但是,存储过程没有返回值。

另外,存储过程还有助于提高数据的安全性。实现方法是:首先编写一个存

储过程完成对表中数据的操作,然后只授予用户执行存储过程的权限,而不授予

他直接访问表的权限。这样,用户就只能完成存储过程允许的数据操作了。

12.函数

函数(Function)和存储过程类似,也是由一组PL/SQL语句构成。但与存

储过程不同的是,函数可以给调用者返回值。

例如,我们可以编写一个函数MY_TOTAL,完成对所有工资低于1000元的作

者的统计。

13.包

包(Package)是存储过程和函数的封装,即一个包中可以包含多个存储过

程和函数。在包中,元素(存储过程和函数)分为两类:公共(Public)和私有

(Private)。公共元素可以被包的用户访问,而私有元素只能被包中的元素调用。

包中的存储过程和函数的原代码存储在数据库的数据字典中。因此,如果你

的应用程序需要大量使用包的话,那么你可能需要考虑扩大SYSTEM表空间的尺

寸,因为数据字典表存放在SYSTEM表空间中。

14.触发器

触发器(Trigger)是一种特殊的存储过程,它不是由用户调用,而是由特

定的数据库事件触发(调用)的。例如,插入、修改和删除操作。触发器接触发

时机可以分为前触发(BEFORE)和后触发(AFTER)。前触发器是在触发事件发生

前执行,而后触发器恰好相反。触发器主要用来辅助完成一些完整性约束。

15.同义词

同义词(Synonym)即数据库对象的别名。在分布式Oracle数据库中,标识

一个对象需要四部分:主机名、实例名、模式名、对象名。例如

SYSTEM.auths@PX.orcl,其中模式名是SYSTEM,对象名是auths,PX.orcl

是一个数据库链,它指向服务器PX上的实例ORCL。但是,根据用户和所处位置

Oracle数据库系统培训讲义

14

的不同,某些部分有时可以省略。例如,访问当前数据库时不需要数据库链。为

了向用户屏蔽这些区别,我们可以为数据库对象定义同义词。例如,通过以下命

令为auths表定义一个公共(Public)同义词AUTHS:

CREATEPUBLICSYNONYMAUTHSFORSYSTEM.auths@PX.orcl;

这样,所有的用户就耶可以通过AUTHS这个名称来访问表SYSTEM.auths@

PX.orcl了。

16.特权和角色

在Oracle数据库中,一个用户如果要访问另一个用户的对象,那么他必须

首先被授予访问该对象的特权。例如,如果SCOTT想查询SYSTEM的表auths中

的数据,他就必须具有auths表的lect特权。访问表或视图的特权有:inrt

(插入)、lect(查询)、update(修改)和delete(删除)四种。访问存

储过程的特权是execute(执行)。

角色(Role)是一组定义好的特权。使用角色可以简化权限管理,例如,可

以定义一个“录入员”角色Record_Role,它对若干个表有录入权限。当有一个

新录人员加入时,就可以直接把这个角色授予该用户,而不必依次为此用户授予

访问每个表的权限。

17.数据库链

数据库链(DatabaLink)是Oracle数据库访问远程数据库对象的途径。

在创建数据库链时,需要指定用于连接远程数据库的用户名、口令和与远程数据

库关联的服务名。服务名(ServiceName)是一个标识符,它代表指向一个特定

ORACLE数据库的一组参数,应用程序用它可以连接到该数据库。

例如,下面的语句创建了一个到由服务名ORCL指定的远程数据库的链

MY_LINK:

CREATEPUBLICDATABASELINKmylinkCONNECTTOsystem

IDENTIFIEDBYmanagerUSING‘ORCL';

在这个例子中,连接远程数据库的用户是system,口令是manager。链创建

成功后,即可用以下语句访问远程数据库中的auths表了。

lect*fromauths@my_link;

18.段、范围和块

段(Segment)是逻辑数据库对象的物理副本。也就是说,数据库对象只是

一个逻辑定义,而段存储着它们的数据。例如,在索引段中存储着与索引相关的

数据。有效的管理段需要DBA(数据库管理员)清楚应用将要使用的对象、数据

Oracle数据库系统培训讲义

15

如何进入这些对象,以及数据查询的方式。

段由范围(Extent)构成。范围是数据库存储空间分配的逻辑单位,它由一

组连续的Oracle块构成。当一个段中的所有空间都用完时,Oracle就给它分配

一个新的范围。

块(Block)是ORACLE数据库进行I/O的最小单位,它的大小是在创建数

据库时,由参数DB_BLOCK_SIZE决定的。

19.回滚段

为了维护数据库中多个用户的读一致性和回退数据库事务,Oracle提供了

一种给未提交的事务建立前镜像的机制——回滚段(RollbackSegment)。回滚

段的大小由事务的大小决定。

以上十九项列出了Oracle数据库中绝大多数的组成元素,其中主要元素之

间的对应关系如下图所示:

三.内部内存结构

在Oracle中,系统使用的内部内存结构由三部分构成:系统全局区域(SGA)、

程序全局区域(PGA)和上下文区域。其中,主要是SGA和PGA。在下面的两小

节中将分别对这两类内存结构进行讲解。

数据库

Databa

表空间

Tablespace

数据文件

DataFiles

用户

Urs

模式

Schema

范围

Extent

Segment

数据块

DataBlock

Oracle数据库系统培训讲义

16

1.系统全局区域

在Oracle数据库中,系统全局区域(SGA)用于在用户之间传递信息和保存

数据库的通用结构信息。SGA由以下几部分构成:

数据块缓冲区高速缓存(DataBlockBuffersCache):它是SGA中的

一个高速缓存,用于保存从数据段中读出的数据块。如果用户查询的数

据可以在缓冲区中找到,那么Oracle就不需要再读硬盘了。因此,恰当

的缓冲区尺寸可以提高系统的性能,缓冲区的大小由参数

DB_BLOCK_BUFFERS决定。

数据字典高速缓存(DictionaryCache):数据字典是指存放有关数据库

对象信息的系统表,例如用户信息、数据文件名、段、特权等等。当数

据库需要这些信息时(例如,验证一个用户对auths表的权限),数据字

典中的数据就被读到了数据字典高速缓存中,当下次再需要这些信息时,

就可以直接从数据字典高速缓存中读取到,从而可以提高系统的性能。

重做日志缓冲区(RedoLogBuffers):为了在数据库恢复过程中实现向

前滚动操作,Oracle把数据库的所有改变都记录到了联机重做日志文件

中。但是出于对性能的考虑,事务在被写到日志文件中之前先被记录在

重做日志缓冲区中,然后再成批地写入文件中。

共享SQL池(SharedSQLPool):共享SQL池中包含着SQL语句的执行

计划和分析树。当同样的SQL语句再次执行时,就可以利用共享SQL池

中的分析信息加快SQL语句的执行。

2.程序全局区域

程序全尽区域(PGA)是Oracle用户进程使用的一个内存区域。每个用户进

程对应一个PGA,并且不能共享。

如果你使用的是多线程服务器,那么PGA的一部分(用户会话信息)可能被

存储在SGA中。多线程服务器结构允许多个用户进程使用同一个服务器进程,因

此可以减少数据库对内存的需求。

五.后台进程

后台进程是指运行在服务器上的Oracle服务进程,这些进程相互配合共同

完成数据库服务器的功能。在Oracle数据库中,各后台进程之间、以及后台进

程和系统全局区域SGA之间的关系如下图所示:

Oracle数据库系统培训讲义

17

下面分别对这些进程及其功能作一简单的介绍。

1.SMON(SystemMonitor)

当数据库启动时,系统监视器进程SMON利用联机重做日志文件执行实例恢

复,并且清理数据库,清除系统不再需要的事务对象。另外,SMON还执行一些

范围(Extent)碎片的合并工作。

2.PMON(ProeessMonitor)

当一个用户进程失败时,过程监视器进程PMON负责执行清理工作。例如,

释放用户进程占用的资源。

3.DBWR(DatabaWriter)

数据库写盘器进程DBWR的作用是把缓冲区中的内容写到数据文件中。通常

一个系统有一个DBWR进程就够了,但是如果你的系统有多个处理器,那么也可

以考虑配置多个DBWR进程,以提高写盘性能。DBWR的个数由参数

DBWR_IO_SLAVES决定。

Oracle数据库系统培训讲义

18

4.LGWR(LogWriter)

日志写盘器进程LGWR负责把日志缓冲区中的内容写到日志文件中。一个系

统中一般只有一个LGWR,它负责把所有的事务日志写到日志文件中。在

Oracle8/8i中,通过设备参数LGWR_IO_SLAVES也可以配置多个LGWR进程。

5.CKPT(CheckpointProcess)

检查点进程CKPT负责向数据库发出检查点。当一个检查点发生时,Oracle

必须更新所有数据文件的文件头,以记录检查点的详细信息。检查点有助于减少

实例恢复的时间。因为检查点可以引起DBWR进程把自上一个检查点以来,所有

被修改过的数据块写到数据文件中。

6.ARCH(ArchieveProcess)

进程LGWR在写日志文件时采用的是循环方式,即第一个日志文件写满后写

第二个,第二个写满后写第三个,依此类推。在最后一个文件写满后又重新从第

一个文件分始写。当Oracle工作在ARCHIVELOG(归档日志)模式时,日志文件

在被覆盖之前,数据库会将其备份。归档进程ARCH就是完成这一功能的。

7.RECO(RecovererProcess)

恢复进程RECO用于分布式数据库下的错误处理。当分布式事务发生错误时,

RECO会向前连接到另外一个和分布事务相关的服务器,然后进行恢复工作。

五.外部结构

在这里,外部结构指的是Oracle系统运行所需的外部操作系统文件,包括

以下三类:

数据文件(DataFile)

重做日志文件(RedoLogFile)

控制文件(ControlFile)

跟踪文件和警告文件

在下面的小节中,我们将简要介绍每类文件的作用

Oracle数据库系统培训讲义

19

1.数据文件

一个数据文件实质上就是一个物理的磁盘文件(或称为操作系统文件),它

是表空间的物理组成元素。每个数据文件只能属于一个表空间,并且数据文件一

旦加入到某个表空间后就不能再从这个表空间中删除,也不能再和其它表空间关

联。数据库中的所有对象和数据,例如表和表中的数据,最终都物理地存放到了

数据文件中。

2.重做日志

在Oracle系统中,数据库所发生的所有事务都被记录到了日志文件中。当

数据库失败后,可以利用日志文件恢复丢失的数据。每个Oracle数据库可以拥

有两个或多个日志文件。

3.控制文件

一个数据库整体的物理结构是由它的控制文件来维护的。在控制文件中记录

着和数据库相关的如下信息:

数据库名称

表空间信息

所有数据文件的名字和位置

所有redo日志文件的名字和位置

当前的日志序列号

检查点信息

归档日志的状态信息

4.跟踪文件和警告文件*

在Oracle系统中,每个后台进程都有一个与之相关的跟踪文件。每当进程

检测到一个内部错误,它就会把错误信息写到自己的跟踪文件中。这些信息将有

助于DBA分析和排除错误。所有的跟踪文件的文件名都包含产生它的后台进程的

名称和进程所在的实例名。例如,和进程LGWR相关的跟踪文件的名称是

ORCLLGWR。其中,ORCL是实例名,LGWR是进程名。

除了跟踪文件外,Oracle中还有一类文件叫警告文件。警告文件用于记录数

据库中执行的重要命令和命令执行的结果。例如,创建表空间、日志模式切换、

恢复操作等。

对Oracle数据库系统的组成,我们就介绍到这里。下面解释本讲义是如何

Oracle数据库系统培训讲义

20

划分和讲解Oracle数据库系统的。首先,给出Oracle数据库系统的示意图:

本讲义的目的是通过对Oracle数据库系统主要组成元素的讲解,使学员能

够快速地掌握Oracle的系统管理。因此,在上图中没有包含跟踪文件和警告文

件,因为这些内容对于一般的使用人员来说并不重要。

为了便于学习和理解,在后面的讲解中,我们把上图的内容分为以下三部分

进行讲解:

数据库管理:包括实例的创建和删除、数据库的创建和删除、联机重做

日志管理以及控制文件管理。

表空间管理:包括表空间的创建、修改和删除等内容。

数据文件管理:包括数据文件的创建、修改和删除等内容。

另外,在本讲义主要内容的后面都配有相应的练习。通过这些练习,大家可

以巩固和加深对所学内容的理解。

最后,我们相信并希望通过学习本讲义,大家可以快速地成为一名Oracle

数据库系统的管理员。

实例

数据库

表空间

数据文件

控制文件联机日志

Oracle数据库系统培训讲义

21

第三讲实例与数据库管理

Oracle数据库管理系统主要由两部分组成:数据库实例(简称实例)和数据

库文件。数据库文件主要包括控制文件、联机重做日志文件和数据文件,它们共

同构成了物理的数据库。

本讲的重点是实例和数据库的创建,这也是整个数据库系统管理的重点和难

点。围绕这个重点,本讲还将讲述日志文件和控制文件的管理,表空间和数据文

件的管理留在以后各讲中介绍。本讲主要包括以下内容:

数据库实例管理

创建和删除数据库

数据库联机重做日志管理

数据库控制文件管理

一.数据库实例管理

前面我们已经讲过,数据库实例是一组Oracle后台进程和内部内存结构的

集合。在WindowsNT上,这组后台进程和内存结构是通过一个NT服务实现的。

也就是说,数据库实例实际上就是一个NT服务。它与其它NT服务一样,也是

安装在NT的注册信息数据库中并由NT管理。WindowsNT版的Oracle在缺省

方式安装时自动创建一个数据库,此数据库的实例为ORCL,它对应的NT服务

是OracleServiceORCL。数据库实例ORCL的结构如下图所示:

内存结构

后台进程

系统全局区SGA

RECOPMONSMONDBWRLGWRARCH

Oracle数据库系统培训讲义

22

1.创建数据库实例

通常在安装Oracle数据库服务器时,安装程序会自动产生一个实例ORCL。

我们也可以创建自己的实例,即在一台机器上可以同时存在多个实例,它们可以

各自独立地运行,互不影响。

Oracle8用于管理数据库实例的应用程序是ORADIM80.EXE。在Oracle安

装后,该程序驻留在ORACLE_HOMEBIN(ORACLE_HOME表示Oracle的安

装路径)目录下。使用该程序可以创建、修改和删除数据库实例。

下表列出了ORADIM80各命令行参数及其含义。

参数含义

-NEW:

创建实例

-SID

指定要创建的数据库实例的名称为

sid,此参数不可省略

-SRVC

指定要创建的服务名称。此参数可选。

如果省略,当STARTMODE为auto时,

系统自动创建两个服务:

OracleService

OracleStart;当STARTMODE为

manual时,只创建服务

OracleService

-INTPWD

为新创建的实例指定INTERNAL帐户

的口令

-MAXUSER口令文件中最大的用户数,缺省值是5

-STARTMODE

指定在系统重新引导时是否启动数据

库。auto表示启动,manual表示不启

-PFILE

当实例的启动模式为auto时,指出用

于启动数据库的初始化参数文件

-EDIT:

修改实例

-SID指出要修改的实例的名

-INTPWD

为新创建的实例指定INTERNAL帐户

的口令

-STARTMODE

指定在系统重新引导时是否自动启动

实例。auto表示启动,manual表示不

启动

-PFILE

当实例的启动模式为auto时,指出用

于启动数据库的初始化参数文件

-DELETE:

删除实例

-SID指定要删除的实例名

-SRVC指定要删除的服务名

下面举例说明如何使用ORADIM80创建数据库实例。

Oracle数据库系统培训讲义

23

例一:

创建一个实例PX1,此实例在系统重新引导时不自动启动。实例的

INTERNAL帐户的口令为PX1PWD。具体命令如下:

ORADIM80-NEW-SIDPX1-INTPWDPX1PWD-STARTMODEmanual

上述命令在WindowsNT的注册信息数据库中创建一个名为

OracleServicePX1的服务,此服务为手工启动。

例二:

创建一个实例PX2,此实例在系统重新引导时自动启动。实例的INTERNAL

帐户口令为PXGROUP,初始化参数文件为C:OrantdatabainitPX2.ora。具

体命令如下:

ORADIM80–NEW-SIDPX2-INTPWDPXGROUP-STARTMODEauto

-PFILEC:OrantdatabainitPX2.ora

上述命令在WindowsNT的注册信息数据库中创建了两个服务:

OracleServicePX2和OraclecStartPX2,这两个服务的启动模式均为自动。其中,

服务OracleStartPX2用于启动数据库实例并打开数据库。

2.启动和关闭数据库实例

一个数据库实例就是一个数据库服务器,它需要启动起来才能够被用户使

用。前面我们曾讲过,创建数据库实例实质上是创建了一个NT服务。那么,是

否启动这个NT服务就是启动了数据度实例呢?其实不一定,启动数据库实例需

要两步:首先必须启动特定实例(服务),然后再启动数据库。

下面分别讲解在WindowsNT中,如何启动服务和实例,以及关闭实例。

启动Oracle服务

在NT中,有两种方式可以启动服务:一种是使用图形化的服务管理器,另

一种是在命令行模式下使用NETSTART命令启动。

NETSTART命令的语法如下:

NETSTARTscrvicename

其中,rvicename是要启动的服务的名称。

例如,在命令行模式下启动实例PXDB对应的服务的命令如下:

NETSTARTOracleServicePXDB

启动数据库

启动数据库实例可以使用图形化的Oracle工具InstsnceManager,也可以使

用命令行模式的服务器管理程序SVRMGR30.EXE(Oracle8版)。在Oracle安

装后,该程序驻留在ORACLE_HOMEBIN(ORACLE_HOME表示Oracle

的安装路径)目录下。

Oracle数据库系统培训讲义

24

使用SVRMGR30启动实例的步骤如下:

l)设置环境变量

如果在你的机器上存在多个实例,并且要启动的实例不是缺省实例时,

需要设置环境变量,以使SVRMGR30能够启动正确的实例。这个环境变量是

ORACLE_SID,它的设

置方式如下:

SETORACLE_SID=

其中,Sid为要启动的实例名。

例如,要启动实例PXDB,上述变量应设为:

SETORACLE_SID=PXDB

2)在命令行模式下运行程序SVRMGR30.EXE,并以数据库管理员身份连接到

指定的实例。

程序SVRMGR30启动后,提示符变为“SVRMGR>”。在此状态下输入以下

命令连接到指定实例:

CONNECTINTERNAL/password@

其中,password是在创建实例时指定的INTERNAL帐户的口令。

3)输入STARTUP命令,启动数据库实例

STARTUP命令的语法如下:

STARTUP[PFILE=filename][NOMOUNT|MOUNT[databa]

|OPEN[databa]

PFILE=filename:使用指定的参数文件启动实例,filename是文件名。

NOMOUNT:启动实例但不安装数据库。

MOUNT[databa]:启动实例并且安装数据库,但不打开。Databa是

数据库名,如果省略则安装缺省数据库。

OPEN[databa]:启动实例并且安装、打开数据库。Databa是数据库

名,如果省略则打开缺省数据库。

例如,启动缺省数据库实例ORCL的STARTUP命令如下:

STARTUPPFILE=C:OrantdatabainitPX2.oraOPEN

关闭数据库实例

关闭数据库实例比较简单,只需在“SVRMGR>”提示符下执行

SHUTDOWN命令即可。SHUTDOWN命令的语法如下:

SHUTDOWN[NORMAL|IMMEDIATE|ABORT]

NORMAL:阻止新的连接,并等待当前连接的用户断开与数据库的连接。

Oracle数据库系统培训讲义

25

然后关闭并卸载数据库,最后关闭实例。此选项是默认选项。

IMMEDIATE:不等待当前调用结束,立即关闭和卸载数据库,最后关

闭实例。

ABORT:尽可能快地关闭实例,这种情况下不关闭和卸载数据库。此选

项仅在发生异常情况时才使用。

例如,以正常方式关闭实例ORCL的命令是:

SHUTDOWN,或者SHUTDOWNNORMAL

3.修改数据库实例

数据库实例在创建后,有时可能需要进行一些修改。例如,改变启动模式等。

利用实用工具ORADIM80的—EDIT参数可以修改数据库实例,有关它的详细用

法请参阅“创建数据库实例”一节。

下面举例说明如何修改实例的内容。

例一:

将数据库实例PX1的启动模式改为自动(auto),并为其指定初始化参数文

件“c:orantdatabaInitPX1.ora”。

ORADIM80–EDIT-SIDPX1-STARTMODEauto

–PFILEC:orantdatabaInitPX1.ora”

二.创建和删除数据库

在物理上,Oracle数据库是一组协同工作的文件。主要包括数据文件、日志

文件和控制文件等。因此,创建数据库实际上就是按指定的要求创建这些数据库

文件。

在创建数据库前,需要做以下的准备工作:

根据将来要存放的表和索引数量以及数据量的大小,估计数据库的容量。

决定如何保护您的新数据库,包括日志文件的数量、大小,备份策略等。

选择数据库字符集。在创建数据库时必须选择正确的字符集,因为在数

据库创建后,不能再改变字符集,除非重建数据库。

在创建数据库的过程中,系统主要完成以下工作:

创建新的数据文件。

创建数据字典。

创建和初始化控制文件、日志文件。

Oracle数据库系统培训讲义

26

1.创建数据库

在一些平台上,例如NT,Oracle安装后自动创建一个数据库。你可以利

用这个数据库构造你的应用,也可以放弃这个初始数据库,创建自己的数据库。

创建一个新的数据库必须具备以下条件:

必须有足够的操作系统特权,如WindowsNT系统管理员Administrator

特权。

必须有足够的内存以启动一个新的Oracle实例。

必须有足够的磁盘空间存放新建的数据库文件。

创建数据库的步骤如下:

1.备份已有的数据库。

2.创建参数文件。

3.修改参数文件。

4.启动一个实例。

5.创建新数据库。

6.备份新数据库。

下面详细讲解如何完成上述的每一步工作。

1.备份己有数据库

我们建议大家在创建新数据库前对所有的数据库做一个完全各份,因为创建

数据库的操作可能会意外地影响某些已存在的文件。备份应包括参数文件、数据

文件、日志文件和控制文件。

2.创建参数文件

每一个Oracle数据库都必须有一个参数文件与之对应,并且几个数据库不能

共用一个参数文件。因为我们在前面已经讲过,每个数据库实例在启动时都需要

一个参数文件。

创建参数文件的方法是把Oracle提供的模板文件复制一份,然后改成你需要

的文件名。模板文件的名称是INITSEED.Oracle。如果你安装了Oracle,这个

文件驻留在ORACLE_HOMEDATABASE目录下(ORACLE_HOME表示Oracle

的安装路径)。另外,在Oracle的安装盘上也可以找到该文件。

3.修改参数文件

参数文件中的参数要根据不同的需要设置为不同的值,而Oracle提供的模板

文件中对这些参数做了一个比较通用的设置,不一定符合你的要求。因此,我们

需要根据自己的情况修改参数文件。

下而我们对一些主要的参数进行讲解。

Oracle数据库系统培训讲义

27

DB_NAME和DB_DOMAIN

在网络环境中,一个Oracle数据库的全局数据库名称由两部分构成:本地名

和域名。参数DB_NAME指出了数据库的本地名称,DB_DOMAIN指出了域名。

这两部分合到一起就可以构成网络中的一个唯一的数据库名。例如,要创建一个

全局名为MYDB.ORACLE8.DOMAIN的数据库,则需要把参数DB_NAME

设为MYDB,DB_DOMAIN设为ORACLE8.DOMAIN。

DB_NAME是一个最长为8个字符的字符串。在数据库创建期间,这个名字

被记录到了数据库的数据文件、日志文件和控制文件中。在数据库实例启动时,

如果参数DB_NAME的值与控制文件中的数据库名不同,则数据库不能启动。

CONTROLFILES

参数CONTROLFILES指出用于新数据库的控制文件名称。注意,如果要创

建新的控制文件,参数CONTROLFILES指出的文件名必须不存在;如果要重用

或覆盖己有的控制文件,参数CONTROLFILES指出的文件名必须和已存在的控

制文件名相匹配。

由于控制文件非常重要,所以建议在参数CONTROLFILES中至少列出两个

控制文件,并且最好这两个文件位于不同的磁盘上。

DB_BLOCK_SIZE

对于每个Oracle服务器,缺省的数据块尺寸和操作系统相关。典型的Oracle

数据块的尺寸是2K或4K,这个值适用于大多数数据库。

需要注意,数据库的数据块尺寸是在创建数据库时由DB_BLOCK_SIZE参

数设置的,并且在创建完成后不能被改变。而且,数据块的尺寸应是操作系统块

尺寸的整数倍。例如,操作系统块是2K,那么你可以把参数DB_BLOCK_SIZE

设为2048(2K)或4096(4K)。另外,DB_BLOCK_SIZE还决定了系统全局区

域SGA中数据块缓冲区的大小。

PROCESSES

参数PROCESSES决定了可以并发连接到Oracle的操作系统进程的最大数

目。这个参数的值应设为用户进程数)加5(后台进程)。例如,如果计划有50

个并发用户,那么这个参数的值最小为50+5=55。

ROLLBACK_SEGMENTS

在数据库启动时,参数ROLLBACK_SEGMENTS为实例提供一个回滚段的

清单。

另外还有一些参数是需要根据你购买的Oracle许可设置的,在这里我们只做

一个简单的介绍,详细内容清参阅“用户和资源管理”部分。

LICENSE_MAX_SESSIONS

参数LICENSE_MAX_SESSIONS决定了可以同时连接到某个数据库的会话

数。

LICENSE_MAX_USERS

Oracle数据库系统培训讲义

28

参数LICENSE_MAX_USERS决定了在一个数据库中,最多可以创建多少个

用户。

4.启动一个实例

如果在你的系统中存在多个实例,那么在启动实例时就一定要注意,以免混

淆。例如,使用SVRMGR启动实例时,通过设置环境变量ORACLE_SID可以

启动指定的实例。

有关启动实例的方法请参阅“启动和关闭数据库实例”部分。

另外,由于此时数据库还未创建,所以数据库必须以NOMOUNT方式启动。

5.创建数据库

使用服务器管理工具SVRMGR,以INTERNAL帐户连接并启动数据库实例

后就可以常见数据库了。创建数据库的SQL命令是CREATEDATABASE。当执

行CREATEDATABASE命令时,Oracle执行以下操作:

创建数据文件

创建控制文件

创建日志文件

创建SYSTEM表空间和SYSTEM回滚段

创建数据字典

创建SYS和SYSTEM用户

为数据库指定字符集

安装并打开数据库

CREATEDATABASE命令的语法格式如下:

CREATEDATABASEdbname

[CONTROLFILEREUSE]

[LOGFILE[GROUPid1]filespec,[GROUPid2]filespec,……]

[MAXLOGFILESn][MAXLOGMEMBERSn][MAXLOGHISTORYn]

[MAXDATAFILESn][MAXINSTANCESn]

[ARCHIVELOG|NOARCHIVELOG]

[CHARACTERSETchart][NATIONALCHARACTERSETchart]

[DATAFILEfilespec1[autoextend_clau],filespec2[autoextend_clau],……];

其中,数据文件DATAFILE描述符filespec的语法为:

filespec=‘filename1’[SIZEnK|M][REUSE],

‘filename2’[SIZEnK|M][REUSE]……

日志文件LOGFILE描述符filespec的语法为:

filespec=‘filename1’[SIZEnK|M],‘filename2’[SIZEnK|M]……

Oracle数据库系统培训讲义

29

autoextend_clau子句的语法为:

[AUTOEXTENDON|OFF[NEXTintegerK|M]

[MAXSIZEUNLIMITED|[integerK|M]]]

下面解释CREATEDATABASE命令各选项的含义:

CONTRALFILEREUSE:重用由参数CONTROL_FILES标识的已存在的控

制文件,这将覆盖它们当前包括的所有信息。此选项仅在重建数据库时使用,

而不在新建数据库时使用。如果同时还指定了其它参数并导致新控制文件的

尺寸大于已存在的控制文件,则不能攸用该参数。这些参数包括:

MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、

MAXDATAFILES和MAXINSTANCES。

LOGFILE:指定一个或多个文件作为日志文件使用。每个文件规格指定一个

日志文件组,包括一个或多个日志文件成员。也可以为日志文件组选择

GROUP参数,其中id为组号,它唯一地标识一个日志文件组,取值范围从

1到MAXLOGFILES参数指定的值。多个日志文件组不能有相同的组号。如

果省略该参数,Oracle会自动为它产生值。如果省略LOGFILE子句,Oracle

缺省地建立两个日志文件组,文件名和大小取决于操作系统。

MAXLOGFILES:指定数据库的最大口志文件组的数目,Oracle使用该值确

定将控制文件中的多少空间分配给日志文件名称。缺省植、最小值和最大值

取决于操作系统。能被实例访问的日志文件组受初始化参数LOG_FILES所

限制。

MAXLOGMEMBERS:为日志文件组指定成员的最大数。Oracle使用该值确

定将控制文件中的多少空间分配给日志文件名。最小值是1,最大值和缺省

值取决于操作系统。

MAXLOGHISTORY:为带有并行服务器选项的Oracle自动介质恢复指定归

档日志文件的最大数。Oracle使用该值确定将控制文件中的多少空间分配给

归档日志文件名。最小值是0,缺省值是MAXINSTANCES值的倍数并且和

操作系统相关,最大值仅受控制文件最大值的限制。注意,这个参数仅在并

行模式下使用带并行服务器选项的Oracle,并且激活归档日志模式时才有效。

MAXDATAFILES:在执行CREATEDATABASE或CREATE

CONTROLFILE时,指定控制文件中数据文件节(记载数据库控制文件信息

的部分)的初始大小。如果试图增加一个文件,该文件号大于

MAXDATAFILES,但小于或等于DB_FILES,这将导致Oracle8控制文件自

动扩展,以便数据文件节能容纳更多的文件。

MAXINSTANCES:指定可以并行地安装和打开这个数据库的实例数。该值

优先于初始参数INSTANCES的值。最小值是1,最大值和缺省值取决于操

Oracle数据库系统培训讲义

30

作系统。

ARCHIVELOG:为日志文件组建立归档日志模式。在这种模式下,日志文

件组的内容必须在组能被重用之前归档。

NOARCHIVELOG:为日志文件组建立非归档日志模式。在这种模式下,日

志文件组的内容不必在日志文件组能被重用之前归档,该选项不为介质恢复

的可能性做准备。非归档日志模式是缺省模式。在创建数据库之后,可以用

ALTERDATABASE命令在归档日志模式和非归档日志模式之间转换。

CHARACTERSET:指定数据库用来存储数据的字符集,并且字符集在数据

库建立之后不能再改变。Oracle支持的字符集和缺省字符集取决于操作系统。

我国常用的字符集为ZHS16GBK。

NATIONALCHARACTERSET:指定国家特有字符集。此字符集用于在如

NCHAR、NCLOB或NVARCHAR2类型的列中存储数据。建立数据库后,

不能改变国家特有字符集。如果没有指定,国家特有字符集默认为数据库字

符集。

DATAFILE:指定一个或多个文件为数据文件。这些文件全部成为SYSTEM

表空间的一部分。如果省略该选项,Oracle将缺省地创建一个数据文件,缺

省文件的名称和大小取决于操作系统。

AUTOEXTEND:允许或禁止数据文件的自动扩展。如果设置为OFF,则禁

止自动扩充,NEXT和MAXSIZE置为0。如果设置为ON,则允许自动扩展。

此时NEXT的值指定当申请了较多的扩展空间时,自动分配给数据文件的磁

盘空间下一个增量的字节大小。可以用K和M代表千字节和兆字节,缺省

值是一个数据块。MAXSIZE为数据文件自动扩展允许的最大磁盘空间,

UNLIMITED表示不受限制。

下面举例说明如何使用CREATEDATABASE命令。

例一:

创建一个名为PXDB的数据库,该数据库拥有两组日志文件

LOG1PXDB.ORA、LOG2PXDB.ORA和LOGAPXDB.ORA、LOGBPXDB.ORA,

大小均为200K;一个数据文件SYSPXDB.ORA,大小为30M。数据库使用的

字符集为ZHS16GBK。创建该数据库的命令如下:

CREATEDATABASEPXDBLOGFILE

GROUPl('c:orantdatabaloglpxdb.ora','c:orantdatabalog2pxdb.ora')size200K,

GROUP2('c:orantdatabalogapxdb.ora','c:

orantdatabalogbpxdb.ora')size200K

DATAFILE'c:orantdatabasyspxdb.ora'SIZE30M

CHARACTERSETZHSl6GBK;

Oracle数据库系统培训讲义

31

6.备份新数据库

为了在发生介质失败时能完全地恢复数据库,在创建完数据库后应该为新数

据库做一个完整的备份。这个备份应包括与数据库恢复相关的所有文件,如数据

文件、控制文件和日志文件等。有关数据库备份与恢复的详细内容,请参阅“数

据库的备份与恢复”部分。

2.使用新数据库的准备工作

在数据库创建完成后,如果要正确地使用某些产品,还需运行一些SQL文

件,以便创建一些附加的数据字典表和视图。

常用的SQL文件包括:

CATALOG.SQL:创建数据字典表和视图。

CATAPROC.SQL:为运行过程选件运行所有的SQL脚本。

PUPBLD.SQL:创建产品和用户PROFILE。

上述三个文件中,CATALOG.SQL和CATAPROC.SQL位于

ORACLE_HOMERDBMS80ADMIN目录下,并且必须以INTERNAL或SYS用

户连接后运行;PUPBLD.SQL位于ORACLE_HOMEDBS目录下,并且必须

以SYSTEM用户连接后运行。

执行上述文件的具体方法如下(假定Oracle安装在C:ORANT目录下,数

据库实例名为PXDB):

1)启动SVRMGR30

在NT控制台下执行如下命令:

C:ORANTBIN>SETORACLE_SID=PXDB

C:ORANTBIN>SVRMGR30

2)以INTERNAL连接到数据库(假定此时数据库已经打开)

SVRMGR>CONNECTINTERNAL/password@PXDB

3)运行CATALOG.SQL和CATAPROC.SQL

SVRMGR>@C:ORANTRDBMS80ADMINCATALOG.SQL

SVRMGR>@C:ORANTRDBMS80ADMINCATAPROC.SQL

4)断开当前连接,并重新以SYSTEM用户连接。

SVRMGR>DISCONNECT

SVRMGR>CONNECTSYSTEM/password

Oracle数据库系统培训讲义

32

5)运行PUPBLD.SQL

SVRMGR>@C:ORANTDBSPUPBLD.SQL

3.删除数据库

Oracle数据库是由数据库文件构成的,把这些文件删除了,数据库也就不存

在了。数据库文件包括:数据文件、控制文件、重做日志文件、参数文件和归档

的日志文件。

通过查询数据字典视图V$DATAFILE和V$LOGFILE,可以得到有关数据库

的数据文件和重做日志文件的信息。

另外可以通过ORADIM工具删除相应的服务。

三.回滚段管理

回滚段是Oracle数据库用于保证读一致性、回退事务和恢复数据库的一种机

制。每个数据库包含一个到多个回滚段(至少有一个SYSTEM回滚段)。

回滚段中记录了被每个事务修改过的数据的旧值。例如,用户A正在修改表

AUTHS中的数据,并且还没有提交(COMMIT)。此时,如果用户B要求读取

AUTHS中的数据,则Oracle向用户B返回回滚段中的旧数据,以保证用户B

的读一致性。另外,如果用户A要取消对AUTHS的修改,Oracle使用回滚段中

的旧值来恢复数据。

Oracle数据库采用循环方式使用回滚段,也就是说,每个回滚段被分配的事

务处理数目是比较平均的。我们也可以明确地为某个事务指定具体的回滚段但是

一般不这样做。

1.回滚段的分类

回滚段的分类方式有两种:按有效范围可分为私有(Private)回滚段和公共

(Public)回滚段;按创建时机可分为系统(SYSTEM)回滚段和非系统

(NON_SYSTEM)回滚段。

私有和公共回滚段

在创建回滚段时,如果不指出PUBLIC选项,则产生私有回滚段。私有回滚

段只在打开它的数据库实例内有效,也就是说,只有打开它的实例可以访问它,

其它实例不能访问私有回滚段。而公共回滚段则可被其它实例访问。

系统回滚段和非系统回滚段

系统回滚段是指在创建数据库时自动生成的回滚段,它的名称为SYSTEM。

Oracle数据库系统培训讲义

33

系统回滚段只对发生在SYSTEM表空间中的事务提供支持,其它表空间中的事

务不能使用SYSTEM回滚段。例如,向USERS表空间中的表TYPE中插入数据

的事务就不能使用SYSTEM回滚段。因此,要想在数据库中使用多个表空间,

就必须自己创建一到多个非系统回滚段,以提供对其它表空间中发生的事务的支

持。

2.创建回滚段

在数据库创建之后,一个首要的任务就是创建一个非系统回滚段(以后如不

加说明,回滚段一词均指非系统回滚段),以提供对将来要创建的其它表空间的

事务支持。通常,我们把这个创建在SYSTEM表空间中的非系统回滚段称为“第

二回滚段”。

为了便于数据库系统的管理,在创建了第二回滚段后,我们可以生成一个专

门存放回滚段的表空间,并且在其上再创建一到多个回滚段,然后把SYSTEM

表空间中的“第二回滚段”删除。因为SYSTEM表空间主要是用于存储数据字

典的,而“第二回滚段”会和数据字典争夺存储空间,这不利于数据库的安全。

创建回滚段的SQL命令是CREATEROLLBACKSEGMENT,执行该命令

需要具有CREATEROLLBACKSEGMENT系统特权。命令的语法如下:

CREATE[PUBLIC]ROLLBACKSEGMENTrbg_name

TABLESPACEtablespace_name;

PUBLIC:指定创建公共回滚段,此类回滚段可为任何实例使用。如果忽

略该选项,则创建的回滚段为私有回滚段。

Rbg_name:回滚段的名称。

TABLESPACEtablespace_name:指出创建回滚段的表空间为

tablespace_name。如果忽略该选项,则在SYSTEM表空间中创建回滚段。

例如,下面的SQL命令在SYSTEM表空间中创建了一个名为SECOND的回

滚段。

CREATEROLLBACKSEGMENTcond

TABLESPACEsystem;

由于回滚段创建在SYSTEM表空间中,上述命令也可写为:

CREATEROLLBACKSEGMENTcond;

3.激活回滚段

回滚段有两种状态:ONLINE(联机)和OFFLINE(脱机)。回滚段最初

创建时处于脱机状态,而脱机状态的回滚段不能被事务使用。因此,为了支持非

Oracle数据库系统培训讲义

34

SYSTEM表空间中的事务,必须激活(ONLINE)非系统回滚段。

改变回滚段状态的SQL命令是ALTERROLLBACKSEGMENT,执行此命

令需要具有ALTERROLLBACKSEGMENT系统特权。命令的语法如下:

ALTERROLLBACKSEGMENTrgb_nameONLINE|OFFLINE;

Rgh_name:要改变状态的回滚段的名称。

ONLINE:使回滚段联机。

OFFLINE:使回滚段脱机。

例如,下面的命令他回滚段cond联机。

ALTERROLLBACKSEGMENTcondONLINE;

值得一提的是,对于公共(PUBLIC)回滚段,每次数据库启动时它们都会

备自动激活,而私有回滚段则需手工激活。对于只有一个实例访问的数据库,公

共回滚段和私有回滚段没有实质区别。因此,在这种情况下,可以把所有回滚段

都创建为公共回滚段。

4.删除回滚段

删除回滚段的SQL命令DROPROLLBACKSEGMENT,执行该命令需要

具有DROPROLLBACKSEGMEN系统特权。命令的语法如下:

DROPROLLBACKSEGMENrgb_name;

其中,rgb_name是要删除的回滚段的名称。

注意,要删除的回滚段必须处于OFFLINE状态,而且SYSTEM回滚段不能

被删除。例如,下面的命令用于删除回滚段SECOND:

ALTERROLLBACKSEGMENTcondOFFLINE;

DROPROLLBACKSEGMENTcond;

四.联机重做日志管理

每个Oracle数据库都有一个或多个与之相关的联机重做日志,每个日志是

一组联机日志文件(一个或多个),用于记录数据库中所有已提交的改变。当一

个事务被提交后,它首先被临时存储在系统全局区域SGA中的重做日志缓冲区

内,然后再由后台进程LGWR写入日志文件中。

重做日志是循环使用的,即写日志的顺序是:从第一个日志组开始,写满一

个后写下一个。当最后一个日志组写满后,又返回第一个。但是,同一组中的各

成员文件是同时被写的。也就是说,各成员文件内容是相同的。另外在非归档模

式下,如果此时没有归档日志文件组,那么新的日志将覆盖以前的日志。

Oracle数据库系统培训讲义

35

在本节中,我们将从以下几个方面讲述如何管理联机重做日志:

规划联机重做日志

创建联机重做日志组和成员

重新命名或定位联机重做日志成员

删除联机重做日志组和成员

控制检查点和日志切换

另外,在本讲义的后续部分还要对联机重做日志做进一步的讲解。

1.规划联机重做日志

联机重做日志的规划要考虑多方面的内容,在这一小节中,我们将从以下四

个方面进行讨论:

多元联机重做日志

把联机重做日志成员放到不同的磁盘

设置联机重做日志成员的大小

选择适当的联机重做日志文件数目

1)多元联机重做日志

Oracle数据库的每个联机重做日志应该是一个多元日志文件组,而且组中的

成员应放在不同的磁盘上。这样就不会由于一个磁盘的失败导致后台进程LGWR

和数据库实例的失败。

多元联机重做日志由分布在不同磁盘上的日志文件的多份拷贝构成,对组中

某个成员的修改会同时反映在所有其他的成员上。如果包含联机重做日志文件的

一个磁盘失败了,其它磁盘上的拷贝仍然可以使用,因此系统操纵不会被中断,

而且丢失的日志文件也较容易恢复。然而,多元组需要额外的存储空间。因此,

在设计联机重做日志时,你需要权衡数据安全和磁盘空间的开销。

2)把联机重做日志成员放到不同的磁盘

如果联机重做日志的成员存放在不同的磁盘,那么当其中的一个磁盘失败

时,仅有一个日志成员不可用,后台进程LGWR仍然可以访问其它成员,因此

数据库实例可以继续工作。另外,在归档日志文件时,分散在不同磁盘上的日志

成员可以消除后台进程LGWR和ARCH之间的争夺。

3)设置联机重做日志成员的大小

当设置联机重做日志文件的大小时,应考虑将来是否要归档日志文件。如果

要归档日志,则应保证一组日志文件可以归档到一个单独的脱机存储设备上。在

存在多个联机重作日志组的情况下,同一个组内各成员的大小必须一致,不同组

之间的成员可以具有不同的尺寸,但最好也使用相同的尺寸。因为,所有日志文

件都采用相同的尺寸可以保证在规则的时间内产生检查点(检查点是促使后台进

程把缓冲区中的数据写入数据文件中的事件)。

Oracle数据库系统培训讲义

36

4)选择适当的联机重做日志文件数目

决定联机重做日志文件数目最好的方法是测试不同的配置,然后在不妨碍

LGWR写日志的情况下,从中选出组最少的配置。在一些情况下,一个数据库

仅需要两个日志组,而有时则需要更多的组,以保证对于后台进程LGWR日志

组总是可用的。在测试期间,判断配置是否合适的的最简单的方法是查看LGWR

的跟踪文件和警告文件。如果文件内容显示,由于检查点没有完成或一个组没有

归档,LGWR不得不频繁地等待,那么就应考虑增加组。

另外,日志文件组和成员的数目还受参数MAXLOGFILES、LOG_FILES和

MAXLOGMEMBERS的限制。有关这几个参数的详细内容,请参阅“创建数据

库”一节。

2.创建联机重做日志组和成员

在创建数据库期间和完成之后,都可以为数据库创建联机重做日志组和成

员。如果在创建数据库之前规划好了联机重做日志,那么就可以在创建数据库时

创建日志文件。如果在数据库创建之后再增加日志组和成员,则必须具有

ALTERDATABASE系统特权。

另外还需要注意,一个数据库最多能拥有MAXLOGFILES(此参数的值是

在创建数据库时指定的)个日志组。

下面分别讲解在数据库创建之后,如何创建联机重做日志组和成员。

1)创建联机重做日志组

创建联机重做日志组的SQL命令是ALTERDATABASE,具体语法如下:

ALTERDATABASEADDLOGFILE[GROUPid]filespec;

GROUPid:为日志文件组指定组号。id表示组号,它的取植范围是1至

MAXLOGFILES,并且这个组号必须是唯一的。如果省略了此选项,Oracle会

自动产生一个组号。

filespec:是日志文件组的描述符,它由一个或多个成员构成。它的语法是:

(‘filename1’,‘filename2’,……)SIZEnK|M

下面举例说明如何创建联机重做日志组。

例一:

为当前数据库增加一个日志文件组,该组包含两个文件:

c:orantdatabalog3pxdb.ora和d:orantdatabasclog3pxdb.ora,文件

的大小均为200K。

ALTERDATABASEADDLOGFILE

(‘c:orantdatabalog3pxdb.ora’,‘d:orantdatabalog3pxdb.ora’)

Oracle数据库系统培训讲义

37

SIZE200K;

例二:

为当前数据库增加一个日志文件组,组号为4。该组包含两个文件:

c:orantdatabalog4pxdb.ora和d:orantdatabalog4pxdb.ora,文件的

大小均为200K。

ALTERDATABASEADDLOGFILEGROUP4

(‘c:orantdatabalog3pxdb.ora’,‘d:orantdatabalog3pxdb.ora’)

SIZE200K;

2)创建联机重做日志成员

在某些情况下,可能需要向已存在的日志文件组中增加成员。例如,由于磁

盘损坏,日志组中的一个成员丢失了。增加日志成员的SQL命令是ALTER

DATABASE,它的语法如下:

ALTERDATABASEADDLOGFILEMEMBER‘filename’

REUSE]TOGROUPid|file_list;

filename:日志文件的名称。如果指定的日志文件已存在,则必须带

REUSE选项,表示要重用已有的文件。

GROUPid|file_list:指定新增成员要加到的日志文件组有两种方式,一

种是通过GROUPid给出组号,另一种是列出此日志组中的所有成员文

件。

下面举例说明如何为日志文件组增加成员。

例一:

为组号为2的日志文件组增加一个名为log2add.ora的成员。

ALTERDATABASE

ADDLOGFILEMEMBER‘log2add.ora’TOGROUP2;

例二:

假设存在一个日志文件组,它有两个文件:log2a.ora和log2b.ora。下面

的命令给该组中增加一个新文件log2c.ora。

ALTERDATABASE

ADDLOGFILEMEMBER‘log2c.ora’

TO(‘log2a.ora’,‘log2b.ora’);

Oracle数据库系统培训讲义

38

3.重新命名或定位联机重做日志成员

有些情况下,我们需要重新命名日志成员。例如,由于某些原因,在最初创

建数据库时日志文件被放置在同一个磁盘上,现在需要把它们移到不同的磁盘

上,以增强系统的可靠性。

重新命名日志成员需要两方面的权限:一方面是在数据库管理系统中,你必

须具有ALTERDATABASE系统特权;另一方面,在操作系统中,你必须能拷贝

和移动文件。

重新命名日志成员的步骤如下:

1.备份数据库

为了确保数据库的安全,在重新命名日志成员前应该为数据库做一个完全的

备份,以便在出现意外时能够完整地恢复数据库。另外,我们建议大家养成这样

一个良好的习惯,

在做所有的重大操作前,备份数据库。关于如何备份数据库,请参阅“数据

库的备份与恢复”部分。

2.将联机重做日志文件拷贝到新的位置

利用操作系统提供的功能,将要重新命名的日志文件拷贝到新的位置。新文

件可以是不同磁盘上的同名文件,也可以是磁盘驱动器名和文件名都不相同。

3.重新命名联机重做日志成员

重新命名联机重做日志成员使用的是带RENAMEFILE子句的ALTER

DATABASE命令,因此,操作者必须具有ALTERDATABASE系统特权。该命

令的语法如下:

ALTERDATABASERENAMEFILEsrc_file_listTOdes_file_list;

src_file_list:原文件列表。

des_file_list:目标文件列表。

在执行上述命令时一定要注意,目标文件必须已经存在。

下面举例说明如何使用ALTERDATABASE命令重命名日志文件。假设当前

数据库已经安装但未打开,要重新命名的源日志文件是

“c:orantdatabalog3pxdb.ora”,

目标文件是“d:orantdatabalog3pxdbnew.ora”。

实现上述改名操作的命令如下:

ALTERDATABASE

RENAMEFILE‘c:orantdatabalog3pxdb.ora’

TO‘d:orantdatabalog3pxdbnew.ora’;

4.备份控制文件

Oracle数据库系统培训讲义

39

为了预防意外发生,在重新命名联机重做日志成员后应备份数据库的控制文

件。关于如何备份数据库的控制文件,请参阅“数据库的各份与恢复”备份。

4.删除联机重做日志组和成员

对于无用的联机重做日志组和不可用(如介质损坏)的日志成员,需要把它

们从系统中删除。下面分别讲解如何删除日志组和日志成员。

1.删除日志组

在删除日志组之前,必须考虑以下问题:

不论每组日志中有几个成员,一个数据库至少得有两组日志文件。

活动的日志组不能被删除。如果要删除活动的日志组,必须首先强制日

志切换。

如果归档有效的话,在删除日志组之前应确保该组日志文件已被归档。

删除联机重做日志组的命令语法如下:

ALTERDATABASEDROPLOGFILEGROUPid|file_list;

GROUPid:指定要删除的日志组的组号。

file_list:要删除的日志组的所有文件的列表。

下面举例说明如何删除联机重做日志组。

例一:

把组号为三的日志组删除。

ALTERDATABASE

DROPLOGFILEGROUP3;

例二:

删除成员文件为log3a.ora、log3b.ora和log3c.ora的日志组。

ALTERDATABASE

DROPLOGFILE(‘log3a.ora’,‘log3b.ora’,‘log3c.ora’)

最后说明一点,删除联机重做日志组并没有物理地把日志文件从磁盘上删

除,它只是从数据库的控制文件中删除了相应的记录。

2.删除日志成员

删除日志成员的命令是带DROPLOGFILEMEMBER子句的ALTER

DATABASE命令,该命令的语法如下:

ALTERDATABASEDROPLOGFILEMEMBERfile_list:

其中,file_list是日志成员文件的列表。

删除日志成员需要注意以下问题:

Oracle数据库系统培训讲义

40

如果组中只有一个成员,那么不能删除该成员。

只能删除非活动组中的成员。如果要删除活动组中的成员,首先得强制

执行日志切换。

在归档模式(ARCHIVELOG)下,如果要删除某个组中的成员,该组必

须是已经被归档的。

例如,下面的命令用于删除联机重做日志成员“log3d.ora”。

ALTERDATABASE

DROPLOGFILEMEMBER‘log3d.ora’;

与删除联机重做日志组相同,删除日志成员也不物理地删除文件。如果要删

除文件,需要使用操作系统命令。

5.控制检查点和日志切换

检查点是一个事件,在发出检查点期间,后台进程DBWR把SGA中所有被

修改过的数据库缓冲区写到适当的数据文件中。日志切换是指后台进程LGWR

停止写一个联机重做日志组,并开始写另外一个联机重做日志组的事件。这两个

事件经常是连在一起的,通常,数据库实例在每次日志切换时发出一个检查点。

另外,如果当前联机重做日志文件组被填满,那么会自动发生日志切换。

这一小节包括以下三方面的内容:

设置数据库检查点的时间间隔

强制执行日志切换

强制执行无日志切换的快速检查点

1)设置数据库检查点的时间间隔

前面我们曾提到,通常检查点是在日志切换时发出的,也就是说,在日志切

换时后台进程DBWR才把缓冲区中的数据写入数据文件中。因此,当数据库使

用非常大的联机重做日志文件时,为了尽量减少实例失败后恢复所需的时间,我

们需要设置额外的检查点,这些检查点在预定的时间间隔内自动发生。

检查点的发出受两个初始化参数的控制,它们是:LOG_CHECKPOINT

_INTERVAL和LOG_CHECKPOIN_TIMEOUT。下面分别讲解这两个参数的含义

和用法。

LOG_CHECKPOINT_INTERVAL

参数LOG_CHECKPOINT_INTERVAL的值是操作系统块的数目(注意,不

是Oracle数据块)。如果该值大于日志文件的尺寸,那么只有在日志切换时才会

产生检查点。反之,则会按照参数值与日志文件大小的比例产生检查点。因此,

要正确地设置此参数,就必须清楚所使用的操作系统的块的大小(字节数)和日

志文件的大小。

下面举个例子。假设某个数据库的日志文件的大小为1024K,所使用的操作

Oracle数据库系统培训讲义

41

系统的块为512字节。如果要在写满日志的过程中发出4个检查点,那么可以通

过以下方法计算出参数LOG_CHECKPOINT_INTERVAL的值:

LOG_CHECKPOINT_INTERVAL=日志文件尺寸/操作系统块尺寸/检查点数目

=1024K/512/14=500

因此,为了实现上述要求,可在初始化参数文件中做如下设置:

LOG_CHECKPOINT_INTERVAL=500

LOG_CHECKPOINT_TIMEOUT

参数LOG_CHECKPOINT_TIMEOUT指出了产生检查点的时间(以秒计)。

如果此参数的值为零,那么只有在日志切换时才产生检查点;如果该值小于写满

日志文件所需的平均时间,则会在日志切换前产生额外的检查点。通过查看后台

进程LGWR的跟踪文件,可以获得有关日志切换所需时间方面的信息。

2)强制执行日志切换

在某些情况下,我们可能需要强制地执行日志切换,以使当前的日志组由活

动状态变为不活动。这样就可以对该日志组执行一系列的维护操作,例如,删除

日志组、归档日志组等等。

强制日志切换的SQL命令是ALTERSYSTEM,因此,要求执行者具有

ALTERSYSTEM系统特权。日志切换的完整命令如下:

ALTERSYSTEMSWITCHLOGFILE;

3)强制执行无日志切换的快速检查点

通常,数据库检查点是由系统自动产生的。在发出检查点时,后台进程

DBWR把数据库缓冲区中的内容写入数据文件中。但是,我们也可以手工执行

数据库检查点。通常,我们把这类检查点叫做快速数据库检查点。在快速检查点

发出时,不发生日志切换,LGWR继续写当前的日志文件。但它迫使DBWR把

数据库缓冲区中的内容写人数据文件。

手工执行数据库检查点的命令如下:

ALTERSYSTEMCHECKPOINT;

从上述命令不难看出,执行数据库检查点要求具有ALTERSYSTEM系统特

权。

五.控制文件管理

控制文件用于记录数据库的物理结构,每个Oracle数据库至少得有一个控

制文件。控制文件中主要记载以下信息:

数据库名称

数据库中数据文件和日志文件的名称和位置

数据库创建的时间

Oracle数据库系统培训讲义

42

当前的日志序列号

检查点信息

数据库的控制文件是通过初始化参数文件中的CONTROL_FILES参数指定

的。参数CONTROL_FILES的值是一个或多个由逗号分隔的文件名,每个文件

名指定了一个控制文件。当数据库实例启动时,它会根据CONTROL_FILES的

值打开所有的控制文件,并维护这些文件。

出于安全考虑,一个数据库最好有两个以上的控制文件,并且每个控制文件

分别放在不同的磁盘上。这样,当某一块磁盘损坏时,数据库系统就不会由于丢

失控制文件而无法运行。

如果一个数据库有多个控制文件,那么在数据库操作期间,Oracle服务器只

读取CONTROL_FILES中列出的第一个文件。但是对于需要更新控制文件的操

作,例如为数据库增加数据文件、日志文件,服务器则修改所有的控制文件。因

此,在多控制文件的环境下,执行这类操作的时间会稍长一些。

决定控制文件尺寸的主要因素是创建数据库时,参数MAXDATAFILES、

MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY和

MAXINSTANCES的值。这些参数的值越大,控制文件也越大。

1.创建控制文件

创建控制文件有三种方法:

创建初始的控制文件:是指在创建数据库时创建控制文件。

创建附加的控制文件:是指用复制已有的控制文件来增加控制文件。

创建新的控制文件:用CREATECONTROLFILE命令创建控制文件。

下面我们分别讲解这三种不同的创建方法。

1)创建初始的控制文件

在创建数据库期间,系统根据初始化参数CONTROL_FILES列出的文件名,

自动创建一个或多个控制文件。如果指定的文件已经存在,则在CREATE

DATABASE命令中必须指定CONTROLFILEREUSE选项,否则创建工作会失

败。而且,如果新控制文件与旧控制文件的尺寸不同,也不能使用REUSE选项。

如果在创建数据库时没有指定控制文件(即:没有为参数CONTROLFILES

设置值),Oracle会创建缺省的控制文件。缺省控制文件的文件名取决于所使用

的操作系统。

2)创建附加的控制文件

在数据库创建成功后,我们可以通过把已有的控制文件拷贝到一个新的位置

或拷贝后改为新的文件名,然后再在初始化参数CONTROL_FILES中加入新控

制文件名的方法来创建附加的控制文件。

创建附加的控制文件的步骤如下:

Oracle数据库系统培训讲义

43

a)关闭数据库

对于多控制文件的数据库,各个控制文件应保持一致。所以,为了保证在复

制控制文件的过程中文件内容没有发生变化,必须先关闭数据库,再拷贝控制文

件。

b)复制控制文件

注意,在复制控制文件时,多个控制文件最好分别位于不同的磁盘上,这样

有利于数据库的安全。

c)修改初始化参数文件

为了在下次启动数据库时能够管理新增的控制文件,需要修改初始化参数文

件,把新的控制文件名加到参数CONTROL_FILES的文件列表中。

d)重新启动数据库。

3)使用CREATECONTROLFILE命令新建控制文件

使用CREATECONTROLFILE命令可以为数据库创建新的控制文件,但是

这种方法通常仅用于以下的情况:

数据库的所有控制文件都已经被毁坏,并且没有备份可用于恢复。

需要永久性改变在创建数据库时所指定的一些参数的值,包括:数据库名、

MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、

MAXDATAFILES和MAXINSTANCES。

创建新控制文件的步骤如下:

a)制作一个所有数据文件和日志文件的清单。

一个完整的文件清单应该能够准确地反映当前数据库的物理结构,即它应该

包含数据库的所有数据文件和日志文件。这个清单将有利于数据库的备份与恢

复。

b)关闭数据库

使用NORMAL方式关闭数据库,如果不成功的话,也可使用IMMEDIATE

或ABORT方式。

c)备份所有的数据文件和日志文件。

CREATECONTROLFILE命令比较危险,有可能会意外地损坏数据库的其

它文件。因此,在执行此操作前应该备份数据库的所有数据文件和日志文件。

d)以NOMOUNT方式启动一个实例。

e)使用CREATECONTROLFILE命令创建控制文件。

CREATECONTROLFILE[REUSE][SET]DATABASEdbname

LOGFILE[GROUPid]filespecRESETLOGS|NORESETLOGS

DATAFILEfilespec[MAXLOGFILESn|MAXLOGMEMBERSn|

MAXLOGHISTORYn|MAXDATAFILESn|MAXINSTANCESn]

[ARCHWELOG|NOARCHIVELOG];

有关上述命令中各选项的含义,请参阅“创建数据库”小节中的

Oracle数据库系统培训讲义

44

CREATEDATABASE命令。

下面是一个创建控制文件的例子,该命令把当前数据库的名称改为PXDB,

并为PXDB创建新控制文件。

CREATECONTROLFILE

SETDATABASEPXDB

LOGFILEGROUP1(‘logfilelA’,‘logfilelB’)SIZE50K,

GROUP2(‘logfile2A’,‘logfile2B’)SIZE50K

NORESETLOGS

DATAFILE‘datafilel’SIZE3M,‘datafile2’SIZE5M

MAXLOGFILES50

MAXLOGMEMBERS3

MAXDATAFILES200

MAXINSTANCES6

ARCHIVELOG;

f)各份新的控制文件。

对修改初始化参数CONTROLFILES的值,使其指向新的控制文件。

g)关闭并重新启动数据库。

2.删除控制文件

对于多余的控制文件,可以把它删除。例如,某个数据库有两个以上的

控制文件,其中的一个控制文件放在了一个不恰当的位置上,我们可以通过以下

步骤把它删除。

l)关闭数据库。

2)修改初始化参数CONTROL_FILES的值,从其文件列表中去掉要删除的

控制文件名。

3)重新启动数据库。

注意,通过上述步骤我们只是把控制文件从数据库中删除了,即控制文件对

数据库来说不可用了,但是并没有物理地删除该文件。如果要物理地删除文件,

还需要使用相应的操作系统命令。

六.创建数据库实例

目的:

Oracle数据库系统培训讲义

45

为了深入理解Oracle数据库服务器的构成和工作原理,手工创建一个数据

库PXDB。

思路:

从宏观上看,Oracle数据库服务器由两部分构成:实例和数据库文件。因此,

数据库的创建工作也就分为实例的创建和数据库(主要指构成数据库的各种文

件)的创建。

初次安装Oracle数据库服务器后,安装程序自动创建一个缺省数据库

ORCL。为了便于以后讲义的学习,我们创建一个自己的数据库一PXDB。这时,

在你的计算机上同时存在两个Oracle数据库服务器。

注:在这里,“数据库”一词既可以指数据库服务器,也可以指构成数据库

的各种文件。因此,大家需要根据上下文准确地把握其含义。

操作步骤:

1.创建数据库实例

1)复制初始化参数文件。

C:ORANTDATABASE>COPYINITSEED.ORAINITPXDB.ORA

2)修改参数文件INITPXDB.ORA中的部分参数。

确保参数文件中包含以下几行:

DB_NAME=PXDB

DB_DOMAIN=PXNTDOMAIN

CONTROL_FILES=(“C:ORANTDATABASECTL1PXDB.ORA”,

“C:ORANTDATABASECTL2PXDB.ORA”)

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

对上述内容的解释如下:

DB_NAME:数据库名称。为了避免混淆,数据库名通常与实例名相同,

因此我们把此参数的值设为PXDB。

DB_DOMAIN:数据库所在计算机的网络名,此处指定为

PXNTDOMAIN。

CONTROL_FILES:数据库的控制文件列表。为了数据库的安全,此处

指定了两个控制文件:C:ORANTDATABASECTL1PXDB.ORA和

C:ORANTDATABASECTL2PXDB.ORA。

REMOTE_LOGIN_PASSWORDFILE:当值为EXCLUSIVE时,数据库

中可以含有除SYS和INTERNAL外的其他数据库管理员(具有

SYSDBA和SYSOPER特权的用户)。

3)创建实例PXDB,口令为PXGROUP。

ORADIM80-NEW-SIDPXDB-INTPWDPXGROUP

Oracle数据库系统培训讲义

46

4)以NOMOUNT方式启动实例。

SETORACLE_SID=PXDB

C:ORANTBIN>SVRMGR30

SVRMGR>CONNECTSYS/PXGROUPASSYSDBA

SVRMGR>STARTUPPFILE=C:ORANTDATABASEINITPXDB.ORA

NOMOUNT

2.创建数据库PXDB

数据库PXDB包含一个数据文件SYS1PXDB.ORA(构成SYSTEM表空间),

大小为30M,两个日志文件LOG1PXDB.ORA和LOG2PXDB.ORA,大小均

为500K。采用的字符集是中文字符集ZHS16GBK。具体命令如下:

CREATEDATABASEPXDB

LOGFILE‘C:ORANTDATABASELOG1PXDB.ORA’SIZE500K,

‘C:ORANTDATABASELOG1PXDB.ORA’SIZE500K

DATAFILE‘C:ORANTDATABASESYS1PXDB.ORA’SIZE30M

CHARACTERSETZHS16GBK;

3.运行SQL文件

以SYS用户连接到数据库,运行以下两个文件:

SVRMGR>CONNECTSYS/PXGROUPASSYSDBA

SVRMGR>@C:ORANTRDBMS80ADMINCATALOG.SQL

SVRMGR>@C:ORANTRDBMS80ADMINCATPROC.SQL

以SYSTEM用户连接到数据库,运行以下文件:

SVRMGR>CONNECTSYSTEM/MANAGER

SVRMGR>@C:ORANTDBSPUPBLD.SQL

4.在系统表空间创建回滚段

SVRMGR>CREATEPUBLICROLLBACKSEGMENTsysrol;

SVRMGR>ALTERROLLBACKSEGMENTsysrolONLINE;

5.修改监听文件

如果打算使用SQL*Net或Net8连接到新创建的数据库,还需要在监听文件

C:ORANTNET80ADMINLISTENER.ORA中增加如下内容:

在LISTENER一节中增加:

Oracle数据库系统培训讲义

47

(ADDRESS=(PROTOCOL=IPC)(KEY=PXDB))

在SID_LIST_LISTENER一节中增加:

(SID_DESC=

(GLOBAL_DBNAME=PXDB.PXNTDOMAIN)

(SID_NAME=PXDB)

6.重新启动计算机

到此为止,数据库的创建工作就全部完成。重新启动计算机后就可以使用数

据库PXDB了。

Oracle数据库系统培训讲义

48

第四讲定制数据库实例

数据库产品安装结束后,需为系统定制数据库,有两种方法:①用ORACLE

公司提供的图形化界面的databaassistant创建②根据ORACLE产品所支持的脚

本语言,构造自己的建库脚本。

以上两种方法都有各自的优点,①操作直观,根据提示一般人都可实现操作,

但不灵活②可根据需要,很快地生成数据库,但需对数据库有较深了解。下面分

别介绍两种方法的实现过程。

一.图形化方式创建数据库

1.步骤一

Oracle数据库系统培训讲义

49

本页主要填写如下参数:

➢数据库名:1—8个字符,对应于INITSID.ORA中的参数DB_NAME。

➢数据库实例名:1—4个字符,对应数据库系统的标识符,Oracle实例

(Instance)是指拥有自己SGA的数据库及其相关进程的集合。

➢实例启动时的初始化文件名:包含数据库初始化参数设置的文件,数据

库实例每次在启动时,需要读取该文件。

➢内部口令:以Internal用户登录对应的口令,即默认的系统管理员DBA

的帐户。

2.步骤二

本页主要填写如下参数:

➢控制文件:对应于INITSID.ORA中的参数CONTROL_FILES。

➢最大数据文件数:1—1022个,允许创建数据文件的最大数目。

➢最大日志文件(组)数:2—255个,允许创建日志文件组的最大数目。

➢最大日志成员数:2—5个,在一个日志组下日志文件的拷贝数。

Oracle数据库系统培训讲义

50

3.步骤三

本页主要填写如下参数:

首先是计划创建五个表空间(SYSTEM、USER、ROLLBACK、INDEX、

TEMPORARY),然后对每个表空间设置如下参数:

文件参数:大小、文件名(包括位置)

存储参数(区间):AutoExtend、%Increa、Initial、Next、Min、Max/Unlimited

Oracle数据库系统培训讲义

51

4.步骤四

本页主要填写日志文件的有关参数:日志文件的位置、名称和大小。

Oracle数据库系统培训讲义

52

5.步骤五

本页主要填写如下参数:

➢检查点间隔:基于数据块的间隔和基于时间的间隔,分别对应于初始化文件

INITSID.ORA中的参数LOG_CHECKPOINT_INTERVAL和参数

LOG_CHECKPOINT_TIMEOUT。

➢归档日志文件的格式:默认形式arc%S.%T,对应于INITSID.ORA中的

参数LOG_ARCHIVE_FORMAT;

➢归档日志文件的位置:对应于LOG_ARCHIVE_DEST;

➢日志归档缓冲区的个数:1—5个,对应于LOG_ARCHIVE_BUFFERS;

➢日志归档缓冲区的大小:范围1—127,单位为数据块,对应于INITSID.ORA

中的参数LOG_ARCHIVE_BUFFER_SIZE。

Oracle数据库系统培训讲义

53

6.步骤六

本页主要填写有关SGA的设置参数:

➢SQL缓冲池大小:单位为字节,对应于初始化参数SHARED_POOL_SIZE。

➢数据块缓冲区个数:重要的SGA参数,对应于DB_BLOCK_BUFFER。

➢日志缓冲区大小:单位为字节,对应于LOG_BUFFER。

➢用户进程数:允许的最大用户进程数目,对应于PROCESSES。

➢数据块大小:单位为字节,对应于DB_BLOCK_SIZE。

Oracle数据库系统培训讲义

54

7.步骤七

本页主要填写有关跟踪文件的设置参数:指定跟踪文件的存放位置,包括用

户进程跟踪文件和数据库进程的跟踪文件。

Oracle数据库系统培训讲义

55

二.脚本方式创建数据库

本节给出创建一个Oracle数据库的完整代码,以进一步熟悉Oracle数据库及

其表空间的有关知识。

下面的脚本基于如下假设:

(1)Oracle的安装目录C:Orant;

(2)不考虑文件分布,数据库的所有文件放置在目录D:Ora_Data,且预先设

置两个子目录:Archive和Trace;

(3)数据库及其实例名都为MYDB,初始化文件InitMYDB.ora;

(4)全部代码分布在三个文件中:

Build_mydb.bat

Create_db.sql

Create_tbs.sql

Build_mydb.bat中的代码如下:

tORACLE_SID=mydb

C:Orantbinoradim80-new-sidmydb-intpwdoracle-startmodeauto

-pfileD:Ora_Datainitmydb.ora

C:Orantbinoradim80-startup-sidmydb-starttypesrvc,inst-usrpwdoracle

-pfileD:Ora_Datainitmydb.ora

C:Orantbinsvrmgr30@create_db.sql

C:Orantbinsvrmgr30@create_tbs.sql

Create_db.sql中的代码如下:

spoolD:Ora_Dataspoolmain

techoon

connectINTERNAL/oracle

startupnomountpfile=D:Ora_Datainitmydb.ora

REM********创建数据库*************************

CREATEDATABASEmydb

DATAFILE'D:Ora_DataSys1mydb.ora'SIZE50M

AUTOEXTENDONNEXT5MMAXSIZEUNLIMITED

Oracle数据库系统培训讲义

56

LOGFILE

Group1('D:Ora_Datalogmydb11.ora','D:Ora_Datalogmydb12.ora')

SIZE1024K,

Group2('D:Ora_Datalogmydb21.ora','D:Ora_Datalogmydb22.ora')

SIZE1024K;

spooloff

Create_tbs.sql中的代码如下:

spoolD:Ora_Dataspoolmain

techoon

connectINTERNAL/oracle

CREATEROLLBACKSEGMENTSYSROLTABLESPACE"SYSTEM";

ALTERROLLBACKSEGMENT"SYSROL"ONLINE;

REM**************创建数据字典(系统表)*****************

@C:OrantRdbms80admincatalog.sql;

@C:OrantRdbms80admincatproc.sql;

@C:OrantRdbms80admincaths.sql;

REM**************创建必要的其它表空间*******************

CREATETABLESPACERBS

DATAFILE'D:Ora_DataRbs1mydb.ora'

SIZE10MAUTOEXTENDONNEXT10MMAXSIZEUNLIMITED

DEFAULTSTORAGE

(INITIAL1024KNEXT1024K

MINEXTENTS1MAXEXTENTS300PCTINCREASE0)

ONLINE;

CREATETABLESPACEUSR

DATAFILE'D:Ora_DataUsr1mydb.ora'

SIZE50MAUTOEXTENDONNEXT10MMAXSIZEUNLIMITED

DEFAULTSTORAGE

(INITIAL100KNEXT100K

MINEXTENTS1MAXEXTENTSUNLIMITEDPCTINCREASE1)

ONLINE;

CREATETABLESPACETEMPORARY

DATAFILE'D:Ora_DataTmp1mydb.ora'

SIZE10MAUTOEXTENDONNEXT5MMAXSIZEUNLIMITED

Oracle数据库系统培训讲义

57

DEFAULTSTORAGE

(INITIAL100KNEXT100K

MINEXTENTS1MAXEXTENTS300PCTINCREASE0)

TEMPORARY

ONLINE;

CREATETABLESPACEINDX

DATAFILE'D:Ora_DataIndx1mydb.ora'

SIZE10MAUTOEXTENDONNEXT5MMAXSIZEUNLIMITED

DEFAULTSTORAGE

(INITIAL100KNEXT100K

MINEXTENTS1MAXEXTENTSUNLIMITEDPCTINCREASE1)

ONLINE;

REM****创建两个公共回滚段****************

CREATEPUBLICROLLBACKSEGMENTRB0TABLESPACE"RBS";

CREATEPUBLICROLLBACKSEGMENTRB1TABLESPACE"RBS";

ALTERROLLBACKSEGMENT"RB0"ONLINE;

ALTERROLLBACKSEGMENT"RB1"ONLINE;

REM****设定SYS和SYSTEM使用的表空间****************

ALTERUSERSYSTEMPORARYTABLESPACETEMPORARY;

ALTERUSERSYSDEFAULTTABLESPACESYSTEM;

ALTERUSERSYSTEMTEMPORARYTABLESPACETEMPORARY;

ALTERUSERSYSTEMDEFAULTTABLESPACEUSR;

spooloff

备注:完毕后(1)在注册表中设置ORACLE_SID(2)配置Net8Assist。

Oracle数据库系统培训讲义

58

第五讲表空间管理

表空间是数据库的逻辑划分。每个数据库可以含有一个或多个表空间(至少

得含有一个系统表空间SYSTEM),并且每个表空间只能属于一个数据库。数据

库中的所有数据逻辑上都存储在数据库的表空间中。表空间在物理上由一个或多

个数据文件构成。

由于表空间起逻辑划分和组织模式对象及其数据的作用,因此在实际的应用

中,每个数据库部应该有多个表空间。多表空间的数据库在管理和性能方面都优

于单表空间数据库。多表空间数据库有以下优点

可以把系统数据(数据字典中的数据)和用户数据分离开。

把一个应用系统的数据与其它应用系统的数据分离。

把不同表空间的数据文件分别放在不同的磁盘上以减少I/O竞争。

分离回滚段和用户数据,防止由于某个磁盘的损坏而导致数据的永久性

丢失。

使个别表空间单独脱机。

为特定类型数据库应用保留一个表空间,例如只读活动、临时段存储等。

单独地备份某个表空间。

数据库初建时只有一个表空间(SYSTEM表空间),为了实现上述多表空间的

优点,需要数据库管理员来创建后续的表空间。本讲将以表空间的创建为中心讲

解以下内容:

创建表空间

表空间的存储空间管理

改变表空间的可用性

只读表空间管理

删除表空间

一.创建表空间

任何一个数据库的第一个表空间都是SYSTEM表空间,它是在创建数据库

时自动创建的。在数据库创建之后,由于以下原因,可能还需要创建其它的表空

间:

为数据库分配更多的磁盘存储空间,以扩大数据库的容量。

为了使某类数据与其它数据分开,需要为其创建一个单独的表空间。

表空间按用途不同可以分为两类(SYSTEM表空间除外):普通表空间和临

Oracle数据库系统培训讲义

59

时表空间。

普遍表空间用于存放用户数据,临时表空间用于存放一些数据库操作,例如

排序操作产生的临时数据。

下面分别讲解如何创建这两类表空间。

1.创建普通表空间

创建表空间要求操作者具有CREATETABLESPACE系统特权。当发出创建

表空间的命令后,表空间对应的数据文件是通过操作系统创建的,而数据文件的

分配和格式化是由Oracle自动完成的。

创建表空间的SQL命令是CREATETABLESPACE,它的语法如下:

CREATETABLESPACEtablespaceDATAFILEfilespec[autoextend_clau]

[MINIMUMEXTENTnK|M][LOGGING|NOLOGGING]

[DEFAULTstorage_clau][ONLINE|OFFLINE]

[PERMANENT|TEMPORARY];

其中,数据文件(DATAFILE)描述符filespec的语法为:

‘filename’[SIZEnK|M][REUSE]

autoextend_clau子句的语法为:

OFF|ON[NEXTnK|M][MAXSIZE|UNLIMITED]

下面解释CREATETABLESPACE命令各选项的含义:

tablespace:要创建的表空间的名称。

DATAFILE:指定组成表空间的数据文件。

MINIMUMEXTENTn:控制表空间中的自由空间片,方法是保证表空间中

每个使用的或自由的范围的尺寸至少是n的倍数。

AUTOEXTEND:决定是否可以自动扩展数据文件。如果设为OFF,则禁止

自动扩展数据文件。如果设为ON,表示允许自动扩展数据文件。此时NEXT

的值指定当申请了较多的扩展空间时,自动分配给数据文件的磁盘空间下一

个增量的字节大小。可以用K和M代表千字节和兆字节,缺省值是一个数

据块。MAXSIZE

为数据文件自动扩展允许的最大磁盘空间,UNLIMITED表示不受限制。

LOGGING|NOLOGGING:指定在该表空间的所有表、索引和分区的缺省日

志属性。缺省为LOGGING,表示记载日志。表空间级的日志属性可以被表、

索引或分区级定义的日志属性所取代。在NOLOGGING方式下,不对数据

修改做日志,因此要做好备份。

DEFAULTstorage_clau:为该表空间中建立的全部对象指定缺省的存储参

数。稍后将讲解storage_clau干句的用法。

ONLINE:使表空间在创建后立即联机。

Oracle数据库系统培训讲义

60

OFFLINE:使创建后的表空间处于脱机状态。如果忽略ONLINE和OFFLINE

选项,Oracle缺省的方式是使建立的表空间联机。

PERMANENT:指定表空间用于存储永久对象,这是缺省设置。

TEMPORARY:指定表空间用于存储临时对象。

storage_clau子句的语法为:

STORAGE([INITIALnK|M][NEXTnK|M][MINEXTENTn]

[MAXEXTENTSn|UNLIMITED][PCTINCREASEn])

INITIAL:指定对象的第一个范围的字节数。当你创建模式(Schema)对象

时,Oracle为这个范围分配空间。可以用K(千字节)或M(兆字节)来指

定空间。缺省值是5个数据块,最小值是2个数据块,最大值取决于操作系

统。

NEXT:指定分配给对象的下一个范围的字节数,也可以用K(千字节)或

M(兆

字节)来指定空间。缺省值是5个数据块,最小值是2个数据块,最大值取

决于操作系统。对于大于5个数据块的值,Oracle会取一个能使碎片最小的

值。

MINEXTENTS:指定当创建对象时分配的范围的总数,该参数允许在创建

一个对象时分配一个很大的空间,即使空间的可用部分不连续。它的缺省值

是1,含义是Oracle仅分配初始范围,最大值取决于操作系统。如果

MINEXTENTS的值大于1,那么Oracle根据INITIAL、NEXT和

PCTINCREASE的值计算下一个范的的大小。

MAXEXTENTS:指定Oracle可以分配给对象的范围的总数,包括第一个范

围。最小值是1,缺省值和最大值取决于操作系统。UNLIMITED表示按需

要自动分配范围。

PCTINCREASE:指定第三个和以后的范围比前一个范围增长的百分率。缺

省值是50,表示每个扩展比前一个大50%。最小值是0,表示第一个范围之

后的所有范围的大小都相同。最大值取决于操作系统。

下面举例说明如何创建表空间。

例一:

为数据库PXDB创建一个用户数据表空间USER_DATA,它的数据文件为:

‘C:ORANTDATABASEUSR1PXDB.ORA’,尺寸为10M。

CREATETABLESPACEUSER_DATA

DATAFILE‘C:ORANTDATABASEUSR1PXDB.ORA’SIZE10M

DEFAULTSTORAGE(

INITIAL50K

Oracle数据库系统培训讲义

61

NEXT50K

MINEXTENTS2

MAXEXTENTS50

PCTINCREASE0);

2.创建临时表空间

如果希望提高多个排序操作的并发性能,减少它们的开销,可以创建临时表

空间。在临时表空间内,给定实例和表空间的所有排序操作共享一个单独的排序

段。另外,在临时表空间中不能存放永久性的对象。

创建临时表空间与创建普通表空间使用的SQL命令是相同的,只是在创建

临时表空间时需要带TEMPORARY选项。

下面举例说明如何创建临时表空间。

例一:

为数据库PXDB创建一个名为TEMPSEG的临时表空间,它对应的数据文

件为“c:orantdatabatmp1pxdb.ora”,尺寸为10M。

CREATETABLESPACEtempg

DATAFILE‘c:orantdatabatmp1pxdb.ora’SIZE10M

TEMPORARY;

二.表空间的存储空间管理

表空间的存储空间管理包括两方面的内容:

修改表空间的存储设置

合并自由空间

1.修改表空间的存储设置

修改表空间的缺省存储参数,可以改变将来在该表空间中创建的新对象的缺

省特征。例如,创建对象时分配给它的第一个范围的字节数。修改表空间的缺省

存储参数的SQL命令是ALTERTABLESPACE,执行该命令需要ALTER

TABLESPACE系统特权。

ALTERTABLESPACE命令可用于增加数据文件、改变缺省存储参数设置、

使表空间联机或脱机等。下面是改变表空间缺省存储参数设置的语法:

ALTERTABLESPACEDEFAULTSTORAGE

([INITIALnK|M]

[NEXTnK|M]

Oracle数据库系统培训讲义

62

[MINEXTENTSn]

[MAXEXTENTSn|UNLIMITED]

[PCTINCREASEn]);

上述命令各选项的用法请参阅上一节中的storage_clau子句。

例如,下面的命令用于改变表空间ur_data的缺省存储参数。

ALTERTABLESPACEur_dataDEFAULTSTORAGE

(INITIAL100K

NEXT50K

MINEXTENTS2

MAXEXTENTS20

PCTINCREASE50);

注意,表空间缺省存储参数的新值仅影响将来的空间分配。

2.合并自由空间

经过一段时间的使用,由于不断的分配和释放空间,表空间的碎片会逐渐增

多。当碎片非常多时,就需要合并自由空间碎片,以提高空间分配的性能。

合并自由空间碎片的SQL命令是ALTERTABLESPACE,执行该命令需要

具有ALTERTABLESPACE系统特权。命令的语法如下:

ALTERTABLESPACEtablespaceCOALESCE;

其中,tablespace是要合并自山空间的表空间的名称。

例如,合并表空间ur_data中自由空间碎片的命令如下:

ALTERTABLESPACEur_dataCOALESCE:

三.改变表空间的可用性

在讲述创建表空间的命令时我们曾提到,表空间有两种状态:联机状态和脱

机状态。当表空间处于联机状态时,数据库用户可以被用存储在该表空间中的数

据库对象。反之,当表空间脱机时,存储在该表空间中的数据库对象是不可用的。

改变表空间的可用性,也就是改变表空间的联机和脱机状态。下面讲解如何

使表空间联机和脱机。

1.表空间联机

只要数据库已经打开,任何时候都可以使数据库中的任何表空间联机。通常,

表空间在创建后都处于联机状态,因此,表空间中的数据都可以被数据库用户所

Oracle数据库系统培训讲义

63

使用。在任何一个数据库中都有一个特殊的表空间SYSTEM,它必须一直处于

联机状态,因为在这个表空间中存放着系统的数据字典,Oracle需要使用这些数

据来维持系统的正常工作。

使表空间联机的SQL命令是ALTERTABLESPACE,执行该命令需要

MANAGETABLESPACE系统特权。命令的语法如下:

ALTERTABLESPACEtablespaceONLINE;

其中,tablespace表示要联机的表空间名。

注意,如果一个表空间是由于发生错误而脱机的,那么在使该表空间联机前

首先应执行介质恢复,否则表空间联机操作会失败。关于如何执行介质恢复,请

参阅“各份与恢复”部分。

假设表空间ur_data由于系统管理需要被正常脱机,那么执行下面的命令

即可使它联机。

ALTERTABLESPACEur_dataONLINE:

2.表空间脱机

有时,为了执行特定的系统管理操作,需要将某个表空间脱机,例如:

需要使数据库的某一部分(一个或几个表空间)不可用。

对某个表空间执行脱机备份操作。

在执行应用程序维护时,需要临时禁止使用某个应用和它的表。

使表空间脱机的SQL命令是ALTERTABLESPACE,执行该命令需要

MANAGETABLESPACE系统特权。命令语法如下:

ALTERTABLESPACEtablespaceOFFLINE

NORMAL|TEMPORARY|IMMEDIATE|FORRECOVER;

tablespace:要脱机的表空间名称。

NORMAL:该选项是缺省值,它使Oracle向表空间中的所有数据文件发出

一个检查点。使用此选项时,所有数据文件当前必须联机。如果数据库运行

在NOARCHIVELOG,则必须使用这个选项。

TEMPORARY:对所有的联机数据文件执行一个检查点,但不确保所有的数

据文件都可以写。任何脱机的数据文件在联机前都可能需要介质恢复。

IMMEDIATE:不保证表空间的数据文件是可用的,也不执行检查点。表空

间在重新联机前必须执行介质恢复。

FORRECOVER:用于在联机恢复表空间前,使该表空间脱机。

例如,执行下面的命令即可使表空间ur_data脱机。

ALTERTABLESPACEur_dataOFFLINENORMAL;

注意,在使用ALTERTABLESPACE命令使表空间脱机时,应尽可能地使用

NORMAL选项。这个选项可以保证表空间在返回联机状态时不需要执行介质恢

Oracle数据库系统培训讲义

64

复。

四.只读表空间管理

顾名思义,只读表空间就是只允许从中读取数据,而不能写数据的表空间。

这类表空间通常用于保存一些不允许用户修改的数据。

表空间在变为只读表空间前必须满足以下条件:

表空间必须处于联机状态。

在整个数据库中,不能存在活动的事务。这是为了确保在表空间中不存在需

要回退的事务。

表空间中不包括任何活动的回滚段。由于这个原因,SYSTEM表空间永远不

能作为只读表空间,因为它包含一个SYSTEM回滚段。另外,只读表空间

不需要回滚段,因此,在制作只读表空间前可以把该表空间中的回滚段删除。

表空间不能处于联机备份状态,因为当备份结束时,系统要更新表空间的所

有数据文件的文件头。

如果数据库运行在受限模式下,上述条件非常容易实现。因为在受限模式下,

只有具有RESTRICTEDSERSION系统特权的用户才可以登录到数据库。在启

动数据库时,如果STARTUP命令带有RESTRICT选项,则数据库将以受限模式

运行。

任何表空间在最初创建时都是可读写的表空间。为了阻止用户对表空间中的

数据进行修改,我们可以把一个可读写的表空间改为只读表空间。制作只读表空

间的SQL命令是ALTERTABLESPACE,执行该命令需要ALTERTABLESPACE

系统特权。命令语法如下:

ALTERTABLESPACEtablespaceREADONLY;

其中,tablespace是表空间的名称。

例如,执行下面的命令即可把表空间ur_data改为只读表空间。

ALTERTABLESPACEur_dataREADONLY:

如果确实需要修改只读表空间中的数据,也可以把只读表空间恢复为可读写

的表空间,命令语法如下:

ALTERTABLESPACEtablespaceREADWRITE;

例如,执行下面的命令即可把表空间ur_data恢复为可读写的表空间。

ALTERTABLESPACEur_dataREADWRITE;

值得一提的是,只读表空间处于一种特殊的状态,它既不是联机也不是脱机。

因此,使表空间联机或脱机的ALTERTABLESPACE命令不会对表空间的只读

状态产生影响,但它却可以使表空间的所有数据文件联机或脱机。

Oracle数据库系统培训讲义

65

五.删除表空间

对于不再需要的表空间,可以把它和它所包含的内容从数据库中删除。在

Oracle数据库中,除SYSTEM表空间外,其它表空间都可以被删除。但是,删

除表空间需要具有DROPTABLESPACE系统特权。

删除表空间的SQL命令是DROPTABLESPACE,命令的语法如下:

DROPTABLESPACEtablespace

[INCLUDINGCONTENTS[CASCADECONSTRAINTS]];

tablespace:要删除的表空间名称。

INCLUDINGCONTENTS:如果表空间中包含内容,则在删除表空间时必须

指定该选项,否则删除操作失败。该选项用于删除表空间中的所有内容。但

是,如果表空间中只包含分区表的一部分,而非全部,那么即使指定了该选

项,删除操作也会失败。

CASCADECONSTRAINTS:如果数据库中存在与此表空间中的表相关的参

照完整性约束,则在删除表空间时必须指定该选项,否则删除操作失败。该

选项用于删除与此表空间中表相关的所有参照完整性约束。

下面举例说明如何删除表空间。

例一:

假设表空间ur_data1中包含内容,那么执行下面的命令即可将该表空间删

除。

DROPTABLESPACEur_data1

INCLUDINGCONTENTS;

例二:

假设表空间ur_data2中包含内容,并且其它表空间中的表存在与该表空间

中的表的参照完整性约束,那么执行下面的命令可以删除该表空间。

DROPTABLESPACEur_data1

INCLUDINGCONTENTS

CASCADECONSTRAINTS;

删除表空间的几点注意事项:

删除表空间是一个非常危险的操作。表空间一旦被删除,其中的数据就不能

再恢

复了。因此,在删除表空间之前和之后都应对数据库做完全备份,以备将来

恢复之用。

包含活动段的表空间不能被删除。例如,表空间中的某个表正在被使用着,

或者表空间中包含一个活动的回滚段,则不能删除该表空间。

Oracle数据库系统培训讲义

66

表空间在被删除之后,它的入口仍被保留在数据字典中,但状态已经变为

“INVALID”。

删除表空间只是从控制文件中删除了与之对应的文件指针。并没有物理地把

表空间的数据文件从磁盘上删除。如果要释放这部分磁盘空间,则需手工删

除这些文件。

六.查看表空间信息

Oracle数据库中的所有系统信息都保存在数据字典中,通过查询数据字典即

可得到这些信息。与表空间相关的有以下数据字典:

USER_EXTENTS、DBA_EXTENTS

USER_SEGMENTS、DBA_SEGMENTS

USER_FREE_SPACE、DBA_FREE_SPACE

DBA_USERS

DBA_TS_QUOTAS

USER_TABLESPACES、DBA_TABLESPACES

DBA_DATA_FILES

V$DATAFILE

注意,查询数据字典需要具有SYSDBA特权或SELECT_CATALOG_ROLE

角色。下面举例说明如何查看与表空间相关的信息。

例一:

通过查询数据字典视图DBA_TABLESPACES,查看当前数据库中表空间的

名称和缺省存储参数。

SELECTtablespacename“TABLESPACE”,

Initial_extent“INITIAL_EXT”,

Next_extent“NEXT_EXT”,

Min_extents“MIN_EXT”,

Max_extents“MAX_EXT”,

Pct_increa

FROMSYS.DBA_TABLESPACES;

在上面的查询结果中,TABLESPACE列显示了当前数据库中表空间的名称;

INITIAL_EXT列显示了在对应表空间中创建对象时,分配给对象的第一个范围

的字节数;NEXT_EXT列显示了分配给对象的下一个范围的字节数;MIN_EXT

列显示了创建对象时分配给该对象的范围数;MAX_EXT列显示了可以分配给

每个对象的范围总数;PCT_INCREASE列显示了后一个范围比前一个范围增长

Oracle数据库系统培训讲义

67

的百分率。

例二:

通过查询数据字典视图DBA_DATA_FILES,查看和表空间相关的数据文件

的信息。

SELECTfile_name,bytes,tablespace_name

FROMsys.DBA_DATA_FILES;

在上面的查询结果中,FILE_NAME列显示了数据文件的名称;BYTES列

显示了数据文件的大小(字节数);TABLESPACE_NAME列显示了数据文件对

应的表空间的名称。

Oracle数据库系统培训讲义

68

第六讲数据文件管理

数据文件实质上就是一个物理的磁盘文件(也称操作系统文件),它是表空

间的物理组成元素。每个数据文件只能属于一个表空间,并且数据文件一旦加入

到某个表空间后就不能再从这个表空间中删除,也不能再和其它表空间关联。

数据库中的所有对象和数据最终都物理地存放到了数据文件中,例如,表和

表中的数据、视图、存储过程等。因此,数据文件的管理将直接影响数据库的性

能。例如,把数据文件和日志文件放在不同的磁盘上可以提高系统的效率,因为

这样可以避免读写数据文件和写日志文件的UO竞争。

本讲将就数据文件的管理讲述以下内容:

规划数据文件

创建数据文件

改变数据文件的尺寸

改变数据文件的可用性

重新命名数据文件

查看数据文件信息

一.规划数据文件

由于数据库中的数据都存放在数据文件中,所以能否有效地管理数据文件将

直接影响数据库的性能。管理数据文件需要考虑以下几方面的问题:

数据文件的数目

数据文件的尺寸

数据文件的位置

下面分别从这三个方面来讨论如何管理数据文件。

1.数据文件的数量

从理论上讲,一个Oracle数据库可拥有任意数量的数据文件。但是,在决

定数据文件的数目时,应该注意以下事项:

从数据库的性能来讲,少量的大数据文件要优于大量的小数据文件。因为这

样可以减少同时打开的文件个数。

操作系统通常会限制每个过程可以同时打开的文件数目。当达到这个限制

时,将不能再创建数据文件。

Oracle数据库系统也会限制每个数据库实例可打开的数据文件的数量。这个

Oracle数据库系统培训讲义

69

限制是通过初始化参数DB_FILES来实现的,该参数的缺省值取决于操作系

统。

在创建数据库时,参数MAXDATAFILES决定了在控制文件中用于记录数据

文件的部分的大小,这也将限制数据库可以拥有数据文件的数量。

2.数据文件的尺寸

每个Oracle数据库的第一个数据文件(用于SYSTEM表空间)不得小于7M,

以便容纳初始的数据字典和回滚段。另外,如果还需要安装其它的Oracle产品,

则这些产品可能也要占用SYSTEM表空间。至于其它的数据文件,则可以根据

需要确定其大小,并没有特殊的要求。

3.数据文件的位置

由于表空间的物理位置是由构成它的数据文件的位置决定的,因此,数据文

件的物理位置将影响数据库的性能。例如,把存放表的表空间的数据文件和存放

索引的表空间的数据文件分别放在不同的磁盘上,可以改善数据库的性能。因为

如果这样的话,当查询表中的数据时,两块磁盘可以同时工作,从而可以同时读

取表和索引数据。

出于安全考虑,应该把数据文件和日志文件放在不同的磁盘上,这样当某个

磁盘损坏时,就不至于把数据文件和日志文件都丢失了。但是,如果数据库的每

个日志组都具有多个日志成员,那么数据文件和日志文件也可以放在同一个磁盘

上,因为多份日志文件同时丢失的可能性较小。

二.创建数据文件

数据文件是必须从属于某个表空间的,因此,创建数据文件也就是为某个表

空间添加数据文件,或者是在创建表空间的同时创建数据文件。理想情况下,在

创建表空间时,DBA(数据库管理员)应事先估计好将来存储在此表空间上的

数据库对象和数据的尺寸,以便分配足够的存储空间。但是,准确地预计表空间

尺寸是非常困难的,通常需要在数据库运行阶段增加数据文件以扩大表空间。

为己存在的表空间增加数据文件的SQL命令是ALTERTABLESPACE,执

行此命令需要ALTERTABLESPACE系统特权。命令的语法如下:

ALTERTABLESPACEtabelspace

ADDDATAFILEfilespec[autoextend_clau]

tabelspace:要增加数据文件的表空间的名称。

filespec:增加的数据文件。有关数据文件描述符filespec的详细解释,请参

阅“创建表空间”部分。

Oracle数据库系统培训讲义

70

autoextend_clau:该子句用于决定是否可以自动扩展数据文件。有关

autoextend_clau子句的详细解释,请参阅“创建表空间”部分。

例如,下面的命令为表空间USER_DATA增加了一个数据文件文件

“USR2PXDB.ORA”,文件大小为2M。

ALTERTABLESPACEUSER_DATA

ADDDATAFILE‘c:orantdatabausr2pxdb.ora’SIZE2M;

三.改变数据文件的尺寸

改变数据文件尺寸有两种方法,一种是让数据文件根据空间需求自动扩展,

另一种是手工改变数据文件的尺寸。下面分别介绍这两种方法。

1.允许或禁止数据文件自动扩展

数据文件自动扩展是指当需要分配更多的空间,而现有数据文件无法提供

时,数据文件会根据需要自动增加自身的尺寸。数据文件的这种自动扩展的属性

既可以在创建时指定,也可以在创建之后指定,并且也可以随时取消这种属性。

以下的SQL命令可以为数据文件指定自动扩展属性:

CREATEDATABASE

CREATETABLESPACE

ALTERDATABASE

ALTERTABLESPACE

上述命令的一个共同特点是,它们都可以带有autoextend_clau(自动扩展)

子句。在自动扩展子句中,我们可以打开(ON)或关闭(OFF)数据文件的自

动扩展属性。

打开数据文件的自动扩展属性有以下好处:

可以减少表空间溢出所需的维护工作。

可以确保应用程序不会由于分配的空间无法得到而被迫停止运行。

下面举例说明如何改变数据文件的自动扩展属性。

例一:

下面的命令为表空间USER_DATA增加了一个数据文件

USR3PXDB.ORA,并且允许该数据文件自动扩展。

ALTERTABLESPACEur_data

ADDDATAFILE‘c:orantdatabausr3pxdb.ora’SIZE10M

AUTOEXTENDON

NEXT512K

Oracle数据库系统培训讲义

71

MAXSIZE250M;

例二:

假设由于磁盘空间不足,我们需要禁止数据文件的自动扩展。那么,执行

下面的命令即可关闭数据文件USR3PXDB.ORA的自动扩展属性。

ALTERTABLESPACEur_data

DATAFILE‘c:orantdatabausr3pxdb.ora’

AUTOEXTENDOFF;

2.手工改变数据文件尺寸

手工改变数据文件尺寸是指通过手工执行SQL命令来增大或减小数据文件

的尺寸。只要磁盘空间允许,增大数据文件的尺寸一般没有什么限制。但是,减

小数据文件的尺寸时需要注意,一定要保证数据文件的尺寸能够容纳已有的对象

和数据。

改变数据文件尺寸的SQL命令是ALTERDATABASE,执行该命令需要只

有ALTERDATABASE系统特权。命令的语法如下:

ALTERDATABASEDATAFILE‘filename’RESIZEnK|M;

filename:要改变尺寸的数据文件的名称。

n:指定数据文件新尺寸的整数,单位可以是K(千字节)或M(兆字节)。

下面举例说明如何手工改变数据文件的尺寸。

例一:

假设数据文件USR2PXDB.ORA不可以自动扩展,那么执行下面的命令可

以将其容量由10M增大到15M。

ALTERDATABASE

DATAFILE‘c:orantdatabausr2pxdb.ora’

RESIZE15M;

例二:

假设数据文件usr1pxdb.ora的现有容量为50M,而实际只需要20M就足够

了,那么可以执行下面的命令将其容显减小到20M。

ALTERDATABASE

DATAFILE‘c:orantdatabausrlpxdb.ora’

RESIZE20M;

四.改变数据文件的可用性

数据文件有两种状态:联机状态和脱机状态。只有处在联机状态下,数据文

Oracle数据库系统培训讲义

72

件才可以被数据库使用。改变数据文件的可用性就是改变它所处的状态,以允许

或禁止访问数据文件。

下面分别讲解如何数据文件联机和脱机。

1.数据文件联机

数据文件在创建成功后就处于联机状态。但是,在极少数的情况下,需要手

工使数据文件联机。例如,当Oracle写数据文件发生错误时,它会自动使数据

文件脱机。在修复后,就而要手工使数据文件联机。

使数据文件联机的SQL命令是ALTERDATABASE,执行该命令需要具有

ALTERDATABASE系统特权。命令语法如下:

ALTERDATABASEDATAFILEfilenameONLINE:

filename:要联机的数据文件的名称。

ONLINE:表示攸数据文件联机。

假设数据文件USR3PXDB.ORA现在处于脱机状态,那么执行下面的命令

即可使该文件联机。

ALTERDATABASE

DATAFILE‘c:orantdatabausr3pxdb.ora’ONLINE;

2.数据文件脱机

使数据文件脱机的SQL命令是ALTERDATABASE,执行该命令需要具有

ALTERDATABASE系统特权。命令语法如下:

ALTERDATABASEDATAFILEfilenameOFFLINE[DROP];

filename:要脱机的数据文件的名称。

OFFLINE:使数据文件脱机。如果脱机时数据库是打开的,那么在使数据文

件回到联机状态之前应执行介质恢复。因为在脱机前没有在数据文件上执行

检查点。

DROP:当数据库处于NOARCHIVELOG模式时,使数据文件脱机。

例如,执行下面的命令即可使数据文件USR3PXDB.ORA脱机。

ALTERDATABASE

DATAFILE‘c:orantdatabausr3pxdb.ora’

OFFLINEDROP;

五.重新命名数据文件

重新命名数据文件实质就是改变控制文件中用于记录数据文件的指针,它并

不物理地改变操作系统文件的名称。

Oracle数据库系统培训讲义

73

Oracle提供了以下两种重新命名数据文件的方式:

在数据库打开(OPEN)的状态下,重新命名单个表空间的数据文件。

在数据库安装(MOUNT)但未打开的状态下,同时重新命名多个表空间的

数据文件。

下面分别讲解这两种重新命名数据文件的方式。

1.重新命名单个表空间的数据文件

要想重新命名单个表空间(非SYSTEM表空间)的数据文件,必须具有

ALTERTABLESPACE系统特权。具体步骤如下:

1)使包含数据文件的表空间(不能是SYSTEM表空间)脱机。

2)将数据文件复制到新的位置(具体方法因操作系统而异)。

3)使用带有RENAMEDATAFILE选项的ALTERTABLESPACE命令将数据

文件改名。具体的命令语法如下:

ALTERTABLESPACEtablespace

RENAMEDATAFILE‘res_filename’TO‘des_filename’;

tablespace:表空间名称。

res_filename:源文件名列表,可以是一个或多个由逗号分隔的文件名。

des_filename:目标文件名列表,可以是一个或多个由逗号分隔的文件名。

但必须与源文件名列表相匹配。

假设由于磁盘空间管理的需要,必须把表空间USER_DATA的数据文件

USR1PXDB.ORA和USR2PXDB.ORA由C盘移动到D盘。那么可以通过

如下步骤实现上述要求:

1)执行下面的命令使表空间USER_DATA脱机。

ALTERTABLESPACEUSER_DATAOFFLINENORMAL;

2)将数据文件USR1PXDB.ORA和USR2PXDB.ORA由C盘复制到D

盘。

COPYc:orantdatnbausrlpxdb.orad:orantdatabausrlpxdb.ora

COPYc:orantdatabausr2pxdb.orad:orantdatabausr2pxdb.ora

3)执行下面的命令重新命名数据文件。

ALTERTABLESPACEur_data

RENAMEDATAFILE

‘c:orantdatnbausrlpxdb.ora’,‘c:orantdatabausr2pxdb.ora’

TO‘d:orantdatabausrlpxdb.ora’,‘d:orantdatabausr2pxdb.ora’;

2.同时重新命名多个表空间的数据文件

如果要同时重新命名多个表空间的数据文件,或者重新命名SYSTEM表空

间的数据文件,需要具有ALTERDATABASE系统特权,而且方法也与重新命

名单个表空间的数据文件的不同。具体步骤如下:

Oracle数据库系统培训讲义

74

1)确保数据库已经被安装(MOUNT),但未被打开。

2)将数据文件复制到新的位置(具体方法因操作系统而异)。

3)使用带有RENAMEFILE选项的ALTERDATABASE命令将数据文件改名。

具体的命令语法如下:

ALTERDATABASE

RENAMEFILE‘res_filename’TO‘des_filename’;

res_filename:源文件名列表,可以是一个或多个由逗号分隔的文件名。

des_filename:目标文件名列表,可以是一个或多个由逗号分隔的文件名。但

必须与源文件名列表相匹配。

下面举一个例子。假设需要把表空间USER_DATA1的数据文件USER1.ORA

和表空间USER_DATA2的数据文件USER2.ORA由C盘移动D盘,那么可以

通过以下步骤实现:

l)启动数据库实例并安装(MOUNT)数据库,但不打开数据库。

SVRMGR>STARTUPMOUNT

2)将数据文件USER1.ORA和USER2.ORA由C盘复制D盘。

COPYc:orantdatabascurl.orad:orantdatabaurl.ora

COPYc:orantdatabaur2.orad:orantdatabaur2.ora

3)执行如下SQL命令,重新命名上述数据文件。

ALTERDATABASE

RENAMEFILE

‘c:orantdatabaurl.ora’,‘c:orantdatabaur2.ora’

TO‘d:orantdatabaurl.ora’,‘d:orantdatabaur2.ora’;

六.查看数据文件的信息

与数据文件相关的信息被记录在系统的数据字典中,通过查询数据字典即可

得到这些信息。和数据文件相关的有以下数据字典:

USER_EXTENTS,DBA_EXTENTS

USER_SEGMENTS,DBA_SEGMENTS

USER_FREE_SPACE,DBA_FREE_SPACE

DBA_USERS

DBA_TS_QUOTAS

USER_TABLESPACES,DBA_TABLESPACES

DBA_DATA_FILES

Oracle数据库系统培训讲义

75

V$DATAFILE

注意,查询数据字典需要具有SYSDBA特权或SELECT_CATALOG_ROLE

角色。下面举例说明如何通过数据字典查看数据文件的相关信息。

假设要查看当前数据库所有数据文件的信息,可以执行如下的SQL语句:

SELECTname,file#,status,checkpoint_change#“CHECKPOINT”

FROMV$DATAFILE;

查询结果类似如下:

在上面的查询结果中,NAME列显示了数据文件对应的操作系统文件名;

FILE#列显示了该文件的文件号;STATUS列显示了数据文件的状态,SYSTEM

表示此文件是构成SYSTEM表空间的数据文件,ONLINE表示此数据文件当前

处于联机状态,OFFLINE表示此数据文件当前处于脱机状态;CHECKPOINT列

显示了每个数据文件的最近的检查点。

Oracle数据库系统培训讲义

76

第七讲数据库用户管理

对于任何一个信息系统,安全是至关重要的。作为信息系统中数据的载体,

数据库的安全就显得更为重要了。Oracle数据库管理系统提供了一套以用户为

核心的安全机制,本讲将从以下几个方面讲解Oracle管理用户和控制用户的方

法:

Oracle用户的分类

限制与Oracle连接的会话数

限制数据库中的用户数

用户身份验证

Oracle用户管理

系统资源使用限制

一.Oracle用户的分类

在Oracle数据库中,用户的分类方式有多种,本节将从以下两个方面进行

讲解

初始数据库用户:讲述数据库初建时包含的用户以及它们具有的权限。

数据库用户的一般划分:按照通常的使用习惯,用户被划分为哪些类。

1.初始数据库用户

任何一个Oracle数据库,最初创建时它只有三个用户SYS、INTERNAL和

SYSTEM。其中,SYS和INTERNAL是数据库管理员(也称为DBA,是指具有SYSDBA

和SYSOPER系统特权的用户,我们将在本节的后面详细介绍这两种特权),它们

可以启动和关闭数据库实例。但是要注意,INTERNAL用户是为了与以前版本的

Oracle兼容而保留的,在数据库中实际上不存在此用户,它对应于数据库用户

SYS。SYSTEM是一个辅助的管理员,他不能启动和关闭数据库,但是他可以执行

一些其它的管理操作,例如创建用户、删除用户。因此,他类似于安全管理员。

下表列出了和这三个用户相关的一些信息。

Oracle数据库系统培训讲义

77

用户名缺省口令系统特权角色

SYS、INTERNAL

创建实例时指定的口令。但

是,SYS以普通用户身份录

时,口令为CHANGEON

INSTALL

SYSDBA和

SYSOPER

具有所有的

预定义角色

SYSTEMMANAGER

UNLIMITED

TABLESPACE

DBA

注:UNLIMITEDTABLESPACE特权可使用户无限制地攸用数据库的各个表空间。

下面以缺省数据库实例ORCL为例,说明这三个用户如何以不同身份登录到

数据库。缺省数据库实例的口令是ORACLE。

l)INTERNAL用户登录到数据库的方法如下:

SVRMGR>CONNECTINTERNAL/ORACLE@ORCL

2)SYS用户以数据库管理员身份登录到数据库的方法如下:

SVRMGR>CONNECTSYS/ORACLE@ORCLASSYSDBA

3)SYS用户以普通用户身份登录到数据库的方法如下:

SVRMGR>CONNECTSYS/CHANGE_ON_INSTALL@ORCL

另外,在数据库中可以同时存在多个数据库管理员。当初始化参数REMOTE_

LOGIN_PASSWORDFILE的值为EXCLUSIVE时,可以把管理员特权SYSDBA和

SYSOPER授予其他用户,使其成为数据库的DBA。例如,把SYSDBA系统特权授

予用户SCOTT的命令如下:

SVRMGR>GRANTSYSDBATOSCOTT;

通过查询数据字典现图V$PWFILE_USERS,可以知道当前数据库中那些用户具

有管理员特权。例如,在服务器管理器中发出如下查询命令:

SVRMGR>SELECT*FROMV$PWFILE_USERS;

查询结果如下:

USERNAMESYSDBSYSOP

--------------------

INTERNALTRUETRUE

SYSTRUETRUE

SCOTTTRUEFALSE

上述结果表明,INTERNAL和SYS用户同时具有SYSDBA和SYSOPER特权,而

用户SCOTT只具有SYSDBA特权。

前面我们曾讲过,数据库管理员(DBA)通常是具有SYSDBA和SYSOPER特权

的用户。下面来看看SYSDBA和SYSOPER特权可以执行的操作:

SYSDBA:该特权包含所有的系统特权(包括SYSOPER),并且带有

ADMINOPTION选项。它允许执行包括CREATEDATABASE命令和基于时间

Oracle数据库系统培训讲义

78

(timebad)的数据库恢复操作在内的所有操作。数据库管理员必须

具有此特权。

SYSOPER:允许执行STARTUP、SHUTDOWN、ALTERDATABASEOPEN/MOUNT、

ALTERDATABASEBACKUP、ALTERDATABASEBACKUP、ARCHIVELOG和RECOVER

命令,并且具有RESTRICTEDSESSION系统特权。与SYSDBA不同,此特

权仅限于执行上述操作,例如它不能执行CREATEDATABASE命令。数据

库管理员不一定要显式地具有此项特权。

2.数据库用户的一般划分

上一节讲述了数据库初建时,系统自动创建的用户和各用户具有的权限状

况。下面我们从使用的角度来看看,如何划分数据库用户。

在数据库创建之后,必然要创建用户并授予他们不同的特权。根据实际工作

的需要和授予用户的特权,通常人为地把数据库用户划分为如下几类:

数据库管理员

数据库管理员(DBA)是负责管理整个数据库的一个或一组用户。在数据库

中,DBA具有最高权限,他主要负责以下工作:

安装和升级0racle服务器和应用工具。

数据库系统存储空间的管理。

数据库结构的管理。例如,创建、修改和删除表空间。

控制、监视用户对Oracle数据库的访问。

调整和优化数据库性能。

制定和实施数据库的备份和恢复计划。

安全管理员

在大型的数据库系统中,数据库管理任务可能会非常繁重。因此,通常把与

数据库安全有关的管理工作交由安全管理员负责。但是,在小型系统中,一般由

DBA兼任。

应用开发者

应用开发者是数据库应用的设计和开发人员,他们主要负责以下工作:

设计和开发数据库应用。

为应用程序设计和修改数据库结构,估计存储空间的需求。

在应用开发期间,调整应用、指定应用的安全机制。

应用管理员

在数据库应用交付使用后,通常需要有专人负责应用程序的日常维护工作。

应用管理员负责发现和解决应用程序运行中出现的错误,或者把错误信息报告给

Oracle数据库系统培训讲义

79

数据库管理员。

普通数据库用户

普通数据库用户是指通过数据库应用与数据库进行数据交互的用户,他们主

要负责完成以下工作:

录入、修改和删除数据。

生成数据报表。

网络管理员

负责Oracle网络产品的管理工作,例如SOL*Net或Net8的管理。

注意,上述六类用户除DBA外,一般不做严格的区分。也就是说,一些用户

可以不设,或者由其他用户兼任。

在Oracle数据库中,用户的身份或者说他在数据库中具有的权力归根到底

是由授予该用户的系统特权和对象特权决定的。其中,系统特权控制着用户可以

执行的系统操作。例如,具有ALTERUSER系统特权的用户可以修改其他用户的

信息。而对象特权用于控制用户对其他用户的对象的访问。例如,如果用户

SYSTEM具有对用户SYS的表TYPE的SELECT对象特权,那么他就可以查询表

SYS.TYPE。

因此,在Oracle数据库中,用户权限管理实际上就是为用户授予和收回系

统特权和对象特权。为了便于权限的管理,Oracle还提供了另外一种机制——

角色。角色是一系列的系统特权、对象特权以及角色的集合。通过角色,管理员

可以一次授予或收回多项系统特权和对象特权。恰当地使用角色可以提高用户权

限管理的效率。有关特权和角色内容,将在后面的讲义中作详细介绍。

二.会话和用户许可

在使用Oracle数据库管理系统时,我们必须遵守Oracle公司的许可。也就

是说,只能在购买的Oracle许可范围内使用数据库系统。为了限制用户对数据

库的使用,可以采用两种方法;一是限制同一时刻连接到数据库的会话数,二是

限制数据库中可创建的用户数。针对这两种方法,Oracle提供了两种许可协议:

并发使用许可和命名用户许可。下面分别讲解这两种许可协议。

1.并发使用许可

并发使用许可用于限制并发使用数据库的会话数。也就是说,限制同一时刻

连接到数据库的会话数(注意,一个用户如果有多个并发会话,则每个会话都要

计数。因此,并发使用许可限制的不是用户个数,而是会话数)。并发使用许可

Oracle数据库系统培训讲义

80

数有两种实现方式:一是修改参数文件中的参数,二是使用命令修改参数。

通过修改参数文件实现并发使用许可限制

在启动数据库实例(Instance)前,修改参数文件inn.ora(sid代

表实例名)中的参数LICENSE_MAX_SESSIONS的值,可以永久地改变实例的最大

会话数。例如,要把实例ORCL的最大会话数设为50,并且希望以后每次启动实

例时都保持这个值,可以在文件initorcl.ora中增加如下的行:

LICENSE_MAX_SESSIONS=50

这样,在实例启动后,如果连接到数据库的会话数达到了50,用户再试图连

接到数据库时就会得到如下的提示信息:

Maximumnumberofssionlicenxceeded.

这表明已经超过了最大会话数询可。这时,只有具有RESTRICTEDSESSION

特权的用户才可以连接到数据库。通常该用户是一个数据库管理员,这时他可以

结束一些无用的进程,但最好不要增大许可限制,除非你已经升级了许可。

另外,如果你希望在达到最大值前得到一个警告,可以再为警告参数

LICENSE_SESSIONS_WARNING设置一个值,但这个位必须小于参数

LICENSE_MAX_ESSIONS的值。

使用命令实现并发使用许可限制

在数据库运行时可以通过ALTERSYSTEM命令修改实例的最大会话数和警告

他,但要求执行命令的用户具有ALTERSYSTEM系统特权。例如,把最大会话数

改为50,警告值改为45的命令如下:

ALTERSYSTEMSET

LICENSE_MAX_SESSIONS=50

LICENSE_SESSIONS_WARNING=45;

如果设定的值小于当前的会话数,那么,当前的会话仍然保留。但是,这个

值将会对以后的连接产生限制。

需要注意的是,使用命令对并发使用许可限制的设置仅对本次数据库运行有

效。也就是说,在下次启动数据库实例时,许可值又恢复到了参数文件中指定的

值。因此,要永久地改变设置,只能修改参数文件。

2.命名用户许可

命名用户许可用于限制在数据库中可创建用户的数目。同并发使用许可一

样,命名用户许可也有两种设置方法:修改参数文件和使用命令设置。

通过修改参数文件实现命名用户许可限制

在启动数据库实例(Instance)前,修改参数文件init.ora(sid代

表实例名)中的参数LICENSE_MAX_USERS的值,可以永久地改变数据库中最大

Oracle数据库系统培训讲义

81

可创建的用户数。例如,要把数据库实例ORCL的最大用户数设为30,并且希望

以后每次打开数据库时都保持这个值,可以在文件initorcl.ora中增加如下的

行:

LICENSE_MAX_USERS=30

当数据库中的用户数达到30时,如果再试图在数据库中创建用户,则会得

到如下信息:

CannotcreateurasLICENSE_MAX_USERSparameterexceeded.

这表明已经超过了最大可创建的用户数。如果确实需要再增加用户,则需要

修改参数LICENSE_MAX_USERS的值;然后重新启动数据库实例。

使用命令实现命名用户许可限制

在数据库运行时可以通过ALTERSYSTEM命令修改数据库的最大用户数,但

要求执行命令的用户具有ALTERSYSTEM系统特权。例如,把数据库的最大用户

数改为20的命令如下:

ALTERSYSTEM

SETLICENSE_MAX_USERS=20;

如果新设置的用户数小于当前数据库中已有的用户数,那么系统会返回一个

错误信息,并且仍保留原来的值。如果修改成功,这个值会一直保持有效直到下

次启动数据库。

3.查看许可限制和当前值

通过查询数据字典视图V$LICENSE,我们可以得到有关许可限制的值,以及

系统的当前值。具体的命令如下:

SELECTssions_max"最大会话数",ssions_warning"警告值"

ssions_current"当前会话数",urs_max"最大用户数"

FROMV$LICENSE;

执行上述命令的查询结果如下:

最大会话数警告值当前会话数最大用户数

------------------------------------

5045330

三.用户身份验证

当用户连接到数据库时,Oracle要对用户的身份进行验证,以确定用户是

否为合法的数据库用户。Oracle的用户验证方式有三种:数据库验证、外部验

证、企业验证。

Oracle数据库系统培训讲义

82

1.数据库验证

数据库验证是指用户的帐户、口令及身份鉴定都由Oracle数据库执行的验

证方式。使用这种方式,在创建或修改用户时必须为每个用户指定一个口令。在

Oracle数据库中,口令是以加密格式存放的。并且,不论你的数据库使用的是

单字节字符集还是多字节字符集,口令必须由单字节字符构成。

例如,下面的语句创建了一个采用数据库验证方式的用户:

CREATEUSERscottIDENTIFIEDBYtiger;

这种方式适用于中小用户团体的管理,并且使用起来也最方便。对于拥有大

量用户的企业,可以考虑使用其它的用户验证方式。

2.外部验证

当使用外部验证方式时,用户的帐户由Oracle数据库管理,但口令管理和

身份鉴定由外部服务完成。外部服务可以是操作系统或网络服务,例如Oracle

AdvancedNetworkingoption(ANO)。在这种模式下,对数据库帐户的访问限制

由外部服务来完成,因此,这种模式下的数据库登录不需要口令。

另外,如果外部服务允许的话,还可以使用操作系统帐户名加上一个特定的

前缀(通过设置参数OS_AUTHENT_PREFIX)作为数据库用户名。这样用户在连接

到数据库时,就不需要给出用户名和口令了。此时,Oracle会自动比较数据库

中的用户名和加了前缀的操作系统帐户名,如果找到了匹配的用户,则连接成功。

例如,设置参数OS_AUTHENT_PREFIX的值为OPS$(缺省值)。然后使用下面

的命令创建一个外部验证的用户LRX:

CREATEUSEROPS$LRX

IDENTIFIEDEXTERNALLY;

当操作系统用户LRX试图连接到数据库时,Oracle会在数据库中查找用户

OPS$LRX,如果找到了该用户,并且具有连接权限,则连接成功。连接的语法如

下:

SVRMGR>CONNECT

缺省情况下,Oracle只允许操作系统验证本地用户,例如连接于UNIX的终

端用户。如果要允许操作系统验证网络用户,则需要把参数REMOTE_OS_AUTHENT

(缺省为FALSE)设为TRUE。

3.企业验证

如果选择企业验证方式,则用户的帐户由Oracle数据库管理,口令管理和

用户鉴定由OracleSecurityService(OSS)完成。这个验证服务可以被多个

Oracle数据库共享,并且可以统一管理用户的验证和验证信息。

Oracle数据库系统培训讲义

83

创建企业验证方式的用户的命令如下:

CREATEUSER用户名IDENTIFIEDBYGLOBALLYAS‘<外部名>’;

在拥有多个数据库的大用户团体中,企业验证方式可以简化数据库用户的管理。

四.用户管理

用户(Ur)是Oracle数据库的访问控制机制。为了访问数据库,必须运

行一个数据库应用,并使用一个数据库中已定义的、有效的用户名连接到数据库

实例。因此,要想让用户私用数据库,就必须在数据库中创建用户。本节将围绕

着数据库用户创建、属性设置和删除来讲解Oracle的用户管理。

1.创建用户

要创建数据库用户,你必须具有CREATEUSER系统特权。在Oracle系统安

装完成后,用户SYS(以普通身份登录时,口令是CHANGE_ON_INSTALL)和SYSTEM

(口令是MANAGER)具有CREATEUSER系统特权。创建用户的SQL命令是CREATE

USER,具体语法如下:

CREATEUSERurname

IDENTIFIED

[DEFAULTTABLESPACEtablespace]

[TEMPORARYTABLESPACEtablcspace]

[QUOTA|UNLIMITEDONtablespace]

[PROFILEprofiile]

[PASSWORDEXPIRE]

[ACCOUNTLOCK|UNLOCK];

注意,在上面的语法中,[]表示可选,|表示或者。并且,在以后讲解命令语

法时将遵守相同的约定。下面解释CREATEUSER命令各选项的用法:

urname:用户名。在数据库中用户名必须是唯一的,并且,在使用多字

节字符集的数据库中,用户名至少应包含一个单字节字符,否则会降低

用户名/口令加密的安全性。

BYpassword:指定使用数据库验证方式验证用户,其中password是口

令。无论你的数据库使用的是多字节字符集还是单字节字符集,口令都

必须由单字节字符构成。

EPXERNALLY:指定使用外部验证方式验证用户。

GLOBALLYAS‘epxernal_name’:指定使用企业验证方式验证用户,其中

epxernal_name是一个全局名称。

Oracle数据库系统培训讲义

84

DEFAULTTABLESPACEtablespace:为用户指定缺省的表空间。tablespace

是表空间名,默认值是SYSTEM表空间。

QUOTAUNLIMITEDONtablespace:指定用户在表空间tablespace

中的配额。n是一个整数,它的单位可以是K(知字节)或M(兆字节)。

UNLIMITED表示可以无限制地空间使用。

PROFILEprofile:为用户指定资源限制,profile是限制的名称。默认

值是DEFAULT。

PASSWORDEXPIRE:使用户的口令过期。使用这个选项,用户在首次登录

到数据库时需要修改口令。

ACCOUNTLOCK︱UNLOCK:指定是否锁定此帐户。LOCK表示锁定,UNLOCK

表示不锁定,默认为不锁定。

对于每个用户,他所执行的任何数据库操作都必须有一个特权来保证。也就

是说,用户具有的特权决定了他可以执行的操作。例如,一个用户要想连接到数

据库,他必须具有CREATESESSION特权。一个用户在最初创建时他的特权域是

空的,也就是说,他不具有任何特权。有关特权的详细内容,请参阅“用户特权

和角色管理”部分。

下面举例说明如何创建数据库用户。

例一:

以最简单的方式创建一个用户px_ur01,其口令为“pxgroup’。

CREATEUSERpx_uro1IDENTIFIEDBYpxgroup;

例二:

创建一个用户px_ur02,口令为“pxgroup”,他的缺省表空间是

“USER_DATA”,临时表空间是“TEMPORARY_DATA”。他在表空间USER_DATA上的

配额是2M,在TEMPORARY_DATA上的配额是“无限制”。

CREATEUSERpx_ur02IDENTIFIEDBYpxgroup

DEFAULTTABLESPACEUSER_DATA

TEMPORARYTABLESPACETEMPORARY_DATA

QUOTA2MONUSER_DATA

QUOTAUNLIMITEDONTEMPORARY_DATA:

例三:

创建一个用户ops$administrator,对该用户的验证由操作系统负责。该用

户对应操作系统用户administrator,则缀为ops$。

CREATEUSERops$administrator

IDENTIFIEDEXTERNALLY;

前面我们曾提到过,一个用户刚创建时他的特权域是空的。因此,上述三个

Oracle数据库系统培训讲义

85

用户要想登录到数据库,还必须执行下面的命令:

GRANTCONNECTTOpx_ur01;

GRANTCONNECTTOpx_ur02;

GRANTCONNECTTOops$administrator;

2.修改用户信息

在用户创建完成后,还可以对它进行一些修改。例如,改变用户的口令、验

证方式、缺省角色等。普通用户只可以修改自己的口令,如果要修改用户安全域

的其它选项,则必须具有ALTERUSER特权。

修改用户信息的SQL命令是ALTERUSER,具体语法如下:

ALTERUSERurname

[IDENTIFIED

[DEFAULTTABLESPACEtablespace]

[TEMPORARYTABLESPACEtablespace]

[QUOTA|UNLIMITEDONtablespace=

[PROFILEprofile]

[DEFAULTROLErole_list|ALL[EXCEPTrole_list|NONE]

[PASSWORDEXPIRE]

[ACCOUNTLOCKUNLOCK];

命令ALTERUSER和CREATEUSER的选项含义基本相同,下面我们给出ALTER

USER特有选项的用法

DEFAULTROLE:为用户指定缺省角色。role_list是角色列表;ALL

表示所有角色,EXCEPTrole_list表示除了role_list列表中的角色;

NONE表示没有缺省角色。

缺省角色是指当用户连接到数据库时自动生效的角色,你可以为用户指定零

个或个缺省角色。使用DEFAULTROLE子句为用户指定缺省角色时需要注意以下

几点:

指定的角色必须是用GRANT命令直接授予该用户的角色,而不能是通过

其它角色授予的角色。

角色不能是由外部服务管理的。例如,由操作系统管理的角色。

下面举例说明如何使用ALTERUSER改变用户信息。

例一:

把用户px_ur01的口令改为“newpassword"。

ALTERUSERpx_ur01

Oracle数据库系统培训讲义

86

IDENTIFIEDBYnewpassword;

例二:

把用户px_ur01的缺省表空间改为USER_DATA,并使其在表空间

USER_DATA上的配额为1M。

ALTERUSERpx_ur01

DEFAULTTABLESPACEUSER_DATA

QUOTA1MONUSER_DATA;

例三:

把用户px_url的验证方式改为外部验证办

ALTERUSERpx_ur01

IDENTIFIEDEXTERNALLY;

3.删除用户

具有DROPUSER系统特权的用户可以删除数据库中的其他用户。当一个用户

被删除时,他拥有的所有对象也随之被删除。因此,应该只有系统安全管理员具

有DROPUSER特权。

删除用户的SQL命令是DROPUSER,具体语法如下:

DROPUSERurname[CASCADE]

上述命令各选项的含义如下:

urname:要删除的用户名。

CASCADE:如果要删除的用户还拥有数据库对象,则必须指定此选项,以

便把与此用户相关的数据库对象一同删除。

下面举例说明如何删除数据库用户。

例:

删除数据库用户px_ur01,并且该用户在数据库中存在未删除的对象。

DROPUSERpx_ur01CASCADE;

在删除数据库用户时需要注意以下两点

如果要删除的用户当前正连接在数据库上,则不能删除该用户。

如果要删除的用户在数据库中仍拥有对象,并且你还想保留这些对象,

那么可以通过收回该用户的CREATESESSION特权来阻止他访问数据库。

五.使用PROFILE管理资源

PROFILE是一个命名的资源限制的集合。如果资源限制被打开,Oracle将限

Oracle数据库系统培训讲义

87

制对数据库和实例资源的使用。每个用户都有一个PROFILE,如果在创建用户时

没有明确指出PROFILE,则使用缺省值DEFAULT。

1.创建PROFILE

具有CREATEPROFILE系统特权的用户有权创建PROFILE,具体命令语法如

下:

CREATEPROFILEprofileLIMIT

[SESSIONS_PER_USERn|UNLIMITED|DEFAULT]

[CPU_PER_SESSI0Nn|UNLIMITED|DEFAULT]

[CPU_PER_CALLn|UNLIMITED|DEFAULT]

[CONNECT_TIMEn|UNLIMITED|DEFAULT]

[IDLE_TIMEn|UNLIMITED|DEFAULT]

[L0GICAL_READS_PER_SESSIONn|UNLIMITED|DEFAULT]

[LOGICAL_READS_PER_CALLn|UNLIMITED|DEFAULT]

[COMPOSITE_LIMITn|UNLIMITED|DEFAULT]

[PRIVATE_SGA|UNLIMITED|DEFAULT]

[FAILED|LOGIN_ATTEMPTSn|UNLIMITED|DEFAULT]

[PASSWORD_LIFE_TIMEn|UNLIMITED|DEFAULT]

[PASSW0RH_REUSE_TIMEn|UNLIMITED|DEFAULT]

[PASSWORD_REUSE_MAXn|UNLIMITED|DEFAULT]

[PASSWORD_LOCK_TIMEn|UNLIMITED|DEFAULT]

[PASSWORD_GRACE_TIMEn|UNLIMITED|DEFAULT]

[PASSWORD_VERIFY_FUNCTIONfunction|NULL|DEFAULT]

下面解释CREATEPROFILE命令各选项的用法:

在上述命令中,n表示一个整数;UNLIMITED表示可以无限制地使用

某项资源;DEFAULT表示使用缺省值,即在缺省PROFILE中指定的限制。

SESSIONSPERUSER:限制一个用户的并发会话数。

CPU_PER_SESSION:限制一个会话的CPU使用时间,单位是百分之一秒。

CPU_PER_CALL;限制一次调用(Call)的CPU使用时间,单位是百分之

一秒。

CONNECT_TIME:限制一个会话的时间,单位是分钟。

IDLE_TIME:限制空闲时间。

LOGICAL_READS_PER_SESSION:指定在一个会话中读数据块的数量。

LOGICAL_READS_PER_CALL:指定在一次调用中读数据块的数量。

COMPOSITE_LIMIT:指定一个会话的资源成本的总和,用服务单元

(Serviceunit)表示,包括CPU_PER_SESSION、CONNECT_TIME、

Oracle数据库系统培训讲义

88

PRIVATE_SGA和LOGICAL_READS_PER_SESSION。

PRIVATE_SGA:指定在SGA的共享池中,一个会话可分配的私有空间的

数量。单位是字节,在指定时可以使用K(千字节)或M(兆字节)。

FAILED_LOGIN_NTEMPTS:指定在帐户被锁定前可重试口令的次数。

PASSWORD_LIFE_TIME:指定一个口令的有效期。口令过期后,如果不进

行修改系统将拒绝登录。

PASSWORD_REUSE_TIME:指定口令可重用的天数。如果此选项设置了一

个整数,则PASSWORD_REUSE_MAX必须设为UNLIMITED。

PASSWORD_REUSE_MAX:指定当前口令可被重用前需要改变的次数。如果

此选项设置了一个整数,则PASSWORD_REUSE_TIME必须设为UNLIMITED。

PASSWORD_LOCK_TIME:指定在连续登录失败并超过了规定次数后,口令

被锁定的无数。

PASSWORD_GRACE_TIME:指定开始发出口令将要过期警告的无数。

PASSWORD_VERIFY_FUNCTION:指定一个PL/SQL口令确认例程。

function是例程名,NULL表示不进行口令确认。

从以上各选项可以看出,通过PROFILE可以限制用户一次单独的调用或一个

会话可以使用的数据库资源。Oracle以如下方式执行资源限制:

如果用户超出了CONNECT_TIME或IDLE_TIME资源限制,Oracle将回退

当前事务并结束当前会话。当用户进程下次向Oracle发出调用时,它会

返回一个错误消息,提示用户本次会话已结束。

如果用户企图执行一个超出了与会话有关的资源限制的操作(如

SESSIONS_PER_USER、CPU_PER_SESSION等),Oracle将中止此操作,回

退当前指令并立即返回一个错误信息。这时用户可以提交或回退当前事

务,但接下来必须结束会话。

如果用户企图执行一个超出了与调用有关的资源限制的操作(如

CPU_PER_CALL),Oracle将中止此操作,回退当前指令,并返回一个错

误信息。

下面举例说明如何创建PROFILE。

例一:

创建一个名为my_profilc的自定义PROFILE,它不限制用户的会话数,在一

个会话中可以无限制使用CPU,但每次调用占用的CPU时间不得超过30秒,一

次会话最长为45分钟。

CREATEPROFILEmyprofileLIMIT

SESSIONS_PER_USERUNLIMITED

CPU_PER_SESSIONUNLIMITED

Oracle数据库系统培训讲义

89

CPU_PER_CALL3000

CONNECT_TIME45;

2.修改PROFILE的信息

具有ALTERPROFILE系统特权的用户可以修改任何PROFILE的设置。对一

个PROFILE的修改不会影响当前的会话,新的限制仅对修改后创建的会话起作

用。

修改PROFILE的命令是ALTERPROFILE,具体语法如下:

ALTERPROFILEprofileLIMIT

[SESSIONS_PER_USERn|UNLIMITED|DEFAULT]

[CPU_PER_SESSI0Nn|UNLIMITED|DEFAULT]

[CPU_PER_CALLn|UNLIMITED|DEFAULT]

[CONNECT_TIMEn|UNLIMITED|DEFAULT]

[IDLE_TIMEn|UNLIMITED|DEFAULT]

[L0GICAL_READS_PER_SESSIONn|UNLIMITED|DEFAULT]

[LOGICAL_READS_PER_CALLn|UNLIMITED|DEFAULT]

[COMPOSITE_LIMITn|UNLIMITED|DEFAULT]

[PRIVATE_SGA|UNLIMITED|DEFAULT]

[FAILED|LOGIN_ATTEMPTSn|UNLIMITED|DEFAULT]

[PASSWORD_LIFE_TIMEn|UNLIMITED|DEFAULT]

[PASSW0RH_REUSE_TIMEn|UNLIMITED|DEFAULT]

[PASSWORD_REUSE_MAXn|UNLIMITED|DEFAULT]

[PASSWORD_LOCK_TIMEn|UNLIMITED|DEFAULT]

[PASSWORD_GRACE_TIMEn|UNLIMITED|DEFAULT]

[PASSWORD_VERIFY_FUNCTIONfunction|NULL|DEFAULT]

ALTERPROFILE命令的各选项的含义和CREATEPROFILE的完全相同,如有

疑问请参阅上一节中有关CREATEPROFILE命令选项的解释。

下面举例说明如何修改一个PROFILE。

例一:

把my_profile的并发会话数改为30。

ALTERPROFILEmy_profile

LIMITSESSIONS_PER_USER30;

Oracle数据库系统培训讲义

90

3.为用户指派PROFILE

在一个PROFILE创建后,你可以把它指派给某个数据库用户。每个用户

只能拥有一个PROFILE,如果你把某个PROFILE指派给已经拥有一个PROFILE的

用户,那么新指派的PROFILE将覆盖以前的值。另外,PROFILE只能指派给用户,

而不能指派给角色(ROLE)。

有两种方法为用户指派PROFILE,一种是在创建用户时通过PROFILE选项指

定,另一种是他用ALTERUSER命令修改用户的PROFILE信息。

下面举例说明如何为用户指派PROFILE。

例一:

创建一个用户px_ur01,并为其指派一个资源限制集my_profile。

CREATEUSERpx_ur01

IDENTIFIEDBYpxgroup

PROFLIEmy_profile;

例二:

把用户px_ur02的资源限制集由缺省值DEFAULT改为my_profile。

ALTERUSERpx_ur02

PROFILEmy_profile;

4.删除PROFILE

具有DROPPROFILE系统特权的用户可以删除PROFILE。删除PROFILE的命令

是DROPPROFILE,语法如下:

DROPPROFILEprofileCASCADE;

其中,profile是要删除的PROFILE的名称。另外,如果要删除的PROFILE

已经指派给了某个用户,则必须使用CASCADE选项。

下面举例说明如何删除PROFILE

例一:

删除资源限制集myprofile,尽管它已被指派给了用户px_ur01

DROPPROFILEmy_profilcCASCADE;

5.允许和禁止资源限制

通过创建PROFILE并把它指派给某个用户,可以限制该用户对数据库资源的

使用。但这里有一个前提条件是,该数据库的资源限制选项是打开的,即允许资

源限制。

改变数据库的资源限制选项有两种方法

Oracle数据库系统培训讲义

91

修改参数文件

在数据库实例启动前,修改参数文件init.ora中参数RESOURCE_LIMIT

的值。当RESOURCE_LIMIT的值为TRUE时表示允许资源限制,FALSE表示禁止资

源限制。

例如,在实例ORCL的参数文件initorcl.ora中增加如下语句:

RESOURCE_LIMIT=TRUE

然后启动数据库。此时,该数据库允许资源限制。

使用ALTERSYSTEM命令

在数据库运行过程中,可以使用ALTERSYSTEM命令改变数据库的资源限制

选项,但要求用户具有ALTERSYSTEM系统特权。

ALTERSYSTEM

SETRESOURCE_LIMIT=TRUE|FALSE;

上述两种方法虽然可以达到相同的目的,但它们也有所区别。修改参数文件

对选项的改变是永久的,即以后每次启动数据库邦会保持该值;而使用命令所做

的修改仅对本次数据库运行有效。

6.查看数据库用户和资源限制信息

在Oracle数据库中,有关用户和PROFILE的信息都存放在系统的数据字典

中。下面列出了与用户和PROFILE相关的数据字典:

ALL_USERS

USER_USERS

DBA_USERS

USER_TS_QUOTAS

DBA_TS_QUOTAS

USER_PASSWORD_LIMITS

USER_RESOURCE_LIMITS

DBA_PROFILES

RESOURCE_COST

V$SESSION

V$SESSTAT

V$STATNAME

注意,查询数据字典标要具有SYSDBA特权或SELECT_CATALOG_ROLE角色。

面举例说明如何查询用户和PROFILE的相关信息。

例一:

Oracle数据库系统培训讲义

92

查询当前数据库中的所有用户的名称、PROFILE和帐户状态信息。

SELECTurname“用户名称”,profile,account_status“帐户状态”

FROMsys.dba_urs;

查询的部分结果示例如下:

用户名称PROFILE帐户状态

--------------------

SYSDEFAULTOPEN

SYSTEMDEFAULTOPEN

OPS$ADMINISTRATORDEFAULTOPEN

SCOTTDEFAULTOPEN

PX_USER02MY_PROFILEOPEN

PX_USER01MY_PROFILEOPEN

例二:

查询数据库中所有的PROFILE的名称及资源限制情况。

SELECT*FROMsys.dba_profiles

ORDERBYprofile;

查询的部分结果如下:

PROFILERESOURCE_NAMERESOURCELIMIT

----------------------------

DEFAULTSESSIONS_PER_USERKERNELUNLIMITED

DEFAULTCPU_PER_SESSI0NKERNELUNLIMITED

DEFAULTCPU_PER_CALLKERNELUNLIMITED

DEFAULTCONNECT_TIMEKERNELUNLIMITED

MY_PROFILESESSIONS_PER_USERKERNELDEFAULT

MY_PROFILECPU_PER_SESSIONKERNELUNLIMITED

MY_PROFILECPU_PER_CALLKERNEL3000

MY_PROFILECONNECTTIMEKERNEL45

Oracle数据库系统培训讲义

93

第八讲系统权限管理

在Oracle数据库管理系统中,用户特权和角色用于控制用户执行系统操作

和访问模式(schema)对象,它们是Oracle安全机制的组成部分。用户如果要

执行某项操作,他必须具备相应的特权。例如,一个用户要想连接到数据库,他

至少得具有CREATESESSION(创建会话)特权。本讲将就用户特权和角色管理

讲解如下内容:

用户特权管理:包括系统特权和对象特权的管理。

角色管理:包括预定义角色和自定义角色的管理。

系统特权和角色的授予和收回。

对象特权的授予和收回。

一.用户特权管理

用户特权是指执行特定类型的SQL命令或访问其他用户的对象的权利。用户

特权分为两类:系统特权和对象特权。其中,系统特权控制着可以执行的系统操

作。例如,具有CREATETABLE系统特权的用户可以创建表。对象特权控制用户

对其他用户拥有的对象的访问。例如,如果用户A具有对用户B的表AUTHS的

SELECT对象特权,那么他就可以查询表AUTHS中的数据,即执行SELECT…FORM

AUTHS语句。本节将详细讲解这两类特权。

1.系统特权

系统特权是指控制用户执行某个数据库操作或某类数据库操作的权利。在

Oracle系统中,大约有80种以上的系统特权,下面列表给出所有的系统特权和

它们允许执行的操作。

Oracle数据库系统培训讲义

94

系统特权允许执行的操作

ANALYZEANY分析数据库中任意的表、簇或索引

AUDITANY审计数据库中任意的模式对象

AUDITSYSTEM允许和禁止语句和特权审计选项

CREATECLUSTER在自己的模式中创建簇

CREAIEANYCLUSTER在任意的模式中创建簇

ALTERANYCLUSTER修改数据库中的任意簇

DROPANYCLUSTER删除数据库中的任意簇

ALTERDATABASE修改数据库

CREATEDATABASELINK在自己的模式中创建数据库链接

CREATEANYINDEX在任意模式中为任意表创建索引

ALTERANYINDEX修改数据库中的任意索引

DROPANYINDEX删除数据库中的任意索引

CREATELIBRARY在自己的模式中创建库

CREATEANYLIBRARY在任意的模式中创建库

DROPLIBRARY在自己的模式中删除库

DROPANYLIBRARY删除任意模式中的库

GRANTANYPRIVILEGE授予任意的系统特权(不包括对象特权)

CREATEPROCEDURE在自己的模式中创建存储过程、函数和包

CREATEANYPROCEDURE

在任意的模式中创建存储过程、函数和包

(要求此用户同时具有ALTERANYTABLE、

BACKUPANYTABLE、DROPANYTABLE、SELECT

ANYTABLE、INSERTANYTABLE、UPDATEANY

TABLE、DELETEANYTABLE或GRANTANYTABLE

特权)

ALTERANYPROCEDURE修改任意的存储过程、函数和包

DROPANYPROCEDURE删除任意的存储过程、函数和包

EXECUTEANYPROCEDURE

执行任意的存储过程或函数,或者引用任意的公

共包

CREATEPROFILE创建PROFILE

Oracle数据库系统培训讲义

95

ALTERPROFILE修改数据库中的任意PROFILE

DROPPROFILE删除数据库中的任意PROFILE

ALTERRESOURCECOST为所有用户会话中使用的资源设置成本

CREATEPUBLIC

DATABASELINK

创建公共数据库链接

DROPPUBLIC

DATABASELINK

删除公共数据库键接

CREATEPUBLICSYNONYM创建公共同义词

DROPPUBLICSYNONYM删除公共同义词

CREATEROLE创建角色

ALTERANYROLE修改数据库中的任意角色

DROPANYROLE删除数据库中的任意角色

GRANTANYROLE授予数据库中的任意角色

CREATEROLLBACK

SEGMENT

创建回滚段

ALTERROLLBACK

SEGMENT

修改回滚段

DROPROLLBACK

SEGMENT

删除回滚段

CREATESESSION连接到数据库

ALTERSESSION发出ALTERSESSION命令

RESTRICTEDSESSION连接到以STARTUPRESTRICT模式启动的数据库

CREATESEQUENCE在自己的模式中创建序号生成器

CREATEANYSEQUENCE在任意模式中创建序号生成器

ALTERANYSEQUENCE修改任意的序号生成器

DROPANYSEQUENCE删除任意的序号生成器

SELECTANYSEQUENCE引用任意的序号生成器

CREATESNAPSHOT

在自己的模式中创建决照(你必须同时具有

CREATETABLE特权)

CREATEANYSNAPSHOT

在任意的模式中创建快照(你必须同时具有

CREATEANYTABLE特权)

ALTERANYSNAPSHOT修改任意快照

Oracle数据库系统培训讲义

96

DROPANYSNAPSHOT删除任意快照

CREATESYNONYM在自己的模式中创建同义词

CREATEANYSYNONYM在任意的模式中创建同义词

DROPANYSYNONYM删除任意的同义词

ALTERSYSTEM发出ALTERSYSTEM命令

CREATETABLE

在自己的模式中创建表,同时允许特权的受让人

在表上创建索引

CREATEANYTABLE在任意模式中创建表

ALTERANYTABLE修改任意模式中的表和编译任意模式中的视图

BACKUPANYTABLE

对任意模式中的表使用导出工具执行增量备份

(导出)

LOCKANYTABLE锁定任意模式中的表或视图

COMMENTANYTABLE在任意的表、视图或列上加注释

SELECTANYTABLE在任意的模式中查询任意的表、视图或决照

INSERTANYTABLE在任意模式的任意表或视图中插入行

UPDATEANYTABLE在任意模式的任意表或视图中更新行

DELETEANYTABLE在任意模式的任意表或视图中删除行

CREATETABLESPACE创建表空间

ALTERTABLESPACE修改表空间

MANAGETABLESPACE

使任意的表空间联机或脱机,开始或结束任意表

空间的备份

DROPTABLESPACE删除表空间

UNLIMITEDTABLESPACE

无限制地使用任意的表空间,这个特权只能授给

用户,不能接给角色

FORCETRANSACTION

强制地提交或回退本地数据库中自己的有疑点

(in-doubt)的分布式事务

FORCEANYTRANSACTION

强制地提交或回退本地数据库中任意的有疑点

(in-doubt)的分布式事务

CREATETRIGGER在自己的模式中创建触发器

CREATEANYTRIGGER在任意的模式中创建触发器

ALTERANYTRIGGER允许、禁止或编译任意的触发器

DROPANYTRIGGER删除任意的触发器

Oracle数据库系统培训讲义

97

CREAIEANYUSER创建用户

BECOMEANYUSER

成为其他用户(当执行一个完整的数据库导入时

需要此特权)

ALTERUSER修改其它用户的信息

DROPUSER删除另一个用户

CREATEVIEW在自己的模式中创建视图

CREATEANYVIEW

在任意模式中创建视图,如果在其它用户的模式

中创建视图,还要求具有引用其它用户对象的特

DROPANYVIEW删除任意的视图

SYSOPER

允许执行STARTUP、SHUTDOWN、ALTERDATABASE

OPEN/MOUNT、ALTERDATABASEBACKUP、

ARCHIVELOG和RECOVER命令,并且具有

RESTRICTEDSESSION系统特权

SYSDBA

具有所有的系统特权(包括SYSOPER),并且带有

ADMINOPTI0N选项。可以执行包括CREATE

DATABASE命令和基于时间(time-bad)的恢

复操作在内的所有操作

由上表不难看出,在Oracle数据库中系统特权是非常重要的,它决定了用

户可执行的系统操作。在使用系统特权时需要注意以下问题:

由于安全原因,系统特权不允许用户访问数据字典(SYSDBA除外)。因

此,通常具有ANY特权的用户并不能访问数据字典表和视图。例如,如

果没有明确授权的话,具有UPDATEANYTABLE(更新任意表)特权的用

户仍不能更新数据字典。

通常,只有具有明确对象特权的用户或具有SYSDBA特权的用户可以访问

数据字典。如果用户需要访问数据字典而又不具备这两个条件,那么可

以授予该用户下角色:SELECT_CATALOG_ROLE(查询导出的表和视图)、

EXECUTE_CATALOG_ROLE(执行数据字典中导出的包)和

DELETE_CATALOG_ROLE(删除AUD$中的记录),以允许他访问导出的数据

字典表、视图和包。

数据库管理员不应该授予普通用户访问非导出的数据字典对象的权利,

因为这样做会危及数据库的完整性。

Oracle数据库系统培训讲义

98

2.对象特权

对象特权是控制一个用户对其他用户的模式(Schema)对象访问的权利。例

如,用户px_ur01如果要查询px_ur02的某个表,那么他必须具有对这个表

的SELECT对象特权。

不同类型的对象已有不同的访问特权,下表列出了各种对象和与它们相关的

特权。

对象特权表视图序号生成器过程函数包快照库

ALTERYY

DELETEYY

EXECUTEYY

INDEXY

INSERTYY

REFERENCESY

SELECTYYYY

UPDATEYY

注意,上表并没有列出所有的模式(Schema)对象,例如簇、数据库链等,

因为这些对象由专有的系统特权控制着。例如,要修改任意簇必须具有ALTER

ANYCLUSTER系统特权。

每种对象特权都允许执行一些SQL语句,下面列表给出了每种特权允许执

行的SQL语句:

对象特权允许执行问SQL语句

ALTERALTER对象名(表或序号生成器)

DELETEDELETEFROM对象名(表或视图)

EXECUTEEXECUTE对象名(过程或函数),访问公共的包

变量

INDEXCREATEINDEXON对象名(仅对表)

INSERTINSERTINTO对象名(表或视图)

REFERENCES在表上定义FOREIGNKEY(外部键)的CREATE

或ALTERTABLE语句

SELECTSELECT…FROM对象名(表、视图或决照),引

用序号生成器的SOL语句

UPDATEUPDATE对象(表或视图)

Oracle数据库系统培训讲义

99

二.角色管理

角色是一组用户特权和角色的集合。使用角色可以简化权限管理,因为通过

角色你可以一次把一组用户特权授予用户,或者从用户处收回。在Oracle数据

库系统中,角色分为两种:预定义角色和自定义角色。

预定义角色:指在创建Oracle数据库时,系统自动创建的角色。提供这

些角色是为了兼容以前版本的Oracle。而且,这些角色的定义也比较通

用。例如CONNECT角色,它包含了创建会话、创建表和视图等一般数据

库用户需要的权限。数据库中新创建的用户通常要授予此角色。因此,

预定义角色有助于用户权限的管理。

自定义角色:指用户自己创建的角色。自定义角色和预定义角色在本质

上没有区别,也是一组用户特权的集合,只是它们的创建者不同而已。

通过自定义角色,用广可以按自己的实际需要定义权力集合。假设在一

个销售数据库中,存在经理、销售员和采购员三类用户,它们具有不同

的权限,并且每类用户都有若干名。我们可以针对这三类用户定义三个

角色,并授予三个角色相应的特权。然后再创建数据库用户,并授予对

应的角色。这样不仅可以降低授权工作量、减少错误,而且在发生错误

时也容易改正。因为只需要对角色的授权进行修正,而不用对每个用户

做同样的工作。尤其在每类用户具有的特权比较多时,这种效果更加明

显。

1.预定义角色

在创建Oracle数据库时,系统会自动生成一些角色,即预定义角色。每种

预定义角色都包含一定的特权,下表列出了这些角色和它们对应的特权。

Oracle数据库系统培训讲义

100

预定义角色授予的特权

CONNECT

ALTERSESSION、CREATECLUSTER、CREATE

DATABASELINKCREATESEQUENCE、CREATE

SESSION、CREATESYNONYM、CREATETABLE和

CREATEVIEW

CREATETYPE

CREATETYPE、EXECUTE、EXECUTEANYTYPE、

ADMINOPT10N和GRANTOPTION

RESOURCE

CREATECLUSTER、CREATEPROCEDURE、CREATE

SEQUENCE、CREATETABLE和CREATETRIGGER

DBA所有系统特权,并具有WITHADMINOPTION权

EXP_FULL_DATABASE

SELECTANYTABLE、BACKUPANYTABLE、INSERT

DELETE、ANDUPDATEONTHETABLESSYS.INCVID

SYS.INCFIL和ANDSYS.INCEXP

IMP_FULL_DATABASEBECOMEUSER

DELETE_CATALOG_ROLE所有数据字典包上的DELETE特权

EXECUTE_CATALOG_ROLE所有数据字典包上的EXECUTE特权

SELECT_CATALOG_ROLE所有数据字典表和视图上的SELECT特权

恰当的私用上述预定义角色,不仅可以减少DBA对用户授权的次数,而且可

以避免在修改一组用户的权限时发生错误或遗漏。

2.创建角色

在Oracle系统中,除了预定义的角色外,用户还可以创建自己的角色。创建

角色需要具有CREATEROLE系统特权,这个特权通常为系统安全管理员所有。

创建角色的SQL命令是CREATEROLE,它的语法如下:

CREATEROLErolename

[NOTIDENTIFIED|IDENTIFIEDBYpassword|EPXERNALLY|GLOBALLY];

上述命令的各选项的含义如下:

rolename:角色名。角色名在数据库中必须是唯一的(包括用户名),并且最

好至少包含一个单字节字符,因为这样有利于数据库系统的安全。

NOTIDENTIFIED:表示此角色山数据库验证,但不需要口令。

IDENTIFIEDBYpassword:表示此角色由数据库验证,并且使用时必须给出

本文发布于:2023-01-04 08:26:11,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/89709.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:书店连锁
下一篇:音乐之声下载
标签:培训教材
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图