您的当前位置:首页Oracle DBA基础

Oracle DBA基础

2022-09-11 来源:爱问旅游网
美河学习在线 www.eimhe.com

Oracle DBA基础

i

目录

Oracle DBA基础 .................................................................................................................................................................. 1 目录 ....................................................................................................................................................................................... i 一 Oracle体系结构 .............................................................................................................................................................. 1 1.1 Oracle Server(P18) 1 1.2 SGA(P19) 1

1.2.1 共享池.......................................................................................................................................................................... 1 1.2.2 数据高速缓存 .............................................................................................................................................................. 1 1.2.3 重做日志缓冲区 .......................................................................................................................................................... 2 1.2.4 大缓冲池和JAVA池 ................................................................................................................................................... 2 1.3 PGA(P23) 2 1.4 后台进程 2

1.4.1 SMON(System Monitor) ........................................................................................................................................ 2 1.4.2 PMON(Process Monitor) ........................................................................................................................................ 3 1.4.3 LGWR(Log Writer) ................................................................................................................................................ 3 1.4.4 DBWR(Database Writer) ........................................................................................................................................ 3 1.4.5 CKPT(Checkpoint Process) .................................................................................................................................... 3 1.4.6 ARCH(Archive Process) ......................................................................................................................................... 4 1.4 7 查询所有后台进程信息 .............................................................................................................................................. 4 1.5 数据库物理结构(P28) 4 1.5.1 数据库文件 .................................................................................................................................................................. 4 1.5.2 重做日志文件 .............................................................................................................................................................. 4 1.5.3 控制文件...................................................................................................................................................................... 4 1.5.4 归档日志文件 .............................................................................................................................................................. 4 1.5.5 参数文件...................................................................................................................................................................... 5 1.5.6 口令文件...................................................................................................................................................................... 5 1.5.7 预警文件...................................................................................................................................................................... 5 1.5.8 后台进程跟踪文件 ...................................................................................................................................................... 5 1.5.9 服务器进程跟踪文件 .................................................................................................................................................. 5 1.6 数据库逻辑结构(P32) 6

1.6.1 表空间.......................................................................................................................................................................... 6 1.6.2 段 ................................................................................................................................................................................. 6 1.6.3 区 ................................................................................................................................................................................. 6 1.6.4 Oracle块 ...................................................................................................................................................................... 6 二 Oracle Server ................................................................................................................................................................... 6 2.1 OEM数据库控制工具(P50) 6 2.2 数据库管理员(P56) 7

2.2.1 SYSDBA特权 ............................................................................................................................................................. 7 2.2.2 SYSOPER 特权 ........................................................................................................................................................... 7 2.2.3 DBA角色 .................................................................................................................................................................... 7 三 管理例程.......................................................................................................................................................................... 7 3.1 管理初始化参数(P60) 8 3.1.1 常用初始化参数 .......................................................................................................................................................... 8 3.1.2 参数文件...................................................................................................................................................................... 9 3.1.3 显示和设置初始化参数 ............................................................................................................................................ 10 3.2 启动例程(P66) 10 3.2.1 启动例程的三个步骤 ................................................................................................................................................ 10 3.2.2 启动例程的语法与解释 ............................................................................................................................................ 10 3.2.3 启动例程流程示例 .................................................................................................................................................... 11 3.3 停止例程(P68) 11 3.3.1 shutdown normal ........................................................................................................................................................ 11 3.3.2 shutdown transactional ............................................................................................................................................... 11 3.3.3 shutdown immediate .................................................................................................................................................. 11

美河学习在线 www.eimhe.com

3.3.4 shutdown abort ........................................................................................................................................................... 11 3.3.5 suspend database ........................................................................................................................................................ 11 四 建立和删除数据库 ........................................................................................................................................................ 12 4.3 配置网络(P83) 12 4.3.1 配置监听程序 ............................................................................................................................................................ 12 4.3.2 配置客户端 ................................................................................................................................................................ 12 4.5 删除数据库(P90) 13 五 数据字典和动态性能视图 ............................................................................................................................................ 13 5.1.1 all_xxx........................................................................................................................................................................ 13 5.1.2 user_xxx ..................................................................................................................................................................... 13 5.1.3 dba_xxx ...................................................................................................................................................................... 14 5.1.4 数据字典内容 ............................................................................................................................................................ 14 5.2 常用数据字典(P97) 15

5.2.1 dict ............................................................................................................................................................................. 15 5.2.2 dict_columns .............................................................................................................................................................. 15 5.2.3 tab ............................................................................................................................................................................... 15 5.2.4 obj .............................................................................................................................................................................. 15 5.2.5 dual ............................................................................................................................................................................. 15 5.2.6 global_name ............................................................................................................................................................... 15 5.2.7 ind .............................................................................................................................................................................. 16 5.2.8 seq .............................................................................................................................................................................. 16 5.2.9 syn .............................................................................................................................................................................. 16 5.3 动态性能视图(P99) 16 5.4 常用动态性能视图(P100) 17 5.4.1 v$fixed_table .............................................................................................................................................................. 17 5.4.2 v$instance .................................................................................................................................................................. 17 5.4.3 v$sga .......................................................................................................................................................................... 17 5.4.4 v$sgainfo .................................................................................................................................................................... 17 5.4.5 v$parameter ................................................................................................................................................................ 17 5.4.6 v$version .................................................................................................................................................................... 18 5.4.7 v$option ..................................................................................................................................................................... 18 5.4.8 v$session .................................................................................................................................................................... 18 5.4.9 v$process.................................................................................................................................................................... 18 5.4.10 v$bgprocess .............................................................................................................................................................. 18 5.4.11 v$database ................................................................................................................................................................ 19 5.4.12 v$controlfile ............................................................................................................................................................. 19 5.4.13 v$datafile.................................................................................................................................................................. 19 5.4.14 v$dbfile .................................................................................................................................................................... 19 5.4.15 v$logfile ................................................................................................................................................................... 19 5.4.16 v$log ........................................................................................................................................................................ 20 5.4.17 v$thread.................................................................................................................................................................... 20 5.4.18 v$lock ....................................................................................................................................................................... 20 5.4.19 v$locked_object ....................................................................................................................................................... 20 5.4.20 v$rollname和v$rollstat ........................................................................................................................................... 20 5.4.21 v$tablespace ............................................................................................................................................................. 21 5.4.22 v$tempfile ................................................................................................................................................................ 21 六 控制文件........................................................................................................................................................................ 21 6.1 控制文件概述(P107) 21 6.2 多元化控制文件(P108) 22

6.2.1 使用PFILE多元化控制文件 ................................................................................................................................... 22 6.2.2 使用SPFILE多元化控制文件 ................................................................................................................................. 22 6.3 建立控制文件(P110) 22 6.4 删除控制文件(P115) 23 6.5 查看控制文件信息(P115) 23 6.5.1 显示控制文件名称 .................................................................................................................................................... 23 6.5.2 显示初始化参数control_files................................................................................................................................... 23 七 重做日志........................................................................................................................................................................ 23

i

7.1 重做日志简介(P120) 23 7.1.1 重做日志组和重做日志成员 .................................................................................................................................... 23 7.1.2 重做入口.................................................................................................................................................................... 24 7.1.3 SCN ............................................................................................................................................................................ 24 7.1.4 日志序列号 ................................................................................................................................................................ 24 7.1.5 重做线程.................................................................................................................................................................... 24 7.1.6 日志切换.................................................................................................................................................................... 24 7.1.7 checkpoint .................................................................................................................................................................. 25 7.1.8 例程恢复.................................................................................................................................................................... 25 7.2 增加重做日志(P125) 25 7.2.1 规划日志组尺寸 ........................................................................................................................................................ 25 7.2.2 增加日志组 ................................................................................................................................................................ 26 7.2.3 增加日志成员 ............................................................................................................................................................ 26 7.3 删除重做日志(P128) 26 7.3.1 删除日志成员 ............................................................................................................................................................ 26 7.3.2 删除日志组 ................................................................................................................................................................ 27 7.3.3 清除重做日志 ............................................................................................................................................................ 27 7.4 改变重做日志位置或名称(P129) 27 7.5 使用OMF方式管理重做日志(P130) 28

7.5.1 使用OMF方式建立日志组 ..................................................................................................................................... 28 7.5.2 删除OMF日志组 ..................................................................................................................................................... 28 7.6 显示重做日志信息(P131) 28 7.6.1 获取重做线程信息 .................................................................................................................................................... 28 7.6.2 获取日志组信息 ........................................................................................................................................................ 28 7.6.3 获取日志成员信息 .................................................................................................................................................... 29 八 归档日志........................................................................................................................................................................ 29 8.1 日志操作模式(P138) 29

8.1.1 noarchivelog模式 ...................................................................................................................................................... 29 8.1.2 archivelog模式 .......................................................................................................................................................... 29 8.1.3 选择日志操作模式 .................................................................................................................................................... 30 8.2 控制归档(P140) 30 8.2.1 改变日志操作模式 .................................................................................................................................................... 30 8.2.2 执行手工归档 ............................................................................................................................................................ 30 8.3 配置归档(P141) 31

8.3.1 使用log_archive_dest配置归档位置 ....................................................................................................................... 31 8.3.2 使用log_archive_dest_n配置多个归档位置 ........................................................................................................... 31 8.3.3 使用log_archive_dest_n选项 ................................................................................................................................... 32 8.3.4 配置本地归档成功的最小个数 ................................................................................................................................ 32 8.3.5 配置归档进程个数 .................................................................................................................................................... 32 8.3.6 配置归档文件格式 .................................................................................................................................................... 32 8.3.7 配置归档生效状态 .................................................................................................................................................... 33 8.4 显示归档日志信息(P145) 33 8.4.1 显示日志操作模式 .................................................................................................................................................... 33 8.4.2 显示归档日志信息 .................................................................................................................................................... 33 8.4.3 显示归档日志位置 .................................................................................................................................................... 34 8.4.4 显示归档进程信息 .................................................................................................................................................... 34 8.4.5 显示日志历史信息 .................................................................................................................................................... 34 九 表空间和数据文件 ........................................................................................................................................................ 34 9.1 数据库逻辑结构(P149) 34

9.1.1 表空间........................................................................................................................................................................ 34 9.1.2 数据文件.................................................................................................................................................................... 35 9.1.3 段(segment) ................................................................................................................................................................ 35 9.1.4 区(extent) .............................................................................................................................................................. 35 9.1.5 数据块........................................................................................................................................................................ 35

美河学习在线 www.eimhe.com

9.2 建立表空间(P151) 35 9.2.1 建立本地管理表空间 ................................................................................................................................................ 36 9.2.2 建立字典管理表空间 ................................................................................................................................................ 36 9.2.3 建立大文件表空间 .................................................................................................................................................... 37 9.2.4 建立undo表空间 ...................................................................................................................................................... 37 9.2.5 建立临时表空间 ........................................................................................................................................................ 37 9.2.6 建立非标准块表空间 ................................................................................................................................................ 38 9.3 维护表空间(P155) 38 9.3.1 改变表空间可用性 .................................................................................................................................................... 38 9.3.2 改变表空间读写状态 ................................................................................................................................................ 39 9.3.3 改变表空间名称 ........................................................................................................................................................ 39 9.3.4 设置默认表空间 ........................................................................................................................................................ 39 9.3.5 删除表空间 ................................................................................................................................................................ 40 9.4 扩展表空间(P158) 40 9.4.1 增加数据文件 ............................................................................................................................................................ 40 9.4.2 改变数据文件尺寸 .................................................................................................................................................... 40 9.4.3 允许数据文件自动扩展 ............................................................................................................................................ 40 9.5 移动数据文件(P159) 41

9.5.1 在open状态下移动数据文件 .................................................................................................................................. 41 9.5.2 在mount状态下移动数据文件 ................................................................................................................................ 41 9.6 使用OMF方式管理表空间(P161) 41

9.6.1 使用OMF方式建立表空间 ..................................................................................................................................... 41 9.6.2 删除OMF表空间 ..................................................................................................................................................... 42 9.7 显示表空间和数据文件信息(P162) 42 9.7.1 显示表空间详细信息 ................................................................................................................................................ 42 9.7.2 显示表空间的编号和名称 ........................................................................................................................................ 42 9.7.3 显示表空间所包含的数据文件 ................................................................................................................................ 42 9.7.4 显示数据文件动态信息 ............................................................................................................................................ 43 9.7.5 显示临时表空间组的信息 ........................................................................................................................................ 43 9.7.6 显示临时表空间所包含的临时文件 ........................................................................................................................ 43 9.7.7 显示临时表空间文件动态信息 ................................................................................................................................ 43 十 UNDO表空间 ............................................................................................................................................................... 43 10.1 undo简介(P173) 44

10.1.1 回退事务.................................................................................................................................................................. 44 10.1.2 读一致性.................................................................................................................................................................. 44 10.1.3 事务恢复.................................................................................................................................................................. 44 10.1.4 倒叙查询.................................................................................................................................................................. 44 10.2 管理undo表空间(P175) 44

10.2.1 使用undo参数 ........................................................................................................................................................ 44 10.2.3 修改undo表空间 .................................................................................................................................................... 45 10.2.4 切换undo表空间 .................................................................................................................................................... 45 10.2.5 删除undo表空间 .................................................................................................................................................... 45 10.3 监视undo空间信息(P177) 45

10.3.1 确定当前例程正在使用的undo表空间 ................................................................................................................ 45 10.3.2 显示数据库的所有undo表空间 ............................................................................................................................ 46 10.3.3 显示undo表空间统计信息 .................................................................................................................................... 46 10.3.4 显示undo段统计信息 ............................................................................................................................................ 46 10.3.5 显示活动事务信息 .................................................................................................................................................. 46 10.3.6 显示undo区信息 .................................................................................................................................................... 47 十二 用户 ........................................................................................................................................................................... 47 12.1 用户和方案(P195) 47 12.1.1 用户和特权用户 ...................................................................................................................................................... 47 12.1.2 方案 ......................................................................................................................................................................... 47

i

12.2 建立用户(P197) 47 12.2.1 数据库验证方式建立用户 ...................................................................................................................................... 47 12.2.2 操作系统验证方式建立用户 .................................................................................................................................. 48 12.3 修改用户(P199) 49 12.4 删除用户(P200) 49 12.5 显示用户信息(P201) 49

十三 权限 ........................................................................................................................................................................... 49 13.1 权限简介 49

13.1.1 系统权限.................................................................................................................................................................. 50 13.1.2 对象权限.................................................................................................................................................................. 50 13.2 管理系统权限(P207) 50 13.2.1 授予系统权限 .......................................................................................................................................................... 50 13.2.2 显示系统权限 .......................................................................................................................................................... 51 13.2.3 收回系统权限 .......................................................................................................................................................... 51 13.3 管理对象权限(P210) 51 13.3.1 授予对象权限 .......................................................................................................................................................... 52 13.3.2 显示对象权限 .......................................................................................................................................................... 53 13.3.3 收回对象权限 .......................................................................................................................................................... 54 十四 角色 ........................................................................................................................................................................... 55 14.1 预定义角色 55

14.1.1 dba角色 ................................................................................................................................................................... 55 14.1.2 connect角色 ............................................................................................................................................................ 55 14.1.3 resource角色 ........................................................................................................................................................... 55 14.1.4 execute_catalog_role角色 ....................................................................................................................................... 56 14.1.5 select_catalog_role角色 .......................................................................................................................................... 56 14.1.6 delete_catalog_role角色 .......................................................................................................................................... 56 14.1.7 exp_full_database角色 ............................................................................................................................................ 56 14.1.8 imp_full_database角色 ........................................................................................................................................... 56 14.1.9 recovery_catalog_owner角色 ................................................................................................................................. 56 14.2 管理自定义角色(P224) 57

14.2.1 建立角色.................................................................................................................................................................. 57 14.2.2 给角色授权 .............................................................................................................................................................. 57 14.2.3 激活和禁止角色 ...................................................................................................................................................... 58 14.2.4 修改角色验证方式 .................................................................................................................................................. 59 14.2.5 删除角色.................................................................................................................................................................. 59 14.2.6 显示角色信息 .......................................................................................................................................................... 59 十五 profile ......................................................................................................................................................................... 60 15.1 profile简介(P243) 60

15.2 使用profile管理口令(P243) 61

15.2.1 账户锁定.................................................................................................................................................................. 61 15.2.2 口令有效期和终止期 .............................................................................................................................................. 61 15.2.3 口令历史.................................................................................................................................................................. 62 15.2.4 口令复杂性校验 ...................................................................................................................................................... 62 15.3 使用profile管理资源(P248) 62 15.3.1 限制会话资源 .......................................................................................................................................................... 62 15.3.2 限制调用资源 .......................................................................................................................................................... 63 15.3.3 限制其他资源 .......................................................................................................................................................... 63 15.4 修改和删除profile(P250) 63

15.4.1 修改profile .............................................................................................................................................................. 63 15.4.2 删除profile .............................................................................................................................................................. 64 15.5 显示profile信息(P251) 64

15.5.1 显示用户的profile .................................................................................................................................................. 64 15.5.2 显示profile的口令和资源限制选项 ..................................................................................................................... 64 十六 审计 ........................................................................................................................................................................... 64

美河学习在线 www.eimhe.com

16.1 审计简介(P256) 64

16.1.1 审计分类.................................................................................................................................................................. 65 16.1.2 审计的作用 .............................................................................................................................................................. 65 16.1.3 审计的指导方针 ...................................................................................................................................................... 65 16.2 特权用户审计(P257) 65 16.3 数据库审计(P258) 66

16.3.1 语句审计.................................................................................................................................................................. 66 16.3.2 权限审计.................................................................................................................................................................. 66 16.3.3 对象审计.................................................................................................................................................................. 66 16.3.4 删除审计跟踪 .......................................................................................................................................................... 67 16.4 使用精细审计(P263) 67 16.5 使用应用审计(P265) 67

十七 表 ............................................................................................................................................................................... 67 17.1 表简介(P269) 67 17.1.1 表的管理方针 .......................................................................................................................................................... 67 17.1.2 行格式...................................................................................................................................................................... 68 17.1.3 常用数据类型 .......................................................................................................................................................... 68 17.2 管理普通表(P273) 69 17.2.1 建立普通表 .............................................................................................................................................................. 69 17.2.2 建立临时表 .............................................................................................................................................................. 69 17.2.3 修改普通表 .............................................................................................................................................................. 70 17.3 管理索引表(P277) 71 17.3.1 建立索引表 .............................................................................................................................................................. 71 17.3.2 修改索引表 .............................................................................................................................................................. 71 17.4 管理外部表(P279) 72 17.4.1 建立外部表 .............................................................................................................................................................. 72 17.4.2 修改外部表 .............................................................................................................................................................. 73 17.5 截断和删除表(P281) 73 17.6 显示表信息(P282) 73 17.6.1 显示特定用户的表 .................................................................................................................................................. 73 17.6.2 显示表的注释信息 .................................................................................................................................................. 73 17.6.3 显示列的注释信息 .................................................................................................................................................. 74 17.6.4 显示表列信息 .......................................................................................................................................................... 74 17.6.5 显示unused列信息 ................................................................................................................................................ 74 17.6.6 显示rowid信息 ...................................................................................................................................................... 74 17.6.7 显示外部表信息 ...................................................................................................................................................... 74 17.6.8 显示外部表的位置 .................................................................................................................................................. 74 十九 约束 ........................................................................................................................................................................... 75 19.1 约束简介(P305) 75

19.1.1 约束分类.................................................................................................................................................................. 75 19.1.2 约束状态.................................................................................................................................................................. 75 19.2 维护约束(P309) 75 19.2.1 建表时定义约束 ...................................................................................................................................................... 75 19.2.2 建表后增加约束 ...................................................................................................................................................... 76 19.2.3 修改约束名 .............................................................................................................................................................. 76 19.2.4 删除约束.................................................................................................................................................................. 76 19.3 禁止和激活约束(P312) 77

19.3.1 禁止约束.................................................................................................................................................................. 77 19.3.2 激活约束.................................................................................................................................................................. 77 19.3.3 修正约束数据 .......................................................................................................................................................... 77 19.4 使用延期约束检查(P315) 78 19.5 显示约束信息(P316) 78 19.5.1 显示约束信息 .......................................................................................................................................................... 78

i

10.5.2 显示约束列 .............................................................................................................................................................. 78 二十一 簇 ........................................................................................................................................................................... 78 21.1 管理索引簇(P348) 79 21.1.1 索引簇管理方针 ...................................................................................................................................................... 79 21.1.2 建立索引簇 .............................................................................................................................................................. 79 21.1.3 修改和删除簇 .......................................................................................................................................................... 80 21.2 管理散列簇(P352) 80 21.2.1 建立散列簇 .............................................................................................................................................................. 81 21.2.2 建立单表散列簇 ...................................................................................................................................................... 81 21.2.3 修改和删除散列簇 .................................................................................................................................................. 81 21.3 显示簇信息(P355) 82 21.3.1 显示簇信息 .............................................................................................................................................................. 82 21.3.2 显示簇段.................................................................................................................................................................. 82 21.3.3 显示簇键列 .............................................................................................................................................................. 82 21.3.4 显示散列簇的散列函数 .......................................................................................................................................... 82 二十二 序列、视图和同义词 ............................................................................................................................................ 82 22.1 管理序列(P365) 82

22.1.1 建立序列.................................................................................................................................................................. 82 22.1.2 修改和删除序列 ...................................................................................................................................................... 83 22.2 管理视图(P358) 83

22.2.1 建立视图.................................................................................................................................................................. 83 22.2.2 修改和删除视图 ...................................................................................................................................................... 84 22.3 管理同义词(P370) 84 22.3.1 建立同义词 .............................................................................................................................................................. 85 22.3.2 删除同义词 .............................................................................................................................................................. 85 22.4 显示序列、视图和同义词信息(P374) 85 22.4.1 显示序列信息 .......................................................................................................................................................... 85 22.4.2 显示视图信息 .......................................................................................................................................................... 85 22.4.3 显示可更新列 .......................................................................................................................................................... 86 22.4.4 显示同义词信息 ...................................................................................................................................................... 86

美河学习在线 www.eimhe.com

一 Oracle体系结构

1.1 Oracle Server(P18)

Oracle Server :由例程和数据库两部分组成。 例程:内存结构(SGA)和后台进程的集合。

数据库:由数据文件、控制文件、重做日志文件组成。 1.2 SGA(P19)

SGA(System Global Area):由一组内存结构组成,它是由所有用户进程(对应服务器进程)共享的一块内存区域。启动例程时,Oracle自动分配SGA;关闭例程时,Oracle自动释放SGA所占用的内存空间。

SGA主要包括:共享池(Shared Pool)、数据高速缓存(Database Buffer Cache)、重做日志缓冲区(Redo Log Buffer)。

SGA动态尺寸不能超过初始化参数sga_max_size的值。 1.2.1 共享池

共享池(Shared Pool)用于存放最近执行的SQL语句和数据字典信息,主要由库缓存(Library Cache)和字典缓存(Dictionary Cache)两部分组成。

库缓存用于存放最近执行的SQL语句信息,包括SQL语句文本、解析代码值及其执行计划。 库缓存包含许多上下文区域(Context Area),每个上下文区都包含相应SQL语句的执行计划,这些上下文区又被称为共享游标。当客户端执行SQL语句时,服务器进程首先检查共享游标是否存在,若存在则按照其执行计划直接执行语句;若不存在则生成SQL语句执行计划,并将执行计划存放到相应的上下文区中,然后执行该SQL语句。通过共享游标可以最小化SQL语句解析次数,从而提高SQL语句的执行性能(语句文本相同、大小写相同的SQL语句可以共享相同的上下文区域)。

字典缓存用于存放数据字典的信息,包括表、列的定义以及权限信息。 库缓存和字典缓存的尺寸是动态变化的,不是固定的。 1.2.2 数据高速缓存

数据高速缓存(Database Buffer Cache)用于存放最近访问的数据块信息,由许多小缓冲区(缓冲区尺寸=数据块尺寸)组成。

初始化参数db_cache_size用于定义标准数据高速缓存的尺寸(该参数必须定义);初始化参数db_nk_cache_size(n:2、4、16或32)用于定义非标准数据高速缓存的尺寸(该参数不是必须的);初始化参数db_block_size用于定义标准数据块的尺寸。

Oracle采用LRU(Least Recently Used)算法管理数据高速缓存。 数据高速缓存结构:脏缓冲区(Dirty Buffer)、空闲缓冲区(Free Buffer)、忙缓冲区(Pinned Buffer) 脏缓冲区:内容与相应物理数据块不一致的缓冲区。 空闲缓冲区:内容与数据块一致或不包含数据的缓冲区。 忙缓冲区:服务器进程正在存取的缓冲区。 1.2.3 重做日志缓冲区

重做日志缓冲区(Redo Log Buffer)用于记录例程变化。 重做日志缓冲区由很多重做记录(Redo Record)组成,并且每条重做记录记录了被修改数据块的位置以及变化后的数据。

1.2.4 大缓冲池和JAVA池

大缓冲池(Large Pool)用于为大内存操作提供相对独立的内存空间。

需要使用大缓冲池的情况:使用共享服务器、使用RMAN在磁带设备上执行备份与转储和恢复的操作、执行并行查询、使用I/O Slaves提高I/O性能。

JAVA池用于存放JAVA代码。如果要在Oracle数据库中安装JVM,必须配置java池,并且其尺寸应该大于20M。

1.3 PGA(P23)

PGA(Program Global Area)用于存放服务器进程的控制信息和数据,它是独立于SGA的一块内存区域。当用户进程连接到Oracle Server时,Oracle Server会为每个服务器进程分配相应的PGA。初始化参数pga_aggregate_target(动态参数)用于指定所有服务器进程总计占用的最大PGA内存空间。

SGA是所有服务器进程都可共享的内存区域,而每个服务器进程都具有私有的PGA内存空间。 PGA由会话信息(Session Information)、堆栈空间(Stack Space)、排序区(Sort Area)以及游标状态(Cursor State)组成。

会话信息:会话的权限、角色以及会话的性能统计信息。 堆栈空间:用于存放会话变量信息。

i

排序区:用于存放排序操作所产生的临时数据,其尺寸由初始化参数sort_area_size定义。

游标状态:Oracle会在共享池中为SQL语句分配上下文区,游标是指向该上下文区的指针,而PGA中的游标状态则指出了当前SQL语句所处状态。 1.4 后台进程

1.4.1 SMON(System Monitor)

执行例程恢复、合并空间碎片并释放临时段。假定在数据库运行过程中出现了例程失败(断电、内存故障、后台进程例外等),此时SGA信息尚未被完全写入到磁盘。当重新打开数据库时,后台进程SMON会按顺序执行例程恢复:

• REDO 重新应用那些被记载到重做日志,但尚未记载到数据文件中的数据。因为所有被提交的事务已经

记载到了重做日志,所以可以确保恢复事务数据。

• 打开数据库,在打开数据库时,既包含了已被提交的数据,也包含了未提交的数据(加锁),Oracle

会自动使用UNDO段回退未提交的数据。

1.4.2 PMON(Process Monitor)

监视服务器进程的执行,并且在服务器进程失败时清除该服务器进程。假定用户进程因地质例外意外终止运行,PMON可以轮询检测该服务器进程,并执行以下操作:

• 回退用户的当前事务。

• 释放服务器进程所占用的所有表锁和行锁。 • 释放用户所占用的其他资源。 1.4.3 LGWR(Log Writer)

将重做日志缓冲区的全部内容写入到重做日志文件中。

出现以下情况时LGWR进程开始工作:系统发出检查点(checkpoint) • 提交事务(commit) • 每隔3秒钟

• 当重做信息超过1M时

• 重做日志缓冲区已经有三分之一填满时

• 在DBWR进程将脏缓冲区的数据写入到数据文件之前(写了日志文件之后才能写数据文件) 1.4.4 DBWR(Database Writer)

将脏缓冲区数据写入到数据文件中。 默认情况下只有一个DBW0进程,通过设置初始化参数db_writer_processes可以定义最多10个DBWR进程(DBW0-DBW9)。

出现以下情况时DBWR进程开始工作:系统发出检查点(checkpoint) • 服务器进程找不到空闲缓冲区

• 表空间正常脱机(alter tablespace...offline normal) • 开始表空间备份(alter tablespace...begin backup)。 • 删除或截断表

1.4.5 CKPT(Checkpoint Process)

发出检查点会同步数据库的数据文件、控制文件和重做日志文件。

当发出检查点时,后台进程CKPT将检查点时刻的SCN(system change number)写入到控制文件和重做日志文件头部。同时促使后台进程DBWR将所有脏缓冲区写入到数据文件中。

当发出检查点时,不仅后台进程CKPT和DBWR要开始工作,LGWR也会将重做日志缓冲区写入到重做日志,从而确保数据文件、控制文件和重做日志文件的一致性。

出现以下情况时CKPT进程开始工作:

• 手工检查点(alter system checkpoint)

• 日志切换 (alter system archive log current或alter system switch logfile) • 关闭例程(shutdown abort例外)

• 由初始化参数fast_start_mttr_target强制发出检查点。

注意:在使用alter system archive log current命令切换日志组后,日志组的状态为active状态,切换日志组之后是暂时不会发出检查点的。。。。 1.4.6 ARCH(Archive Process)

将重做日志的事务变化复制到归档日志中,该后台进程只有在archivelog模式下才有意义。

默认情况下只有一个ARC0进程,通过设置初始化参数log_archive_max_processes最多可以定义10个归档进程(ARC0-ARC9)。

在archivelog模式下进行日志切换时会自动生成归档日志。 手动执行alter system archive log current。

美河学习在线 www.eimhe.com

1.4 7 查询所有后台进程信息

使用动态性能视图v$bgprocess。 1.5 数据库物理结构(P28) 1.5.1 数据库文件

数据文件用于存储数据库数据,包括系统数据(数据字典)、用户数据(表、索引、簇)、UNDO数据等。 数据库逻辑上由一个和多个表空间(tablespace)组成,而表空间物理上则由一个和多个数据文件组成。 当执行排序操作时,如果临时数据超过排序区尺寸,服务器进程会将临时数据放到临时表空间中。 1.5.2 重做日志文件

重做日志文件用于记录数据库变化,当进行例程恢复或介质恢复时需要使用重做日志文件。数据库至少要包含两个重做日志组,并且这些重做日志组是循环使用的。 1.5.3 控制文件

控制文件用于记录和维护数据库物理结构,并且每个Oracle数据库至少要包含一个控制文件。

当使用Oracle Server时,一个例程只能访问一个数据库,Oracle通过控制文件在例程和数据库之间建立联系。当装载数据库时,Oracle会根据初始化参数control_files定位控制文件,打开数据库时,Oracle会根据控制文件所记载的信息打开所有数据文件和重做日志。 1.5.4 归档日志文件

归档日志文件是非活动重做日志的备份。通过使用归档日志,可以保留所有重做历史记录。当数据库出现介质损坏时,使用数据文件副本和重做历史记录可以完全恢复数据库。

只有在archivelog模式下才能生成归档日志,并且进行日志切换时Oracle可以自动生成归档日志。 1.5.5 参数文件

参数文件用于定义启动例程所需要的初始化参数,参数文件包括文本参数文件和服务器参数文件。

参数文件默认位置为$ORACLE_HOME\\dbs。文本参数文件的名称格式为init.ora。服务器参数文件名称为spfile.ora。其中SID为例程名称。 创建文本参数文件: SQL> create pfile='/orabackup/initorcl_bak.ora' from spfile; 1.5.6 口令文件

口令文件用于验证特权用户,特权用户是指具有SYSDBA和SYSOPER权限的特殊数据库用户,这些数据库用户可以启动例程、关闭例程、建立数据库、执行备份和恢复等操作。

建立Oracle数据库时,默认情况下只有一个特权用户(SYS)。

在linux平台中,口令文件的默认位置为$ORACLE_HOME/dbs,口令文件的名称格式为pwd.ora。 可以通过动态性能视图v$pwfile_users查看口令文件成员。 1.5.7 预警文件

预警文件(alert file)由连续的消息和错误组成。通过使用预警文件,可以查看Oracle内部错误(错误号为ORA-600)、块损坏错误、非默认初始化参数、可以监视特权用户的操作(如启动例程、关闭例程、备份和恢复等)、可以监视数据库物理结构的改变(如建立表空间、删除表空间等)。

预警文件位置由初始化参数background_dump_dest确定,名称为alert.log,其信息由服务器进程和后台进程(DBWR和LGWR)写入。

查看预警文件应从文件尾部查看,随着时间的推移,预警文件会越来越大,DBA应该定期删除或截断预警文件。

1.5.8 后台进程跟踪文件

后台进程跟踪文件用于记录后台进程的警告或错误消息,每个后台进程都有相应的跟踪文件。

后台进程跟踪文件的位置由初始化参数background_dump_dest确定,名称格式为__.trc,其中SPID为后台进程所对应OS进程号。 1.5.9 服务器进程跟踪文件

服务器进程跟踪文件用于记载服务器进程的相关信息,它主要用于跟踪SQL语句。 通过使用服务器进程跟踪文件,可以诊断SQL语句性能,并作出相应的SQL调整规划。

注意:当跟踪SQL语句时,必须激活SQL跟踪。服务器进程跟踪文件的位置由初始化参数user_dump_dest确定,名称格式为_ora_.trc。 1.6 数据库逻辑结构(P32) 1.6.1 表空间

表空间是数据库的逻辑组成部分。

Oracle建议将不同类型的数据部署到不同表空间,一方面可以提高数据库访问性能,另一方面便于数据管理、备份和恢复等操作。

i

Oracle数据库中应该包含SYSTEM表空间、SYSAUX表空间、临时表空间、UNDO表空间、数据表空间和索引表空间等。

SYSTEM表空间用于存放系统数据(数据字典信息);SYSAUX表空间用于存储数据库辅助系统信息;数据表空间用于存放表数据;索引表空间用于存放索引数据;临时表空间用于存放临时数据;UNDO表空间用于存放UNDO数据。 1.6.2 段

段(Segment)用于存储特定逻辑对象(表、簇、索引等)的所有数据,它由一个或多个区组成的。 表段:也称数据段,用于存储表的所有数据。 索引段:用于存储索引的所有数据。

临时段:用于存放排序操作所产生的临时数据,当临时数据量超过排序区尺寸时,Oracle会分配临时段,并将临时数据暂时存放到临时段中。

UNDO段:用于存放事务所修改数据的旧值。 1.6.3 区

区(extent)是Oracle进行空间分配的逻辑单元,它是由相邻数据块组成的。 1.6.4 Oracle块

Oracle块也称为数据块,是Oracle在数据文件上执行I/O操作的最小单位,其尺寸应该设置为OS块的整数倍。

二 Oracle Server

2.1 OEM数据库控制工具(P50) 一、企业管理器 $ emctl start dbconsole // 开启企业管理器服务。 $ emctl status dbconsole // 查看企业管理器服务状态。 $ emctl stop dbconsole // 关闭企业管理器服务。 oracle10.2.0.1使用http://ip:1158/em 进入企业管理器登录界面。 使用(sys passwd sysdba)(system passwd normal)登录企业管理器。 二、SQL*Plus $ sqlplus user/password@databaseName // 普通用户模式,必须保证该用户有权限。 $ sqlplus system/password@databaseName as sysdba // 系统模式。 $ sqlplus sys/password@databaseName as sysdba // 使用sys账户以sysdba身份登录sqlplus。 三、isqlplus $ isqlplusctl start // 开启isqlplus服务。 oracle10.2.1使用http://ip:5560/isqlplus 进入isqlplus登录界面。 使用 (system passwd) 登录isqlplus。 2.2 数据库管理员(P56)

DBA主要任务:安装和升级Oracle Server、建立数据库、建立数据库的主要存储结构(表空间)、建立数据库的主要对象(表、试图、索引等)、制定并实施备份与恢复计划。 2.2.1 SYSDBA特权

SYSDBA特权是Oracle数据库中具有最高级别权限的特殊权限,可以执行建立数据库、启动数据库、关闭数据库、备份和恢复数据库,以及任何其他的管理操作。默认只有sys用户具有SYSDBA特权。

$ sqlplus sys/passwd as sysdba // 登录SYSDBA特权用户。 2.2.2 SYSOPER 特权

可以启动数据库、关闭数据库,但是不能建立数据库,也不能执行不完全恢复,另外,SYSOPER特权也不具备DBA角色的任何权限。默认情况下只有sys用户具有SYSOPER特权。

$ sqlplus sys/passwd as sysoper // 登录SYSOPER特权用户。 2.2.3 DBA角色

当数据库处于OPEN状态时,DBA角色可以在数据库中执行各种管理操作,包括管理表空间、管理用户等,但是不能执行SYSDBA和SYSOPER所具有的任何特权操作(如建立、启动、关闭数据库等)。默认只有system用户具有DBA角色。 三 管理例程 ORA-01034:ORACLE not available // 没有启动例程 ORA-01033:ORACLE initialization or shutdown in progress // 没有打开数据库 3.1 管理初始化参数(P60) 启动例程并打开数据库时,必须提供相应的参数文件。 启动命令: SQL> connect sys/test as sysdba SQL> STARTUP PFILE=$ORACLE_HOME\\database\\inittest.ora

美河学习在线 www.eimhe.com 说明:启动和关闭例程必须由特权用户(默认sys)完成,并且PFILE用于指定启动例程时使用的文本参数文件。 3.1.1 常用初始化参数 参数名称 db_name db_domain instance_name service_names control_files db_block_size db_cache_size db_nk_cache_size shared_pool_size log_buffer sga_max_size java_pool_size large_pool_size pga_aggregate_target remote_login_passwordfile undo_management undo_tablespace db_file_multiblock_read_count background_dump_dest user_dump_dest processes open_cursors 参数描述 用于定义数据库名称(值包含字母、数字、#、$和_),最多8个字符。 必须与CREATE DATABASE后的数据库名称匹配。 用于指定数据库在分布式网络环境中的逻辑位置(设置为网络域名)。 和db_name共同构成了全局数据库名(格式:db_name.db_domain)。 用于指定例程的唯一名称,主要用于在RAC环境中标示同一个数据库的不同例程。 在单例程数据库系统中,值应该与db_name保持完全一致。 用于指定客户连接到例程时可以使用的一个或多个服务名称。 默认值为db_name.db_domain 用于指定一个或多个控制文件名(多个文件用逗号隔开),最多可以指定8个控制文件。 用于指定标准Oracle块的尺寸,取值可以为2048、4096、8192、16384、32768。 该参数在建立数据库时设置,在建立数据库后将不能修改。 用于指定标准数据库缓存的尺寸。 在标准Oracle块上的读写操作会使用标准数据高速缓存。 用于指定非标准数据库告诉缓存的尺寸。 用于指定共享池的尺寸。 用于指定重做日志缓冲区的尺寸。 用于指定SGA的最大尺寸。 用于指定java池的尺寸。如果要在数据库中安装java虚拟机,必须设置该参数,并且其值不要低于20M。 用于指定大缓冲池的尺寸。当使用共享服务器进程、执行并行操作和I/O Slaves时,应该配置该初始化参数。 用于指定例程所有服务器进程可占用的总计PGA空间。 设置该参数时,其值不能低于10M。 用于指定特权用户的验证方式,其取值可以是NONE、SHARED、EXCLUSIVE。 NONE:表示使用OS验证特权用户 SHARED:表示多个数据库可以共用同一个口令文件 EXCLUSIVE:表示口令文件只能用于单个数据库。 用于指定UNDO管理模式,其值为AUTO或MANUAL。 AUTO:表示使用UNDO表空间管理UNDO数据。 MANUAL:表示使用回滚段管理UNDO数据。 用于指定启动例程时使用的UNDO表空间名。 指定的UNDO表空间必须是已经存在的UNDO表空间,否则数据库将无法打开。 用于指定执行全表扫描时一次I/O操作可读取的最大数据块个数。 用于指定预警文件和后台进程跟踪文件所在目录。 用于指定服务器进程跟踪文件所在目录。 用于指定连接到Oracle的并发用户进程的最大个数。 用于指定单个会话可以同时打开的最大游标个数。 3.1.2 参数文件

参数文件用于存放启动例程所需要的初始化参数。

在Oracle Database 10g中,既可以使用文本参数文件(PFILE),也可以使用服务器参数文件(SPFILE),Oracle建议使用SPFILE来管理和设置初始化参数。通过使用SPFILE,不仅简化了参数管理,而且可以使用RMAN备份SPFILE。 • PFILE

建议将PFILE存放在$ORACLE_HOME\\dbs目录中,文件名称建议使用initSID.ora,SID为例程名。如果例程名称为test,则文本参数文件名称应使用inittest.ora。

手动编辑文本参数文件的原则:

a、在修改或增加初始化参数之前,首先检查该初始化参数是否存在。若存在,则直接修改;若不存在,则在文件按尾部增加一行。

b、每行只能设置一个参数。

c、字符型参数的值可以用引号引住,数字类型参数则不能。 d、如果一个初始化参数有多个值,则用逗号隔开。 e、屏蔽参数可以使用“#”。 • SPFILE

建议将PFILE存放在$ORACLE_HOME\\dbs目录中,文件名称建议使用spfileSID.ora,SID为例程名。如果例程名称为test,则文本参数文件名称应使用spfiletest.ora。

SPFILE是二进制文件,不能手工修改,只能使用ALTER SYSTEM命令进行修改。 sqlplus “sys/oracle@test as sysdba”

SQL> ALTER SYSTEM SET resource_limit=TRUE SCOPE=SPFILE; • 建立PFILE

i

如果当前例程在使用SPFILE,那么使用ALTER SYSTEM命令将无法修改某些初始化参数(如db_name)。为了修改这些初始化参数,必须建立PFILE,并且手工修改该PFILE文件的相应参数。

使用CREATE PFILE命令可以建立文本参数文本,语法为:CREATE PFILE [=’pfile_name’] from SPFILE [=’spfile_name’],其中pfile_name用于指定PFILE的文件全名,spfile_name用于指定SPFILE的文件全名。

如果不指定PFILE文件名,则会在默认路径下建立默认PFILE($ORACLE_HOME\\dbs\\initSID.ora);如果不指定SPFILE文件名,则会使用当前例程正在使用的SPFILE文件。

注意:只有特权用户才能执行CREATE PFILE命令。 示例代码: sqlplus sys/oracle@test as sysdba SQL> CREATE PFILE FROM SPFILE; • 建立SPFILE 建立代码:create spfile [=’spfile_name’] from pfile [=’pfile_name’]

如果不指定SPFILE文件名,则会在默认路径下建立默认SPFILE($ORACLE_HOME\\dbs\\spfileSID.ora);如果不指定PFILE文件名,则使用默认的PFILE文件。

注意:只有特权用户才能执行CREATE SPFILE命令。 示例代码: sqlplus sys/oracle@test as sysdba SQL> CREATE SPFILE FROM PFILE; • 确定例程所使用的参数文件类型 SQL> conn sys/oracle as sysdba SQL> show parameter spfile // 查看参数文件。 如果value存在返回值,表示例程正在使用SPFILE;如果value没有任何返回结果,则表示例程正在使用PFILE。 3.1.3 显示和设置初始化参数 显示所有初始化参数命令 SQL> conn sys/oracle as sysdba SQL> show parameter 显示特定参数 SQL> show parameter db_block_size 由特权用户和DBA查询使用命令: SQL> select name,type,value from v$parameter; 显示特定初始化参数信息: SQL> select isses_modifiable,issys_modifiable,ismodified from v$parameter where name=’sort_area_size’; 3.2 启动例程(P66)

3.2.1 启动例程的三个步骤

1、启动例程(NOMOUNT状态)。启动例程时,首先读取参数文件,然后分配SGA并启动后台进程,同时打开预警文件和后台进程跟踪文件。

2、装载数据库(MOUNT状态)。装载数据库时,Oracle根据初始化参数control_files的设置定位并打开控制文件,然后从控制文件中取得数据文件和重做日志的信息。

3、打开数据库(OPEN状态)。打开数据库时,Oracle打开所有数据文件和重做日志,只有在数据库打开之后,客户应用才能访问Oracle数据库。

在windows平台下启动例程并打开数据库时,必须首先启动例程服务(格式:OracleServicesSID),启动例程服务时,默认情况下会自动执行启动例程、装载数据库、打开数据库等操作。如果例程服务已经启动,但例程仍然处于关闭状态,那么使用命令STARTUP可以启动例程并打开数据库。 3.2.2 启动例程的语法与解释

启动例程语法:startup [nomount | mount | open | force|] [restrict] [pfile=filename] force:用于指定终止例程并重新启动数据库。 restrict:用于指定以受限会话方式启动数据库。

pfile:用于指定启动例程时要使用的文本参数文件,如果在启动例程时不指定pfile,默认情况下会选用spfile。

注意:startup命令只能由特权用户执行。 3.2.3 启动例程流程示例

当以受限模式打开数据库时,只有具有restricted session权限或DBA角色的数据库用户可以访问数据库,启动代码为:SQL> startup restrict

当执行数据库结构维护,导出或导入数据时,为了禁止普通用户访问数据库,可以使用受限模式启动数据库。

当以受限模式打开数据库时,普通用户不能访问数据库,只有特权用户、DBA用户和具有restrict session权限的用户可以访问数据库。

当数据库处于open状态时,特权用户或DBA用户可以使用alter system命令激活或禁止受限模式。

美河学习在线 www.eimhe.com

3.3 停止例程(P68) 3.3.1 shutdown normal

shutdown normal命令用于执行正常关闭操作。当执行shutdown normal命令停止例程时,系统会等待断开所有客户端的会话。

3.3.2 shutdown transactional

shutdown transactional用于执行事务关闭操作,当执行该命令关闭数据库并停止例程时,系统不会等待客户会话结束,如果某会话正在执行事务操作,并且尚未执行”commit”或”rollback”命令结束事务,那么系统会处于等待状态。只有结束事务后,系统才会自动断开会话,然后停止例程。 3.3.3 shutdown immediate

shutdown immediate用于执行立即关闭操作。当执行该命令关闭数据库并停止例程时,系统会自动回退所有未完成事务、断开用户会话,最终关闭数据库。

注意:当使用normal、transactional、immediate选项关闭数据库并停止例程时,系统会发出检查点并关闭所有数据库文件。 3.3.4 shutdown abort

shutdown abort用于终止例程。当执行该命令停止例程时,系统不会发出检查点,也不会关闭数据库文件。因此,若重新启动例程并打开数据库时,后台进程SMON会执行例程恢复。

一般情况下不要使用该命令停止例程,该命令应该在特殊情况下使用,如系统需要马上断电时。 3.3.5 suspend database

执行数据库备份时,为了避免在数据文件和控制文件上的I/O冲突,可以使用alter system suspend命令暂停数据库。

执行alter system suspend命令暂停了数据库后,禁止在数据文件和控制文件上的任何IO操作,为了继续正常的数据库操作,可以使用alter system resume命令。

SQL> alter system suspend; SQL> alter system resume;

四 建立和删除数据库

4.3 配置网络(P83)

建立了oracle数据库后,为了使客户应用可以访问该oracle数据库,首先需要在服务器端配置监听程序,然后在客户端配置网络服务名。

只有合理地配置了监听程序和网络服务名后,客户端才能访问该数据库。 sqlnet.ora(概要文件):用于配置网络首选项、日志和跟踪信息。 tnsnames.ora(服务命名):用于配置本地的网络服务名。 listener.ora(监听程序):用于配置服务器端的监听程序。 4.3.1 配置监听程序

监听程序用于接收客户端的连接请求。当安装oracle数据库产品时,会自动建立默认监听程序LISTENER,通过该监听程序可以同时监听多个数据库。

在同一台服务器上可以有多个监听程序,并且不同监听程序可以监听同一个数据库。

当客户端应用访问oracl server时,监听程序会接收并检查该请求,以确定是否可以为该应用提供数据服务。

配置监听程序有两种方法:第一种方法是手工编辑并修改listener.ora文件,第二种方法是使用oracle网络管理工具进行配置。 配置过程说明: 协议:用于指定监听程序要使用的网络协议,监听程序可以使用多种网络协议,但最常用的是TCP/IP协议。 主机:用于指定数据库服务器所在机器的主机名或IP地址。 端口:用于指定监听程序所要使用的TCP/IP端口号,默认端口号为1521。 全局数据库名:设置为初始化参数service_names的值。 oracle主目录:设置为oracle软件的安装路径。 SID:设置为环境变量ORACLE_SID的值。 配置保存后可以使用lsnrctl start/stop/status控制监听程序。 4.3.2 配置客户端

为了使客户端应用可以访问oracle数据库,不仅需要在服务器端配置并启动监听程序,还必须在客户端配置网络服务名,最终客户端应用程序可以通过该网络服务名访问oracle server。

安装oracle数据库产品时,系统会自动在服务器端为默认数据库配置相应的网络服务名,并且网络服务名就是其例程标识(SID)。

i

为了方便地访问同一台服务器上的多个oracle数据库,应该为新数据库配置相应的网络服务名。 注意:网络服务名可以任意指定,但最好设置为数据库名或例程名。 配置过程说明: 服务名:设置为监听程序中所配置的全局数据库名。 SID:设置为监听程序中所配置的SID。 协议、主机、端口:和监听程序配置必须完全一致。 配置保存后就可以通过客户端连接到oracle数据库了。 使用select * from global_name;可以确定数据库全名。 4.5 删除数据库(P90) 从oracle 10g开始,特权用户可以使用drop database命令删除数据库。

注意:使用drop database命令删除数据库时,要求数据库必须处于mount状态,并且必须以restrict方式装载数据库。 示例: sqlplus sys/password as sysdba SQL> shutdown immediate SQL> startup restrict mount SQL> drop database; 五 数据字典和动态性能视图

数据字典记载了数据库的系统信息,它是只读表和视图的集合。

数据字典的所有者为SYS用户,并且其数据被存放在system表空间中,因为oracle专门使用system表空间存放数据字典信息,所以建议不要在system表空间上建立表、索引和簇等对象。

用户只能在数据字典上执行查询操作,而其维护和修改是由系统自动完成的。

当执行create操作时,oracle会在数据字典上隐含执行insert操作;当执行alter操作时,oracle会在数据字典上隐含执行update操作;当执行drop操作时,oracle会在数据字典上隐含执行delete操作。

数据字典包括数据字典基表和数据字典视图两部分,其中,基表存储数据库的基本信息,普通用户不能直接访问数据字典基表;视图是基于基表建立的视图,普通用户可以通过查询数据字典视图取得系统信息。

数据字典视图主要包括user_xxx、all_xxx、dba_xxx三种类型。 5.1.1 all_xxx

all_xxx用于显示当前用户可以访问的所有对象,它不仅会返回当前用户方案的所有对象,还会返回当前用户可以访问的其他方案对象。 5.1.2 user_xxx

user_xxx用于显示当前用户所拥有的所有对象,它只返回用户所对应方案的所有对象。 5.1.3 dba_xxx

dba_xxx用于显示整个数据库范围内的详细系统信息,它会显示所有方案所拥有的数据库对象。 注意:如果用户要查询dba_xxx数据字典视图,必须具有DBA角色或select_catalog_role角色。 5.1.4 数据字典内容

使用包dbms_metadata 可以取得对象定义语句: 示例: SQL> set long 4000 SQL> select dbms_metadata.get_dll('TABLE','EMP') dd1 from dual; 如果用户要查询段所占用的空间,可以使用数据字典视图user_segments。 示例: SQL> select bytes from user_segments where segment_name=’EMP’; 在查询段剩余空间和已用空间时,应首先使用analyze table命令分析表。示例: SQL> analyze table emp compute statistics; SQL> select empty_blocks,blocks from user_tables where table_name=’EMP’; 如果用户要查询表列的信息(如列名、列数据类型、平均长度、默认值等),可以查询数据字典视图user_tab_columns。 示例: SQL> col column_name format a15 SQL> col data_type format a15 SQL> col data_default format a15 SQL> select column_name,data_type,data_default from user_tab_columns where table_name='DEPT'; 如果用户要查询其方案中的约束以及约束列的信息,可以分别查询数据字典视图user_constraints、user_cons_columns。 示例: SQL> select a.constraint_name,a.constraint_type,b.column_name,b.position from user_constraints a,user_cons_columns b

美河学习在线 www.eimhe.com where a.constraint_name=b.constraint_name and a.table_name=’EMP’; 通过查询数据字典视图dba_users,可以显示所有数据库用户的详细信息; 通过查询数据字典视图dba_sys_privs,可以显示用户或角色所有的系统权限; 通过查询数据字典视图dba_tab_privs,可以显示用户或角色所有的对象权限; 通过查询数据字典视图dba_col_privs,可以显示用户或角色所具有的列权限; 通过查询数据字典视图dba_role_privs,可以显示用户或角色所具有的其他角色。 示例: SQL> select granted_role from dba_role_privs where grantee=’SCOTT’; 5.2 常用数据字典(P97) 5.2.1 dict

显示当前用户可访问的所有数据字典视图,并给出这些数据字典视图的作用。 示例: SQL> select table_name from dict where comments like '%grant%'; 5.2.2 dict_columns

显示数据字典视图每个列的作用 示例: SQL> select column_name,comments from dict_columns where table_name=’DICT’; 5.2.3 tab

显示当前用户所拥有的表、视图和序列 示例: SQL> select * from tab; 5.2.4 obj

显示用于当前用户所拥有的所有对象 示例: SQL> select object_name,object_id,created from obj where object_type=’TABLE’; 5.2.5 dual

取得函数的返回值 示例: SQL> select user from dual; 5.2.6 global_name

显示当前数据库的全名 示例: SQL> select * from global_name; 5.2.7 ind

显示当前用户所拥有的所有索引和索引统计信息 示例: SQL> select index_name,index_type,uniqueness form ind where table_name=’EMP’; 5.2.8 seq

显示当前用户所拥有的所有序列 示例: SQL> select sequence_name,increment_by from seq; 5.2.9 syn

显示当前用户所拥有的同义词和同义词所对应的数据库对象名 示例: SQL> select synonym_name,table_owner||’.’||table_name owner_object from syn; 5.3 动态性能视图(P99)

动态性能视图用于记录当前例程的活动信息。

启动例程时,oracle会自动建立动态性能视图;停止例程时,oracle会自动删除动态性能视图。

i

注意:数据字典信息是从数据文件中取得,而动态性能视图信息则是从SGA和控制文件中取得。

通过查询动态性能视图,一方面可以获得性能数据,另一方面还可以取得与磁盘和内存结构相关的其他信息。

通过查询v$fixed_table,可以显示所有动态性能视图。动态性能视图的所有者为SYS,并且多数动态性能视图只能由特权用户和DBA用户查询。

当数据库处于不同状态时,可以访问的动态性能视图有所不同。nomount状态下只能访问从SGA中获取信息的动态性能视图。mount状态还可以访问从控制文件中获取信息的动态性能视图。open状态还可以访问与oracle性能相关的动态性能视图(如v$filestat、v$session_wait、v$waitstat)。

注意:只有处于open状态时,才能访问数据字典视图。 SGA v$parameter 控制文件 v$thread v$sga v$controlfile v$option v$database v$process v$datafile v$session v$datafile_header v$version v$logfile v$instance 5.4 常用动态性能视图(P100)

注意:大多数动态性能视图只能由特权用户和DBA用户访问。 5.4.1 v$fixed_table

列出所有可用的动态性能视图和动态性能表。 示例: SQL> select name from v$fixed_table where name like ‘V$%’; // V大写。 5.4.2 v$instance

用于取得当前例程的详细信息。 示例: SQL> select instance_name,host_name,status from v$instance; 说明:instance_name:例程的名称,host_name:例程所在的主机名,status:例程所在状态。 5.4.3 v$sga

显示SGA主要组成部分(共享池、数据高速缓存和重做日志缓冲区)的尺寸。 示例: SQL> select * from v$sga; 5.4.4 v$sgainfo

用于取得sga更详细的信息。 示例: SQL> select * from v$sgainfo; 5.4.5 v$parameter

用于取得初始化参数的详细信息。 示例: SQL> select name,value,description from v$parameter where name=’db_name’; 说明:name:初始化参数的名称,value:初始化参数的值,description:初始化参数的作用。 5.4.6 v$version

用于取得oracle版本的详细信息。 示例: SQL> select * from v$version; 5.4.7 v$option

用于显示已经安装的oracle选项。 示例: SQL> select * from v$option; 5.4.8 v$session

用于显示会话的详细信息。 示例: SQL> select sid,serial#,username from v$session where username is not null; 说明:sid:会话id号,serial#:会话序列号,username:会话所对应的数据库用户。 注意:如果username为null,则表示是后台进程的会话。

美河学习在线 www.eimhe.com

5.4.9 v$process

用于显示与oracle相关的所有进程信息(包括后台进程和服务器进程)。 示例: SQL>select a.terminal,a.spid,a.pga_alloc_mem from v$process a,v$session b where a.addr=b.paddr and b.username=’SCOTT’; 5.4.10 v$bgprocess

用于显示后台进程的详细信息。 示例: SQL> select name,description from v$bgprocess where paddr<>’00’; 说明:name:后台进程名,description:后台进程的作用。 5.4.11 v$database

用于取得当前数据库的详细信息(如数据库名、日志操作模式以及建立时间等)。 示例: SQL> select name,log_mode,created from v$database; 5.4.12 v$controlfile

用于取得当前数据库所有控制文件的信息。 示例: SQL> select name from v$controlfile; 5.4.13 v$datafile

用于取得当前数据库所有数据文件的详细信息。 示例: SQL> col name format a30 SQL> select file#,name,bytes from v$datafile; 说明:file#:数据文件的编号,name:数据文件的名称,bytes:数据文件的尺寸。 5.4.14 v$dbfile

用于取得数据文件编号及名称。 示例: SQL> select * from v$dbfile; 5.4.15 v$logfile

用于显示重做日志成员的信息。 示例: SQL> col member format a50 SQL> select group#,member from v$logfile; 5.4.16 v$log

用于显示日志组的详细信息。 示例: SQL> select group#,thread#,sequence#,bytes,members,status from v$log; 说明:sequence#:日志组的当前日志序列号。 5.4.17 v$thread

用于取得重做线程的详细信息。当使用RAC结构时,每个例程都对应一个重做线程,并且每个重做线程包含独立的重做日志组。 示例: SQL> select thread#,status,groups,instance,sequence# from v$thread; 说明:thread#:重做线程号,status:重做线程的状态(CLOSED或OPEN),groups:分配给重做线程的日志组个数,instance:重做线程所对应的例程名,sequence#:重做线程的当前日志序列号。 5.4.18 v$lock

用于显示锁信息。通过与v$session进行连接查询,可以显示占有以及等待锁的会话。 示例: SQL> col username format a10 SQL> col machine format a25 i

SQL> select a.username,a.machine,b.lmode,b.request from v$session a,v$lock b where a.sid=b.sid and a.type=’USER’; 5.4.19 v$locked_object

用于显示被加锁的数据库对象。 示例: SQL> col oracle_username format a20 SQL> col object format a20 SQL> select a.oracle_username,b.owner||’.’||b.object_name object from v$locked_object a,dba_objects b where a.object_id=b.object_id; 5.4.20 v$rollname和v$rollstat

v$rollname动态性能视图用于显示处于online状态的undo段,而v$rollstat用于显示undo段统计信息。 示例: SQL> select a.name,b.xacts from v$rollname a,v$rollstat b where a.usn=b.usn; 5.4.21 v$tablespace

用于显示表空间信息。 示例: SQL> select * from v$tablespace; 5.4.22 v$tempfile

用于显示当前数据库所包含的临时文件。 示例: SQL> select name from v$tempfile; 六 控制文件

6.1 控制文件概述(P107)

控制文件不仅记载了数据库的物理结构(数据文件的名称和位置、重做日志的名称和位置),装载和打开数据库时也需要这些文件,而且它们还记载了同步和恢复数据库时需要的日志序列号、检查点和日志历史信息。

控制文件主要记载的信息有:数据库名称、表空间名称、数据文件名称和位置、重做日志名称和位置、当前日志序列号、日志历史信息、检查点信息、RMAN信息。

控制文件是一种较小的Oracle数据库文件,尺寸一般在2M~10M之间,变化尺寸主要由永久参数和RMAN信息决定。

为了存放数据文件、日志组、日志成员、例程、日志历史等信息,控制文件需要为它们提供预留空间。这些永久参数包括:

MAXINSTANCES:用于指定可以同时访问数据库的最大例程个数。 MAXDATAFILES:用于指定Oracle数据库的最大数据文件个数。 MAXLOGFILES:用于指定Oracle数据库的最大日志组个数。 MAXLOGMEMBERS:用于指定日志组的最大日志成员个数。

MAXLOGHISTORY:用于指定控制文件可记载日志历史的最大个数。 示例: MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 使用RMAN执行备份操作时,RMAN备份信息会被记载到控制文件中。初始化参数control_file_record_keep_time指定了RMAN备份信息在控制文件中的保留时间,默认值为7。该初始化参数设置越大,RMAN备份信息的保留时间也越长,控制文件也会越大。 6.2 多元化控制文件(P108)

Oracle数据库最多可以包含8个控制文件。当多元化控制文件时,为了防止磁盘损坏导致控制文件丢失或损坏,应该将控制文件分布到不同磁盘上。 6.2.1 使用PFILE多元化控制文件

如果在启动例程时使用了PFILE,在多元化控制文件时需要手工编辑PFILE,并修改初始化参数control_files。 • 步骤1:手工修改初始化参数control_files关闭数据库shutdown immediate 手工修改示例:control_files=D:\\DEMO\\CONTROL01.CTL,E:\\DEMO\\CONTROL02.CTL D:\\DEMO\\CONTROL01.CTL是原有控制文件,E:\\DEMO\\CONTROL02.CTL文件目前还不存在。 • 步骤2: • 步骤3:复制控制文件到修改后的目标位置 • 步骤4:启动数据库

美河学习在线 www.eimhe.com 完成了多元化控制文件的任务后,为了使用户可以访问数据库,必须启动例程并打开数据库。因为例程使用PFILE,所以启动时应该指定PFILE全名。 示例:startup pfile=$ORACLE_HOME\\dbs\\initSID.ora 6.2.2 使用SPFILE多元化控制文件

如果启动例程的时候使用了SPFILE,在多元化控制文件时需要执行alter system命令修改初始化参数control_files。 • 步骤1:修改初始化参数control_files SQL> alter system set control_files='/orcl1/control01.ctl', '/orcl2/control02.ctl', '/orcl3/control03.ctl' scope=spfile; • 步骤2:关闭数据库shutdown immediate • 步骤3:移动控制文件到修改后的目标位置 • 步骤4:启动数据库 6.3 建立控制文件(P110)

当数据库控制文件全部损坏时,DBA可以使用CREATE CONTROLFILE命令重新建立控制文件。如果要改变数据库名称或数据库的永久参数,必须重新建立控制文件。

注意:因为建立控制文件是一项比较危险的任务,如果建立不成功,可能会潜在地损坏数据文件和重做日志,所以在建立控制文件之前必须备份数据库的所有数据文件和重做日志。

当所有控制文件全部损坏或被删除时,如果没有控制文件备份,那么DBA必须使用CREATE CONTROLFILE命令重新建立控制文件;如果控制文件备份存在,那么可以使用备份恢复控制文件。 6.4 删除控制文件(P115)

当oracle数据库包含多个控制文件,并且只有某个控制文件损坏时,为了使得数据库可以正常工作,只需要去掉损坏的控制文件即可。假定数据库包含两个控制文件,并且因一个控制文件损坏而无法装载数据库,解决方法如下: 步骤一:修改初始化参数control_files。 SQL> alter system set control_files=’d:\\demo\\CONTROL01.CTL’ SCOPE=SPFILE; 步骤二:重新启动数据库 可选步骤:多元化控制文件。 6.5 查看控制文件信息(P115) 6.5.1 显示控制文件名称

通过查询动态性能视图v$controlfile,可以获得控制文件的名称及状态。 SQL> select name from v$controlfile; 6.5.2 显示初始化参数control_files

查询动态性能视图v$parameter或执行show parameter命令可以显示初始化参数control_files的值。 SQL> select value from v$parameter where name=’control_files’;

七 重做日志

7.1 重做日志简介(P120)

重做日志用于记载事务操作所引起的数据变化。执行DDL或DML操作时,oracle会将事务变化信息顺序写入重做日志缓冲区。每个oracle数据库至少要包含两个重做日志组,并且这些重做日志组是循环使用的。 7.1.1 重做日志组和重做日志成员

日志组由一组完全相同的重做日志文件组成,每个日志组至少要包含一个重做日志文件。如果一个日志组包含多个重做日志文件,后台进程LGWR会将相同的事务变化写入到同一个日志组的各个重做日志文件中。日志组中的每个重做日志文件都被称为日志成员,同一个日志组的所有日志成员都具有相同的日志序列号和尺寸。 7.1.2 重做入口

重做入口也称为重做记录,由一组变化向量组成,这些变化向量包括表块变化(块位置、变化数据)、UNDO块变化和UNDO事务表的变化。

当用户执行事务操作时,服务器进程会将重做记录写入到重做日志缓冲区,并最终由后台进程LGWR将重做记录写入到重做日志文件。

后台进程LGWR开始工作的条件:提交事务;每隔3秒钟;当重做信息超过1M时;重做日志缓冲区已有三分之一填满;在DBWR进程将脏缓冲区写入到数据文件之前。 7.1.3 SCN

SCN是:数据库变化的唯一标识号,其数值顺序递增。

执行事务操作时,系统会为每个事务变化生成相应的SCN。 7.1.4 日志序列号

日志序列号是重做日志的使用标识号,其数值是顺序递增的。

i

当进行日志切换时,日志序列号会自动增一,并将该信息写入到控制文件中。 7.1.5 重做线程

重做线程由一组相关的重做日志组成。对于单例程数据库系统来说,只有一个重做线程,而对于RAC来说,多个例程会同时访问数据库,并且每个例程都有独立的重做线程(重做线程与例程一一对应)。 7.1.6 日志切换

日志切换指后台进程LGWR停止写一个日志组,并开始写另一个日志组的事件,日志切换包括自动日志切换和手工日志切换两种方式。默认情况下,当日志组写满时,后台进程LGWR会自动进行日志切换。

注意:当使用alter database命令维护日志组或日志成员时,不能删除当前日志组及其日志成员,也不能移动当前日志组的日志成员。为了删除当前日志组及其日志成员或移动当前日志组的成员文件,必须首先执行手工日志切换,然后完成相应任务。 手工日志切换示例: SQL> alter system switch logfile; SQL> alter system archive log current; 当进行日志切换时oracle还会完成以下任务:  促使后台进程CKPT发出检查点,从而使后台进程CKPT将检查点时刻SCN信息写入到控制文件和数据

文件头部,并促使后台进程DBWR将脏缓冲区写入到数据文件;

 当数据库处于archivelog模式时,日志切换促使后台进程ARCH将日志组内容保存到归档日志。

7.1.7 checkpoint

检查点是一个数据库事件,它用于同步数据库的所有数据文件、控制文件和重做日志。

当发出检查点时,后台进程CKPT会将检查点时刻的SCN写入到控制文件和数据文件头部,同时促使后台进程DBWR将所有脏缓冲区写入到数据文件中。

当发出检查点时,后台进程CKPT促使后台进程DBWR开始工作,而后台进程DBWR又促使后台进程LGWR开始工作,因为当发出检查点时CKPT、DBWR、LGWR同时工作,所以数据文件、控制文件和重做日志的SCN完全一致,从而使得三种数据库文件保持完全同步。

注意:当执行COMMIT操作时,只有后台进程LGWR会将事务变化写入到重做日志,后台进程DBWR只有在检查点时刻才会将脏缓冲区写入到数据文件。

后台进程CKPT会发出检查点的情况:日志切换;关闭数据库(shutdown abort例外);手工检查点(当执行数据库备份时,为了将脏缓冲区数据写入数据文件,DBA可以执行alter system checkpoint命令,强制后台进程CKPT发出检查点);通过设置初始化参数fast_start_mttr_target控制检查点,该初始化参数指定例程恢复的最大时间(单位:秒)。 7.1.8 例程恢复

例程恢复是指当出现例程失败时由后台进程SMON自动同步数据文件、控制文件和重做日志并打开数据库的过程。

例程失败是指与例程相关的后台进程及内存结构出现故障。 例程失败的主要几种情况:

• 电源断电导致oracle server不可用 • 硬件故障导致oracle server不可用

• 某个必须的后台进程(DBWR、LGWR、PMON、SMON、CKPT)出现失败。 例程失败类似于执行shutdown abort命令关闭数据库,当执行startup命令启动例程并装载了数据库之后,后台进程SMON会自动执行例程恢复,最终使数据库所有文件完全同步。 例程恢复的具体步骤:  确定不同步的物理文件。通过比较数据文件、控制文件和重做日志的SCN,后台进程SMON可以确定哪些文件处于不同步状态。  REDO。确定了不同步的数据文件后,SMON会重新应用那些在数据文件上未执行的事务操作,并且DBWR会将提交和未提交的数据写到数据文件及UNDO段上。  REDO之后会打开数据库,此时客户应用可以访问数据库。  UNDO。在第二步之后,数据文件既包含被提交的数据,也包含未被提交的数据。打开数据库后,SMON会自动使用UNDO段取消未被提交的数据。 7.2 增加重做日志(P125)

增加重做日志是使用alter database命令完成的,执行该命令要求数据库用户必须具有alter database系统权限。

7.2.1 规划日志组尺寸

如果日志组尺寸设置过小,可能会导致日志切换非常频繁,间接地增加检查点次数,从而降低系统性能;如果日志组尺寸设置过大,可能会导致例程恢复的时间很长。

当数据库处于archivelog模式时,如果后台进程LGWR已经写满了特定日志组,它会自动切换到一个新日志组,并且后台进程ARCH会将原有日志组内容复制到归档日志中,并且归档日志尺寸与重做日志尺寸完全相同。

美河学习在线 www.eimhe.com

规划日志组尺寸时,还应该考虑存放归档日志的存储介质,以使得存储介质剩余空间最小。例如,假定磁带空间为100M,并且该磁带只能存放两个归档日志,那么设置重做日志的尺寸略低于50M。 不同日志组的尺寸可以不同,但是oracle建议不同日志组应该采用相同尺寸。 7.2.2 增加日志组

当数据库并发事务很多,而日志组个数又比较少时,可能会出现等待写入日志组的情况。假定数据库只有两个日志组,每个日志组的尺寸为10M,并且该数据库频繁出现大事务,在这种情况下可能出现LGWR等待写入日志组的事件。 增加日志组示例: SQL> alter database add logfile '/oracle/oradata/orcl/redo04.log' size 10M; 增加日志组时,数据库管理员可以显示地指定日志组的组号。示例: SQL> alter database add logfile group 4 '/oracle/oradata/orcl/redo04.log' size 10M; 注意:日志组个数不能超过永久参数maxlogfiles(默认为16个)的设置,如果已经达到了该永久参数的限制,增加新日志组将会失败。

如果要改变永久参数的设置,必须重建控制文件。 7.2.3 增加日志成员

如果日志组只有一个日志成员,并且该日志成员出现损坏,那么当后台进程LGWR切换到该日志组时,oracle会停止工作,并对该数据库执行不完全恢复。 为数据库的每个日志组增加一个日志成员示例: SQL> alter database add logfile member '/oracle/oradata/orcl/redo01b.log' to group 1, '/oracle/oradata/orcl/redo02b.log' to group 2, '/oracle/oradata/orcl/redo03b.log' to group 3; 7.3 删除重做日志(P128) 7.3.1 删除日志成员

通过查看后台进程LGWR跟踪文件(位置“参数background_dump_dest,文件名格式:sid_lgwr_spid.trc)可以取得日志成员损坏信息。

如果日志组包含多个日志成员,某个日志成员的损坏或丢失就不会对oracle数据库的运行产生任何影响,但oracle会将日志成员的损坏或丢失信息写入跟踪文件。 删除日志成员示例: SQL> alter database drop logfile member '/oracle/oradata/orcl/redo1b.log'; 注意:执行该语句时,不能删除当前日志组的日志成员,否则会显示如下错误。 SQL> alter database drop logfile member '/oradata2/orcl/redo13.log'; alter database drop logfile member '/oradata2/orcl/redo13.log' * ERROR at line 1: ORA-01609: log 3 is the current log for thread 1 - cannot drop members ORA-00312: online log 3 thread 1: '/oradata1/orcl/redo03.log' ORA-00312: online log 3 thread 1: '/oradata2/orcl/redo13.log' 为了删除当前日志组的日志成员,应该首先执行日志切换,然后删除对应的日志成员。如果日志组只有一个成员,则不能执行alter database drop logfile member删除该日志成员。 7.3.2 删除日志组

oracle建议每隔20~30分钟进行一次日志切换,如果日志切换时间不在该范围内,原因是日志组尺寸设置不合适。

注意:已存在日志组的尺寸不能改变。 删除日志组的示例: SQL> alter database drop logfile group 4; 注意:执行上述命令删除日志组时,只是从控制文件中逻辑删除了日志组的信息,而不会删除日志组的成员文件,其成员文件必须使用OS命令删除。 注意:当前正在使用的日志组是不能删除的。 如果数据库只有两个日志组,也不能执行alter database drop logfile group命令删除任何一个日志组。 7.3.3 清除重做日志

如果日志组的所有成员全部损坏或被误删除,可以使用alter database clear logfile命令重新初始化该日志组,并生成新的重做日志成员文件;如果当前日志组的所有成员被误删除,也可以使用alter database clear logfile命令重新生成日志组的成员文件。 示例: SQL> alter database clear logfile group 2; 注意:如果执行该命令清除了当前正在使用的日志组,必须重新备份数据库。 如果出现组内所有日志都损坏,则运行以下命令: SQL> alter database clear unarchived logfile group 2; i

7.4 改变重做日志位置或名称(P129) • 确定日志组状态 • • 移动日志成员时,它所对应的日志组不能处于current状态。 SQL> select a.group#,a.status from v$log a,v$logfile b where a.group#=b.group# and b.member='/oracle/oradata/orcl/redo2b.log'; 复制或移动日志成员到目标位置。 当日志组处于inactive状态时,DBA可以使用OS命令复制或移动日志成员到新位置。 SQL> host copy d:\\demo\\redo2b.log f:\\demo\\redo2b.log; 改变控制文件所记载的重做日志指针。 将日志成员文件复制到目标位置后,为了使后台进程LGWR可以访问该日志成员,必须执行alter database rename file命令,改变控制文件所记载的重做日志指针。 SQL> alter database rename file 'd:\\demo\\redo2b.log' to 'f:\\demo\\redo2b.log'; 7.5 使用OMF方式管理重做日志(P130) 7.5.1 使用OMF方式建立日志组

使用OMF建立日志组时,必须设置初始化参数db_create_online_log_dest_n,n是1~5的整数。初始化参数db_create_online_log_dest_n用于指定重做日志所在目录,如果要多元化重做日志,必须配置多个参数。 示例: SQL> alter session set db_create_online_log_dest_1 = '/oracle/oradata/orcl/redo1'; SQL> alter session set db_create_online_log_dest_2 = '/oracle/oradata/orcl/redo2'; SQL> alter database add logfile size 10m; 说明:建立尺寸为10M的新日志组,该日志组的两个成员分别被分布到redo1和redo2。 7.5.2 删除OMF日志组

如果使用OMF方式建立了日志组,删除该日志组时oracle会自动删除该日志组所对应的日志成员。 示例: SQL> alter database drop logfile group 4; 7.6 显示重做日志信息(P131) 7.6.1 获取重做线程信息

通过查询动态性能视图v$thread,可以取得rac环境的重做线程信息。 示例: SQL> select thread#,status,instance,groups,sequence#,checkpoint_change# from v$thread; 说明:thread#:重做线程编号,instance:重做线程所对应的例程名,groups:重做线程所包含的日志组个数,sequence#:当前日志序列号。 7.6.2 获取日志组信息

当日志组处于current或active状态,该日志组和日志成员不能被删除,并且其日志成员也不能被移动。 通过查询动态性能视图v$log,可以取得日志组的详细信息。 示例: SQL> select thread#,group#,members,status,sequence#,bytes,first_change#,first_time from v$log; 说明:group#:日志组的编号,sequence#:日志组所对应的日志序列号,members:日志组包含的成员个数,status:日志组的状态。 日志组有unused、current、active、inactive四种状态,其中unused表示日志组从未用过(新日志组或clear logfile后的状态),current表示日志组正在使用,active表示日志组处于活动状态(脏缓冲区还没有完全写入数据文件),inactive表示日志组处于非活动状态。 注意:使用alter system archive log current切换日志后,上一个日志组会处于active状态,这时需要手动执行alter system checkpoint。 注意:使用alter system switch logfile切换日志后,上一个日志组也会处于active状态,这时需要手动执行alter system checkpoint。 7.6.3 获取日志成员信息

通过查询动态性能视图v$logfile,可以取得所有日志成员的详细信息。 示例: SQL> select group#,member,status from v$logfile; 说明:日志组有invalid、stale和blank(空)3种状态,其中blank表示该日志成员处于正常状态,stale表示该日志成员处于未用状态(日志组太大),invalid表示日志成员处于无效状态(新增加的日志成员或被损坏的日志成员)。 八 归档日志

归档日志是非活动重做日志的备份,通过使用归档日志,可以保留所有重做历史记录。

当数据库处于archivelog模式并进行日志切换时,后台进程ARCH会将重做日志的内容保存到归档日志中。当数据库出现介质失败时,使用数据文件备份、归档日志和重做日志可以完全恢复数据。 8.1 日志操作模式(P138)

日志操作模式是指oracle数据库处理重做日志的方式,它决定了是否生成重做历史,以保留重做日志所记载的事务变化。

oracle包括noarchivelog和archivelog两种日志操作模式,建立数据库时,如果不指定日志操作模式,默认的日志操作模式为noarchivelog。 8.1.1 noarchivelog模式

美河学习在线 www.eimhe.com

noarchivelog是指不保留重做历史的日志操作模式,只能用于保护例程失败(如系统断电),而不能保护介质失败。

当数据库处于noarchivelog模式时,如果进行日志切换,在不保留原有重做日志内容的情况下日志组的新内容将直接覆盖原有内容。

noarchivelog模式的特点:当检查点完成之后,后台进程LGWR可以覆盖原有重做日志内如果数据库备份后的重做日志内容已经被覆盖,那么当出现数据文件损坏时只能恢复到过去的完全备份点;执行数据库备份时,必须使用shutdown normal或shutdown immediate关闭数据库;执行数据库备份时,必须备份所有数据文件和控制文件。

8.1.2 archivelog模式

archivelog是指保留重做日志历史的日志操作模式,这种日志操作模式不仅可用于保护例程失败,还可以用于保护介质失败。

当数据库处于archivelog模式时,如果后台进程LGWR进行日志切换,那么后台进程ARCH自动将重做日志的内容复制到归档日志中。

archivelog模式的特点:出现介质失败(磁盘损坏、误删除文件)时,可以防止丢失数据;当数据库处于open状态时,可以备份数据库,并且不会影响数据库的正常使用;出现数据文件损坏时,除了system表空间的数据文件外,其他表空间的数据文件都可以在open状态下恢复;执行数据库恢复时,不仅可以执行完全恢复,而且可以将数据库恢复到特定点(时间、SCN值、日志序列号)的状态。 8.1.3 选择日志操作模式

noarchivelog模式只能用于保护例程失败,不能用于保护介质失败,即如果数据库物理文件出现损坏,将导致无法恢复该数据文件。

archivelog模式不仅可用于保护例程失败,而且可用于保护介质失败,即当数据库物理文件出现损坏时,使用物理备份、归档日志和重做日志可以恢复数据库文件。

选择日志操作模式的原则:如果数据库允许丢失部分数据,可以选择noarchivelog模式,如果数据库不允许丢失任何数据,只能选择archivelog模式;DSS系统(数据变化很少)应该选择noarchivelog模式,OLTP系统(数据变化频繁)应该选择archivelog模式;如果数据库必须全时运行,应该选择archivelog模式。 8.2 控制归档(P140) 8.2.1 改变日志操作模式

为了防止物理损坏导致丢失数据库数据,应该将数据库改变为archivelog模式,改变日志操作模式必须以SYSDBA或SYSOPER身份执行相应操作。 • 检查当前日志操作模式 通过动态性能视图v$database,可以确定当前日志操作模式。 SQL> select log_mode from v$database; • 关闭数据库,然后装载数据库 改变日志操作模式只能在mount状态下进行。 注意:如果要改变日志操作模式,那么在关闭数据库时不能使用shutdown abort命令。 • 改变日志操作模式,然后打开数据库 SQL> alter database archivelog; SQL> alter database open 8.2.2 执行手工归档

当将日志操作模式转变为archivelog模式时,oracle会自动启动ARCH进程。如果要使用手工归档,那么在改变日志操作模式时必须使用命令alter database archivelog manual。

注意:使用手工归档方式时,数据库管理员必须手工执行归档命令,如果没有执行手工归档命令,日志组的原有内容将不能被覆盖。

使用手工归档方式时,数据库管理员可以执行以下命令归档重做日志: SLQ> alter system archivelog all; 8.3 配置归档(P141)

归档日志的默认位置为$ORACLE_BASE/flash_recovery_area,在oracle 10g中,归档日志默认文件名格式为ARC%S_%R.%T。为了改变归档日志的位置和名称格式,必须改变相应的初始化参数。 8.3.1 使用log_archive_dest配置归档位置

如果不使用备用数据库,只需要将归档日志存放到本地目录。

配置本地归档位置可以使用初始化参数log_archive_dest和log_archive_duplex_dest。其中第一个参数用于指定第一个归档位置,第二个参数用于指定第二个归档位置。

i

当只需要配置1~2个本地归档位置时,可以使用初始化参数log_archive_dest和log_archive_duplex_dest。 示例: SQL> alter system set log_archive_dest='/oracle/oradata/arch/archive1' scope=spfile; SQL> alter system set log_archive_dumplex_dest='/oracle/oradata/arch/archive2' scope=spfile; 配置了初始化参数log_archive_dest和log_archive_duplex_dest后,当后台进程LGWR执行日志切换时,后台进程ARCH会生成两份完全相同的归档日志,并分别存放到两个位置。 8.3.2 使用log_archive_dest_n配置多个归档位置

初始化参数log_archive_dest_n用于指定多个归档位置,该参数最多可以指定10个归档位置。

通过使用初始化参数log_archive_dest_n,不仅可以配置本地归档位置,还可以配置远程归档位置。 如果即要在主节点(主数据库所在机器)上生成归档日志,又要将归档日志传递到备用节点(备用数据库所在机器)。那么必须使用参数log_archive_dest_n。

log_archive_dest_n和log_archive_dest的区别:

• 初始化参数log_archive_dest_n可以配置本地归档位置和远程归档位置,而初始化参数

log_archive_dest和log_archive_duplex_dest只能配置本地归档位置。

• 初始化参数log_archive_dest_n可以配置多达10个归档位置,而初始化参数log_archive_dest和

log_archive_duplex_dest最多只能配置两个归档位置。

• 初始化参数log_archive_dest_n不能与初始化参数log_archive_dest和log_archive_duplex_dest

同时使用。

注意:因为初始化参数log_archive_dest_n不能与初始化参数log_archive_dest和log_archive_duplex_dest同时使用,所以必须禁用初始化参数log_archive_dest和log_archive_duplex_dest。当使用初始化参数log_archive_dest_n配置本地归档位置时,需要指定location选项,当配置远程归档位置时,需要指定service选项。 示例: SQL> alter system set log_archive_duplex_dest='' scope=spfile; --禁用该参数 SQL> alter system set log_archive_dest='' scope=spfile; --禁用该参数 SQL> alter system set log_archive_dest_1='location=d:\\demo\\archive1'; SQL> alter system set log_archive_dest_2='location=d:\\demo\\archive2'; SQL> alter system set log_archive_dest_3='service=standby'; 说明:以上语句配置了2个本地归档位置和一个远程归档位置。配置归档位置时,service选项需要指定远程数据库的网络服务名(在tnsnames.ora文件中配置)。 8.3.3 使用log_archive_dest_n选项

使用初始化参数log_archive_dest_n配置归档位置时,可以在归档位置上指定optional或mandatory选项。指定mandatory选项时,可以设置reopen属性。

optional:默认选项,使用该选项时,无论归档是否成功,都可以覆盖重做日志。

mandatory:该选项用于强制归档。使用该选项时,只有在归档成功之后,重做日志才能被覆盖。

reopen:该属性用于指定重新归档的时间间隔,默认值为300秒。注意:reopen属性必须跟在mandatory选项后。

为了强制归档到特定位置,必须指定mandatory选项。 示例: SQL> alter system set log_archive_dest_1='location=d:\\demo\\archive1 mandatory'; SQL> alter system set log_archive_dest_2='location=d:\\demo\\archive2 mandatory reopen=500'; SQL> alter system set log_archive_dest_3='location=d:\\demo\\archive3 optional'; 8.3.4 配置本地归档成功的最小个数

使用初始化参数log_archive_dest_n配置归档位置时(前提条件),可以使用初始化参数log_archive_min_succeed_dest控制本地归档的最小成功个数。 示例: SQL> alter system set log_archive_min_succeed_dest=2; 说明:以上语句执行后,如果生成的归档日志少于两份,重做日志将不能被覆盖。 8.3.5 配置归档进程个数

初始化参数log_archive_max_processes用于指定例程初始启动的最大归档进程个数。 当将数据库转变为archivelog模式时,默认情况下oracle会自动启动两个归档进程。

通过改变初始化参数log_archive_max_processes的值,数据库管理员可以动态地增加或降低归档进程个数。 示例: SQL> alter system set log_archive_max_processes=10;

美河学习在线 www.eimhe.com

8.3.6 配置归档文件格式

初始化参数log_archive_format用于指定归档日志的文件名格式,设置该初始化参数时,可以指定以下匹配符: 匹配符: %s:日志序列号。 %S:日志序列号(带有前导0)。 %t:重做线程编号。 %T:重做线程编号(带有前导0)。 %a:活动ID号。 %d:数据库ID号。 %r:RESETLOGS的ID值。 注意:从oracle 10g开始,配置归档日志文件格式时,必须带有%s、%t和%r匹配符,而其他匹配符可有可无。配置了归档文件格式后,必须重新启动数据库。 示例: SQL> alter system set log_archive_format='%s_%t_%r.arc' scope=spfile; SQL> startup force 说明:修改了初始化参数log_archive_format并重启数据库后,初始化参数配置将会生效。 8.3.7 配置归档生效状态

使用初始化参数log_archive_dest_n配置归档位置时(前提条件),可以使用初始化参数log_archive_dest_state_n控制归档位置的可用性。设置该参数为enable(默认值),表示会激活相应的归档位置;设置该参数为defer,表示会禁用相应的归档位置。当归档日志所在磁盘损坏或填满时,DBA需要暂时禁用该归档位置。 示例: SQL> alter system set log_archive_dest_state_3=defer; 说明:执行以上语句后,会禁用初始化参数log_archive_dest_state_3所对应的归档位置。 为了重新启用该归档位置,可以使用以下语句: SQL> alter system set log_archive_dest_state_3=enable; 8.4 显示归档日志信息(P145) 8.4.1 显示日志操作模式

通过查询动态性能视图v$database或使用archive log list命令可以显示数据库的日志操作模式。 示例: SQL> select name,log_mode from v$database; 或者archive log list命令不仅可以用于显示日志操作模式,还可以显示归档位置、自动归档以及要归档的日志序列号等信息。 8.4.2 显示归档日志信息

通过查询动态性能视图v$archived_log可以显示归档日志的详细信息。 示例: SQL> select name,sequence#,first_change# from v$archived_log; 说明:sequence#:归档日志对应的日志序列号,first_change#:归档日志的其实SCN值。 8.4.3 显示归档日志位置

当执行介质恢复时,需要使用归档日志文件,此时必须准确定位归档日志的存放位置。 通过查询动态性能视图v$archive_dest可以取得归档日志所在的目录。 示例: SQL> select dest_name,destination from v$archive_dest; 8.4.4 显示归档进程信息

为了加快归档速度,应该启动多个ARCH进程。

通过查询动态性能视图v$archive_processes可以显示所有归档进程信息。 示例: SQL> select * from v$archive_processes; 结果说明:process:ARCH进程的编号,status:ARCH进程的状态(ACTIVE:活动,STOPPED:未启动),log_sequence:正在进行归档的日志序列号,state:ARCH进程的工作状态。 8.4.5 显示日志历史信息

oracle在复制了数据文件备份后,通过检查数据文件头部可以获得备份时刻的SCN值,接下来获得当前重做日志的SCN信息,然后根据SCN差值确定完全恢复时需要用到哪些归档日志和重做日志,最后重新执行归档日志和重做日志的事务变化,并将数据文件恢复到失败点的状态。

通过查询动态性能视图v$loghist可以取得日志历史信息,并最终确定归档日志的起始SCN值。

i

示例: SQL> select * from v$loghist; 结果说明:thread#:重做线程号,sequence#:日志序列号,first_change#:日志序列号对应的起始SCN值,first_time:起始SCN的发生时间,swicth_change#:日志切换时的SCN值。 九 表空间和数据文件

9.1 数据库逻辑结构(P149) 9.1.1 表空间

从物理上说,数据库数据存放在数据文件中;从逻辑上说,数据库数据存放在表空间中。

表空间用于逻辑组织数据库数据。数据库逻辑上是由一个或多个表空间组成,而表空间物理上是由一个或多个数据文件组成的。

表空间的作用:通过表空间可以控制数据库所占用的磁盘空间、控制用户所占用的空间配额;将不同类型数据部署到不同位置,一方面可以提高I/O性能,另一方面有益于备份和恢复等管理操作。 9.1.2 数据文件

数据文件是表空间的物理组成部分,表空间与数据文件是一对多的关系,并且一个数据文件只能属于一个表空间。

注意,一旦将数据文件追加到某个表空间后,就不能删除该数据文件了,如果要删除数据文件,只能删除其所属表空间。 数据文件使用原则: • 少量大数据文件优于大量小数据文件。 • 当执行create database命令建立数据库时,使用永久参数maxdatafiles可以指定在控制文件中为数据文件所预留的空间,默认值为32,通过重新建立控制文件可以修改该永久参数的设置。 • 初始化参数db_files限制了数据库可以同时打开的最大数据文件个数。 9.1.3 段(segment) 段用于存储特定逻辑对象的所有数据,它是由一个或多个区组成的。

当建立表、索引或簇时,oracle会为这些对象分配段,以存放它们的数据信息,并且段名与对象名完全相同。 常用段类型: • 表段:用于存放表的数据。 • 索引段:用于存放索引的数据。 • UNDO段:用于存放事务所修改数据的旧值。 • 临时段:用于存放排序操作所产生的临时数据。 9.1.4 区(extent) 区由相邻的数据块组成,是oracle进行空间分配的逻辑单位,并且一个区只能唯一地属于一个数据文件(一个区不能跨数据文件)。

建立段时,oracle至少要为其分配一个区,当段不足以容纳新数据时,oracle会自动扩展该段,并且为其增加一个区。 9.1.5 数据块

oracle块也被称为数据块,是oracle在数据文件上执行I/O操作的最小单位,取值一般为2K、、4K、8K、16K、32K等。

9.2 建立表空间(P151)

system表空间:用于存放数据字典和system回滚段。数据库管理员不能修改system表空间的名称,不能删除system表空间,也不能使system表空间脱机。

sysaux表空间:用于存放各种oracle产品和特征的信息。数据库管理员不能修改sysaux表空间的名称,不能删除sysaux表空间,也不能使sysaux表空间脱机。

建立普通表空间需要使用create tablespace命令,建立大文件表空间需要使用create bigfile tablespace命令,建立undo表空间需要使用create undo tablespace,建立临时表空间需要使用create temporary tablespace命令。

一般情况下建立表空间是由特权用户或DBA执行的,如果以其他用户身份建立表空间,则要求该用户必须具有create tablespace系统权限。 9.2.1 建立本地管理表空间

本地管理是oracle 10g默认空间管理方法。

因为本地管理表空间优于字典管理表空间,所以oracle建议在建立表空间时选择本地管理方式。 注意:建立本地管理表空间时,不能指定default storage和minimum extent子句。 uniform选项用于指定使用相同区尺寸管理表空间,区默认尺寸为1M。如果指定其他尺寸,需要指定size选项。 create tablespace user01 datafile '/oracle/oradata/orcl/user01.dbf' size 20M

美河学习在线 www.eimhe.com autoextend on next 20m maxsize 100m uniform size 128k; 说明:区尺寸为128k autoallocate选项用于指定区尺寸由系统自动分配,初始区默认尺寸为64K。使用该选项时,用户不能指定区尺寸。 create tablespace user02 datafile '/oracle/oradata/orcl/user02.dbf' size 20M autoextend on next 20m maxsize 100m autoallocate; 9.2.2 建立字典管理表空间

字典管理表空间(Dictionary-Managed Tablespace)是为了与早期版本兼容而保留的空间管理特征,使用字典管理方式时,区由数据字典进行管理。

注意:如果其他表空间要采用字典管理方式,那么要求system表空间必须采用字典管理方式。 字典管理表空间建立示例: create tablespace user03 datafile '/oracle/oradata/orcl/users.dbf' size 5M extent management dictionary default storage ( initial 20k next 20k pctincrease 50 minextents 2 maxextents 50 ); 说明:default storage用于指定默认存储参数,initial用于指定为段所分配的第一个区的尺寸,next用于指定为段所分配的第二个区的尺寸,pctincrease用于指定从第三个区开始每个区比前个区尺寸所增长的百分比,minextents用于指定为段所分配的最小区个数,maxextents用于指定段可以占用的最大区个数。 9.2.3 建立大文件表空间 大文件表空间只能包含一个数据文件,但其数据文件的尺寸可以达到4G个数据块。 大文件表空间建立示例: 9.2.4 建立undo表空间 undo表空间用于存储undo段,undo表空间只能使用本地管理方式。 undo表空间建立示例: 9.2.5 建立临时表空间

如果在数据库运行过程中经常有大量并发排序,那么为了提高排序性能,应该建立多个临时表空间。 • 本地管理临时表空间建立 • 大文件临时表空间建立 临时表空间组是多个临时表空间的集合,它使得一个数据库用户可以使用多个临时表空间。 特点:临时表空间组至少要包含一个临时表空间;临时表空间组不能与任何表空间同名;当指定数据库的默认临时表空间或用户的临时表空间时,可以直接指定临时表空间组。 使用临时表空间时,必须首先执行create temporary tablespace命令显示地建立临时表空间,而临时表空间组却是隐含建立的。 建立临时表空间组示例: create temporary tablespace temp03 tempfile '/oracle/oradata/orcl/temp03.dbf' size 3M tablespace group group1; 隐含建立临时表空间组: SQL> alter tablespace temp2 tablespace group group2; 说明:上述命令隐含建立临时表空间组group2并将temp追加到该组。 改变临时表空间组的成员: SQL> alter tablespace temp01 tablespace group group1; // 增加成员 SQL> alter tablespace temp02 tablespace group group1; // 增加成员 SQL> alter tablespace temp03 tablespace group ''; // 删除成员 9.2.6 建立非标准块表空间

如果表空间要使用非标准数据块尺寸,那么在建立表空间时必须指定blocksize选项。 注意,在建立非标准块表空间之前,必须为非标准块分配非标准数据高速缓存。 当在数据库中使用多种数据块尺寸时,必须为每种尺寸的数据块分配相应的数据高速缓存,并且数据高速缓存的尺寸可以动态修改。 分配非标准数据高速缓存示例: 非标准块表空间建立示例: create bigfile tablespace bigtbs16k datafile '/lun1/bigtbs16k.dbf' size 100m autoextend on next 100m uniform size 512k blocksize 16k; 9.3 维护表空间(P155) 9.3.1 改变表空间可用性

i

当建立表空间时,表空间及其所有数据文件都处于online状态,此时该表空间及其数据文件是可以访问的;当表空间或数据文件处于offline状态时(注意:临时表空间无法脱机),表空间或其数据文件不可访问。

一般情况下,改变表空间可用性是由特权用户或DBA完成的;如果以其他用户身份改变表空间可用性,要求用户必须具有manage tablespace系统权限。 为了提高数据文件的I/O性能,可能需要移动特定表空间的数据文件,此时需要将表空间转变为脱机状态,以确保其数据文件的一致性。 使表空间脱机/联机示例: 当出现磁盘损坏导致数据文件丢失时,如果要打开数据库,控制文件将无法定位需要打开的数据文件,为了使数据库可以快速投入使用,应使损坏的数使数据文件脱机/联机示例: 9.3.2 改变表空间读写状态

如果表空间只用于存放静态数据,或者要搬移特定表空间到其他数据库,应将表空间转变为只读状态。当将表空间转变为只读状态后,其SCN值和内容不会发生任何变化。 改变表空间读写状态示例: SQL> alter tablespace tbs read only; SQL> alter tablespace tbs read write; 注意:当将表空间转变为只读状态后,允许执行drop操作删除表空间上的对象。 9.3.3 改变表空间名称 从oracle 10g开始,通过使用alter tablespace的新选项rename,数据库管理员可以改变表空间的名称。 改变表空间名称示例: 9.3.4 设置默认表空间 设置数据库默认表空间示例: SQL> alter database default tablespace users; 设置数据库的默认临时表空间示例: SQL> alter database default temporary tablespace temp01; SQL> alter database default temporary tablespace group1; // group1为临时表空间组。 9.3.5 删除表空间

删除表空间是使用drop tablespace命令完成的,一般情况下由特权用户或DBA执行,如果以其他用户身份删除表空间,则要求用户必须具有drop tablespace系统权限。 删除表空间示例: SQL> drop tablespace tb_8k including contents and datafiles; 注意:数据表空间和临时表空间的删除方式一样。 说明:including contents 表示删除表空间的所有对象,and datafiles表示级联删除数据文件。另外,使用omf方式建立表空间,那么在删除表空间时会自动删除其数据文件。示例: SQL> drop tablespace omf including contents; 9.4 扩展表空间(P158)

表空间尺寸实际就是其数据文件相加后的尺寸。 9.4.1 增加数据文件 增加数据文件示例: alter tablespace user01 add datafile '/oracle/oradata/orcl/user01 2.dbf' size 10m autoextend on next 10m; 9.4.2 改变数据文件尺寸 手工改变数据文件尺寸示例: 注意:不能为大文件表空间增加任何数据文件。不能使用uniform size和autoallocate选项 SQL> alter database datafile '/oracle/oradata/orcl/users01.dbf' resize 10m; SQL> alter database tempfile '/oracle/oradata/orcl/users02.dbf' resize 10m; 9.4.3 允许数据文件自动扩展

默认情况下,建立表空间或为表空间增加数据文件时,如果不指定autoextend选项,该数据文件将不允许自动扩展。 数据表空间文件扩展示例: SQL> alter database datafile '/oracle/oradata/orcl/users01.dbf' autoextend on next 10m maxsize 1g; 临时表空间文件扩展示例: SQL> alter database tempfile '/oradata1/orcl/temp01.dbf' autoextend on next 10m maxsize 1g; 9.5 移动数据文件(P159)

为了提高数据文件的I/O性能,可能需要移动数据文件。

移动数据文件有两种方法,一种方法是使用alter tablespace命令,另一种方法是使用alter database命令。

美河学习在线 www.eimhe.com

9.5.1 在open状态下移动数据文件

当数据库处于OPEN状态时,移动数据文件是使用alter tablespace命令完成的。使用alter tablespace命令移动数据文件时,要求表空间必须处于offline状态。 因为system表空间和sysaux表空间不能被脱机,所以使用该命令不能移动system表空间和sysaux表空间。 • 确定数据文件user01.dbf所属表空间 SQL> select tablespace_name from dba_data_files where file_name='/oracle/oradata/orcl/user01.dbf'; • 使表空间脱机 SQL> alter tablespace user01 offline; • 使用OS命令移动数据文件到目标位置: SQL> host mv /oracle/oradata/orcl/user01.dbf /data1/user01.dbf • 执行alter tablespace命令: SQL> alter tablespace user01 rename datafile '/oracle/oradata/orcl/user01.dbf' to '/data1/user01.dbf'; 使表空间联机: SQL> alter tablespace user01 online; 9.5.2 在mount状态下移动数据文件

system、sysaux和undo表空间不能被脱机,为了移动这两种表空间数据文件,必须在mount状态下使用alter database命令来完成。注意:这种方法可用于移动任何表空间的数据文件。 关闭并装载数据库到mount状态; 移动数据文件到目标位置; 执行alter database命令: SQL> alter database rename file 'd:\\demo\\system01.dbf' to 'e:\\demo\\system01.dbf'; 打开数据库 9.6 使用OMF方式管理表空间(P161) 9.6.1 使用OMF方式建立表空间

使用OMF方式建立表空间或为表空间增加数据文件时,不需要指定数据文件名称,oracle会按照特定方式自动生成数据文件名。 使用omf方式建立表空间示例: SQL> conn system/manager@demo SQL> alter session set db_create_file_dest=’/oracle/oradata/orcl’; SQL> create tablespace omf datafile size 2M; 9.6.2 删除OMF表空间

删除普通表空间时,如果要删除其数据文件,必须指定and datafiles选项,如果使用OMF方式建立表空间,那么当删除表空间时oracle会自动级联删除数据文件。 删除omf表空间示例: SQL> drop tablespace omf including contents; 9.7 显示表空间和数据文件信息(P162) 9.7.1 显示表空间详细信息

建立表空间时,oracle会将表空间的名称、状态、类型、空间管理方式、块尺寸等信息存放到数据字典中。 dba_tablespaces user_tablespaces 示例: 9.7.2 显示表空间的编号和名称

建立表空间时,oracle不仅会将表空间信息写入到数据字典中,而且会将表空间信息写入到控制文件中。 通过查询动态性能视图v$tablespace,可以显示表空间的编号和名称等信息。 示例: SQL> select * from v$tablespace; 说明:ts#:表空间的编号,included_in_database_backup:当使用RMAN进行完全数据库备份时是否包含该表空间,falshback_on:表空间是否支持flashback database特征。 9.7.3 显示表空间所包含的数据文件

当为表空间增加数据文件时,oracle会将数据文件的尺寸、状态、最大尺寸、自动扩展选项等信息存放到数据字典中。

通过查询数据字典视图dba_data_files,可以显示数据文件的详细信息。 示例: SQL> select tablespace_name,file_name,bytes,autoextensible,maxbytes,online_status from dba_data_files; 结果说明:bytes:数据文件的尺寸,autoextensible:数据文件是否允许自动扩展,maxbytes:数据文件可以扩展到得最大尺寸。 9.7.4 显示数据文件动态信息

i

打开数据库时,oracle会按照控制文件记载的数据文件位置及名称打开所有数据文件。当发出检查点时,CKPT进程会将检查点时间、SCN写入数据文件中。

通过查询动态性能视图v$datafile,可以取得数据文件的动态变化信息。 示例: SQL> select ts#,name,bytes,status,enabled,checkpoint_time,checkpoint_change# from v$datafile; 9.7.5 显示临时表空间组的信息 示例: SQL> select tablespace_name from dba_tablespace_groups where group_name=’GROUP1’; 9.7.6 显示临时表空间所包含的临时文件

为临时表空间增加临时文件时,oracle会将临时文件的尺寸、状态、最大尺寸、自动扩展选项等信息存放到数据字典中。

通过查询数据字典视图dba_temp_files,可以显示临时文件的详细信息。 示例: SQL> select tablespace_name,file_name,bytes,autoextensible,maxbytes from dba_temp_files; 9.7.7 显示临时表空间文件动态信息

建立临时表空间时,oracle会将临时文件信息记载到控制文件中,但在控制文件中只会记载当前可用的临时文件。

通过查询动态性能视图v$tempfile,可以显示控制文件所记载的临时文件信息。 示例: SQL> select ts#,name,bytes,status,enabled from v$tempfile; 十 UNDO表空间

当执行DML操作(insert、update、delete)时,oracle会将这些操作的旧数据写入到undo段。 从oracle 9i开始,管理undo数据不仅可以使用回滚段,还可以使用undo表空间。 oracle建议使用undo表空间来管理undo数据。 10.1 undo简介(P173)

undo数据也被称为回滚(rollback)数据,它用于确保数据的一致性。 当执行DML操作时,事务操作前的数据被称为undo记录。

undo段用于保存事务所修改数据的旧值,其中存储着被修改数据块的位置以及修改前数据。 10.1.1 回退事务

通过执行rollback语句可以取消事务变化。 10.1.2 读一致性

用户检索数据库数据时,oracle总是使用户只能看到被提交过的数据(读取提交)或特定时间点的数据(select语句时间点),这样可以确保数据的一致性。

当某用户执行插入、更新或删除操作时,系统会将undo数据放到回滚段中,而将新数据放到数据段中。此时,如果另一个用户检索数据,系统会将undo数据返回给该用户。 10.1.3 事务恢复

事务恢复是例程恢复的一部分,它是由oracle server自动完成的。

如果在数据库运行过程中出现例程失败(如断电、内存故障、后台经常故障等),那么当启动oracle server时,后台进程SMON会自动执行例程恢复。

执行例程恢复时,oracle会重做所有未应用的记录,然后打开数据库,回退未提交事务。 10.1.4 倒叙查询

倒叙查询用于取得特定时间点的数据库数据。 10.2 管理undo表空间(P175) 10.2.1 使用undo参数 • undo_management

该初始化参数用于指定undo数据的管理方式。如果要使用自动管理模式,必须设置该参数为auto;如果使用手工管理模式,必须设置该参数为manual。

使用自动管理模式时,oracle会使用undo表空间管理undo数据;使用手工管理模式时,oracle会使用回滚段管理undo数据。

注意:使用自动管理模式时,如果没有配置初始化参数undo_tablespace,oracle会自动选择第一个可用的undo表空间存放undo数据。如果没有可用的undo表空间,oracle会使用system回滚段存放undo记录,并在alert文件中记载警告信息。

美河学习在线 www.eimhe.com

注意:因为system回滚段只能用于维护system表空间上的事务操作,所以该情况属于异常情况。在实际应用环境中,如果使用自动undo管理模式,必须建立undo表空间。 • undo_tablespace

该初始化参数用于指定例程所要使用的undo表空间,使用自动undo管理模式时,通过配置该参数可以指定例程所要使用的undo表空间。

注意:设置初始化参数undo_tablespace时,必须确保undo表空间存在,否则会导致例程启动失败。 • undo_retention

该初始化参数用于控制undo数据的最大保留时间,其默认值为900秒。 通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征可以查看到的最早时间点。 10.2.3 修改undo表空间

当事务用尽了undo表空间的空间后,DBA可以使用alter tablespace... add datafile命令为其增加数据文件;当undo表空间所在磁盘填满时,DBA可以使用alter tablespace...rename datafile命令移动数据文件到其他磁盘上;当在open状态下移动undo表空间时,DBA可以使用alter tablespace...offline/online命令使表空间脱机/联机;当数据库处于archivelog模式时,DBA可以使用alter tablespace...begin backup/end backup命令备份undo表空间。 示例: SQL> alter tablespace undotbs3 add datafile '/oracle/oradata/orcl/undotbs3_2.dbf' size 5m; 10.2.4 切换undo表空间

切换undo表空间是指停止例程当前在用的undo表空间,并启用其他undo表空间。 示例: SQL> alter system set undo_tablespace=undotbs02 scope=spfile; 注意:在RAC结构中,不同例程必须使用独立的undo表空间,而不能共用同一个undo表空间。另外,切换undo表空间时,必须确保表空间已经存在,并且属于undo表空间,否则切换时将会显示错误。 10.2.5 删除undo表空间

DBA可以执行drop tablespace命令删除undo表空间。

注意:当前例程正在使用的undo表空间是不能被删除的。如果确定要删除当前例程正在使用的undo表空间,应首先切换undo表空间,然后删除相应的undo表空间。 示例: SQL> drop tablespace undotbs3 including contents and datafiles; 10.3 监视undo空间信息(P177)

10.3.1 确定当前例程正在使用的undo表空间

通过查看初始化参数undo_tablespace,可以确定当前例程装载使用的undo表空间。 SQL> show parameter undo_tablespace 10.3.2 显示数据库的所有undo表空间

通过查询数据字典视图dba_tablespaces,可以显示当前数据库包含的所有undo表空间。 示例: SQL> select tablespace_name from dba_tablespaces where contents='UNDO'; 10.3.3 显示undo表空间统计信息

通过查询动态性能视图v$undostat,可以搜集undo统计信息。 示例: SQL> select to_char(begin_time,’HH24:MI:SS’) begin_time, to_char(end_time,’HH24:MI:SS’) end_time,undoblks from v$undostat; 说明:begin_time:起始统计时间,end_time:结束统计时间,undoblks:undo数据所占用的数据块个数。 注意:oracle每隔10分钟生成一行统计信息。 10.3.4 显示undo段统计信息

使用自动undo管理模式时,oracle会在undo表空间上自动建立10个undo段。 通过查询动态性能视图v$rollname,可以显示undo段的统计信息;

通过在v$rollname和v$rollstat之间执行连接查询,可以监视特定undo段的统计信息。 示例: SQL> select a.name,b.xacts,b.writes,b.extents from v$rollname a,v$rollstat b where a.usn=b.usn; 说明:name:undo段的名称,xacts:undo段所包含的活动事务个数,writes:在undo段上所写入的字节数,extents:undo段的区个数。 10.3.5 显示活动事务信息

动态性能视图v$session用于显示会话的详细信息;

i

动态性能视图v$transaction用于显示事务的详细信息; 动态性能视图v$rollname用于显示联机undo段的名称。

通过对三个性能视图的连接查询,可以确定正在执行事务操作的会话、事务所使用的undo段,以及事务所占用的undo块个数。 示例: SQL> select a.username,b.name,c.used_ublk from v$session a,v$rollname b,v$transaction c where a.saddr=c.ses_addr and b.usn=c.xidusn and a.username=’scott’; 10.3.6 显示undo区信息

数据字典视图dba_undo_extents用于显示undo表空间所有区的详细信息,包含undo区尺寸和状态等信息。 示例: SQL> select extent_id,bytes,status from dba_undo_extents where segment_name='_SYSSMU5$'; 说明:extent_id:区编号,bytes:区尺寸,status:区状态(ACTIVE:表示该区处于活动状态,EXPIRED:标识该区未使用)。 十二 用户

12.1 用户和方案(P195) 12.1.1 用户和特权用户

用户(账户)是定义在数据库中的一个名称,它是Oracle数据库的基本访问控制机制。

特权用户是指具有特殊权限(SYSDBA或SYSOPER)的数据库用户,这类用户主要用于执行数据库维护操作,如启动数据库、关闭数据库、建立数据库,以及执行备份和恢复等操作。

如果要以特权用户身份执行数据库维护操作,那么要求UNIX平台的OS用户必须具有OSDBA角色(SYSDBA)或OSOPER角色(SYSOPER),要求WINDOWS平台的OS用户必须具有ORA_DBA组(SYSDBA)或ORA_OPER(SYSOPER)。

SYSDBA不仅具备了SYSOPER的所有权限,还可以建立数据库执行不完全恢复。SYSDBA自动具备了DBA角色的所有权限,而SYSOPER则不具备DBA角色的权限。

初始化参数remote_login_passwordfile被设置为EXCLUSIVE,那么可以将SYSDBA和SYSOPER特权授予其他用户。 12.1.2 方案

方案是用户所拥有数据库对象的集合。在Oracle数据库中对象是以用户来组织的,用户与方案是一一对应的关系,而且二者名称相同。

当访问数据库对象时,在同一个方案中不能存在同名对象,但不同方案的对象名可以相同;用户可以直接访问其方案对象,但是如果要访问其他方案对象,则必须具有对象权限;当用户要访问其他方案时,必须加方案名作为前缀。

12.2 建立用户(P197)

12.2.1 数据库验证方式建立用户

数据库验证是指使用数据库来检查用户、口令以及用户身份的方式,该方式是最常用的用户验证方式。 优点:用户账户及其身份验证全部由数据库控制,不需要借助数据库外的任何控制;当使用数据库验证时,Oracle提供了严格的口令管理特征以加强口令的安全性。 建立用户账户代码: SQL>conn system/manager@demo SQL>create user geminix identified by devep default tablespace user01 temporary tablespace temp quota 10m on user01 password expire; 说明: identified by:用于指定用户口令(数据库验证) default tablespace:用于指定用户的默认表空间,建立数据对象(表、索引和簇)时,如果不指定TABLESPACE子句,Oracle会自动在默认表空间上为这些对象分配表空间 temporary tablespace:用于指定用户的临时表空间,当用户执行排序操作时,若临时数据尺寸超过PGA的排序区尺寸,则会在该表空间上建立临时段 quota *m on:用于指定表空间配额,即用户对象在表空间上可占用的最大空间,使用quota unlimited on可以分配无限空间。 password expire:用于指定口令到期,最终强制用户在登录时修改口令。 初始建立的数据库用户没有任何权限,不能执行任何数据库操作;如果建立用户时不指定default tablespace子句,Oracle会将SYSTEM表空间作为用户的默认表空间;如果建立用户时不指定temporary tablespace子句,Oracle会将数据库默认临时表空间作为用户的临时表空间;如果建立用户时没有为表空间指定quota子句,那么用户特定表空间上的配额为0,用户将不能在相应表空间上建立数据对象。

因为初始建立的用户没有任何权限,所以为了使用户可以连接到数据库,必须授予其create session权限。因为在建立用户时指定了password expire,所以登录之前必须首先改变用户口令: SQL> connect system/manager@demo SQL> grant create session,create table to geminix; SQL> conn devep/devep@demo

美河学习在线 www.eimhe.com

建立数据库对象(表、索引或簇)时,如果不指定TABLESPACE子句,Oracle自动会在用户的默认表空间上建立表段。通过查询数据字典视图user_segments,可以显示当前用户所有段的详细信息。 12.2.2 操作系统验证方式建立用户

OS验证是指使用OS检查用户、口令和用户身份的方式,OS验证适用于局域网环境。 使用OS验证的的要求:

• 数据库用户格式为“XYZ域名\\OS用户名”(必须大写),其中,XYZ为初始化参数OS_AUTHENT_PREFIX

的值。假定初始化参数OS_AUTHENT_PREFIX的值为OPS$,网络域名为SWEETFRUITWALL,并且需要为OS用户XM提供OS验证方式的数据库用户,那么必须建立名为OPS$SWEETFRUITWALL\\XM的数据库用户。 • 如果使用远程OS验证(使用Oracle Net连接),必须将初始化参数remote_os_authent设置为true。 • 必须将文件SQLNET.ORA的选项SQLNET.AUTHENTICATION_SERVICES设置为NTS。 建立OS验证用户示例: SQL> conn system/manager@demo SQL> CREATE USER “OPS$SWEETFRUITWALL\\XM” 2 IDENTIFIED EXTERNALLY 3 DEFAULT TABLESPACE user01 4 QUOTA 3M ON user01; SQL> GRANT CONNECT TO “OPS$SWEETFRUITWALL\\XM”; 当使用OS验证时,首先以OS用户(如XM)登录到局域网环境,然后使用以下两种方法连接到数据库:本地连接:sqlplus / 远程连接:sqlplus /@demo

12.3 修改用户(P199)

alter user命令一般是由DBA执行的,如果要以其他用户身份修改用户信息,必须要具有alter user系统权限。 SQL> alter user geminix identified by devep; // 修改口令 SQL> alter user geminix default tablespace universe; // 修改默认表空间 SQL> alter user geminix temporary tablespace temp1; // 修改临时表空间 SQL> alter user geminix quota 10m on user01; // 修改表空间配额: SQL> alter user geminix account lock; // 锁定用户账户: SQL> alter user geminix account unlock; // 解锁用户账户: SQL> alter user geminix default role select_role; // 设置用户默认角色: 12.4 删除用户(P200)

drop user命令一般由DBA执行,如果要以其他用户身份删除用户,则要求该用户必须具有drop user系统权限。

删除用户后,Oracle会从数据字典中删除用户、方案及其所有方案对象。 drop user username [cascade]

删除用户时,如果用户包含数据库对象,那么必须要带有cascade选项,否则会报错。 12.5 显示用户信息(P201) SQL> show user // 显示当前会话对应的数据库用户。 SQL> select * from v$pwfile_users; // 通过查询动态性能视图v$pwfile_users,可以显示所有特权用户。 SQL> select username,user_id,account_status,default_tablespace,temporary_tablespace,profile from dba_users; SQL> select username,user_id,account_status,default_tablespace,temporary_tablespace from user_users; SQL> select username,user_id,created from all_users; 数据字典视图DBA_USERS,可以显示数据库所有用户的详细信息; 数据字典视图ALL_USERS,可以显示所有数据库用户的名称和编号; 数据字典视图USER_USERS,可以显示当前用户的详细信息。 SQL> select tablespace_name,bytes,max_bytes from dba_ts_quotas where username=’GEMINIX’; 数据字典视图DBA_TS_QUOTAS,可以显示所有数据库用户的表空间配额;通过查询数据字典视图USER_TS_QUOTAS,可以显示当前用户的表空间配额信息。 十三 权限 13.1 权限简介

权限是指执行特定类型SQL命令或访问其他方案对象的权利,权限包括系统权限和对象权限两种类型. 13.1.1 系统权限

系统权限是指执行特定类型SQL命令的权利。它用于控制用户可以执行的一个或一组数据库操作。 如果用户具有create any table权限时,可以在任何方案中建表。 常用系统权限 系统权限 作用 create session 连接到数据库 create table 建表 create view 建立视图 create cluster 建立簇表 create sequence 建立序列 i

create procedure create trigger create type create database link 建立过程、函数和包 建立触发器 建立对象类型 建立数据库链 oracle提供了一类any系统权限,当用户具有该类系统权限时,可以在任何方案中执行相应操作。例如,如果用户具有select any table系统权限,那么用户可以查询任何方案的表。

注意,当初始化参数o7_dictionary_accessibility被设置为FALSE时,除了sysdba和dba用户之外,即使用户具有select any table权限,也不能访问数据字典基表和数据字典视图dba_xxx。

grant dba to geminix可以授予unlimited tablespace,跟直接赋予unlimited tablespace权限没什么区别。

13.1.2 对象权限

对象权限(Object Privilege)是指访问其他方案对象的权利,它用于控制用户对其他方案对象的访问。用户可以直接访问自己的方案对象,但如果要访问其他方案的对象,则必须要具有对象权限。 对象权限 select insert update delete alter execute index references 从oracle9i开始,oracle新增加了系统权限grant any object privilege,使得dba用户可以将任何方案对象的对象权限授予用户或角色。 13.2 管理系统权限(P207)

系统权限是指执行特定类型SQL命令的权利,oracle10g提供了166种系统权限,oracle11g提供了200多种系统权限。

13.2.1 授予系统权限

一般情况下,授予系统权限是由DBA完成的;如果要以其他用户身份授予系统权限,则要求该用户必须具有grant any privilege系统权限,或在相应系统权限上具有with admin option选项。 语法 grant system_priv[,system_priv,…] to {user|role|public},[,{user|role|public}]…[with admin option]; system_priv:用于指定系统权限,如果指定多个系统权限,那么系统权限之间用逗号隔开。 user:用于指定被授权的用户,role:用于指定被授权的角色,如果要指定多个用户或角色,用逗号隔开。 注意:系统权限不仅可以被授予用户和角色,也可以被授予用户组PUBLIC,当将系统权限授予PUBLIC后,所有用户都具有该系统权限。另外,在授予系统权限时可以带有with admin option选项,带有该选项后,被授权的用户、角色还可以将相应系统权限授予其他用户、角色。 注意:系统权限unlimited tablespace不能授予角色。 13.2.2 显示系统权限 示例: SQL> select name from system_privilege_map; 通过查询数据字典视图system_privilege_map,可以显示所有系统权限(包括SYSDBA和SYSOPER)。 SQL> select * from dba_sys_privs where grantee=’GEMINIX’; SQL> select * from dba_sys_privs where grantee=’BASE_ROLE’; SQL> select * from user_sys_privs; 说明:grantee:权限持有者(用户或角色),privilege:系统权限,admin_option:系统权限转授选项,其中yes表示可以转授该系统权限,no表示不能转授该系统权限。 通过查询数据字典视图dba_sys_privs,可以显示所有用户或角色所具有的系统权限; 通过查询数据字典视图user_sys_privs,可以显示当前用户所具有的系统权限。 SQL> select * from session_privs; // 通过查询数据字典视图session_privs,可以显示当前会话所具有的系统权限。 13.2.3 收回系统权限

一般情况下,收回系统权限是由DBA完成的,如果要以其他用户身份收回系统权限,要求该用户必须具有相应系统权限及其转授系统权限选项(with admin option)。 收回系统权限revoke命令语法: revoke system_priv[,system_priv]... from {user|role|public}[,{user|role|public}]... 说明:system_priv用于指定系统权限,user用于指定用户名,role用于指定角色名,public:public用户组。 收回系统权限后,用户不能执行该系统权限所对应的操作。注意,系统权限不会被级联收回。 示例: SQL> conn system/manager SQL> revoke create session from geminix; 13.3 管理对象权限(P210)

对象权限是指访问其他用户方案对象的权利。

用户可以直接访问其方案对象,但如果要访问其他用户方案对象时,必须具有相应的对象权限。 对象权限包括select、insert、update、delete、alter、execute、index和references共8种。 默认情况下,直接授予对象权限时,将访问所有列的权限都授予用户。

假定用户scott执行授权命令grant update on emp to smith,那么smith用户将可以更新scott.emp的所有列。如果只允许smith用户更新某些列,必须要授予列权限。

美河学习在线 www.eimhe.com

注意,只能在insert、update和references上授予列权限。

授予或收回对象权限时,可以使用all选项。执行grant all命令后,会将对象上的所有权限授予用户,而执行revoke all命令则可以收回对象上的所有权限。如果不同方案表之间具有references关系,使用revoke all收回主表上的所有对象权限时需要带有cascade constraints选项。 13.3.1 授予对象权限

从oracle 9i开始,DBA用户可以将任何对象上的对象权限授予其他用户。 语法: grant {object_priv[(column_list)][, object_priv[(column_list)]]... [all [privileges]} on [schema.]object to {user|role|public}[,{user|role|public}]... [with grant option] 说明:object_priv:对象权限,column_list:列权限所对应列的列表,schema用户标识方案名,user:被授权的用户,role:被授权的角色。 对象权限不仅可以授予用户、角色,也可以授予public。将对象权限授予public后,会使所有用户都具有该对象权限。授予对象权限时,可以带有with grant option选项,若带有该选项,被授权用户可以将对象权限转授给其他用户。 注意:with grant option选项不能授予角色。 •

如果用户在其他方案的表或序列上执行alter table或alter sequence命令,必须具有alter对象权限。 如果用户black要修改表scott.emp的结构,则必须为其授予alter对象权限,示例: SQL> conn scott/tiger SQL> grant alter on emp to black; 当将scott.emp表上的alter对象权限授予用户blake后,用户blake可以修改scott.emp的结构。示例: SQL> conn blake/blake SQL> alter table scott.emp add remark varchar2(500); • 如果用户要执行其他方案的包、过程和函数,必须在包、过程和函数上具有execute对象权限。 例如,为了使所有用户都可以执行dbms_transaction,可以将执行该包的权限授予public。示例: SQL> conn sys/oracle as sysdba SQL> grant execute on dbms_transaction to public; 将execute on dbms_transaction对象权限授予public后,所有数据库用户都可以执行该包中的过程和函数。示例: SQL> connect blake/blake SQL> execute dbms_transaction.read_only; • 如果用户要在其他方案的表上建立索引,必须具有index对象权限。 例如,为了使用户blake可以在scott.emp表上建立索引,必须授予index对象权限。示例: SQL> conn system/manager SQL> grant index on scott.emp to blake; 将scott.emp表上的index对象权限授予用户blake后,用户blake就可以基于表emp建立索引。示例: SQL> conn blake/blake SQL> create index ind_ename on scott.emp(ename); • 在不同方案表之间定义主从关系,必须将主表的references对象权限授予从表所对应的数据库用户。 示例: SQL> conn scott/tiger SQL> grant references on dept to blake; • 列权限用于控制用户对其他方案对象列的访问,只能在insert、update和references上授予列权限。 直接授予对象权限时,用户可以访问对象的所有列。假定执行授权操作grant update on scott.emp to blake,此时blake可以更新scott.emp表的所有列。为了使用户blake只能更新sal列,必须为其授予列权限。示例: SQL> conn scott/tiger SQL> grant update(sal) on emp to blake; 将更新sal列的全新啊授予blake用户后,该用户将只能更新sal列,而不能更新任何其他列。示例: SQL> conn blake/blake SQL> update scott.emp set sal=sal*1.1 where deptno=10; SQL> update scott.emp set comm=sal*.1 where deptno=10; 此时就会产生错误信息。 • with grant option 选项用于转授对象权限,该选项只能授予用户,而不能授予角色。 SQL> conn scott/tiger SQL> grant select on emp to blake with grant option; SQL> conn blake/blake SQL> grant select on scott.emp to jones; 13.3.2 显示对象权限 • 显示对象权限

通过查询数据字典视图dba_tab_privs,可以显示所有用户或角色的对象权限信息;

i

通过查询数据字典视图all_tab_privs,可以显示当前用户或public的对象权限; 通过查询数据字典视图user_tab_privs,可以显示当前用户的对象权限信息。 示例: SQL> conn system/manager SQL> select grantor,owner ||’.’|| table_name object,privilege from dba_tab_privs where grantee=’blake’; •

结果说明:grantor:授权用户,owner:对象所有者,table_name:数据库对象,privilege:对象权限,grantee:被授权的用户或角色。 显示用户所授出的对象权限

通过查询数据字典视图all_tab_privs_made,可以显示对象所有者或授权用户所授出的所有对象权限; 通过查询数据字典视图user_tab_privs_made,可以显示当前用户所授出的所有对象权限。 SQL> conn scott/tiger SQL> select grantee,privilege,table_name from user_tab_privs_made; 结果说明:grantee:被授权用户,privilege:对象权限,table_name:对象名。 • 显示用户所具有的对象权限

通过查询数据字典视图all_tab_privs_recd,可以显示用户或public组被授予的对象权限; 通过查询数据字典视图user_tab_privs_recd,可以显示当前用户被授予的对象权限。 示例: SQL> conn blake/blake SQL> select privilege,table_name,grantee from all_tab_privs_recd where grantee=’blake’; • 显示列权限

通过查询数据字典视图dba_col_privs,可以显示所有用户或角色的列权限信息; 通过查询数据字典视图all_col_privs,可以显示当前用户或public的列权限信息; 通过查询数据字典视图user_col_privs,可以显示当前用户的列权限信息。 示例: SQL> conn system/manager SQL> select owner,table_name||’.’||column_name table_column, privilege from dba_col_privs where grantee=’blake’; 结果说明:owner:对象所有者,table_name:数据库对象,column_name:列名,privilege:对象权限,grantee:被授权的用户或角色。 • 显示用户授出的列权限

通过查询数据字典视图all_col_privs_made,可以显示对象所有者或授权用户授出的所有列权限; 通过查询数据字典视图user_col_privs_made,可以显示当前用户授出的所有列权限。 示例: SQL> conn scott/tiger SQL> select grantee,privilege,table_name||’.’||column_name tab_column from user_col_privs_made; 结果说明:grantee:被授权用户,privilege:被授予的列权限,table_name:对象名,column_name:列名。 • 显示用户所具有的列权限

通过查询数据字典视图all_col_privs_recd,可以显示用户或public组被授予的列权限; 通过查询数据字典视图user_col_privs_recd,可以显示当前用户被授予的列权限。 示例: SQL> conn blake/blake SQL> select privilege,table_name||’.‘||column_name tab_column, grantor from all_col_privs_recd where grantee=’blake’; 13.3.3 收回对象权限

收回对象权限一般情况下是由对象所有者完成的,如果以其他用户身份收回对象权限,则要求该用户必须是权限授予者。 语法: revoke {object_priv[,object_priv]...|all[privileges]} on [schema.]object from {user|role|public},[,{user|role|public}]... {cascade constraints}; 说明:object_priv用于指定对象权限,schema用于指定方案名,object用于指定对象名,user用于指定用户名,role用于指定角色名,public用于指定public用户组。 收回了用户所具有的对象权限后,用户将不能执行该对象权限所对应的SQL命令。注意,对象权限会被级联收回。 示例: SQL> conn scott/tiger SQL> revoke select on emp from blake; SQL> conn jones/jones; SQL> select * from scott.emp; 示例错误证明:若收回blake用户的对象权限,也会级联收回jones用户的对象权限。

美河学习在线 www.eimhe.com

十四 角色

角色是相关权限的命名集合,使用角色主要目的是简化权限管理。多个用户具有相似的权限需求时,使用角色(间接授权)可以降低权限授予次数。

使用角色简化权限管理时,首先将权限授予角色,然后将角色分别授予每个用户。 DBA不仅可以使用预定义角色,也可以使用自定义角色和OS角色。 14.1 预定义角色

预定义角色是oracle提供的角色,这些角色是在建立数据库、安装数据字典视图和PL/SQL包时建立的,并且每种角色都用于执行一些特定管理任务。 14.1.1 dba角色

dba角色具有所有系统权限和with admin option选项。 14.1.2 connect角色 connect角色权限列表 系统权限 作用 create session 建立会话 14.1.3 resource角色

resource角色具有应用开发人员所需要的其他权限,如建立存储过程、触发器等。 建立数据库用户后,一般情况下只要给用户授予connect和resource角色就足够了。 注意:resource角色隐含具有unlimited tablespace系统权限(建议收回该权限)。 resource角色权限列表 系统权限 作用 create table 建立表 create cluster 建立簇 create indextype 建立索引类型 create sequence 建立序列 create procedure 建立PL/SQL程序单元 create trigger 建立触发器 create type 建立类型 14.1.4 execute_catalog_role角色

execute_catalog_role角色提供了对所有系统PL/SQL包(DBMS_XXX)的execute对象权限。 14.1.5 select_catalog_role角色

select_catalog_rolg角色提供了在所有数据字典(DBA_XXX)上的select对象权限。 14.1.6 delete_catalog_role角色

delete_catalog_role角色提供了系统审计表sys.aud$上的delete对象权限。 14.1.7 exp_full_database角色

exp_full_database角色用于执行数据库导出操作。 exp_full_database具有的权限和角色 权限及角色 作用 select any table 查询任意表 backup any table 备份任意表 execute any procedure 执行任何过程、函数和包 execute any type 执行任何对象类型 administer resource manager 管理资源管理器 execute_catalog_role 执行任何PL/SQL系统包 select_catalog_role 查询任何数据字典 14.1.8 imp_full_database角色

imp_full_database角色用于执行数据库导入操作,它包含了execute_catalog_role、select_catalog_role角色和大量系统权限(查询dba_sys_privs)。 14.1.9 recovery_catalog_owner角色

recovery_catalog_owner角色为恢复目录所有者提供了系统权限。 recovery_catalog_owner具有的权限和角色 权限和角色 作用 create session 建立会话 create table 建立表 create view 建立视图 alter session 修改会话参数设置 create synonym 建立同义词 create database link 建立数据库链 create cluster 建立簇 i

create sequence create trigger create procedure 建立序列 建立触发器 建立过程、函数和包 14.2 管理自定义角色(P224)

自定义角色是在建立数据库之后由DBA用户建立的角色。该角色初始没有任何权限,为了使角色起作用,需要为其授予相应的权限。

角色不仅可以简化权限管理,而且通过禁止或激活角色还可以控制权限的可用性。 14.2.1 建立角色

建立角色一般情况下由DBA执行,如果要以其他用户身份建立角色,要求该用户必须具有create role系统权限。

使用create role命令建立角色时,可以指定角色的验证方式(非验证、数据库验证)。 • 非验证方式建立角色

如果角色是公用角色或用户的默认角色,可以采用非验证方式。建立角色时,如果不指定任何验证方式,表示该角色使用非验证方式;通过指定not identified选项可以指定非验证方式。 示例: SQL> conn system/manager@orcl SQL> create role base_role not identified; • 数据库验证方式建立角色

数据库验证是使用数据库来检查角色、口令的方式。采用这种验证方式时,角色名及口令存放在数据库。激活角色时,必须提供口令。对于用户所需的私有角色来说,建立角色时应为其提供口令。 示例: SQL> conn system/manager@orcl SQL> create role limit_role identified by forever; 14.2.2 给角色授权

建立角色时,角色没有任何权限,为了使角色可以完成特定任务,必须为其授予系统权限和对象权限。 使用角色的目的是简化权限管理,因此为了使角色起作用,必须将角色授予数据库用户。 • 给角色授权

给角色授权与给用户授权没有任何区别。需要注意,系统权限unlimited tablespace和对象权限的with grant option选项不能授予角色;不能用一条grant语句同时授予系统权限和对象权限。 示例: SQL> conn system/manager@orcl SQL> grant create session,create table,create view,create cluster,create indextype,create sequence,create procedure,create trigger, create type to base_role; SQL> grant select on scott.emp to public_role; SQL> grant insert,update,delete on scott.emp to private_role; 说明:因为将系统权限create session授予角色public_role时带有with admin option选项,所以具有该角色的用户可以将create session权限授予其他用户或角色。 • 分配角色给用户

分配角色与授予系统权限的命令完全相同。一般情况下,分配角色是由DBA完成的,如果以其他用户身份分配角色,则要求该用户必须具有grant any role系统权限或角色上具有with admin option选项。 示例: SQL> conn system/manager@orcl SQL> grant base_role,limit_role to blake with admin option 说明:将public_role、private_role授予用户blake时,由于带有with admin option选项,所以blake用户可以将这两个角色授予其他用户。 SQL> conn blake/blake@orcl SQL> grant base_role,limit_role to jones; 14.2.3 激活和禁止角色

激活角色是指使角色具有的权限生效,禁止角色是指使角色具有的权限临时失效。

将系统权限或对象权限直接授予用户后,用户可以直接执行这些权限所对应的SQL操作;将角色分配给用户后,会间接地将角色所具有的权限授予用户。 • 默认角色

默认角色是用户所具有的角色的子集,当为用户指定默认角色后,以该用户身份登录时会自动激活其默认角色。

如果使用角色的目的仅仅是简化权限管理,那么可以将所有角色都设置为默认角色;如果使用角色进行权限限制,那么应该将公用角色设置为默认角色。

美河学习在线 www.eimhe.com

设置默认角色一般是由DBA完成的,如果要以其他用户身份设置用户的默认角色,则要求该用户必须具有alter user系统权限。 语法: alter user geminix default role {role[,role]...|all[except role [,role]...]|none} 说明:all表示将用户具有的所有角色都设置为默认角色,none表示不指定默认角色。 SQL> conn system/manager@orcl SQL> alter user blake default role base_role; SQL> alter user jones default role base_role; • 激活和禁止角色

激活角色是使当前会话用户具有的角色生效,禁止角色是使当前会话用户具有的角色失效。

激活某角色时,当前会话可以执行该角色所具有的权限操作;禁止某角色时,当前会话将不能执行该角色所具有的权限操作。

设置了用户的默认角色后,当以该用户身份登录时会自动激活默认角色。 如果角色未使用任何验证方式,那么可以直接激活角色: SQL> set role public_role; 或 SQL> exec dbms_session.set_role(‘public_role’) 如果角色使用了数据库验证方式,那么在激活角色时必须提供口令: SQL> set role private_role identified by private; 或 SQL> exec dbms_session.set_role(‘private_role -> identified by private’) 禁止角色是使当前会话用户具有的所有角色全部失效: SQL> set role none; 或 SQL> exec dbma_session.set_role(‘none’) 14.2.4 修改角色验证方式

一般情况下,修改角色是由DBA执行的,如果要以其他用户身份修改角色信息,要求该用户必须具有alter any role系统权限,或者在角色上具有with admin option选项。 • 非验证方式修改角色 建立角色private_role时,指定其验证方式为数据库验证,如果不使用任何验证方式,那么可以使用alter role命令进行修改。 示例: SQL> conn system/manager@orcl SQL> alter role private_role not identified; • 数据库验证方式修改角色

建立角色public_role时,指定其采用非验证方式。如果要使用数据库验证方式,则使用alter role命令进行修改。 SQL> conn system/manager@orcl SQL> alter role public_role identified by private; 14.2.5 删除角色

删除角色是使用drop role命令完成的,一般情况下由DBA执行,如果要以其他用户身份删除角色,则要求该用户必须具有drop any role系统权限,或者在角色上具有with admin option选项。 示例: SQL> conn system/manager@orcl SQL> drop role private_role; 14.2.6 显示角色信息 • 显示所有角色

通过查询数据字典视图dba_roles,可以显示数据库所包含的所有角色。 示例: SQL> conn system/manager@orcl SQL> select * from dba_roles; 结果说明:role:角色名,password:角色验证方式(NO表示采用非验证方式,YES表示采用数据库验证方式) • 显示当前会话激活的角色

通过查询数据字典视图session_roles,可以显示当前会话所激活的角色。 示例: SQL> conn blake/blake@orcl SQL> select * from session_roles; • 显示用户具有的角色及默认角色 示例: SQL> select grantee,granted_role,default_role,admin_option from dba_role_privs; SQL> select role,granted_role,admin_option from role_role_privs; i

SQL> select username,granted_role,default_role,admin_option from user_role_privs; 结果说明:granted_role:已经被授予用户的角色,default_role:角色是否为用户的默认角色(YES表示为默认角色,NO表示不是默认角色)。 通过查询数据字典视图dba_role_privs,可以显示用户或角色所具有的角色信息; 通过查看数据字典视图role_role_privs,可以显示角色具有的其他角色信息; 通过查看数据字典视图user_role_privs,可以显示当前用户所具有的角色。 • 示例: 显示角色所具有的系统权限 SQL> select grantee,privilege,admin_option from dba_sys_privs; SQL> select role,privilege,admin_option from role_sys_privs; 结果说明:privilege:角色所具有的系统权限,admin_option:角色是否具有转授相应系统权限的权限(YES表示可以转授系统权限,NO表示不能转授系统权限),role:角色名。 通过查询数据字典视图dba_sys_privs,可以显示用户或角色所具有的系统权限; 通过查询数据字典视图role_sys_privs,可以显示角色所具有的系统权限; • 示例: 显示角色所具有的对象权限 SQL> select grantee,owner,table_name,grantor,privilege,grantable from dba_tab_privs; SQL> select role,owner,table_name,column_name,privilege,grantable from role_tab_privs; 结果说明:owner:对象所有者,table_name:对象名,privilege:角色所具有的对象权限,role:角色名。 通过查询数据字典视图dba_tab_privs,可以显示用户或角色所具有的对象权限; 通过查询数据字典视图role_tab_privs,可以显示角色所具有的对象权限或列权限。 十五 profile

15.1 profile简介(P243)

profile是口令限制、资源限制的命名集合。

建立oracle数据库时,oracle会自动建立名为default的profile,初始的default没有进行任何口令和资源限制。 注意事项: • 建立profile时,如果只设置了部分口令或资源限制选项,其他选项会自动使用默认值(default的相应选项值)。 • 建立用户时,如果不指定profile选项,oracle会自动将default分配给相应的数据库用户。 • 一个用户只能分配一个profile。如果要同时管理用户的口令和资源,那么在建立profile时应该同时指定口令和资源选项。 • 使用profile管理口令时,口令管理选项总是处于被激活状态,但如果使用profile管理资源,必须要激活资源限制。 15.2 使用profile管理口令(P243)

当从客户端通过网络连接到数据库时,默认情况下用户名和口令是以明文方式通过网络传送的。为了避免黑客通过网络窃取口令,应该在客户端将环境变量ora_encrypt_login设置为true。这样,当发送用户名和口令时,oracle会自动对口令进行加密。

为了加强口令的安全性,可以使用profile管理口令。profile提供7个口令管理选项,它们提供了强大的口令管理功能,从而确保口令安全。

为了实现口令限制,必须首先建立profile,一般情况下create profile命令是由DBA执行的,如果要以其他用户身份建立profile,则要求该用户必须具有create profile系统权限。 15.2.1 账户锁定

账户锁定用于控制用户连接登录失败的最大次数,如果登录失败次数达到限制,那么oracle会自动冻结该用户账户。

oracle为锁定账户提供了以下两个选项:

failed_login_attempts:用于指定连续登录的最大失败次数。 password_lock_time:用于指定账户被锁定的天数。 示例: SQL> create profile geminix_profile limit failed_login_attempts 3 password_lock_time 10; SQL> alter user geminix profile geminix_profile; 说明:如果在建立profile的时候没有指定password_lock_time选项,将自动使用默认值(unlimited)。在这种情况下,需要DBA手工解锁用户账户。 15.2.2 口令有效期和终止期

口令有效期是指用户账户口令的有效使用时间,口令宽限期是指用户账户口令到期之后的宽限使用时间。 为了强制用户定期改变口令,oracle提供了以下两个选项: password_life_time:用于指定口令有效期(单位:天)。 password_grace_time:用于指定口令宽限期(单位:天)。

美河学习在线 www.eimhe.com

注意:为了强制用户定期改变口令,二者应该同时进行设置。 示例: SQL> conn system/manager@orcl SQL> create profile pwd_life_time limit password_life_time 10 password_grace_time 2; SQL> alter user geminix profile pwd_life_time; 15.2.3 口令历史

口令历史用于控制账户口令的重复使用次数或可重用时间。

口令历史包括以下两个选项:

password_reuse_time:用于指定口令可重用时间(单位:天)

password_reuse_max:用于指定在重用口令之前口令需改变的次数。

注意:使用口令历史选项时,只能使用其中的一个选项,并将另一个选项设置为unlimited。 示例: SQL> create profile pwd_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10 password_reuse_max unlimited; SQL> alter user geminix profile pwd_history; 15.2.4 口令复杂性校验

口令复杂性校验是指使用PL/SQL函数确保用户口令的有效性,从而强制用户使用复杂口令.

使用口令校验函数时,既可以使用系统口令校验函数veryfy_function,也可以自定义口令校验函数。 注意:当使用口令校验函数时,该口令校验函数必须建立在SYS方案中。 15.3 使用profile管理资源(P248)

注意:如果使用profile管理资源,必须激活资源限制(参数文件)。 示例: SQL> alter system set resource_limit=true; 15.3.1 限制会话资源

限制会话资源是指限制会话在连接期间所占用的总计资源。当超过会话资源限制时,oracle不会对SQL语句进行任何处理并返回错误信息。

当连接到数据库时,oracle会为用户进程分配相应的服务器进程(占用内存资源);当用户发出SQL语句时,服务器进程会执行该SQL操作(占用CPU资源)。为了有效利用CPU和内存资源,必须对用户进行适当限制。

为了限制会话资源,可以使用以下选项:

cpu_per_session:用于指定每个会话可占用的最大CPU时间(单位:百分之一秒)。 logical_reads_per_session:用于指定会话的最大逻辑读取次数。

private_sga:用于指定会话在共享池中可分配的最大总计私有空间,注意:该选项只适用于共享服务器模式。

composite_limit:用于指定会话的总计资源消耗(单位:服务单元),oracle会根据cpu_per_session、connect_time、logical_reads_per_session以及private_sga的求权结果取得总计服务单元。 示例: SQL> create profile session_limit limit cpu_per_session 5000 logical_reads_per_session 100; SQL> alter user geminix profile session_limit; 说明:因为geminix会话的最大逻辑读取次数为100,所以如果逻辑I/O次数达到100,oracle将不会处理该语句,并提示错误。 15.3.2 限制调用资源

限制调用资源是指限制单条SQL语句可占用的最大资源。当执行SQL语句时,如果解析、执行或提取阶段超出调用级资源限制,oracle将自动终止语句处理,并回退该语句操作。

oracle提供了以下两个限制调用资源的选项:

cpu_per_call:用于限制每次调用(解析、执行或提取数据)可占用的最大cpu时间(单位:百分之一秒)。 logical_read_per_call:用于限制每次调用(解析、执行或提取数据)的最大逻辑I/O次数。 示例: SQL> create profile call_limit limit cpu_per_call 200 logical_reads_per_call 10; SQL> alter user geminix profile call_limit; 说明:因为建立call_limit时指定logical_reads_per_call选项为10,所以如果执行单条SQL语句访问的缓冲区总数超过10,则会显示错误。 i

15.3.3 限制其他资源

其他资源限制选项:

sessions_per_user:用于指定每个用户的最大并发会话个数。 connect_time:用于指定会话的最大连接时间(单位:分钟)。 idle_time:用于指定会话的最大空闲时间(单位:分钟)。 示例: SQL> create profile other_limit sessions_per_user 3 connect_time 30 idle_time 5; SQL> alter user geminix profile other; 说明:session_per_user选项为3(最多3个并发会话),建立第4个会话时就会提示错误。 15.4 修改和删除profile(P250) 15.4.1 修改profile

一般情况下,alter profile命令是由DBA执行的,如果要以其他用户身份修改profile,则要求该用户必须具有alter profile系统权限。

注意:修改profile对已存在会话不起作用,只对新会话起作用。 示例: SQL> alter profile session_limit limit cpu_per_session 15000 sessions_per_user 5 cpu_per_call 500 password_life_time 20 failed_login_attempts 5; 15.4.2 删除profile

一般情况下,drop profile命令是由DBA用户执行的,如果要以其他用户身份删除profile,那么要求该用户必须具有系统权限drop profile。 示例: SQL> drop profile call_limit; 注意:如果profile已经被分配给某个用户,那么当删除该profile时必须带有cascade选项,否则会报错。 15.5 显示profile信息(P251) 15.5.1 显示用户的profile

建立或修改用户时,可以为用户分配profile。如果没有为用户分配profile,oracle自动将default分配给用户。

通过查询数据字典视图dba_users,可以显示用户所使用的profile。 示例: SQL> select profile from dba_users where usernmae=’GEMINIX’; 15.5.2 显示profile的口令和资源限制选项

通过查询数据字典视图dba_profiles,可以显示profile的口令限制、资源限制信息。 示例: SQL> select resource_name,limit from dba_profiles where profile=’SESSION_LIMIT’ and resource_type=’KERNEL’; 说明:resource_name:profile选项名,limit:profile选项值,profile:profile名,resource_type:profile选项的类型(PASSWORD:口令选项,KERNEL:资源选项)。 十六 审计

16.1 审计简介(P256)

审计用于监视和记载数据库用户所执行的各种操作。

激活审计后,如果数据库用户执行了审计操作,oracle会生成审计跟踪结果,并将审计跟踪结果存放到审计跟踪记录中。

审计跟踪记录中包含了操作系统用户名、数据库用户名、数据库操作、操作对象名以及操作时间等信息。 16.1.1 审计分类

特权用户审计。默认情况下,oracle会自动审计特权用户所执行的特权操作(如启动关闭数据库等),并将特权操作的相关信息记载到操作系统的审计跟踪记录中。为了审计特权用户所执行的其他数据库操作,必须设置初始化参数audit_sys_operations。

数据库审计。默认情况下,oracle不会审计数据库用户的任何操作。为了审计数据库用户所执行的操作,必须设置初始化参数audit_trail,并且指定要审计的数据库操作。

应用审计。使用数据库审计,oracle只会记载执行审计操作的用户名、数据库操作、操作对象以及操作时间等信息,而不会记载数据的变化。为了审计数据变化(如update操作前后的数据),必须使用应用审计。

美河学习在线 www.eimhe.com

16.1.2 审计的作用

监视和收集特定活动的数据,对于OLTP(online transaction process)系统来说,会有大量用户同时访问数据库,通过查询v$session可以显示并发会话个数,但却不能显示特定时间段的会话个数。通过审计,可以监视数据库运行高峰期间的总计会话个数。 16.1.3 审计的指导方针 • 根据审计要求最小化审计选项降低审计跟踪记录个数。 • 移动审计表sys.aud$到其他表空间上,默认情况下,表sys.aud$位于system表空间,如果需要经常使

用审计跟踪,那么应该将该表建立在其他表空间上。 • 监视并定期删除审计跟踪记录。 • 避免审计跟踪记录被非法用户删除。为了确保只有DBA用户可以删除审计跟踪记录,不要将

delete_catalog_role角色授予任何其他用户。 16.2 特权用户审计(P257)

特权用户审计用于审计特权用户所执行的各种数据库操作,当以特权用户连接到数据库、启动和关闭数据库时,oracle自动将这些操作的信息记载到OS审计跟踪记录中。

默认情况下,oracle只会审计特权用户连接、启动数据库和关闭数据库的操作。为了审计特权用户执行的其他操作信息,必须将初始化参数audit_sys_operations设置为true。因为该参数是静态的初始化参数,所以修改了该初始化参数后必须重新启动数据库。 示例: SQL> alter system set audit_sys_operations=true scope=spfile; SQL> startup force 16.3 数据库审计(P258)

数据库审计用于审计数据库用户所执行的数据库操作。默认情况下,oracle不会审计用户所执行的任何操作。为了审计用户所执行的各种数据库操作,必须首先激活审计,然后指定要审计的数据库操作。

注意:使用数据库审计时,特权用户所执行的数据库操作不会被审计。 • 激活数据库审计

为了激活数据库审计,必须修改初始化参数audit_trail。该初始化参数的默认值为none,为了激活数据库审计,必须将该参数设置为OS或DB。当参数为OS时,oracle会将审计结果存放到OS审计跟踪记录中;当参数为DB时,oracle会将审计结果存放到数据字典aud$中。 示例: SQL> alter system set audit_trail=db scope=spfile; SQL> startup force • 指定审计选项 激活数据库审计后,为了审计特定的数据库操作,必须使用audit语句指定要审计的数据库操作。例如如果要审计建表操作,必须指定审计create table语句。 设置审计操作时可以带的审计选项: by session:该选项表示在同一个会话中对完全相同的SQL语句只生成一条审计跟踪记录,默认选项。 by access:该选项表示每执行一次语句生成一条审计跟踪记录。 by 用户名:该选项用于指定审计特定的数据库用户。如果不指定该选项,oracle会自动审计除特权用户的所有其他用户。 whenever[not]successful:whenever successful选项用于指定审计执行成功的操作,whenever not successful用于指定审计执行失败的操作。如果忽略这两个选项,则操作无论成功与否都会被审计。 16.3.1 语句审计

语句审计用于审计与特定语句相关的SQL操作。

注意:指定了语句审计之后,只对将来会话起作用,对当前会话不起作用。 16.3.2 权限审计

权限审计用于审计与系统权限相关的SQL操作。

注意:指定了权限审计后,只对将来的会话起作用,对当前会话不起作用。 16.3.3 对象审计

对象审计用于审计特定方案对象上的SQL操作。

注意:指定了对象审计后,不仅对将来会话起作用,而且对当前会话也生效。

使用对象审计时,默认情况下,在同一会话中相同SQL语句只被审计一次,为了审计每条被执行的SQL语句,需要指定by access选项。 16.3.4 删除审计跟踪

一般情况下,删除审计跟踪记录是由特权用户或DBA用户完成的,如果要以其他用户身份删除审计跟踪记录,则要求该用户必须具有delete_catalog_role角色。 示例: i

SQL> delete from sys.aud$; SQL> commit; 16.4 使用精细审计(P263)

为了审计用户在特定数据行或列上的SQL操作,需要使用精细审计。

使用精细审计时,不需要激活数据库审计,并且精细审计是使用oracle系统包DBMS_FGA实现的。 16.5 使用应用审计(P265)

应用审计用于监视DML操作所引起的数据变化。

十七 表

17.1 表简介(P269)

表是数据库数据存储的基本单元,它对应现实世界中的对象。 17.1.1 表的管理方针

定义表列时,为了节省空间,应该将null列放在后面。在合适的情况下使用簇表以节省存储空间并提高SQL语句的性能。

普通表:数据以无序方式存放在单独的表段中,该种表是最基础、最常用的数据库表类型。 簇表:簇由共享相同数据块的一组表组成,在合适的情况下使用簇表可以节省存储空间并提高SQL语句的性能。

索引表:数据以B-树结构存放在主键约束所对应的索引段中。使用索引表时,索引叶块不仅包含了键列的数据,也包含了其他非键列的数据。

分区表:数据被划分为更小的部分(分区),并且存储到相应的分区段中,每个分区段可以独立管理和操作。 通过在建表时指定pctfree和pctused选项,可以控制表的空间使用效率,以及在数据块内为update操作预留的空间。注意:对于使用自动段管理的表空间来说,指定pctused选项不起作用。

如果建表时不指定tablespace选项,oracle会将表段建立在用户的默认表空间中。注意:如果要在特定表空间上建表,用户必须具有相应的表空间配额或具有unlimited tablespace系统权限。

使用子查询(as select)建表时,在多CPU环境下应使用并行方式建表。使用并行方式建表时,oracle会分配多个服务器进程,并且由多个服务器进程并行工作,从而提高建表操作的性能。

使用子查询(as select)建表时,通过指定nologging选项,可以最小化建表所生成的重做信息,从而提高建表性能。另外,使用SQL*Loader或insert进行直接装载时,使用nologging选项也可以加快数据装载速度。 使用表压缩特性(compress)时,oracle会将同一个数据块中行和列的重复数据放在数据块的头部,压缩了表数据,从而节省了表的存储空间。使用直接装载插入数据时,oracle会使用表压缩特性。注意,对于只读表(多数为查询操作)强烈建议采用compress方式建表,对于变化修改很频繁的表则不应该使用表压缩特性。 如果能准确预计表尺寸及其数据扩展速度,可以更好地确定表空间及其数据文件的属性,从而更好地管理表的磁盘存储并提高应用的I/O性能。 17.1.2 行格式

行数据存储在数据块中,并且行长度可变。一般情况下,行数据是按照列定义顺序存放的。 注意:如果使用了long或long raw类型,那么它们的数据总是放在行的尾部;如果使用了LOB类型并且该列的数据长度超过4000字节,那么该列的数据会存放到相应的LOB段中。

美河学习在线 www.eimhe.com

行头:包含行链、行锁、列个数等信息。

列长度:如果列值小于250字节,则占用1个字节,否则占用3个字节。 列值:列的实际数据,null不会占用空间。 17.1.3 常用数据类型 类型 描述 char(n)或char(n byte) 用于定义固定长度的字符串(以字节为单位),最大长度为2000字节。 char(n char) 用于定义固定长度的字符串(以字符个数为单位) varchar2(n)或varchar2(n byte) 用于定义变长字符串(以字节为单位),最大长度为4000字节。 varchar2(n char) 用于定义变长字符串(以字符个数为单位) number(p,s) 用于定义数据类型的数据,其中p表示数字的总位数(最大字节数),s表示小数点后面的位数。注意:当定义整数类型时,可以直接使用number类型的子类型int date 用于定义日期时间数据,长度为7字节。 timestamp date数据类型的扩展,数据显示格式为(DD-MON-YY HH.MI.SS AM) raw(n) 用于定义二进制数据,n的上限值为2000 long LOB 大数据类型 17.2 管理普通表(P273)

普通表是存储用户数据最常用的方式,其数据是以无序方式存放的。 17.2.1 建立普通表 普通表建立示例: create table department( deptno number(4), dname varchar2(10), loc varchar2(10) )pctfree 20 tablespace users storage(minextents 3); 说明:pctfree:用于指定数据块内为update操作所预留空间的百分比,当数据块剩余空间低于20%(pctfree=20)时,不会再在该数据块中继续插入数据,并且这些剩余空间是为update操作所保留的。合理地设置pctfree,可以避免出现行迁移。 pctused:用于指定数据块上可以重新插入数据的已用空间最低百分比。当数据占用空间达到80%,该数据块将不能插入数据;删除部分数据后,如果数据实际占用空间低于50%(pctused=50),那么可以在该数据块上重新插入数据。 tablespace:用于指定表段所在表空间。 storage:用于指定表段的存储参数。其中,minextents用于指定表段department的初始区个数为3,通过查询数据字典视图user_segments,可以显示段所在的表空间、区个数及其尺寸。示例: SQL> select tablespace_name, extents, bytes from user_segments where segment_name='department';

17.2.2 建立临时表 临时表用于存放会话或事务的私有数据。建立临时表后,其结构会一直存在,但其数据只在当前事务内或当前会话内有效。

注意:当在临时表上执行DML操作时,既不会加锁,也不会将数据变化写到重做日志中。 事务临时表是指数据只在当前事务内有效的临时表。如果建立临时表时没有指定on commit选项,则默认为事务临时表。通过指定on commit delete rows选项,也可以指定事务临时表。

i

事务临时表建立示例: SQL> create global temporary table temp1(cola int) on commit delete rows; 会话临时表是数据只在当前会话内有效的临时表。建立临时表时,通过使用on commit preserve rows选项,可以指定会话临时表。 会话临时表建立示例: 17.2.3 修改普通表 • 增加字段 • SQL> create global temporary table temp2(cola int) on commit preserve rows; SQL> alter table department add remark varchar2(2000) default 'good' not null; 注意:如果表采用压缩选项compress,在增加表列时将不能为其指定默认值。 修改字段定义(数据类型,字段长度,默认值) SQL> alter table department modify loc varchar2(100) default 'beijing'; 注意:当缩减char类型列的长度时,如果该表已经包含数据,就必须将初始化参数blank_trimming设置为true SQL> alter system set blank_trimming=true scope=spfile; • • 修改字段名 SQL> alter table department rename column loc to location; 注意:修改字段名会使视图、过程等相关对象转变为无效状态。 删除字段 SQL> alter table emp drop column comm; SQL> alter table department drop (phone,mananger); 注意:sys方案表的列不能被删除。 删除表列时,如果该表包含大量数据,删除列的时间会很长。在这种情况下,如果确定某列不再需要,应该首先将表列标记为unused,然后在数据库空闲阶段删除表列。使用alter table...set unused column选项可以将列标记为unused列,使用alter table...drop unused column可以删除unused列。 SQL> alter table emp set unused column comm; SQL> alter table emp drop unused columns checkpoint 1000; 删除表时,checkpoint 1000用于指定每删除1000行发出一次检查点,以节省undo段的空间使用。如果在删除表列的过程中出现例程失败,那么在重新启动数据库之后使用continue选项可以继续删除操作。示例: SQL> alter table emp drop columns continue checkpoint 1000; • 修改存储参数 SQL> alter table department pctfree 40 pctused 35 initrans 3; 使用alter table改变块空间参数pctfree和pctused时,新设置对所有块都起作用,但对于已分配块不会立即生效,而使用alter table改变事务入口initrans时,该设置只会对将来分配的数据块生效。 • 重新组织表 SQL> alter table department move tablespace user02; 注意:重新组织表时,因为rowid会发生改变,从而导致表的所有索引转变为无效状态,所以在重新组织表后必须重新建立索引。 若在表上频繁地执行DML操作时,会产生空间碎片和行迁移。如果块空间参数pctfree设置不合适,执行update操作时就会出现行迁移;当在表上执行delete操作时,HWM(Hign Water Mark)不会发生任何改变,从而增加全表扫描的I/O次数。在这两种情况下,使用alter table语句可以重新组织表。另外,当重新组织表时,还可以使用tablespace选项将表移动到其他表空间。 • 手工将extent分配给各数据文件 SQL> alter table department allocate extent(size 500k datafile '/oradata1/orcl/universe02.dbf'); 建立表时,默认情况下,oracle会将区轮流部署到表空间的数据文件上,假设表空间有两个数据文件,那么区一、三、五将部署到一个数据文件上,区二、四、六将部署到另一个数据文件上。 注意:当使用datafile选项控制区所在的数据文件时,该数据文件必须要属于表段所在的表空间。 • 释放表段空间 SQL> alter table department deallocate unused keep 0; 如果表段实际占用空间多余所需空间,那么可以释放其所占用的剩余空间。注意:默认情况下释放剩余空间后表段的区个数不会低于minextents,而如果要释放minextents下的剩余空间,需要带有keep 0选项。 17.3 管理索引表(P277)

一般情况下,表及其索引数据分别存放在表段和索引段中。当在where子句中引用索引列时,首先定位索引数据并取得rowid,然后根据rowid取得表的数据。

建立索引表时,oracle会将表及其主键索引的数据一起存放到索引段中。当在where子句中引用主键列时,oracle可以直接根据主键索引值取得表行数据。

对于普通表来说,表、索引数据分别存放在表段、索引段,要占用更多空间;而对于索引表来说,键列和非键列的数据都被存放到主键索引段中。当经常使用主键列定位表数据时,应该建立索引表。 17.3.1 建立索引表

注意:建立索引表时,必须指定organization index关键字,并且必须定义主键约束。 索引表建立示例: create table sales_info( id number(6) constraint pk_sale primary key, customer_name varchar2(30), sales_amount number(10,2), sales_date date, remark varchar2(2000) )organization index tablespace users pctthreshold 20 including remark

美河学习在线 www.eimhe.com overflow tablespace user02; 说明:键列和非键列的数据会存放到主键约束所对应的索引段PK_SALE中,而溢出数据则会存放到溢出段SYS_IOT_OVER_n(n :索引表的对象号)中。 organization index:指定索引表。 pctthreshold:指定数据块中为键列和部分非键列数据所预留空间的百分比。如果数据块剩余空间低于pctthreshold设置,oracle会将其他数据存放到溢出段。 including:指定数据被存放到溢出段的起始列。 overflow tablespace:指定溢出段所在的表空间。 17.3.2 修改索引表

注意:索引表的主键约束不能被删除、延期和禁止。

当在索引表上执行一系列update操作后,将导致索引表产生空间碎片,通过移动索引表,可以删除空间碎片。 示例: alter table sales_info move tablespace user01; 建立索引表时,既可以指定overflow关键字建立溢出表,也可以不指定overflow关键字。如果建立索引表时没有指定overflow,那么建立了索引表之后可以使用alter table为其增加溢出表。 示例: alter table iot1 add overflow tablespace user02; 修改索引表其他选项示例: alter table sales_info initrans 4 pctthreshold 15 including remark overflow initrans 6; 转换索引表为普通表示例: create table sales_info_new as select * from sales_info; 17.4 管理外部表(P279)

外部表是表结构被存放在数据字典,而表数据被存放在OS文件中的表。通过使用外部表,不仅可以在数据库中查询OS文件的数据,还可以使用insert方式将OS文件数据装载到数据库中,从而实现SQL*Loader所提供的功能。

注意:在外部表上不能指定DML修改,也不能在外部表上建立索引。 17.4.1 建立外部表

建立外部表时必须指定organization external选项。

建立外部表包括两个部分内容:一部分描述列的数据类型,另一部分描述OS文件数据与表列的对应关系。 建立目录对象,并授予用户权限: 当在数据库中访问OS文件时,必须建立目录对象,然后通过目录对象访问相应的OS文件。 create directory ext as 'd:\\ext'; grant read,write on derectory ext to scott; / 建立外部表: create table ext_emp( id number(4), f_name varchar2(20), l_name varchar2(24), job varchar2(10), mgr number(4), hiredate date, sal number(9,2), comm number(10,2), dept_id number94), email varchar2(200) ) organization external( type oracle_loader default directory ext access parameters( records delimited by newline fields terminated by ',' missing field values are null( id,f_name,l_name,job,mgr,hiredate char date_format date mask \"dd-mon-yyyy\ ) )location('emp.dat') ); 17.4.2 修改外部表

当在操作系统环境中修改了OS文件所对应的OS路径后,为了使oracle能够正确识别OS文件所在目录,必须改变directory对象。

i

alter table ext_emp default directory ext_new; 当在操作系统环境中修改了OS文件名后,为了使oracle能够正确标识该OS文件,必须逻辑修改外部表对应的OS文件。 示例: alter table ext_emp location('emp_1.dat'); 当OS文件的数据格式(如分隔符由“,”变为“;”)发生改变时,需要改变访问参数设置。 alter table ext_emp access parameters(fields terminated by ';'); 17.5 截断和删除表(P281)

当表结构必须保留,而表数据不再需要时,可以使用truncate table命令截断表。执行该命令时,会删除表的所有数据,并释放表所占用的空间,但会保留表的结构。

使用delete table操作可以回退,而使用truncate table(DDL)不能回退;delete table不会释放空间,而truncate table会释放表段所占用的空间;delete table会占用大量undo空间,而truncate table则占用很少的undo空间。

当表不再需要时,可以使用drop table命令删除表。示例:drop table dept cascade constraints; 其中cascade constraint用于指定级联删除。如果被删除表与其他表具有主从关系,那么删除主表时必须带有该选项。

17.6 显示表信息(P282) 17.6.1 显示特定用户的表 dba_tables all_tables user_tables SQL> select owner,tablespace_name,table_name,iot_name,iot_type,status,pct_free from dba_tables where table_name='NORMALTB1'; 17.6.2 显示表的注释信息 dba_tab_comments all_tab_comments user_tab_comments SQL> select owner,table_name,table_type,comments from dba_tab_comments where table_name='NORMALTB1'; 17.6.3 显示列的注释信息 dba_col_comments all_col_comments user_col_comments SQL> select owner,table_name,column_name,comments from dba_col_comments where table_name='NORMALTB1'; 17.6.4 显示表列信息 dba_tab_columns all_tab_columns user_tab_columns SQL> select owner,table_name,column_name,column_id,data_type,data_length,data_default,nullable from dba_tab_columns where table_name='NORMALTB1'; 17.6.5 显示unused列信息 dba_unused_col_tabs all_unused_col_tabs user_unused_col_tabs SQL> select owner,table_name,count from dba_unused_col_tabs where owner='GEMINIX'; 17.6.6 显示rowid信息 SQL> select dbms_rowid.rowid_relative_fno(rowid), dbms_rowid.rowid_row_number(rowid),dbms_rowid.rowid_block_number(rowid) from dept; 17.6.7 显示外部表信息 dba_external_tables all_external_tables user_external_tables SQL> select default_directory_name, access_type from dba_external_tables where owner='SOCTT' and table_name='EXT_EMP'; 17.6.8 显示外部表的位置 dba_external_locations all_external_locations user_external_locations SQL> select location from dba_external_locations where owner='SCOTT' and table_name='EXT_EMP'; 十九 约束

19.1 约束简介(P305)

在oracle中,可以使用约束、触发器和子程序三种方法实现数据完整性。 19.1.1 约束分类 约束类型 描述 not null 用于确保列不能为null。 unique 用于唯一标识列的数据,当定义了唯一约束后,唯一约束列的列值不能重复,但允许列为null。 primary key 用于唯一标识表行的数据。定义了主键约束后,主键约束列的列值不仅不能重复,也不能为null。 foreign key 用于定义主从表之间的关系。外部键列的数据必须在主表的主键列(或唯一列)中存在,或者为null。 check 用于强制表行数据必须满足的条件。

美河学习在线 www.eimhe.com

19.1.2 约束状态

约束具有enable validate、enable novalidate、disable validate和disable novalidate四种状态。 注意:如果定义或增加约束时不指定约束状态,则约束的默认状态为enable validate。  当将约束转变为enable validate状态时,要求新、旧数据必须同时满足约束规则。  当将约束转变为enable novalidate状态时,已存在数据可以不满足约束规则,但新数据必须满足

约束规则。  当将约束转变为disable validate状态时,不允许在表上执行任何DML操作。对于主键和唯一约

束来说,会删除相应的唯一索引,但约束规则仍然有效。该状态主要用于在分区表和非分区表之间使用alter table...exchange partition命令进行数据交换。  当将约束转变为disable novalidate状态时,数据可以不满足约束规则。对于主键和唯一约束来

说,会删除相应的唯一索引。

19.2 维护约束(P309) 19.2.1 建表时定义约束

建表时定义约束,既可以在列级定义,也可以在表级定义。

注意:not null约束只能在列级定义,不能在表级定义,如果要定义基于多列的复合约束,只能在表级定义。 列级定义语法: column [constraint constraint_name] constraint_type, 示例: create table department( dept_id number(10) constraint pk_constraint primary key ); 表级定义语法: column,...., [constraint constraint_name] constraint_type (column,....), 示例: create table employee( emp_id number(4), name varchar2(10), job varchar2(10), manager_id number(4), hire_date date, salary number(8,2),commission number(8,2), dept_id number(2), constraint pk_employee primary key(emp_id) using index tablespace users, constraint fk_department foreign key(dept_id) references department(dept_id) ); 19.2.2 建表后增加约束

语法:alter table add [constraint constraint_name] constraint_type (column...); 增加not null约束示例: SQL> alter table department modify name not null; 增加unique约束示例: SQL> alter table department add constraint uni_deptment_name unique(name); 增加唯一约束或主键约束时,使用using index子句可以指定索引建立语句,示例: SQL> alter table department add constraint uni_deptname_name unique(name) using index (create index ind_name on department(name)tablespace indextbs); 增加check约束示例: SQL> alter table employee add constraint chk_job check(job in ('manager','analyst','salesman','clerk')); SQL> alter table employee add constraint chk_salary check(salary between 1000 and 5000); 19.2.3 修改约束名

示例:alter table department rename constraint pk_department to pk_department_deptno; 19.2.4 删除约束

示例:alter table employee drop constraint check_job;

注意:删除主键约束或唯一约束后,会自动删除主键约束和唯一约束所对应的唯一索引。另外,如果两张表之间存在主从关系,则删除主表的主键约束时必须带有cascade选项,示例:

示例:alter table department drop primary key cascade; 19.3 禁止和激活约束(P312) 19.3.1 禁止约束

使用SQL*Loader或insert装载数据之前,为了加快数据装载速度,应首先禁止约束,然后装载数据。 禁止主键约束或唯一约束会自动删除主键约束列和唯一约束列上的唯一索引。

注意:如果定义主键约束或唯一约束时指定了deferrable选项,则不会删除相应的非唯一索引。 示例: SQL> alter table employee disable novalidate constraint check_job; 19.3.2 激活约束

i

enable novalidate选项用于快速激活约束,但该选项只能确保新数据符合约束规则,而不会对已存在数据进行任何检查。 使用enable novalidate选项激活约束时,不会在表上加锁,也不会影响其他用户在相应表上的DML操作。 enable novalidate激活约束示例: SQL> alter table employee enable novalidate constraint check_job; 使用enable validate选项激活约束时,会在表上加锁,此时不允许其他用户在相应表上执行DML操作。 enable validate激活约束示例: SQL> alter table employee enable validate constraint check_job; 19.3.3 修正约束数据 • 建立exceptions表 exceptions表用于存放不满足约束规则的行信息,通过运行utlexcpt.sql脚本可以建立该表,示例: SQL> @$ORACLE_HOME/rdbms/admin/utlexcpt.sql • 激活约束(带有exceptions选项) 使用exceptions选项激活约束时,如果在表上存在不满足约束规则的数据,则会显示错误信息,同时oracle自动将不满足约束规则的行位置(rowid)插入到表exceptions中,示例: alter table employee enable validate constraint check_job exceptions into exceptions; • • • 确定不满足约束规则的行 通过使用子查询,可以确定不满足约束规则的具体数据。示例: select job,rowid from employee where rowid in(select row_id from exceptions) for update; 修正数据 确定了违反约束规则的数据后,应使用DML语句对错误数据进行校正。 激活约束 修正了违反约束规则的数据后,使用enable validate选项可以重新激活约束。示例: alter table employee enable validate constraint check_job; 19.4 使用延期约束检查(P315)

注意:如果使用延期约束检查,那么在定义约束时必须指定deferrable选项。 示例: create table s_dept( deptno number(10) constraint s_dept_pk primary key, name varchar2(10)); create table s_emp( empno number(10) constraint s_emp_pk primary key, name varchar2(10), deptno number(10) constraint s_emp_fk references s_dept(deptno) deferrable); 19.5 显示约束信息(P316) 19.5.1 显示约束信息 dba_constraints 注意:如果定义了主键约束或唯一约束时指定了deferrable选项,oracle会基于约束列建立非唯一索引,并且禁止约束时不会删除非唯一索引。 all_constraints user_constraints SQL> select owner,table_name,constraint_name,constraint_type,index_name, search_condition ,status,validated from dba_constraints where owner='GEMINIX'; 说明:constraint_type:约束类型(P:主键约束,R:外部键约束,C:check约束或not null约束,U:唯一约束),status:约束状态,validated:约束校验方式。 10.5.2 显示约束列 dba_cons_columns all_cons_columns user_cons_columns SQL> select owner,table_name, constraint_name,column_name from dba_cons_columns where owner='GEMINIX'; 优质查询: SQL> select table_name,constraint_name,column_name,position from dba_cons_columns where owner='GEMINIX'; 二十一 簇

簇是存储表数据的一种可选方法,它由共享相同数据块的一组表组成。

将表组织到簇后,oracle会将不同表的相关数据存放到相同数据块,这样不仅降低了簇键列所占用的磁盘空间,而且可以大大降低特定SQL操作的I/O次数,从而提高数据访问性能。 21.1 管理索引簇(P348)

索引簇是指使用索引定位簇键列数据的方法。如果用户需要经常执行连接查询显示主从表的数据,应该将主从表组织到索引簇。

使用索引簇存储表数据时,oracle会将不同表的相关数据按照簇键值存放到簇段中。这种情况下,只需要扫描一个数据块就可以检索到关联数据,提高了速度。 21.1.1 索引簇管理方针 • 选择簇表时应考虑两点:相关表主要用于执行select操作,而不是insert和update操作;经常需要

在相关表之间执行连接查询。

美河学习在线 www.eimhe.com

• 选择合适的簇键列:如果经常使用单列进行连接查询,应该基于该连接列定义簇键;如果经常使用多列

进行连接,应该基于多列定义复合簇键。 • 指定块空间使用参数:建立索引时,通过指定pctfree和pctused选项,可以控制块的空间使用。如果

建立簇时指定了pctfree和pctused选项,oracle会忽略表级的相应选项设置,而会自动使用簇级的相应设置。 • 指定簇键值和相关行的平均空间:指定create cluster语句时可以指定size选项,该选项用于控制每

个簇键值及其相关行所占用的字节数。如果建立簇时不指定size选项,oracle会将其设置为一个数据块的尺寸。合理地估计并设置该选项,一方面可以提高数据块的空间利用率,另一方面可以避免产生链块。 • 指定簇和簇索引的存放位置:使用create cluster语句建立簇时,通过指定tablespace选项可以指定

簇段所在表空间;使用create index语句建立簇索引时,通过指定tablespace选项可以指定簇索引所在表空间。通过将簇和簇索引分布到不同表空间,可以使oracle可以同时扫描簇和簇索引,从而提高访问性能。 21.1.2 建立索引簇

使用索引簇时,簇键列数据是通过索引来定位的。 如果用户经常使用主从查询显示相关表的数据,可以将这些表组织到索引簇中,并应将主外键列作为簇键列。 • 建立索引簇 SQL> create cluster dept_emp_clu(deptno number(10)) pctfree 20 pctused 60 size 512 tablespace user01; 说明:pctfree用于指定在数据块内为update操作所预留空间的百分比;pctused用于指定将数据块标记为可重新插入数据的已用空间最低百分比;size用于指定每个簇键值相关数据所占用的总计空间,其默认值为一个数据块尺寸。 为了将表组织到簇中,建表时必须指定cluster子句。注意:当建立簇表时,不能指定storage子句和块空间使用参数。 • 建立簇表 create table department( id number(10) primary key, dname varchar2(100), loc varchar2(100) )cluster dept_emp_clu(id); • 组织从表到索引簇中 create table employee( eno number(10) primary key, ename varchar2(100), job varchar2(100), mgr number(10), hiredate date, sal number(10,2), comm number(10,2), dept_id number(10) references department )cluster dept_emp_clu(dept_id); • 建立簇索引 SQL> create index ind_dept_emp on cluster dept_emp_clu tablespace indextbs; 21.1.3 修改和删除簇 修改块空间使用参数示例: SQL> alter cluster dept_emp_clu pctfree 30 pctused 40; 使用SQL*Loader给簇表装载数据时,如果簇段空间不足,将导致簇段动态扩展,从而降低数据装载速度。为了避免区的动态分配,应该在执行装载操作前手工为簇段分配足够空间,注意:散列簇不能扩展。 扩展簇段示例: SQL> alter cluster dept_emp_clu allocate extent; SQL> alter cluster dept_emp_clu allocate extent(size 10m); 如果簇段实际占用空间多余所需空间,可以释放其所占用的多余空间。 释放簇段空间示例: SQL> alter cluster dept_emp_clu deallocate unused; 建立索引簇时,使用size选项可以指定每个簇键值所占用的平均空间。如果该选项设置太小,可能会导致行迁移。注意:散列簇的size选项不能修改。 改变size选项示例: SQL> alter cluster dept_emp_clu size 1024; SQL> alter cluster dept_emp_clu size 31k; // 测试中最大不能设置成32k。 如果索引簇不包含任何表,可以直接使用drop cluster命令删除索引簇。如果索引簇包含簇表,那么当删除索引簇时,必须首先删除其簇表。 删除索引簇示例: SQL> drop cluster dept_emp_clu; SQL> drop cluster dept_emp_clu including tables; // 注意:使用该选项后,相关表一起被删除。 21.2 管理散列簇(P352)

散列簇是指使用散列(HASH)函数定位行的位置。

通过散列簇,可以将静态表的数据均匀地分布到数据块中。

如果在where子句中引用簇键列,oracle会根据散列函数结果定位表行数据。合理地使用散列簇,可以大大降低磁盘I/O,提高数据访问性能。

i

使用散列簇的指导方针:

• 如果经常在等值查询中引用簇键列(如select ...where cluster_key=...),可以将表组织到散列簇;

如果经常在范围查询中引用特定列(如select...where cluster_key<..)则不应该将该表组织到散列簇。

• 如果表数据是静态的,可以考虑将该表组织到散列簇;如果表数据变化非常频繁,使用散列簇是不合

理的。

21.2.1 建立散列簇 建立散列簇时,使用hash is可以定义散列函数。如果不指定hash is子句,oracle会使用默认散列函数。为了避免浪费存储空间,在建立散列簇之前,应该规划好簇键列相关行数据占用的平均空间。 建立散列簇示例: SQL> create cluster employee_clu (id number(10))size 512 hashkeys 1000 hash is mod(id,1000) tablespace user01; 说明:size用于指定每个散列簇键值的数据行所占用的总计空间,如果不指定该选项,oracle会自动为每个簇键值保留一个数据块的空间;hashkeys用于指定散列簇键值的个数,该选项是必须的;hash is用于指定用户自定义的散列函数,如果不指定该选项,oracle会自动使用系统提供的散列函数。 建立簇表: create table emp1( id number(10), name varchar2(100), sal number(10,2) )cluster employee_clu(id); 21.2.2 建立单表散列簇

单表散列簇是指只能存放单个表数据的散列簇。

对于普通散列簇来说,每个散列簇可以包含公用相同簇键列的多个表;而对于单表散列簇而言,每个单表散列簇只能存放一张表的数据。 单表散列簇建立示例(为了提高空间利用率,应该仔细规划并指定size选项): SQL> create cluster emp_clu(id number(10))size 100 single table hashkeys 100 tablespace user01; 建立簇表: create table emp2( id number(10), name varchar2(100), sal number(10,2) )cluster emp_clu(id); 将静态表组织到散列簇后,如果在where子句中引用簇键列,应使用散列簇定位数据。 SQL> select * from emp2 where id=556; 21.2.3 修改和删除散列簇

注意:散列簇的size、hashkeys、hash is等选项不能被修改。 使用SQL*Loader给簇表装载数据时,如果簇段空间不足,将导致簇段动态扩展,从而降低数据装载速度。为了避免区的动态分配,应该在执行装载操作前手工为簇段分配足够空间;如果簇段实际占用空间多余所需空间,可以释放其占用的多余空间。 扩展和释放簇段空间示例: SQL> alter cluster emp_clu allocate extent; ?前面不是说不能扩展吗、、、、、 SQL> alter cluster emp_clu deallocate unused; 如果散列簇不包含任何表,可以直接使用drop cluster命令删除;如果散列簇包含簇表,可以级联删除簇表及散列簇。 删除散列簇示例: SQL> drop cluster emp_clu; SQL> drop cluster emp_clu including tables; 21.3 显示簇信息(P355) 21.3.1 显示簇信息 dba_clusters 21.3.2 显示簇段 all_clusters SQL> select owner,tablespace_name,cluster_name,pct_free,pct_used from dba_clusters where owner='GEMINIX'; user_clusters dba_segments all_segments user_segments SQL> select tablespace_name,segment_type,bytes from dba_segments where owner='SCOTT' and segment_name='EMP_CLU'; 21.3.3 显示簇键列 dba_clu_columns all_clu_columns user_clu_columns SQL> select owner,table_name,tab_column_name,cluster_name,clu_column_name from dba_clu_columns where owner='GEMINIX'; 21.3.4 显示散列簇的散列函数 dba_cluster_hash_expressions 二十二 序列、视图和同义词

all_cluster_hash_expressions SQL> select cluster_name,hash_expression from dba_cluster_hash_expressions where owner='SCOTT'; user_cluster_hash_expressions 美河学习在线 www.eimhe.com

22.1 管理序列(P365)

序列是一种用于生成唯一数字值的数据库对象。 22.1.1 建立序列 语法: create sequence sequence_name [start with n] [increment by n] [{maxvalue n | nomaxvalue}] [{minvalue n | no minvalue}] [{cycle | nocycle}] [{cache n | nocache}]; 说明:increment by用于指定序列增量(默认值为1),如果设置n为正整数,则序列号自动递增,反之序列号自动递减;默认nomaxvalue、nominvalue、nocycle;cache默认值为20. 序列建立示例: create sequence deptno_sequence start with 50 increment by 10 maxvalue 99 nocache; 使用序列时必须通过伪列nextval和currval引用序列(引用方法:序列名.伪列),其中伪列nextval用于返回下一个序列号,而伪列currval,则用于返回当前序列号。 注意:首次引用序列时,必须使用伪列nextval。 使用示例: insert into dept(deptno,dname,loc) values(deptno_seq.nextval,'development',default); select deptno_seq.currval from dual; 使用序列注意事项: • 通过使用cache选项建立序列,可以设置内存中预分配的序列号个数,该选项设置越大,序列的访问性能越好,但会占用更多的内存空间。 • 执行rollback语句取消事务操作时,会导致出现序列缺口。 22.1.2 修改和删除序列 修改序列示例(注意:start with选项不能被修改): SQL> alter sequence deptno_seq maxvalue 200 cache 20; 删除序列示例: SQL> drop sequence deptno_seq; 22.2 管理视图(P358)

视图是一个表或多个表的逻辑表示,它对应于一条select语句,其查询输出结果会被作为表对待,因此视图也被称为虚表,而select语句所对应的表则被称为视图基表。

建立了视图后,用户同样可以执行DML语句操纵视图。但要注意:视图本身没有任何数据,在视图上的select、insert、update和delete等操作实际都是针对视图基表进行的。 22.2.1 建立视图 语法: create [materialized] view view_name [(alias[,alias]...)] as subquery [with check option [constraint constraint_name]] [with read only] 说明:with check option子句用于在视图上定义check约束;with read only子句用于定义只读视图。 注意:建立视图时,如果不提供视图列别名,oracle会自动使用子查询的列名或列别名,如果视图子查询包含函数或表达式,则必须为其定义列别名。 简单视图建立示例: SQL> create or replace view emp_vu as select empno,ename,sal,job,deptno from emp; 当在视图上定义了check约束后,如果在视图上执行insert和update操作,要求新数据必须被包含在视图子查询内。 建立视图并定义check约束示例: SQL> create or replace view emp_vu102 as select * from emp where deptno=105 with check option constraint chk_vu105; 只读视图建立示例: SQL> create or replace view emp_vu20 as select * from emp where deptno=105 with read only; 复杂视图是指包含函数、表达式或分组数据的视图,使用复杂视图的主要目的是为了简化查询操作。 注意:当视图子查询包含函数或表达式时,必须为其定义列别名;复杂视图主要用于执行查询操作,而执行DML操作必须符合特定条件。 复杂视图建立示例: SQL> create or replace view job_vu as select job,avg(sal) avgsal, sum(sal) sumsal, max(sal) maxsal, min(sal) minsal from emp group by job; 建立连接视图时,必须在where子句中指定有效的连接条件,否则结果毫无意义。 连接视图建立示例: SQL> create or replace view dept_emp_vu102 as select a.deptno,a.dname,a.loc,b.empno,b.ename,b.sal from dept a,emp b where a.deptno=b.deptno and a.deptno=20; 在视图上执行DML操作的原则: 注意:对于表来说,只要数据符合约束规则,用户就可以执行相应的DML操作;而对于视图来说,执行DML操作时,不仅要求数据符合约束规则,还必须满足一些其他原则: • • 如果视图包含group by子句、分组函数和distinct关键字,则不能在该视图上执行任何DML操作。 update操作原则:不能更新基于函数或表达式所定义的列,不能更新伪劣(rowid和rownum等)。 i

• insert操作原则:如果视图不包含表的not null列,则不能通过视图增加数据。 22.2.2 修改和删除视图 修改视图定义示例: SQL> create or replace view emp_vu(name,salary,title) as select ename,sal,job from emp; 重编译视图示例: SQL> alter view emp_vu compile; 删除视图示例: SQL> drop view emp_vu; 22.3 管理同义词(P370)

同义词是方案对象的别名。

通过使用同义词,一方面可以简化对象访问(如数据字典视图user_indexes的同义词为ind,数据字典视图user_sequences的同义词为seq),另一方面可以提高对象访问的安全性(屏蔽对象所有者、对象名和数据库链名)。

同义词包括公共同义词和私有同义词,其中公共同义词是所有用户都可以直接引用的同义词,这种同义词由public用户组拥有;私有同义词是只能由其他方案用户直接引用的同义词。

如果数据库用户要访问公共同义词,可以直接引用,不需要加方案名;如果数据库用户要访问其他方案的私有同义词,必须加方案名作为前缀(方案名.同义词名)。

注意:无论是访问公共同义词还是私有同义词,数据库用户必须具有访问同义词基对象的权限。 22.3.1 建立同义词 建立公共同义词示例: SQL> create public synonym public_emp for scott.emp; 注意:如果用户要使用该同义词,必须要具有访问scott.emp表的权限。 建立私有同义词示例: SQL> create synonym private_emp for scott.emp; 引用时:select ename,sal from scott.private_emp where ename='SCOTT'; 22.3.2 删除同义词 删除公共同义词示例: SQL> drop public synonym public_emp; 删除私有同义词示例: SQL> drop synonym private_emp; 22.4 显示序列、视图和同义词信息(P374) 22.4.1 显示序列信息 dba_sequences all_sequences user_sequences SQL> select sequence_owner,sequence_name,min_value,increment_by,max_value,cycle_flag,cache_size from dba_sequences; 22.4.2 显示视图信息 dba_views all_views user_views select text from dba_views where owner='SCOTT' and view_name='JOB_VU'; 22.4.3 显示可更新列 dba_updatable_columns all_updatable_columns user_updatable_columns select column_name,insertable,updatable,deletable from dba_updatable_columns where owner='SCOTT' and table_name='DEPT_EMP_VU20'; 22.4.4 显示同义词信息 dba_synonyms all_synonyms user_synonyms select synonym_name,table_owner,table_name from dba_synonyms where owner='SCOTT';

因篇幅问题不能全部显示,请点此查看更多更全内容