您现在的位置:首页 > >

oracle 系统维护与管理

发布时间:

Oracle 8i 1z0-023 Architecture and Administration Test
作者: selina 目录 一、Oracle 概念 ................................................. 2 二、ORACLE SERVER .............................................. 5 三、管理 oracle 例程 ............................................ 8 四、创建数据库 ................................................ 13 五、创建数据字典视图和标准程序包 .............................. 13 六、维护控制文件 .............................................. 15 七、维护重做日志文件 .......................................... 15 八、管理表空间和数据文件 ...................................... 19 九、存储结构和关系 ............................................ 23 十、管理回退段 ................................................ 25 十一、管理表 .................................................. 29 十二、管理索引 ................................................ 32 十三、维护数据完整性 .......................................... 36 十四、加载程序 ................................................ 37 十五、重新组织数据 ............................................ 40 十六、管理口令安全性和资源 .................................... 42 十七、管理用户 ................................................ 44 十八、管理权限 ................................................ 45 十九、管理角色 ................................................ 48 二十、使用本国语言支持 ........................................ 49

一、Oracle概念
1、 oracle的文件 1)Oracle数据库由三种文件类型组成 数据库文件 一个数据库至少有一个数据文件 一个数据文件只能与一个数据库相关 可以为数据文件设置某些特性以便它们在数据库运行空间不足时能够自扩展 一个或多个数据文件形成数据库存储的逻辑单元这个单元称为表空间 重做日志 包含对数据库所做的更改记录, 这样万一出现故障可以启用数据恢复。 一个数据库 至少需要两个重做日志文件 控制文件 包含维护和验证数据库完整性的必要信息、 例如, 控制文件用于识别数据文件和重 做日志文件,一个数据库至少需要一个控制文件 2)其它关键文件:Oracle 服务器也使用一些其它文件,这些文件并不是数据库的一部分 参数文件 定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大小的参数 口令文件 认证哪些用户有权限启动和关闭Oracle例程 归档的重做日志文件 是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。 2、oracle例程:Oracle 例程由SGA 内存结构和用于管理数据库的后台进程组成。例程一次只 能打开和使用一个数据库。 3、SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务 器的数据和控制信息, 它是在Oracle 服务器所驻留的计算机的实际内存中得以分配, 如果实际内存不够再往虚拟内存中写。SGA 由几种内存结构组成: shared pool:用于存储最近执行的SQL语句和最近使用的数据字典数据。这些SQL 语句 可以是用户进程提交的,也可以是从数据字典读取的在存储过程的情况中,共享池 的大小由SHARED_POOL_SIZE 决定,它包括两个方面。 Library cache: 包含最近使用的SQL语句信息, 分析代码和执行计划。如果重 新执行SQL 语句而且共享SQL 区域已经包含语句的执行计划, 那么服务器进 程就不需要分析语句。 如果SQL 语句没有重新使用, 那么它最终会从库高速缓 存中超龄释放 Data dictionary cache:它包括有关数据库文件表索引列用户权限以及其它 数据库对象的信息。在分析阶段,服务器进程在字典高速缓存中查找信息,以 解析SQL语句中指定的对象名并验证访问权限。如果有必要,服务器进程启动 从数据文件对该信息的加载 database buffer cache:用于存储最近使用的数据。这些数据从数据文件读取,或者 写入数据文件。数据缓冲区的大小基于DB_BLOCK_SIZE.个数是取决于

2

DB_BLOCK_BUFFERS Redo Log BUFFER:用于跟踪服务器和后台进程对数据库所做的更改。大小由LOG_BUFFER 决定。它记录记录被更改的块、更改位置以及重做条目中的新值, 重做条目不区分 被更改块的类型, 它只记录块中哪些字节发生了更改。重做日志缓冲区循环连续使 用,而且一个事务处理所做的更改可能会与其它事务处理的更改交叉存取。它是在 已满后可以重新使用的循环缓冲区,但是只有在所有旧的重做条目都记录在重做日 志文件之后才能使用 在SGA 中还有两种可选的内存结构 Java 池用于存储Java 代码 Large Pool:用于存储并不与SQL 语句处理直接相关的大型内存结构。当你设置了 DBWR_IO_SLAVES或BACKUP_TAPE_IO_SLAVES参数, RMAN使用这个内存空间来备份和恢复。 DBWR_IO_SLAVES:此参数指定由DBWn使用的I/O slaves的数量。默认值是0 即不 使用I/O slaves。如果设成非0,则被ARCn process, LGWR process使用,RMAN 则设成4。 I/O slaves用来模拟异步I/O机制。 BACKUP_TAPE_IO_SLAVES: 此参数指定是否让RMAN使用I/O slaves去备份和拷 贝文件到磁带,如果设为FALSE (the default),那么则用shadow process来保 证备份机制可以访问磁带设备。 带设备在任何时间,只能由一个process来访问。 Sizing the Large Pool LARGE_POOL_SIZE参数初始化Large Pool的大小。如果没有设置此参数的话, Oracle会从shared pool中取得内存。如果设置了,但不够大,系统会报错,也 会记录在alter.log中。 4、后台进程 五个必需的后台进程 a) 数据库写入程序(DBWR):负责将更改的数据从数据库缓冲区高速缓存写入数据文件,下 列情况下会触发DBWR 灰数据缓冲区的数量达到阈值 当进行扫描而无法找到任何空闲缓冲区时 出现超时(每三秒) 出现检查点 b) 日志写入程序(LGWR) 将重做日志缓冲区中的更改写入在线重做日志文件,在下列情况下 会触发LGWR 当事务提交时 当重做日志缓冲区的三分之一已满时 当重做日志缓冲区中记录了超过1MB的更改时 在DBW0 将数据库缓冲区高速缓存中修改的块写入数据文件时 e) 系统监控程序(SMON):检查数据库的一致性如有必要还会在数据库打开时启动数据库的 恢复 自动恢复例程 前滚以恢复尚未记入数据文件但已经记入联机重做日志中的数据 打开数据库以允许用户登录, 未被未恢复事务处理锁定的任何数据都立即可 用 回滚未提交的事务 它联合或合并数据文件中空闲空间的邻近区域 它回收临时段,将它们作为数据文件中的空闲空间返回 f) 过程监视器(PMON) 负责在一个Oracle 进程失败时清理资源

3

回退用户的当前事务处理 释放当前保留的所有表锁或行锁 释放用户当前保留的其它资源 g) 检查点进程(CKPT) 负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更 新控制文件和数据文件中的数据库状态信息。 LOG_CHECKPOINT_INTERVAL 其他进程: ARC进程: 在每次日志切换时把已满的日志组进行备份或归档。在日志能够重新使用之 前,它自动将联机重做日志归档,以便对数据库做的所有更改得以保留。这样 即使磁盘驱动器破坏,DBA 也能够将数据库恢复到出错时的程度。 多个ARC进程和目的: 每一个ARC进程负责一个目的地 5、处理SQL 语句 查询的处理有三个主要阶段 a) 分析阶段 SQL语句从用户进程传递到服务器进程,在共享池中搜索SQL语句的现有副本 通过检查语法验证SQL语句 执行数据字典查找来验证表和列的定义 获取对象的分析锁以便在语句的分析过程中对象的定义不会改变 检查用户访问引用方案对象的权限 确定语句的最佳执行计划 将语句和执行计划载入共享的SQL 区 b) 执行DML语句 如果缓冲区高速缓存中尚不存在数据和回退块,那么服务器进程就会从数据文 件中将它们读入缓冲区高速缓存 服务器进程在将要修改的行上放置锁 在重做日志缓冲区中,服务器进程记录将要对回退和数据进行的更改: 回退块更改记录数据修改以前的值。回退块用于存储成图象前的数据, 以便必要的情况下DML 语句能够回退。 数据块更改块记录数据的新值 服务器进程将成图象前的数据记录到回退块中,并且更新数据块,这两种更改 都是在数据库缓冲区高速缓存中进行的。缓冲区高速缓存中的任何已更改都标记为 灰数据缓冲区- 即与磁盘中相应的块不同的缓冲区 c) 提取查询行 对行进行选择和排序(如有必要)。并且由服务器返回给用户 6、PGA---程序全局区 包含单个服务器进程或单个后台进程的数据和控制信息, 与几个进程共享的SGA 正相反 PGA 是只被一个进程使用的区域, PGA 在创建进程时分配在终止进程时回收, 在专用服务 器配置服务器的PGA包括下面的组件 Sort area:用于处理SQL语句时可能需要的任何排序 Session information:包括用于会话的用户权限和性能统计 Cursor state:标明处理会话当前使用的SQL语句中的阶段 Stack space:包含其它会话变量 7、回退段 服务器进程将旧的数据值保存到回退段中

4

回退块将根据需要被放入数据库缓冲区高速缓存中 对回退段的更改记录在重做日志缓冲区中 8、提交处理 Oracle 服务器使用快速提交机制来保证提交的更改能够在例程失败的情况下得以恢复,快 速提交机制将更改写入重做日志缓冲区而不是写入数据文件 a) 快速提交的优势: 连续写入日志文件比写入数据文件的各个块更快 只将记录更改必须的最少信息写入日志文件, 然而写入数据文件却需要写入整个数 据块 如果多个事务处理同时请求提交,那么例程将重做日志记录合成为单个写入 除非重做日志缓冲区特别满, 否则每个事务处理只需要一个同步写入。 如果发生合 成,那么每个事务处理的同步写入可能不到一个 因为提交之前可能会刷新重做日志缓冲区。 所以事务处理的大小并不影响实际的提 交操作所需的时间量 b) 系统更改号 每当事务处理提交时,Oracle 服务器就把一个提交系统更改号(SCN) 分配给该事 务处理。 SCN 是简单递增的,而且在数据库中是唯一的 Oracle 服务器使用它作为内部时间戳以使数据同步,并且在从数据文件检索数据 时提供读一致性。使用SCN 使Oracle 服务器能够执行一致性检查,而不用依赖操 作系统的日期和时间 c) 发出COMMIT 命令时执行下面的步骤 服务器进程随同SCN 一起在重做日志缓冲区中放置一个提交记录 LGWR 向重做日志文件中连续写入直到提交记录(含提交记录)的所有重做日志缓冲 区条目 通知用户COMMIT 命令已完成 服务器进程记录信息以指出事务处理已完成并且可以释放资源锁 将灰数据缓冲区刷新到数据文件,由DBW0 独立执行,在提交之前或之后进行都可 以

二、ORACLE SERVER
1、安装 使用响应文件进行静默安装:响应文件是能提供值的变量设置集合,如果没有响应文件,可 能要求用户提供这些值 Windows NT setup.exe –responsefile filename [-silent][-nowelcome] setup.exe 在ProgramFiles\Oracle\oui\install Solaris runInstaller -responsefile filename [-silent] [-nowelcome] runInstaller 位于INSTALL\install\solaris目录 2、 佳灵活体系结构(OFA):在所有支持平台上进行的安装和配置现在均符合最佳灵活体系结 构,OFA 按类型和使用情况组织数据库文件。包含Oracle 基代码的二进制文件安装在一个 目录中,控制文件、日志文件和管理文件安装在另外一个目录中,数据库文件也另安装在 一个目录中 组织磁盘上的软件和数据

5

使例行程序管理任务变得容易 减少多个Oracle 数据库之间的切换 充分地管理和控制数据库增长 最大限度地减少资源争用 在NT 和UNIX 上相似 具有安装Oracle 数据库和应用程序的结构化方法 便于管理,如通过较好的文件布局结构进行备份和恢复 具有较好的性能, 因为数据文件、 二进制文件和管理文件现在可以分别驻留在单独 的目录或磁盘,减少了磁盘争用 能将文件分装在不同磁盘设备和目录上, 从而对同一台计算机上的多个Oracle主目 录进行更方便的管理 3、 数据库管理员用户 两个缺省的数据库管理员用户SYS 和SYSTEM sys: 被授予DBA 角色, 自动创建, 数据库数据字典的所有者,数据字典的所有基表 和视图都存储在SYS 方案中。 口令:change_on_install system: 被授予DBA 角色,自动创建,Oracle 工具所使用的其它内部表和视图的 所有者。 口令:manager 4、 系统验证 a) 设置将由操作系统验证的用户 用户必须是UNIX 组的成员通常叫做dba 如果远程要使用操作系统的认证。则必须用安全的连接,这个是在NET8中设的。很 多普遍的协议,如:tcp/ip,decnet都是不安全的。 将REMOTE_LOGIN_PASSWORDFILE 设置为NONE,对于8.1.x或更高版本,此参数的缺 省值是EXCLUSIVE,在较早的Oracle 版本中,缺省值是NONE NT: SQLNET.AUTHENTICATION_SERVICES = (NTS) UNIX: SQLNET.AUTHENTICATION_SERVICES = (ALL) or 不设此参数 使用下列命令连接数据库: a) CONNECT / AS SYSDBA b) CONNECT / AS SYSOPER b)使用口令文件验证 使用口令实用程序创建口令文件: $orapwd file=$ORACLE_HOME/dbs/orapwSID password=admin entries=10 NT: SQLNET.AUTHENTICATION_SERVICES = (NONE,all) or 不设此参数 UNIX: SQLNET.AUTHENTICATION_SERVICES = (NONE,NTS) 将REMOTE_LOGIN_PASSWORDFILE 设置为EXCLUSIVE 或SHARED EXCLUSIVE 表明只有一个例程可以使用口令文件,并且该口令文件包含除 SYS 和INTERNAL 以外的名称 SHARED 表明可以有多个例程可以使用口令文件口令文件可以识别的用户 只有SYS 和INTERNAL

6

使用下列命令连接数据库库: CONNECT system/manage 位置: NT:口令文件的位置通常是%ORACLE_HOME%\DATABASE 目录,可以在NT 注册 表中用关键字ORA_SID_PWFILE 指定口令文件的非缺省位置 UNIX: 口令文件的位置通常为UNIX 上的$ORACLE_HOME/dbs 目录 5、Oracle Enterprise Manager a) 控制台提供了一个全局的系统视图,它包括对象的层次树和图形表示以及对象在系统中 的关系。公用服务(作业、事件、发现和安全服务)构成了Oracle Enterprise Manager 完整 框架,提供所有Oracle Enterprise Manager 应用程序后台的基本功能 Oracle Enterprise Manager 还包括若干套专门的管理应用程序 DBA Management Pack DBA 管理工具包:随数据库免费提供 Advanced Management Packs 高级管理包:Tuning Pack 优化包 Oracle Expert 通过收集参数、环境、应用程序和数据库结构信息优化Oracle 数据库性能,分析所收集的数据并提出优化建议 Tablespace Manager 检测并修复空间管理问题,并重新组织数据库对象 SQL Analyze 帮助定位、分析和编辑SQL 语句以提高应用程序性能 Diagnostics Pack 诊断包 Oracle Trace 和Data Viewer 用于创建、调度、管理和查看数据库,Net8 和 其它应用程序收集的跟踪信息 Performance Manager 用于创建、查看和编辑图形图表以监视和显示数据库信 息 Capacity Planner 收集数据库和操作系统性能统计信息,存储历史数据库信 息以分析数据以制定未来能力需求的计划 TopSessions 查看有关当前连接到数据库的会话的详细信息 Advanced Events 其它的Oracle Enterprise Manager 事件,用于帮助进行预 防性数据库管理 Change Management Pack 更改管理包 Database Capture 捕获数据库对象定义集合基线 Database Diff 对比两个数据库或基线之间对象定义的区别 Database Quick Change 用于对一个数据库中的一个对象定义进行更改 Database Alter 用于对一个或多个数据库中的一个或多个对象定义进行更改 Database Propagate 用于选择数据库中的一个或多个对象定义,然后将这些 定义传播到另一个方案或数据库中 Plan Manager 用于集中所有更改管理应用程序 Application Management Pack 应用程序管理包:支持Oracle Applications Concurrent Manager WebForm Servers 和Workflow 子系统 b) Oracle Enterprise Manager 资料档案库:OMS 使用Oracle Enterprise Manager 资 料档案库作为其永久的后端存储。 资料档案库维护系统数据, 应用程序数据以及在整个环境 中分布的受管实体的状态 一个缺省超级用户: sysman/oem_temp c) 公用服务:Oracle Enterprise Manager 由帮助您管理整个网络中节点的服务组成 搜索服务:一旦标识了受管节点,Oracle Enterprise Manager 便自动搜索这些节 点上运行的所有数据库和其它服务。这些服务除数据库以外,还包括Web 服务器、 监听程序、计算机、并行服务器、视频服务器和其它服务。 作业调度系统: 作业调度系统提供作业存储和转发功能, 可以自动完成标准和重复 性的任务。可以创建和管理作业、调度它们的执行、查看并与其他管理员共享有关

7

定义作业的信息。 系统还可以发出电子邮件或寻呼来通知您或其他管理员作业完成 或失败。 事件管理系统:可以使用事件管理系统监视网络环境中所发生的操作如服务丢失、 边界线条件如缺少存储和容量问题如高CPU 使用。 检测到一个事件时, 您或指定的 管理员就会得到通知或者作为对事件的响应运行修复事件。 安全:安全参数为服务、对象和管理员而定义。例如,超级管理员可以创建新的管 理员并定义管理员权限 d) DBA 管理工具包 Oracle Enterprise Manager提供的标准应用程序包括下列内容 Instance Manager: 用于控制数据库的可用性,并定义初始化参数以指定例程的 特点 Security Manager: 用于管理用户和权限 Storage Manager: 用于组织数据库文件并管理回退段 Schema Manager :用于创建并维护对象,如表、索引和视图 SQL*Plus Worksheet :一种命令行界面,可用来运行SQL 命令、PL/SQL 代码、 SQL*Plus 命令和特殊的DBA 命令,如startup 和shutdown 数据管理的工具和向导:用于加载和重新组织数据库中的数据 进行备份管理的工具和向导:用于备份、复原和恢复数据库并管理重做日志文件

三、管理oracle例程
1、 打开数据库 start instance 读取参数文件initsid.ora 分配SGA 启动后台进程 打开ALERT 文件及跟踪文件 需要两个动态的view: V$SGA,V$INSTANCE mount instance 使数据库与以前启动的例程关联 定位并打开参数文件中指定的控制文件 读取控制文件以获取数据文件和重做日志文件的名称和状态,但是在此时不进行 数据文件和联机重做日志文件是否存在的检查 在以下任务中必须装载数据库但不要打开数据库 命名数据文件 启用和禁用重做日志归档选项 执行完全数据库恢复 打开数据库 打开联机数据文件 打开联机重做日志文件 在此最后阶段中,Oracle 服务器验证所有数据文件和联机重做日志文件是否可以打 开,并检查数据库的一致性。如果需要,系统监视器后台进程(SMON) 启动例程恢复 命令:Startup STARTUP [FORCE] [RESTRICT] [PFILE=filename] [OPEN [RECOVER][database]|MOUNT|NOMOUNT] 注:这不是完整的语法 OPEN :使用户得以访问数据库

8

MOUNT:为某些DBA 活动装载数据库但不允许用户访问数据库 NOMOUNT: 创建SGA 并启动后台进程但不允许访问数据库 PFILE=parfile: 允许使用非缺省参数文件配置例程 FORCE: 在执行正常启动之前终止运行的例程 RESTRICT: 只允许具有RESTRICTED SESSION 权限的用户访问数据库 RECOVER: 在启动数据库时开始介质恢复 2、 关闭数据库 关闭数据库 Oracle 服务器将缓冲区高速缓存中的更改及重做日志缓冲区高速缓存中的条目写入 数据文件和联机重做日志文件 Oracle 服务器关闭所有联机数据文件和联机重做日志文件 卸装数据库 Oracle 服务器关闭其控制文件 关闭例程 ALERT 文件和跟踪文件将关闭,SGA 被回收并且后台进程被终止 命令:shutdown SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT ] 关闭模式 A I T N 允许新连接 x x x x 等到当前会话结束 x x x 0 等到当前事务结束 x x 0 0 执行检查点并关闭文件 x 0 0 0 normal(缺省方式) 不允许新的连接 Oracle 服务器等待所有用户断开后才完成关闭 Oracle 在关闭例程前将关闭并卸装数据库 下一次启动时将不要求例程恢复 事务处理关闭---防止客户丢失工作 没有客户可以在此特定例程上启动新事务 当客户结束正在进行的事务时断开客户 当所有事务都已完成时会立即关闭 下一次启动将不要求例程恢复 立即关闭 由Oracle 处理的当前SQL 语句未完成 Oracle 服务器不等待当前连接数据库的用户断开 Oracle 回退活动的事务并断开所有连接的用户 Oracle 在关闭例程前将关闭并卸装数据库 下一次启动将不要求例程恢复 关闭中止 Oracle 服务器所处理的当前SQL 语句被立即终止 Oracle 不等待当前连接数据库的用户断开 未提交的事务不回退 在不关闭文件的情况下例程被终止 下一次启动将要求例程恢复 NT上通过注册表关数据库 停止OracleServiceSID 服务也终止OracleStartSID 并执行orashut.bat 脚本

9

or 通过停止OracleServiceSID 服务并将注册表中的ORA_SID_SHUTDOWN 参数设置为 True ,可以关闭数据库 3、 参数 a) 用途 调整系统全局区(SGA) 组件的大小以优化性能 设置数据库及例程缺省值 设置用户或进程限制 设置对数据库资源的限制 定义仅在数据库创建时数据库的各种物理属性,如数据库块的大小 指定控制文件、归档日志文件、ALERT 文件及跟踪文件位置 b) 指定参数的规则 所有参数都为可选的 服务器具有每个参数的缺省值。根据不同的参数,该值可能与操作系统相关 可以以任何顺序指定参数 注释行以# 符号开始 将参数用双引号引起以在其中包括字符文字 可以使用关键字IFILE 以包括其它文件 如果操作系统注重大小写,那么文件名也区分大小写 多个值用圆括号括起来,并用逗号隔开 制定排列参数的标准要么按字母顺序排列要么按功能分组 c) 应当指定的参数参数说明 BACKGROUND_DUMP_DEST : 写入后台进程跟踪文件的位置(LGWR DBWn等) 。这也是警报 日志的位置 COMPATIBLE: 该例程应当兼容的服务器版本,缺省值为8.1.0 CONTROL_FILES :控制文件的名称 DB_BLOCK_BUFFERS :在SGA 中高速缓存的块数 DB_NAME:8个或8个以下字符的数据库标识符。这是创建新数据库时唯一需要的参数 SHARED_POOL_SIZE:共享池的大小以字节为单位 USER_DUMP_DEST:代表用户进程创建用户调试跟踪文件的位置 d) 常修改的参数参数说明 IFILE 在当前参数文件内嵌入的另一个参数文件的名称,最多可以有三级嵌套 LOG_BUFFER 分配给SGA中重做日志缓冲区的字节数 MAX_DUMP_FILE_SIZE 以操作系统块数指定的跟踪文件的最大大小 PROCESSES 能够同时连接该例程的最大操作系统进程数 SQL_TRACE 启用或禁用每个用户会话的SQL 跟踪设备 TIMED_STATISTICS 启用或禁用跟踪文件或监视器屏幕中的计时 4、 自动启动oracle NT: 把所有oracle的服务设为自动 8i以前,通过启动以下两个服务可以打开数据库 OracleServiceSID :是为数据库例程SID 创建 OracleStartSID:通过运行strtSID.cmd 脚本自动启动数据库 8i以后 OracleServiceSID:是为数据库例程SID 创建 若要自动启动数据库必须确保参数ORA_SID_AUTOSTART 在注册表中设置为True 5、 更改数据库的可用性

10

ALTER DATABASE 命令 将数据库状态由NOMOUNT 改为MOUNT:ALTER DATABASE database MOUNT; 将数据库作为只读数据库打开:ALTER DATABASE database OPEN READ ONLY; ALTER DATABASE OPEN [READ WRITE| READ ONLY] 其中 READ WRITE 以读写模式打开数据库,允许用户生成重做日志 READ ONLY 将用户限制为只读事务防止生成重做日志信息 只读数据库可用于: 执行查询 使用本地管理的表空间执行磁盘排序– 使数据文件而非表空间脱机和联机 执行脱机数据文件和表空间的恢复 可以删除对像 6、 动态性能视图:带V$前缀的虚拟表,它们在数据库打开和使用时可不断进行更新,它们提供关 于内部磁盘结构和内存结构的数据,在nomount的状态中可以访问。V$FIXED_TABLE 视图显 示所有动态性能视图 在NOMOUNT 阶段可以访问说明 V$PARAMETER: 包含关于初始化参数的信息 V$SGA: 包含有关SGA 的摘要信息 V$OPTION: 列出随Oracle 服务器安装的选项 V$PROCESS: 包含有关当前活动进程的信息 V$SESSION :列出当前会话信息 V$VERSION: 列出版本号及组件 V$INSTANCE: 显示当前例程的状态 在MOUNT阶段可以访问 V$THREAD :包含线程信息如关于重做日志组的信息 V$CONTROLFILE :列出控制文件名即使可用本视图在NOMOUNT状态中也不返回 任何行 V$DATABASE :包含数据库信息 V$DATAFILE :包含来自控制文件的数据文件信息 V$DATAFILE_HEADER: 显示来自控制文件的数据文件标题的信息 V$LOGFILE: 包含关于联机重做日志文件的信息 7、 动态初始化参数 有些初始化参数为动态的, 即在运行例程时可以使用ALTER SESSION、 ALTER SYSTEM 或ALTER SYSTEM DEFERRED 命令对其进行修改 ALTER SESSION 命令只修改执行该命令的会话的参数值 ALTER SYSTEM 命令全局更改参数值。新值一直有效到关闭或再次更改时。 ALTER SYSTEM DEFERRED 命令修改将来连接该数据库的会话参数值 查询V$PARAMETER 或V$SYSTEM_PARAMETER 视图以列出关于所修改参数的信息 SQL> SELECT isses_modifiable,issys_modifiable, ismodified, name FROM v$system_parameter WHERE ismodified != 'FALSE'; ISSES_MODIFIABLE 说明该参数是否可由ALTER SESSION 修改 ISSYS_MODIFIABLE 说明该参数是否可由ALTER SYSTEM 修改 ISMODIFIED 说明ALTER SESSION 使用值MODIFIED 修改而ALTER SYSTEM 使用SYS_MODIFIED 值修改

11

V$PARAMETER 显示当前会话值,V$SYSTEM_PARAMETER 显示不依赖会话的当前系统 值,例如,如果执行ALTER SYSTEM DEFERRED 命令 修改参数的ALTER SYSTEM 或ALTER SYSTEM DEFERRED 命令记录在称为ALERT 文件 的跟踪文件中 8、管理会话 1)启用和禁用受限会话 使用STARTUP 命令限制对数据库的访问: STARTUP RESTRICT 使用ALTER SYSTEM 命令将例程设为受限模式: ALTER SYSTEM ENABLE RESTRICTED SESSION; V$INSTANCE 动态性能视图包含关于受限模式的信息 SQL> SELECT logins FROM v$instance; LOGINS ---------RESTRICTED 2)终止会话 使用V$SESSION 动态性能视图标识要终止的会话: SELECT sid, serial# FROM v$session WHERE username=‘SCOTT’; 执行ALTER SYSTEM 命令: ALTER SYSTEM KILL SESSION ‘7,15’;//integer1 SID 列的值,integer2 SERIAL# 列的值 ALTER SYSTEM KILL SESSION 命令一执行将使后台进程PMON 立即执行以下步骤 回退用户的当前事务 释放所有当前持有的表或行锁定 释放用户当前保留的所有资源 终止活动会话 如果用户会话正在对Oracle 服务器进行SQL 调用,即会话终止时为ACTIVE, 则 回退事务,并且用户立即收到以下消息:ORA-00028:your session has been killed..如果用户会话执行的是必须完成,无法中断的活动,则Oracle 服务器 会等待该活动完成。 终止非活动的会话 如果会话在终止时为非活动的,则不会立即返回ORA-00028 消息,但是在 V$SESSION 视图的STATUS 栏中会标记为已终止。当用户再次尝试使用已终止的 会话时会返回ORA-00028 消息,并且从V$SESSION 删除已终止会话的行 注:当会话终止时,Oracle 服务器不终止操作系统进程,但是下面这个常用于 并行服务器环境的命令,在完成其当前事务后会断开会话并终止服务器进程。 ALTER SYSTEM DISCONNECT SESSION 'integer1, integer2' POST_TRANSACTION 9、ALERT 文件和跟踪文件 可以通过将参数SQL_TRACE 的值设置为True 或False ,启用或禁用跟踪 SQL>ALTER SESSION SET sql_trace=TRUE; BACKGROUND_DUMP_DEST :定义后台跟踪文件和ALERT 文件的位置 USER_DUMP_DEST :定义根据用户要求创建跟踪文件的位置 MAX_DUMP_FILE_SIZE: 在O/S 块中指定限制用户跟踪文件,而非ALERT 文件或 后台跟踪文件的大小 MAX_DUMP_FILE_SIZE 和USER_DUMP_DEST 参数为动态初始化参数 在UNIX 上ALERT 文件命名为alert_SID.log, 并且在缺省情况下位于 $ORACLE_HOME/rdbms/log 目录

12

在Windows NT 上ALERT 文件命名为SIDalrt.log, 并且在缺省情况下位于 Oracle8 的%ORACLE_HOME%\RDBMS80\TRACE 目录。如果使用Oracle8i 则位于 %ORACLE_HOME%\ADMIN\SID\BDUMP 目录。

四、创建数据库
1、在unix上安装时要指定环境变量: ORACLE_HOME ORACLE_SID ORACLE_BASE ORA_NLS33 当创建带有非US7ASCII 字符集的数据库时必需 例如$ORACLE_HOME/ocommon/nls/admin/data PATH 搜索路径,必须包括$ORACLE_HOME/bin

五、创建数据字典视图和标准程序包
1、内置数据库对象 数据字典包含对数据库内的对象的说明,它包括两种类型的对象: 基表是存储对相关数据库的说明的底层表。(使用sql.bsq 脚本用数据库创建), 决不能使用DML 命令直接更新基数据字典表。 数据字典视图汇总并显示基表中存储的信息。(使用catalog.sql 脚本创建) 动态性能表包含由数据库管理员(DBA) 用来监视和调节数据库及例程的信息。 内置PL/SQL 程序单元向数据库添加功能。 2、数据字典 数据字典是Oracle 数据库最重要的部分之一,它是一组只读表和视图,提供有 关其相关数据库的信息 每当执行数据定义语言(DDL) 命令时,Oracle 服务器更新数据字典。此外数据 操作语言(DML) 命令如引起表扩展的命令也可以更新数据字典。 数据字典内容 数据库内所有方案对象的定义(表、视图、索引、簇、同义词、序列、过程、 函数、程序包、触发器等等) 为方案对象分配的空间量以及它们当前使用的空间量 列的缺省值 完整性约束信息 Oracle 用户的名称 已授予每个用户的权限和角色 审计信息,如有哪些人访问或更新了各种方案对象 其它一般数据库信息 数据字典视图分类 DBA: 数据库管理员的视图,即所有方案中的视图 拥有SELECT ANY TABLE权限的才可以访问这一类视图dba_objects: 查询数据库中的所有对象 ALL: 扩展用户的视图,即用户可访问的视图 all_objects:查询返回您具有访问权限的全部对象的信息 USER: 用户的视图,即用户方案中的视图 通常指的是当前用户所拥有的对象 user_objects:查询返回您的方案中包含的所有对象

13

注:不是所有的数据字典视图都使用这种命名规则 3、存储程序单元 优点: 1) 为减少编译时间,预编译PL/SQL 代码,并将它与源代码一起存储在数据字 典中 2) 通过向PL/SQL 定义Java 和C 程序的调用说明,使Java 和C 程序可以从 SQL 和PL/SQL 调用 3) 将它们存储在共享池中以减少磁盘检索 4) 通过使用户仅通过过程和函数访问数据来增强数据安全 5) 在执行过程中,多个用户共享程序单元的一个副本 6) 存储函数可以用于SQL 表达式中,使用方式与内置Oracle 函数(如UPPER 和SUBSTR )相同 分类: 1) PL/SQL Oracle 的SQL 过程语言扩展,是过程函数触发器或程序包存储于数据字典 中,运行SQL*Plus 中的DESCRIBE 命令以获取程序包中所有过程和函数的说 明 装载到共享池中 2) Java 存储于数据字典中 数据库管理员可以安装Oracle 服务器的JServer 组件以执行Java 程序单 元。若要执行, 请发布它的调用说明 3) 外部过程 用C 语言编写而成 存储于共享库中 若要执行, 请发布调用说明 4、 程序包 oracle提供的程序包 DBMS_SESSION: 生成SQL命令, 如ALTER SESSION或SET ROLE DBMS_UTILITY: 提供各种实用程序例行程序 DBMS_SPACE: 提供段空间可用性信息 DBMS_ROWID: 提供ROWID 信息 DBMS_SHARED_POOL:将程序包保留在共享池中或不保留在共享池中 DBMS_LOB: 提供操作BLOB 和CLOB数据类型的例行程序 管理脚本 cat*.sql: 目录和数据字典信息 dbms*.sql: 数据库程序包说明, dbmspool.sql 脚本是一个例子,它使您可以 显示共享池中对象的大小,并在SGA 中标记它们是保留还是删除以减少共享池碎 片 prvt*.plb: 打包的数据库程序包代码 utl*.sql: 数据库实用程序的视图和表, 例如,脚本utlxplan.sql 创建一个 表,用来查看某SQL 语句的执行计划 5、触发器 触发器事件 例程启动或关闭 特定错误消息或任何错误消息 用户登录、注销或建立

14

特定表或视图上的DML 语句 任何方案上的DDL 语句

六、维护控制文件
1、概念: 数据库的控制文件是成功启动和操作数据库所必需的小型二进制文件 Oracle 服务器在数据库使用的过程中会不断更新控制文件 Oracle 允许同时打开并写入多个相同的控制文件,可以使用初始化参数CONTROL_FILES 指定多达八个完全限定的控制文件名称 2、如何添加控制文件 关闭数据库 使用操作系统命令复制当前的控制文件 将新的控制文件名添加到CONTROL_FILES 参数中 CONTROL_FILES = (/DISK1/control01.con,/DISK2/control02.con) 启动数据库 3、控制文件内容 数据库名称取自初始化参数DB_NAME 所指定的名称或CREATEDATABASE 语句中所用的名 称 当创建数据库时,会记录数据库标识 当创建数据库时,还记录创建数据库的时间戳 当在数据库中添加重命名或删除数据文件或重做日志时会更新相关数据 文件和联机重做日志文件的名称和位置 当添加或删除表空间时会更新表空间信息 在日志切换过程中会记录日志历史信息 归档日志的位置和状态会在归档时记录 备份的位置和状态由恢复管理器实用程序记录 在进行日志切换时记录当前日志序列号 在建立检查点时记录检查点信息 4、 数据库过程中指定的关键字会影响控制文件的大小。如果要修改以下参数。必须重创控制 文件 MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY,MAXDATAFILES,MAXINSTANCES 5、从控制文件获取信息的动态性能视图 V$BACKUP,V$DATAFILE,V$TEMPFILE,V$TABLESPACE,V$ARCHIVE,V$LOG,V$LOGFILE, V$LOGHIST,V$ARCHIVED_LOG,V$DATEBASE等等 6、相关的数据字典:V$CONTROLFILE_RECORD_SECTION---查看不同的会话存储在control file 的信息。 V$CONTROLFILE----存储control file的路径和状态

七、维护重做日志文件
1、概念: 重做日志文件记录对数据库缓冲区高速缓存内数据所做的所有更改,但也有例外, 例如,在直接写入情况下。 重做日志文件用来在诸如例程失败的情况下恢复尚未写入数据文件的提交数据。 LGWR 后台进程向组内所有联机重做日志文件并发写入相同信息。 Oracle 服务器每次开始写入日志组时,都分配一个日志序列号以唯一识别每个重 做日志文件。

15

当前日志序列号存储在控制文件和所有数据文件的标题内 联机重做日志组:一组相同的联机重做日志文件副本,为保证数据库的正常操作 Oracle 服务器最少需要两个联机重做日志文件组 联机重做日志成员:组内的每个联机重做日志文件称为成员,组内的每个成员都有 相的日志序列号和同样的大小 联机重做日志最小为50K,最大因操作系统而定,不同的组可以有不同的大小。 5、 建初始重做日志文件 CREATE DATABASE 命令中的MAXLOGFILES 参数指定联机重做日志组的绝对最大数量, MAXLOGFILES 的最大值和缺省值取决于您的操作系统 CREATE DATABASE 命令所使用的MAXLOGMEMBERS 参数决定每个组成员的最大数量, MAXLOGMEMBERS 的最大值和缺省值取决于您的操作系统 3、重做日志缓冲区和LGWR 后台进程 日志切换和检查点是自动发生的事件。也可以强制。 强制日志切换:ALTER SYSTEM SWITCH LOGFILE; 强制检查点:ALTER SYSTEM CHECKPOINT;

4、将重做日志文件归档 NOARCHIVELOG 模式:在每次联机重做日志文件已满并发生日志切换时,都要覆盖 联机重做日志文件。直到该重做日志组检查点完成,LGWR 才覆盖该重做日志组。 ARCHIVELOG 模式:如果数据库配置为在ARCHIVELOG 模式运行下,那么必须将已满 联机重做日志文件的不活动组归档。因为对数据库所做的所有更改都记录在联机重 做日志文件内,数据库管理员可以使用物理备份和归档的联机重做日志文件恢复数 据库,而不会丢失任何已提交数据。 归档联机重做日志文件有两种方法

16

LOG_ARCHIVE_START=ture 自动 LOG_ARCHIVE_START=false 手动 5、相关的数据字典 V$THREAD:获取有关组的信息 V$LOG:获取有关组和成员的信息 下面的项是v$log中STATUS 列的常见值 UNUSED 表明从未对联机重做日志组进行写入。这是刚添加的联机重做日志文 件的状态CURRENT 表明当前的联机重做日志组。这意味着该联机重做日志组是活动的 ACTIVE 表明联机重做日志组是活动的,但是并非当前联机重做日志组。崩溃 恢复需要该状态,它可能正用于块恢复,它可能归档,也可能不归档 CURRENT:此日志正在使用,属于当前联机重做日志组。 CLEARING 表明在ALTER DATABASE CLEAR LOGFILE 命令后正在将该日志重建为 一个空日志。日志清除后,其状态更改为UNUSED。 CLEARING_CURRENT 表明正在清除当前日志文件中的已关闭线程。如果切换时 发生某些故障,如写入新日志标题时的I/O 错误,则该日志可以停留在该状态。 INACTIVE 表明例程恢复不再需要联机重做日志组。它可能归档,也可能不归 档。 V$LOGFILE:获取有关组和成员的信息 INVALID 表明该文件不可访问 STALE 表明该文件内容不完全,例如,正在添加一个日志文件成员 DELETED 表明该文件已不再使用 空白表明文件正在使用中 6、检查点 检查点可发生在下面情况中 每次日志切换时 当已通过正常事务处理或者立即选项关闭例程时 当通过设置初始化参数LOG_CHECKPOINT_INTERVAL:表示在每个检查点间,可以间 隔多少重做日志块。如果该值超过实际联机重做日志文件大小那么检查点仅在日 志切换时发生,请注意将时间间隔值指定为0 等同于把该值设为无穷大。 LOG_CHECKPOINT_TIMEOUT : 该初始化参数值指定了另一个检查点发生前的最大 时间量,该值按秒指定。该时间从前一个检查点启动时开始,经过该参数指定的 时间量后发生另一个检查点。将超时值指定为0 以禁用基于时间的检查点。 FAST_START_IO_TARGET :该参数值越小,由于需要恢复的块就越少,因而恢复 性能就越好。 如果初始化参数LOG_CHECKPOINTS_TO_ALERT 设置为TRUE 则每个检查点信息都 记录在ALERT 文件内该参数缺省值为FALSE 不记录检查点 7、多路复用和维护成员与组 添加联机重做日志组 ALTER DATABASE ADD LOGFILE (‘DISK3/log3a.rdo’,‘DISK4/log3b.rdo’)size 1M; 添加联机重做日志成员 ALTER DATABASE ADD LOGFILE MEMBER‘/DISK4/log1b.rdo’ TO GROUP 1,‘/DISK4/log2b.rdo’ TO GROUP 2; 这里不可以指定log 的size。Log的大小会和其他的log file一样。 如何重新定位或重命名联机重做日志文件 将联机重做日志文件复制到新位置 执行ALTER DATABASE RENAME FILE 命令

17

ALTER DATABASE [database] RENAME FILE 'filename'[, 'filename']...tO 'filename'[, 'filename']... 丢弃联机重做日志组 ALTER DATABASE DROP LOGFILE GROUP 3; 丢弃联机重做日志成员 ALTER DATABASE DROP LOGFILE MEMBER‘/DISK4/log2b.dbf’; 清除联机重做日志文件 ALTER DATABASE CLEAR LOGFILE‘/DISK3/log2a.rdo’; 无论联机重做日志文件是否归档,您都可以清除它。但是,在其没有归档时,您 必须包含关键字UNARCHIVED 8、 可能出现的LGWR 错误 如果LGWR 至少能够访问一个组内成员,对组内可访问成员的写入将照常进行; LGWR 忽略组内的不可用成员。如果该组不活动即检查点已完成,那么丢弃和添 加一个新的重做日志成员就可以解决问题。否则您必须首先强制日志切换 下一个组中的所有成员不可用,则该例程关闭。如果组不活动,那么丢弃和添加 一个新的重做日志组就可解决问题;如果活动,数据库可能需要从联机重做日志 文件残留物进行介质恢复。 当前组的所有成员不可用,数据库例程关闭。这种情况下,数据库可能需要从联 机重做日志文件残留物 9、 LogMiner:提供了一个处理重做日志文件并将其内容翻译成代表对数据库的逻辑操作的SQL 语句的过程 1) 用途:分析重做日志文件 跟踪更改: 数据库的更改 特定表的更改 特定用户的更改 映射访问模式 撤消对数据库的更改 使用归档数据执行优化和容量计划 2) 操作步骤 创建字典文件 指定初始化参数UTL_FILE_DIR 以指定一个允许PL/SQL 文件I/O 的目 录 执行BMS_LOGMNR_D.BUILD 过程以创建字典文件 EXECUTE DBMS_LOGMNR_D.BUILD(‘dict.ora’,‘/home/oracle/selina/’); 设置V$LOGMNR_CONTENTS 视图: 初始化新列表并指定第一个日志文件 EXECUTE DBMS_LOGMNR.ADD_LOGFILE(‘/home/oracle/oradata/esal/redo01.log’ ,DBMS_LOGMNR.NEW); 向列表中添加其它日志文件 EXECUTE DBMS_LOGMNR.ADD_LOGFILE(‘/home/oracle/oradata/esal/redo02.log’,D BMS_LOGMNR.ADDFILE); DBMS_LOGMNR.NEW 创建一个新列表并指定第一个日志文件

18

DBMS_LOGMNR.ADDFILE 向列表中添加其它日志文件 DBMS_LOGMNR.REMOVEFILE 从列表中删除重做日志 3) 开始分析重做日志文件 EXECUTE DBMS_LOGMNR.START_LOGMNR(DICTFILENAME=>’/home/oracle/selina/ dict.ora’); 4) 跟踪对表的更改 SELECT timestamp, username, sql_redo FROM v$logmnr_contents WHERE seg_name = ‘TEST’; 5) 完成LogMiner 会话 EXECUTE DBMS_LOGMNR.END_LOGMNR; 6) 获取有关所分析的日志的信息 V$LOGMNR_DICTIONARY 正在使用的字典文件 V$LOGMNR_PARAMETERS LogMiner的当前参数设置 V$LOGMNR_CONTENTS 正在分析的重做日志文件内容 7) 心得:只要执行了第一次就会开始把以后的log都记下来。。。但要看必须重 新执行所有过程。

八、管理表空间和数据文件
1、数据库体系结构 物理结构包括构成数据库的控制文件、联机重做日志文件和数据文件 逻辑结构包括表空间、段、区和数据块 1) 表空间 一个表空间在某一时刻只能属于一个数据库 每个表空间由一个或多个称为数据文件的操作系统文件组成 表空间可以由一个或多个段组成 表空间可以在数据库运行时联机 除了SYSTEM 表空间或者有活动回退段的表空间不影响数据库运行,其它表空 间可以脱机,不影响数据库运行。 2) 数据文件 一个数据文件只能属于一个表空间 数据文件创建后, 数据库管理员可以更改其大小或者指定数据文件应随着表空 间内对象的增长而动态增长 3) 段 段是为表空间内特定逻辑存储结构分配的空间, 例如, 分配给表的所有存储空 间是一个段 表空间可以由一个或多个段组成 段无法跨越表空间,但是段可以跨越同一表空间的多个数据文件 每个段由一个或多个区组成 4) 区 一个或多个区组成一个段 当段创建后,它至少由一个区组成 随着段增长,将向该段添加区 DBA 可以手动向段添加区 一个区就是一组连续的Oracle 块 一个区可能不跨越数据文件,但必须存在于一个数据文件内 5) 数据块

19

Oracle 服务器以所谓的Oracle 块或者数据块为单元管理数据文件中的存储 空间 Oracle 数据库内的数据存储在数据块内,数据块为最精细的粒度等级 Oracle 数据块是Oracle 服务器能够分配、读或写的最小存储单元 一个数据块对应一个或多个从现有数据文件中分配的操作系统块 每个Oracle 数据库的数据块大小由初始化参数DB_BLOCK_SIZE 在创建数据库 时指定 数据块大小应当是操作系统块大小的整数倍以避免不必要的I/O 数据块大小最大值取决于操作系统 2、SYSTEM 和非SYSTEM 表空间 SYSTEM 表空间 由数据库创建 所有数据库均需要 包括数据字典内含存储程序单元 包括SYSTEM 回退段 应不包括用户数据,尽管这是允许的 创建表空间 CREATE TABLESPACE tablespace DATAFILE datafile_clause [MINIMUM EXTENT integer[K|M]] [LOGGING|NOLOGGING] [DEFAULT storage_clause ] [ONLINE|OFFLINE] [PERMANENT|TEMPORARY] [extent_management_clause] EG: CREATE TABLESPACE app_data DATAFILE '/DISK4/app_data_01.dbf' SIZE 100M, '/DISK5/app data_ 02.dbf' SIZE 100M MINIMUM EXTENT 500K DEFAULT STORAGE ( INITIAL 500K NEXT 500K MAXEXTENTS 500 PCTINCREASE 0 ); 这里。如果没有指定next值的话。它将会默认为DB_BLOCK_SIZE*5 表空间的空间管理:在创建表空间时,选择其中一种空间管理方法,在以后将无法 改变该方法 字典式管理表空间:对于使用数据字典来管理区的表空间,每当分配或回 收区时,Oracle 服务器将更新数据字典中的相应表。这是表空间缺省的空间管理方 法 本地管理的表空间:管理自身区的表空间在每个数据文件内都维护一个位 图,以了解该数据文件内块的空闲或使用状态。位图内的每一位对应一个块或者一组 块,在分配区或者释放区以供再次使用时,oracle 服务器更改位图数值以显示块的 新状态。 语法:extent_management_clause :== [ EXTENT MANAGEMENT { DICTIONARY | LOCAL

20

{ AUTOALLOCATE | UNIFORM [SIZE integer[K|M]] } } ] DICTIONARY: 指定使用字典表来管理表空间,这是缺省方法 LOCAL 指定通过位图来本地管理表空间 AUTOALLOCATE 指定表空间由系统管理,用户无法指定区大小 UNIFORM 指定通过大小为SIZE 字节的统一区来管理表空间 如果指定了LOCAL , 则无法指定DEFAULT storage_clause , MINIMUM EXTENT或者TEMPORARY 本地管理的表空间比字典式管理的表空间有如下优点 1) 本地管理避免了循环空间管理操作,而这种操作在字典式管理表空间 中可能发生,当消耗或释放某个区的空间,导致另一个消耗或释放回 退段或数据字典表内空间的操作时。 2) 因为本地管理的表空间不记录数据字典表中的空闲空间,从而减少了 对这些表的争用区的 3) 本地管理自动跟踪邻近的空闲空间,因而无须合并空闲区 4) 本地管理的区大小可以由系统自动决定。作为选择,本地管理的表空 间内的所有的区都可以有相同大小 5) 转换为区的位图不会生成回退信息, 因为它们不更新数据字典中的表, 除表空间定额信息等特殊情况外 3、临时表空间 1) 创建临时表空间 CREATE TEMPORARY TABLESPACE temp TEMPFILE '/DISK2/temp_01.dbf' SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M; 为了减少碎片,initial、next设置为db_block_size+n*sort_area_size 2) 临时表空间的属性 Tempfile 始终设为NOLOGGING 模式 无法使Tempfile 只读 无法重命名Tempfile 无法通过ALTER DATABASE 命令创建Tempfile 介质恢复不恢复Tempfile BACKUP CONTROLFILE 不生成任何Tempfile 信息 CREATE CONTROLFILE 不能指定任何关于Tempfile 的信息 3) 或者联机:只要数据库打开,数据库管理员就可以使任何表空间脱机,除了SYSTEM 表空间或任何有活动回退段或临时段的表空间,当DBW0 几次试图向某表空间的数 据文件写入都失败时,Oracle 例程自动将该表空间从联机切换为脱机。 ALTER TABLESPACE tablespace {ONLINE|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE|FOR RECOVER]} NORMAL: 将该表空间中所有数据文件内的所有块从SGA中清空 (这是缺省的。 在使此表空间重新联机之前,您无须对其执行介质恢复。) TEMPORARY: 只对表空间内的所有联机数据文件执行检查点, 任何脱机文件 都可能需要介质恢复 IMMEDIATE: 不保证表空间文件可用,也不执行检查点,在使表空间重新联 机之前,您必须对其执行介质恢复操作 FOR RECOVER: 使表空间脱机以用于表空间时间点恢复 4) 表空间成为只读

21

ALTER TABLESPACE tablespace READ [ONLY | WRITE] 在一次性写入设备上创建只读表空间 发出命令ALTER TABLESPACE...READ ONLY 使用操作系统命令将表空间的数据文件移动到只读设备上 发出命令ALTER TABLESPACE...RENAME DATAFILE 表空间必须联机 表空间一定不能包含活动回退段 表空间当前一定不能用于联机备份 当现有的所有事务提交或者回退后,ALTER TABLESPACE ...READ ONLY 命令完 成 5) 使表空间只读将导致对表空间内数据文件的检查点 弃表空间 DROP TABLESPACE tablespace[INCLUDING CONTENTS [CASCADE CONSTRAINTS]] INCLUDING CONTENTS:丢弃表空间内的所有段 CASCADE CONSTRAINTS:从表空间外的表中丢弃引用完整性约束 注: 不通过INCLUDING CONTENTS 选项则,无法丢弃仍包含数据的表空间,当表 空间包含许多对象时,该选项可能生成许多回退 在丢弃表空间时, 只丢弃相关数据库控制文件内的文件指针, 操作系统文件 仍然存在,您必须使用适当的操作系统命令明确删除这些文件 即使表空间切换到只读,您仍可以丢弃该表空间以及其内的段 丢弃表空间之前, 建议您将表空间脱机,以确保没有事务处理访问该表空间 内的任何段 调整表空间的大小 ALTER DATABASE DATAFILE '/DISK5/app_data_02.dbf' RESIZE 200M; 向表空间添加数据文件 ALTER TABLESPACE app_data ADD DATAFILE '/DISK5/app_data_03.dbf' SIZE 200M; 移动数据文件 表空间必须脱机 必须存在目标数据文件 下面的ALTER TABLESPACE 命令仅适用于不含活动回退段和临时段的非 SYSTEM 表空间中的数据文件 ALTER TABLESPACE app_data RENAME DATAFILE '/DISK4/app_data_01.dbf'TO '/DISK5/app_data_01.dbf'; 如果要移动system表空间。则要使用alter database命令 使用下面进程以重命名数据文件 使表空间脱机 使用操作系统命令以移动或者复制文件 执行ALTER TABLESPACE RENAME DATAFILE 命令 使表空间联机 必要时使用操作系统命令删除该文件 数据字典信息 表空间信息:DBA_TABLESPACES,V$TABLESPACE 数据文件信息:DBA_DATA_FILES,V$DATAFILE 临时文件信息:DBA_TEMP_FILES,V$TEMPFILE 每个表空间可以容纳1023 个数据文件

6) 7)

8)

9)

22

每个数据库内表空间最大数为64 KB

九、存储结构和关系
1、段类型 段是数据库内占用空间的对象 表 表是在数据库内存储数据的最常用方法,表段中所有数据必须存储在一个表空间内 表分区 当数据库内表的并发使用率很高时,主要关注的就是伸缩性和可用性。在这种情况 下,表内数据可以存储在几个分区内,每个分区驻留在不同的表空间。表分区后, 每个分区都是一个段,可以指定存储参数来独立地进行控制。 簇 簇跟表一样,是一种数据段类型。一个簇可以包含一个或多个表。一个簇内的表属 于同一个段并且共享相同的存储特性。 索引 一个特定索引的所有条目都存储在一个索引段内,如果一个表有三个索引就使用三 个索引段。 按索引组织的表 在按索引组织的表内,数据基于关键字值存储在索引内。按索引组织的表不需要表 查找,因为所有的数据都可以直接从索引树中检索到。 索引分区 索引可以分区并跨多个表空间,在这种情况下,索引内每个分区都对应一段并且无 法跨越多个表空间。分区索引的基本用途在于通过分散索引I/O 来最大限度地降低 争用 回退段 回退段由正在对数据库进行更改的事务使用。在更改数据或者索引块之前,值存储 在回退段内,从而允许用户撤消所做的更改 临时段 临时段用来存储排序的中间结果 LOB 段 LOB 索引 在创建LOB 段时,将隐式创建LOB 索引段 嵌套表 表中的列可以由一个用户定义的表构成 引导程序段 即高速缓存段, 是在创建数据库时由sql.bsq 脚本创建的。引导程序段无法查询或 者更新并且不需要数据库管理员维护 2、存储子句优先权 存储参数:可以在段级别指定存储子句以控制如何向段分配区 除了MINIMUM EXTENT 和UNIFORM SIZE 表空间参数外,在段级别指定的任何存 储参数覆盖在表空间级别设置的相应选项。 如果没有在段级别明确设置存储参数, 那么存储参数缺省设置为在表空间级别 所设置的值 如果没有在表空间级别明确设置存储参数,那么将使用Oracle 服务器系统的 缺省设置 如果存储参数改变,新选项只适用于尚未分配的区

23

某些参数无法在表空间级别指定。只能在段级别指定这些参数 如果指定了表空间的区的最小大小, 该大小将适用于将来分配给该表空间内的 段的所有区 3、数据库块 最小I/O 单元 由一个或多个OS 块组成 由DB_BLOCK_SIZE 设置 创建数据库时设置 1) 结构 块头:块头包含数据块地址、表目录、行目录和事务对块中的行做更改时用的事务 位置。块头从上往下增长 数据空间:行数据从下往上插入到块中 空闲空间:块内空闲空间位于块的中部,允许块头和行数据空间在需要时增长。最 初,块内的空闲空间是连续的。但是,删除和更新会使块内的空闲空间 产生碎片。Oracle 服务器可以在需要时合并块内的空闲空间 2) 数据块使用的参数 INITRANS 和MAXTRANS 指定初始的和最大的事务位置数,这些事务位置在索引块 或者数据块内创建。事务位置用来存储在某一时间点上正在对块进行更改的事务 的信息。一个事务只占用一个事务位置,即使它正在更改多行或者多个索引条目。 INITRANS 对数据段的缺省值为1, 对索引段的缺省值为2 ,以保证最低程度的并 发。例如,如果INITRANS 设为3 ,则保证至少3 个事务可以同时对块进行更改。 如果需要,也可以从块空闲空间内分配其它事务位置,以允许更多的事务并发修 改块内的行。MAXTRANS 的缺省值为255, 它设置可更改数据块或者索引块的并发 事务数的限制,设置后,该值限制事务位置对空间的使用,从而保证块内有足够 的空间供行或者索引数据使用。 数据段的PCTFREE 指定每个数据块中所保留空间的百分比,用于因更新块内的行 而导致的增长,PCTFREE 缺省值为10%。数据段的PCTUSED 代表Oracle 服务器试 图为表内每个数据块维持的已用空间最低百分比。如果一个块的已用空间低于 PCTUSED ,则将该块放回到空闲列表中。段的空闲列表是容纳将来所插入内容的 可选择块的列表。根据缺省,每个段在创建时都有一个空闲列表。通过设置存储 子句的FREELISTS 参数,可以创建有更多空闲列表的段。PCTUSED 缺省值为40%。 PCTFREE=(平均行大小 –初始行大小)*100%/平均行大小 , PCTUSED=100-PCTFREE-平均行大小*100/可用数据空间。 举例:PCTFREE=20 且PCTUSED=40 的数据段如何管理块内的空间 向块中插入行,直到块内的空闲空间等于或者小于20% 。当行所占用的块 内可用数据空间达到80% (100 –PCTFREE) 或者更多后,即无法再向该块进 行插入。 剩余的20% 可在行大小增长时使用。例如,更新初始为NULL 的列并分配 一个值。这样,由于更新,块使用率可能超过80%。 如果由于更新,删除了块内的行或者行大小减少,块使用率可能跌至80% 以下。但是,仍然无法向块中插入,直到块使用率跌至PCTUSED 以下,在本 例中PCTUSED 为40%。 当块使用率跌至PCTUSED 以下后,该块可用于插入。随着向块内插入行, 块使用率增长,重复从步骤1 开始的循环。 3) 相关的数据字典 DBA_SEGMENTS:所有段的具体信息 DBA_EXTENTS:所有块的具体信息

24

十、管理回退段
1、用途 事务处理回退 当某事务处理更改表中的行时,旧的图象存储在回退段中。如果将该事务处理回 退,则Oracle 服务器通过将回退段中的值写回该行来复原原始值。 事务处理恢复 如果事务处理正在进行时例程失败,则Oracle 服务器需要在数据库再次打开时 回退所有未提交更改。该回退是事务处理恢复的一部分。之所以有可能恢复,其 原因在于对回退段进行的更改也受重做日志文件保护。 读一致性 在事务处理正在进行时,数据库中的其他用户不应看到这些事务处理所做的任何 未提交更改。 此外, 某条语句不应看到在该语句开始执行以后所提交的任何更改。 回退段中的旧值还用于为读取器提供给定语句的一致图象。Oracle 服务器保证 一条语句所看到的数据来自一致的时间,即使其它事务处理修改了该数据。当 Oracle 服务器开始执行SELECT 语句时,它确定当前系统更改号(SCN) 并确保该 SCN 之前未提交的任何更改不会被该语句处理。请考虑在进行多个更改的同时执 行长时间运行的查询的情况。如果在该查询开始时某个块有未提交的更改,则 Oracle 服务器构建该块的读一致性图象,方法是从回退段检索更改之前的图象, 并将更改应用于内存中该块的副本。 事务处理读一致性 始终为SQL 语句提供读一致性。但是,可以为只读事务处理请求读一致性,方法 是在事务处理开始发出下列命令: SET TRANSACTION READ ONLY; 或者可以为执行DML 的事务处理请求读一致性,方法是在事务处理开始发出下列 命令: SET TRANSACTION SERIALIZABLE; 2、回退段类型 SYSTEM: 用于SYSTEM 表空间的对象 非SYSTEM: 用于其它表空间的对象 专用: 由单个例程获得,专用回退段是由例程使之联机的段,因为它们列在参 数文件中。但是可以通过发出ALTER ROLLBACK SEGMENT 命令而显式地令它们 联机。 公用: 由任何例程获得,公用回退段形成数据库中可用回退段的一个池。公用 回退段通常与Oracle Parallel Server 一起使用来创建回退段池,该池可以 由任何Parallel Server例程使用。 延迟: 当使表空间脱机时可能创建延迟回退段。 它们用于在表空间恢复联机时回退事 务处理。当不再需要它们时自动将它们丢弃 3、在事务处理中使用回退段 1) 回退段分配 当事务处理开始时,需要将一个回退段分配给该事务处理事务处理。可能使用 下列命令请求特定回退段: SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment 如果未进行这样的请求,则Oracle 服务器选择事务处理最少的回退段,并将它 分配给事务处理。 2) 使用区

25

事务处理以连续, 循环的方式使用回退段区。 可以向回退段的同一个区写入不止 一个事务处理,但是每个回退段块都仅包含来自一个事务处理的信息 3) 回退段的增长 如果下一个区正在使用,则事务处理将为回退段分配一个附加区。这称为 扩展。回退段可能以这种方式增长,直到它达到由MAXEXTENTS 参数指定的区的 最大个数。 4) 回退段的压缩 OPTIMAL 参数指定回退段必须收缩到的以字节为单位的大小。 如果指定了 OPTIMAL 参数, 则回退段可以在导致增长的事务处理完成时释放空间。 并 非事务处理一完成就进行区的回收, 回收区的进程仅当头从一个区移动到 下一个区时才执行。 Oracle 服务器尝试回收回退段的大小,直到它等于OPTIMAL, 但当要回 收的下一个区正在使用时将不得不突然停止。Oracle 服务器总是回收最 旧的非活动区,因为它们最不可能用于读一致性。 当满足下面两个条件时对区进行回收: 回退段的当前大小超过OPTIMAL 存在连续的非活动区 4、创建回退段 CREATE ROLLBACK SEGMENT rbs01 TABLESPACE rbs STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 20 MAXEXTENTS 100 OPTIMAL 2000K ); 限制 回退段在创建时可以指定为PUBLIC 或PRIVATE (缺省值),且无法更改 对于回退段,MINEXENTS 必须至少为两个 无法为回退段指定PCTINCREASE, 它始终设置为0。 如果指定了OPTIMAL, 则它必须至少等于回退段的初始大小,该大小是MINEXTENTS 定 义的区数所使用的空间。 原则 始终为回退段使用INITIAL = NEXT ,以确保所有区的大小相同 设置OPTIMAL 值以最小化回退段区的分配和回收。 避免将MAXEXTENTS 设置为UNLIMITED, 否则,可能由于程序错误导致回退段和可能的 数据文件的不必要的扩展 始终将回退段放置在单独、排它的表空间中,以使争用和碎片减到最小。 5、 回退段联机 当创建回退段时,它是脱机的,无法使用,若要使回退段可供事务处理使用,请使用 ALTER ROLLBACK SEGMENT 命令使它联机。用下列命令使回退段可用: ALTER ROLLBACK SEGMENT rbs01 ONLINE; 某例程可令之联机的回退段的个数受MAX_ROLLBACK_SEGMENTS 参数的限制。请将该 值设置为大于该例程所需的非SYSTEM 回退段个数的值。直到例程关闭回退段才联 机。 指定下列初始化参数, 确保启动时使回退段联机: ROLLBACK_SEGMENTS=(rbs01, rbs02) 6、例程如何获取回退段

26

例程获取在初始化参数ROLLBACK_SEGMENTS 中命名的所有回退段TRANSACTIONS init.ora 参数除以TRANSACTIONS_PER_ROLLBACK_SEGMENT init.ora 参数,结果是该例程 所需的回退段个数。如果该值大于已由该例程使之联机的非SYSTEM回退段,则例程将获取 其它公用回退段以补足不足的部分。 如果公用回退段不足, 则数据库将打开以供用户使用。 不会生成任何错误。 7、更改回退段存储设置 回退段的存储参数可以使用ALTER ROLLBACK SEGMENT 命令更改 ALTER ROLLBACK SEGMENT rollback_segment [STORAGE ( [NEXT integer[K|M]] [MINEXTENTS integer] [MAXEXTENTS {integer|UNLIMITED}] [OPTIMAL {integer[K|M]|NULL}])] 使用该命令重新定义OPTIMAL 或MAXEXTENTS 参数 8、从回退段回收空间 使用ALTER ROLLBACK SEGMENT 命令 ALTER ROLLBACK SEGMENT rbs01 SHRINK TO 4M; 如果是活动区, 可以不压缩到所要求的大小 如果未指定integer ,则Oracle 服务器尝试回收区,直到回退段的大小等于 OPTIMAL 9、使回退段脱机 ALTER ROLLBACK SEGMENT rbs01 OFFLINE; 如果事务处理正在使用回退段, 状态将暂时更改为PENDING OFFLINE,所有现有事务处 理一完成,就令该段脱机。注如果回退段为PENDING OFFLINE ,则其状态在 DBA_ROLLBACK_SEGS中显示为ONLINE 10、删除回退段 当不再需要某回退段或需要使用不同的INITIAL、 NEXT 或MINEXTENTS 存储设置重新 创建某回退段时,可能需要删除该回退段。回退段必须处于脱机状态才能被删除。 DROP ROLLBACK SEGMENT rbs01; 11、相关的数据字典 DBA_ROLLBACK_SEGS 连接V$ROLLSTAT 和V$ROLLNAME 视图以获取该例程当前使用的回退段的统计, 关 键字:USN 若要检查当前活动事务的回退段使用请连接V$TRANSACTION 和V$SESSION 视图, 关键字:SADDR 12、计划回退段 存储回退时的必要信息所需的字节数取决于以下两项 执行的事务处理的类型,插入、更新、删除等等 处理的实际数据 总的来说在表中插入给定记录比删除同样记录生成的撤消要少。插入只需在回 退中存储ROWID, 而删除需要存储实际的行本身。 13、回退段问题 1) 事务处理空间不足 可能的原因 如果事务处理使用单个回退段,当回退段中空间不足(ORA-01562) 时事务处 理可能失败。这可能由以下原因之一引起: 表空间中没有足够的空间供回退段扩展(ORA-01560) 回退段中的区数已达到MAXEXTENTS 并且无法分配额外的区(ORA-01628) 解决方案

27

如果表空间没有空闲空间,则使用以下方法增加可用空间: 设置OPTIMAL 以确保单个回退段不会使用表空间中的所有空闲空 间 将回退段收缩到其最优大小 增加表空间的大小 如果回退段由于已达到MAXEXTENTS 所强加的限制而无法分配更多的区, 则: 增加回退段的MAXEXTENTS 丢弃旧回退段,重建新的包含更大区的回退段,以避免问题的再次发 生 读一致性错误 原因 读取的时候,发现回滚段已经被覆盖而出现找不着变化前的映像。 会 出现著名的ORA_01555错误。 解决方案 通过确保创建具有下列特点的回退段可以将读一致性错误减到最小: 较高的MINEXTENTS 值 较大的区大小 较高的OPTIMAL 值 请注意无法通过增加MAXEXTENTS 来避免这些错误 阻塞会话 原因 当回退段中的某个区已满时,Oracle 服务器将尝试重新使用该段中的下一 个区。如果这个新的区包含一个活动条目,即仍活动的事务处理写入的条目,则 该区无法使用。在这些情况下,回退段将分配一个附加区。事务处理无法跳过环 中的某个区。而继续写入后续的区尽管存在许多空闲区,但只进行了少数更改、 却已空闲了较长时间的事务处理可能导致回退段增长。在这种情况下,将浪费大 量空间,数据库管理员可能需要进行干预,以避免过度的回退段增长。 解决方案 查询V$ROLLSTAT、 V$SESSION 和V$TRANSACTION 视图以找到任何阻塞的事 务处理 SQL> SELECT s.sid, s.serial#, t.start_time, t.xidusn, s.username 2 FROM v$session s, v$transaction t, v$rollstat r 3 WHERE s.saddr = t.ses_addr 4 AND t.xidusn = r.usn 5 AND ((r.curext = t.start_uext-1) OR 6 ((r.curext = r.extents-1) AND t.start_uext=0)); SID SERIAL# START_TIME XIDUSN USERNAME --- ------- ----------------- ------ -------9 27 10/30/97 21:10:41 2 SYSTEM 使表空间脱机时出错 问题诊断和解决 如果某表空间包含一个或多个活动的回退段,则无法使之脱 执行 语句的会话将收到ORA-01546 错误消息。 解决方案 执行下列步骤: 查询DBA_ROLLBACK_SEGS 以找到该表空间中有哪些回退段 令表空间中的所有回退段脱机

28

检查V$TRANSACTION 以找到哪些事务处理当前正在使用这些回退 段 使用V$SESSION 以获取用户名和会话信息 终止会话或令用户结束事务处理 使表空间脱机

十一、管理表
1、存储类型

1) 常规表 2) 分区表 一个分区表有一个或多个分区,每个分区存储通过使用范围分区、 散列分区或组合分区分区的行。 分区表中的每个分区为一个段,可各自位于不同的表空间中。 对于能够同时使用几个进程进行查询或操作的大型表分区非常有 用。 有一些特殊的命令可用来管理一个表内的分区。 3) 按索引组织的表 按索引组织的表就像在其一个或多个列中具有主键索引的常规表 4) 集簇表 簇由共享相同数据块的一组表组成,它们之所以被组织在一起,是 因为它们共享共同的列并且经常一起使用。 簇具有以下特征 簇有一个集簇键,用来标识需要存储在一起的行 集簇键可由一个或多个列组成 簇中的表具有与集簇键相对应的列 集簇是一种对使用表的应用程序透明的机制。可以操作集簇表 中的数据,就好像它们是存储在常规表中一样 更新集簇键中的一列可能需要在物理上重新定位行 集簇键不依赖于主键。簇中的表可有一个主键,它可以是集簇 键或一组不同的列
通常为改进性能而创建簇,对集簇数据的随机存取可能更快,但对集簇 表的全表扫描一般较慢 2、创建表 CREATE TABLE employee( id NUMBER(7), last_name VARCHAR2(25), dept_id NUMBER(7)) PCTFREE 20 PCTUSED 50 STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE data; INITRANS: 指定在每个块中预先分配的事务项数,缺省值为1

29

MAXTRANS :限定可以分配给每个块的事务项数,缺省值为255 LOGGING: 指定表的创建将记录到重做日志文件中,它还指定所有针对该表的后续操作 都将被记录下来,这是缺省设置 NOLOGGING:指定某些类型的数据负载和表的创建将不被记录到重做日志文件中 CACHE : 指定即使在执行全表扫描时, 为该表检索的块也将放置在缓冲区高速缓存的LRU 列表最近使用的一端 NOCACHE :指定在执行全表扫描时,为该表检索的块将放置在缓冲区高速缓存的LRU列 表最近未使用的一端 STORAGE: 标识决定如何将区分配给表的存储子句 next : 当Oracle 服务器为表分配另一区时就会使用新的值, 以后的区大小将 按PCTINCREASE 增加 PCTINCREASE: 当Oracle 服务器分配下一个区时,将使用它来重新计算NEXT. 当它 更改为100 则要分配的第三个区将为10K 第四个区将为 20K 依次类推 Initial:表的INITIAL 值不能修改 3、临时表 建立 CREATE GLOBAL TEMPORARY TABLE employee_temp AS SELECT * FROM employee; ON COMMIT DELETE ROWS: 用来指定仅在该事务处理内可看到这些行 ON COMMIT PRESERVE ROWS: 用来指定在整个会话期间都能看到这些行 数据不要求DML 锁定,DML 不生成重做日志,可以在临时表上创建索引、视图和触发 器,还可以使用导出和导入实用程序来导出和导入临时表的定义。然而,即使您使用ROWS 选项,也不导出任何数据,所有会话都能看到临时表的定义 创建临时表的原则 将表存放在另一表空间内,而不存放在有回退段、临时段和索引的表空间内。 将表存放在本地管理的表空间内以避免产生存储碎片。 使用一些标准区大小,5 × DB_BLOCK_SIZE 的倍数,来最大限度地减少碎片 为提高全表扫描的性能,按照DB_FILE_MULTIBLOCK_READ_COUNT 来调整区大小, DB_FILE_MULTIBLOCK_READ_COUNT 是初始化参数,定义服务器进程读取全表时在对操 作系统的每个读调用中请求多少块。 对可能频繁访问的小型参考表使用CACHE 子句。 4、行移植 如果PCTFREE 值设置得低,则在一个块中可能没有足够的空间来容纳更新后增长 的行。出现这种情况时,Oracle 服务器会把整个行移动到一个新块并创建一个从原块 指向新位置的指针。此进程称为行移植。在移植行时,与该行相关联的I/O 性能会降 低,因为Oracle 服务器检索该行时必须扫描两个数据块。 5、行链接 当一个行因太大而任何一个块都容纳不下时,就会发生行链接。当行包含的列太长时 就可能发生这种情况.在这种情况下,Oracle 服务器将该行分成称为行片的更小的程序 块。每个行片存储在一个块中,带有检索和装配整行所需要的指针,如果可能,通过选择 较大的块大小或将表分成含有较少列的多个表,可以最大限度地减少行链接。 6、手动分配区 使用下面的命令将一个区分配给一个表 ALTER TABLE summit.employee ALLOCATE EXTENT(SIZE 500K DATAFILE ‘/DISK3/DATA01.DBF’); 如果没有SIZE, Oracle 服务器就使用DBA_TABLES 中的NEXT_EXTENT 大小来分配区 7、非分区表的重新组织

30

将表从一个表空间移到另一表空间 重新组织表以避免行移植 移动表后必须重建索引 命令:ALTER TABLE employee MOVE TABLESPACE data1; 8、 什么是高水位标记 表的高水位标记指出该表所使用过的最后一个块 在向表中插入数据时,高水位标记会移动以标记所使用的最后一个块 从表中删除行时,高水位标记不会重新设置 高水位标记存储在表的段头部 当Oracle 服务器执行全表扫描时,它会读取高水位标记以下的所有块 9、 回收未占用的空间 ALTER TABLE summit.employee DEALLOCATE UNUSED [KEEP integer [ K|M ] ]; KEEP 指定在高水位标记以上应该保留的字节数。 如果使用上述命令时没有KEEP 子句,Oracle 服务器将回收高水位标记以上所有未使 用空间。 如果高水位标记所在的区小于MINEXTENTS 的值, Oracle 服务器将释放MINEXTENTS 以上的区。 若要释放高水位标记以下的所有空间, 即使高水位标记在MINEXTENTS以, 下请使用KEEP 0 10、截断表 TRUNCATE TABLE summit.employee; 1) 特点 截断一个表会删除表中的所有行并释放已使用的空间 不会生成任何回退数据,且命令会隐式提交,因为TRUNCATE TABLE 是一个DDL 命令 对应的索引也将截断 不能截断某个外键正在引用的表 使用此命令时不会触发删除触发器 2) 如果使用DROP子句(缺省方式) 将回收除MINEXTENTS 指定之外的所有区 高水位标记将重置为指向表中的第一个块 表的NEXT_EXTENT 的值将被重置为与回收的.区ID 最小的区的大小相同,也就是 说,如果MINEXTENTS 为2, 则NEXT_EXTENT 的大小将被设置为与表的第3 个区 的大小相同。 必须指定REUSE 子句,以保留该表使用的所有空间 11、删除表 DROP TABLE summit.department CASCADE CONSTRAINTS; 12、删除列 ALTER TABLE employee DROP COLUMN comments CASCADE CONSTRAINTS CHECKPOINT 1000; Checkpoint 1000:每删除1000会产生一个检查点。 使用下面的语句可恢复中断的删除操作 ALTER TABLE orders DROP COLUMNS CONTINUE; 如果表处于VALID 状态则使用此语句会生成错误 13、UNUSED 选项 把列设成unused ALTER TABLE orders SET UNUSED COLUMN comments CASCADE CONSTRAINTS;

31

删除未占用的列 ALTER TABLE orders DROP UNUSED COLUMNS CHECKPOINT 1000; 继续删除列操作 ALTER TABLE orders DROP COLUMNS CONTINUE CHECKPOINT 1000; 除将列从表中删除以外,还可以先将列标记为”未使用”,以后再删除。因为没 有删除数据, 所以此操作不回收磁盘空间, 因而具有速度比较快的优点。 被标为” 未使用”的列可在以后系统活动较少时从表中删除。未使用的列就像不属于表的 一部分一样。查询看不到未使用列中的数据。此外,在执行DESCRIBE 命令时, 这些列的名称和数据类型不会显示。用户可以添加与未使用的列同名的新列。如 果想删除同一表中的两列,则适合先将列设置为”未使用”然后再删除。在删除 两列时,表中的所有行都会更新两次;但如果您将这些列设置为”未使用”然后 再删除,则所有的行仅更新一次。 相关数据字典:DBA_UNUSED_COL_TABS 14、 删除列的限制 从对象类型表中删除列 从嵌套表中删除列 删除一个表中的所有列 删除分区键列 从SYS 拥有的表中删除列 删除父键列 从按索引组织的表中删除主键列

十二、管理索引
索引是一种允许对表中的行进行直接访问的树型结构。 1、索引分类 逻辑 1) 单列或合并 单列索引在索引关键字中仅有一列 串接索引也叫组合索引在表内多列上创建,组合关键字索引最多包含32列。 2) 唯一索引和非唯一索引 唯一索引保证定义索引的列中没有任何两行有重复值。 唯一索引中的索引 关键字只能指向表中的一行。 在非唯一索引中,单个关键字可以有多个与其关联的行。 3) 基于函数的索引 若使用的函数或表达式涉及正在建立索引的表中的一列或多列, 则创建基于 函数的索引。基于函数的索引预先计算函数或表达式的值,并将结果存储在索 引中。 物理 1) 分区索引和非分区索引 分区索引用于大型表, 存储与多个段中的索引对应的索引项。 分区使索引可以在多 个表空间中展开, 从而降低索引查找争用并提高可管理性。 分区索引通常用于分区 表以提高可伸缩性和可管理性。可为每个表分区创建一个索引分区。 2、索引的存储方式 所有索引都使用B 树结构 B 树索引结构索引的顶部为根,其中包含指向索引中下一级的项。下一级为分枝块,

32

分枝块又指向索引中下一级的块。 最低一级为叶节点, 其中包含指向表行的索引项。 叶块为双重链接,有助于按关键字值的升序和降序扫描索引。 索引叶项的格式 项标题,存储列数和锁定信息 关键字列的”长度- 值”(length-value pairs) 对定义索引键中列的大小及该 列的值,值对的数目即索引的最大列数 行的行标识,包含关键字值 3、DML 操作对索引的影响 插入操作导致在适当的块中插入索引项 删除行只导致逻辑删除索引项。删除的行所用的空间不能用于新项,直到删除块中 的所有项。 更新关键字列导致逻辑删除和向索引插入。除了在创建时,其它任何时候 PCTFREE 设置对索引都没有影响。即使索引块空间少于PCTFREE 指定的空间,仍可 以向索引块添加新项。 4、反向键索引 与常规B 树索引相反,反向键索引在保持列顺序的同时反转每一个索引列,在升序键 上插入记录。 例如系统生成的雇员编号时, 由于所有索引在索引树中的同一位置进行更新, 在索引上会发生I/O 瓶颈。 反向键索引通过反转索引键的数据值, 在整个索引树上展开索 引更新的分发。例如将雇员号7698 插入表中时,关键字值8967 将存储在索引中。当输入 下一个雇员号7782 时,生成2877 的索引项,从而将工作量分散在多个索引块间。 反向键索引仅用于包含同等谓语的查询。由于在反向键索引中词法接近的关键字不会 以相邻方式存储,使用这样的索引不能执行范围搜索。 5、位图索引 在下列情况中位图索引比B 树索引更有利: 当表包含数百万行且关键字列的基数低时,即该列有非常少的独特值。例如,对包 含护照记录的表的性别列和婚姻状况列,位图索引比B 树索引更适合。 当查询经常使用涉及OR 运算符的多个WHERE 条件组合时。 当关键字列上存在只读或很少的更新操作时。 6、创建索引(创建正常的B 树索引) 使用下列命令创建B 树索引 例子: CREATE INDEX summit.employee_last_name_idx ON summit.employee(last_name) PCTFREE 30 STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE indx; 语法: CREATE [ UNIQUE ]INDEX [schema.] index ON [schema.] table (column [ ASC | DESC ] [ , column [ASC | DESC ] ] ...) TABLESPACE tablespace] [ PCTFREE integer ] [ INITRANS integer ] [ MAXTRANS integer ] [ storage-clause ] [ LOGGING| NOLOGGING ]

33

[ NOSORT ] UNIQUE: 用于指定唯一索引(缺省情况下为非唯一索引) INITRANS :指定每块中预先分配的事务项的数目(缺省值和最小值为2) MAXTRANS: 限制分配给每块的事务项的数目(缺省值为255) Storage-clause: 标识确定如何将区分配给索引的存储子句 LOGGING :指定在重做日志文件中记录索引创建操作和在索引上进行的后续操作(这 是缺省值) NOLOGGING :指定在重做日志文件中不记录创建操作和某些类型的数据装载操作 NOSORT 指定行按升序存储在数据库中, 这样, Oracle 服务器在创建索引时不必对行 进行排序 注释 如果已为表空间定义了MINIMUM EXTENT ,则索引的区大小将向上舍入为下一个 更高的MINIMUM EXTENT 值的倍数。 不能为索引指定PCTUSED 。 由于索引项必须按正确的顺序存储, 用户将无法控制 何时插入索引块。 如果在数据未按关键字排序的情况下使用NOSORT 关键字,语句将终止并显示错 误。如果表上已经有多个DML 操作,该选项很可能失败 如果可能,Oracle 服务器便使用现有索引创建新的索引。当新索引的关键字与 现有索引关键字的主要部分对应时,将发生这种情况。 7、创建索引的原则 索引能够提高查询性能并降低DML操作速度。始终使易失表所需的索引数保持最少 将索引放在一个单独的表空间中,不要放在有回退段、临时段和表的表空间中。 若要使碎片最少,使用一些标准区大小,均为5*DB_BLOCK_SIZE 的倍数 对大型索引而言, 避免重做生成可带来显著的性能收益。 考虑使用NOLOGGING 子句 创建大型索引。 由于索引项比索引行小,索引块趋向于在每块中包含更多的项。为此,INITRANS 在索引中通常比在对应的表中高。 8、创建反向键索引 命令 CREATE UNIQUE INDEX summit.orders_id_idx ON summit.orders(id) REVERSE PCTFREE 30 STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE indx; 语法 使用下列命令创建反向键索引 CREATE [ UNIQUE ]INDEX [schema.] index ON [schema.] table (column [ ASC | DESC ] [ , column [ASC | DESC ] ] ...) [TABLESPACE tablespace] [ PCTFREE integer ] [ INITRANS integer ] [ MAXTRANS integer ] [ storage-clause ] [ LOGGING| NOLOGGING ] REVERSE

34

注意NOSORT 关键字不能用于反向键索引 9、创建位图索引 使用参数CREATE_BITMAP_AREA_SIZE 指定分配给位图创建的内存量 CREATE BITMAP INDEX orders_region_id_idx ON summit.orders(region_id) PCTFREE 30 STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE indx; 使用下列命令创建位图索引 CREATE BITMAP INDEX [schema.] index ON [schema.] table (column [ ASC | DESC ] [ , column [ASC | DESC ] ] ...) [TABLESPACE tablespace] [ PCTFREE integer ] [ INITRANS integer ] [ MAXTRANS integer ] [ storage-clause ] [ LOGGING| NOLOGGING ] [ NOSORT ] 10、分配索引空间 ALTER INDEX summit.orders_region_id_idx ALLOCATE EXTENT (SIZE 200K DATAFILE ‘/DISK6/indx01.dbf’); 11、回收索引空间 ALTER INDEX summit.orders_id_idx DEALLOCATE UNUSED; 12、重建索引 ALTER INDEX summit.orders_region_id_idx REBUILD TABLESPACE indx02; 13、重建索引 索引重建具有以下特点 使用现有索引作为数据源建立新索引 使用现有索引建立索引时无须排序,从而使性能更佳 在建立新索引后,删除旧索引。重建期间,各自的表空间内需要有足够的空 间以容纳新旧索引。 结果索引不包括任何已删除的项,因此,该索引能更有效地使用空间 在建立新索引的过程中,查询可继续使用现有索引 可能的重建情况 需将现有索引移到另外的表空间。如果索引和表在同一表空间或需要跨磁盘 重新分布对象时, 可能需要进行此操作。 (已通过ALTER TABLE..MOVE TABLESPACE 命 令将索引表移至其它表空间) 索引中包含很多已删除的项。这是滑动索引(如订单表订单号上的索引)存 在的典型问题,完成的订单已被删除,而具有更高订单号的新订单被添加到表中。 如果有几个旧订单未完成,则可能有若干个索引叶块包含除几个已删除的项外的全 部项。 需将现有正常索引转换成反向键索引。 这可能发生在从Oracle 服务器的早期 发行版移植应用程序时。 ALTER INDEX ...REBUILD 命令不能用于将位图索引更改为B 树索引,反之亦

35

然,只能为B 树索引指定REVERSE 或NOREVERSE 关键字。 14、联机重建索引 ALTER INDEX summit.orders_id_idx REBUILD ONLINE; 建立或重建索引是一项费时的任务,尤其当表非常大时更是如此,在Oracle8i之前, 建立或重建索引都需要锁定表,并要防止并发的DML 操作。Oracle8i 允许在基表上进 行并发操作的同时建立或重建索引,但不建议在此过程中执行大量的DML 操作。 注意:仍存在DML 锁,这意味着在联机索引建立期间不能执行其它DDL 操作。 15、限制 不能在临时表中重建索引 不能重建整个分区索引必须分别重建各分区或子分区 也不能回收未用空间 不能整个更改索引的PCTFREE 参数值 16、合并索引 ALTER INDEX summit.orders_id_idx COALESCE; 17、删除索引 DROP INDEX summit.deptartment_name_idx;

十三、维护数据完整性
1、完整性约束的状态 禁用无效:禁用且不验证的约束是不检查的 禁用生效:不允许对受约束的列进行任何修改 ENABLE NOVALIDATE:如果约束处于启用无效状态,则不能输入违反该约束的新 数据。然而,表中可能含有无效数据即违反约束的数据。 ALTER TABLE summit.department ENABLE NOVALIDATE CONSTRAINT dept_pk; ENABLE VALIDATE:则保证表中所有数据均遵守约束 ALTER TABLE summit.employee ENABLE VALIDATE CONSTRAINT emp_dept_fk; 2、约束的方式 不可延迟的约束 在每个DML 语句结束时执行,约束违法将导致语句回退 延迟约束 延迟约束是仅在提交事务时才检查的约束 defer_spec :== [NOT DEFERRABLE|DEFERRABLE [INITIALLY {IMMEDIATE|DEFERRED}]][DISABLE|ENABLE [VALIDATE|NOVALIDATE]] DEFERRABLE:可使用SET CONSTRAINT(S)命令将约束检查延迟到事 务结束时 NOT DEFERRABLE :表示在每一DML 语句结束时均检查该约束会话 或事务不能延迟。 INITIALLY IMMEDIATE: 表示在每一事务开始时缺省为在每一DML 语 句结束时检查该约束。 如果没有指定子句INITIALLY, 则缺省情况下 为INITIALLY IMMEDIATE。 INITIALLY DEFERRED:该约束是DEFERRABLE 并指定缺省时只在每 一事务结束时检查该约束 DISABLE : 禁用完整性约束如果完整性约束是禁用的。 则Oracle 服 务器不会执行它。 使用ALTER SESSION 或SET CONSTRAINTS 命令设置约束的模式 ALTER SESSION

36

SET CONSTRAINT[S] ={IMMEDIATE|DEFERRED|DEFAULT} SET CONSTRAINT[S] {constraint [, constraint ]...|ALL } {IMMEDIATE|DEFERRED} 3、使用外键约束时的注意事项 删除父表之前必须删除外键 DROP TABLE table CASCADE CONSTRAINTS 在未删除或禁用外键之前无法截断父表 删除包含父表的表空间之前必须删除外键 DROP TABLESPACE tablespace INCLUDING CONTENTS CASCADE CONSTRAINTS 如果从父表中删除行时没有使用DELETE CASCADE 选项,Oracle 服务器需要确保 子表中的行不包含相应的外键 4、使用EXCEPTIONS 表 1) 创建EXCEPTIONS 表(utlexcpt.sql) 2) 使用EXCEPTIONS 子句执行ALTER TABLE SQL> ALTER TABLE summit.employee ENABLE VALIDATE CONSTRAINT employee_dept_id_fk EXCEPTIONS INTO system.exceptions; 3) 使用EXCEPTIONS 子查询查找包含无效数据的行 SQL> SELECT rowid, id, last_name, dept_id FROM summit.employee WHERE ROWID in (SELECT row_id FROM exceptions) FOR UPDATE; 4) 纠正错误 SQL> TRUNCATE TABLE exceptions; Statement processed. 5) 再次执行ALTER TABLE 以启用约束 SQL> ALTER TABLE summit.employee 6) ENABLE VALIDATE CONSTRAINT employee_dept_id_fk EXCEPTIONS INTO system.exceptions; Statement processed.

十四、加载程序
1、装载数据 1) 直接装载插入 直接装载插入可用于在同一数据库中从一个表向另一个表复制数据。 此方法绕过缓 冲区高速缓存直接将数据写入数据文件,从而加快了插入操作速度。 INSERT /*+APPEND */ INTO scott.emp NOLOGGING 2) 并行直接装载插入 ALTER SESSION ENABLE PARALLEL DML; INSERT /*+PARALLEL(scott.emp,2) */ INTO scott.emp NOLOGGING 进行并行直接装载插入时,Oracle 服务器使用多个称为并行查询从属的进程将数 据插入表中 2、 SQL* 加载程序 SQL*加载程序是用于将外部文件数据装载到Oracle 表的实用程序。 此方法提供从其它

37

系统移植到Oracle 数据库的手段。 1) SQL* 加载程序功能 可以使用一个或多个输入文件 可以将多个输入记录组合成一个逻辑记录进行装载 输入字段的长度可以是固定,也可以是可变的 输入数据可以是任何一种格式---字符、二进制、压缩十进制、日期和分段十 进制。 可以从磁盘、磁带或命名管道等不同类型的介质装载数据 可以在一次运行中将数据装载到多个表中 有用于替换或追加到表中现有数据的选项 在行存储于数据库之前,可以将SQL 函数应用于输入数据 列值可基于规则自动生成。例如,可以生成顺序关键字值并存储在列中 可以绕过数据库缓冲区高速缓存,将数据直接装载到表中 2) SQL* 加载程序使用的文件 控制文件: 输入数据文件名(使用INFILE 子句) 来自输入数据文件中物理记录的逻辑记录组合(使用CONCATENATE 和 CONTINUEIF 等子句) 字段说明,包括位置、数据类型以及定界符条件说明(使用FIELDS 子句) 表名(使用INTO TABLE 子句) 装载方法数据是装载到空表、 删除或截断现有记录后插入还是追加到现有 数据上。 每个表跳过的记录(使用CONTINUE_LOAD 子句) 用于选择待装载记录的条件(使用WHEN 子句) 要装载的列 列值生成规则(使用RECNUM 和SYSDATE 等子句并应用SQL 函数) 列操作,如截取和用空值代替零 装载参数(使用OPTIONS 子句) 并行直接装载期间所创建的临时段的存储说明 注释前面加前缀 ”—“ 其它直接装载选项例如 SINGLEROW 用于逐行维护索引 REENABLE 用于在运行结束时启用被禁用的约束 ORTED_INDEXES 指定是否预先排序数据 UNRECOVERABLE 抑制生成重做日志 数据文件:包含以控制文件中定义的格式出现的数据 参数文件:是可选文件,可用于定义装载的命令行参数 日志文件:日志文件为必有文件如果由于缺少空间或许可权而不能创建日志文 件则装载将终止,日志文件包括: 诸如运行日期和软件版本号等标题信息 全局信息包括 所有输入和输出文件的名称 命令行参数 表信息包括 表名 装载条件和方法 字段和列信息

38

数据文件信息显示由于各种原因被拒绝和丢弃的记录 表装载信息包括 装载的行数 有资格装载但由于数据错误而被拒绝的行数 丢弃的行数 相关字段均为空的行数 小结统计包括下列数据 为阵列分配的空间量 所有数据文件的装载统计 运行开始时间和结束时间 总共用去的时间 总CPU 时间包括所有文件的I/O 时间但不包括后台进程所使用的 任何CPU 时间 坏文件: 输入记录包含数目不足或无效的格式化字段等错误 因违反约束而不能插入行 丢弃文件:用于存储所有未满足选择准则的记录 3) SQL*加载程序提供两种装载数据的方法 常规装载 使用SQL 处理数据库,COMMIT 保存数据 始终生成重做日志项 执行所有的约束 INSERT 触发器触发 可以装入集簇表 其他用户可以更改表 直接路径装载:直接路径装载绕过数据库缓冲区高速缓存 直接路径装载使用数据保存将数据块写入Oracle 数据文件 只是检查NOT NULL和主键约束,不检查check和外键约束。 INSERT 触发器不触发 不能装入集簇表 直接装载正在进行时,其它事务不能对正被装载的表进行更改 并行直接装载 每个并行直接装载会话使用不同的输入数据文件,启动多个并行直接装载 话时,按照下列步骤执行装载 每个会话使用一个临时段从输入数据文件装载数据。 这些临时段在包含 正被装载的表的表空间中创建。如果表空间包含多个数据文件,则对于 每个会话,用户可指定数据文件,在该文件中创建临时段。用户也可指 定这些段的存储参数。 缺省情况下这些段使用与正被装载的表相同的存 储属性。 截取每个临时段的最后一个区以回收会话结束时的未用空间 运行结束时所有临时段组合成一个段 此结果临时段添加到表段中 限制 装载不维护索引。并行装载之前删除索引,运行结束时重新创建索引。 必须禁用引用完整性、检查约束以及触发器,而且必须手动重新启用它 们。 由于各装载间不相互调整,只能将行追加到现有数据上。如果表中的数

39

据需要替换,则在并行装载之前手动截断表 3、导出和导入实用程序 导出实用程序能够提取Oracle 数据库中的字典信息和数据,然后将这些信息和数据 移入Oracle 二进制格式的操作系统文件中,导出实用程序所生成的文件可以由导入实用 程序读入到同一Oracle 数据库或不同的Oracle 数据库。

十五、重新组织数据
1、导出和导入可用于下列情况: 1) 重新组织表: 可能需要将数据从一个表空间移动到另一个表空间,以使争用减到最少、减 少空闲空间碎片或为了易于备份。 表可能包含很多移植的行 表可能包含很多有大量空闲空间的块 表可能包含很多位于高水位标记以下的空块 2) 将一个用户拥有的数据移动到另一个用户,当需要从数据库中删除某个方案或需要 重新分发对象所有权时,可能必须进行上述操作。从一个用户导出的数据可以导入 到不同用户的方案中。 3) 在数据库之间移动数据:通过只提取定义而忽略数据,可将对象定义从开发数据库 移动到生产数据库。导出和导入还可用于将数据从OLTP 应用程序提取到数据仓库 中。 4) 移植到不同的操作系统平台或Oracle 版本或移植到不同版本的Oracle 数据库 5) 执行逻辑备份 2、导出模式 表模式 导出的内容: 表定义 表中的数据(如果要求) 若由特权用户执行导出,则将导出表上的所有索引,否则,只能导出该用户所 拥有表上的索引。 仅当特权用户运行该实用程序时,才可导出表上的所有触发器,否则,只能导 出该用户所拥有表上的触发器。 表上的约束 在表上进行的所有授权 在导入时使用的分析方法定义 用户模式 特权用户可以导出任何用户所拥有的对象。在这种情况下,导出的对象是:用 户拥有的所有对象,除了该用户拥有的、但位于其他用户所拥有表上的索引和触 发器。 特权用户是具有EXP_FULL_DATABASE的角色 非特权用户只能导出自己拥有的对象且该模式不包括其他用户在该用户所拥有 表上创建的索引或触发器 完全数据库模式 使用该模式时,除了用户SYS 所拥有的对象以外,将导出数据库中的所有对象。 3、导出的方式: 常规导出:常规路径导出使用SQL SELECT 语句从表中提取数据(缺省方式)。 直接路径导出:直接路径导出直接读取数据并绕过SQL 命令处理层。这种导出方式绕 过了求值缓冲区,即不重新组织块中的数据以使行块组合在一起

40

4、导入顺序 表对象按照从导出文件读取的顺序导入,导出文件按下列顺序包含对象 1) 类型定义 2) 表定义 3) 表数据 4) 表索引 5) 完整性约束、视图、过程和触发器 6) 位图、函数和域索引 7) 对象使用的表空间: 源数据库中的相同表空间(如果有) 用户的缺省表空间 5、导出和导入原则 使用参数文件指定常用命令行选项 仅在导出少量数据时使用CONSISTENT=Y 如果存在许多已删除的行, 请勿使用COMPRESS=Y 因为cmpress=Y是把导入后形成的新表的初始区的大小设为之前的段的大小。 通过以下操作提高性能: 分配大容量缓冲区 若使用7.3.3 或更高版本, 则使用直接路径 6、传送表空间 每次运行时传送的表空间集必须为自包含:既里面的对象和其他表空间没有联系。 命令 ALTER TABLESPACE sales_ts READ ONLY exp sys/...FILE=s980501.dmp TRANSPORT_TABLESPACE=y TABLESPACES=sales_ts TRIGGERS=N CONSTRAINTS=N imp sys/...FILE=s980501.dmp TRANSPORT_TABLESPACE=y DATAFILES=(/disk1/sales01.dbf,/disk2/sales02.dbf) ALTER TABLESPACE sales_ts READ WRITE; 用途 移动整个表空间数据 支持介质恢复 源数据库和目标数据库必须符合以下条件: 位于相同的操作系统上 运行Oracle8i, 发行版8.1 或更高版本 具有相同的块大小 使用相同的字符集 不能传送下列对象象: 包含嵌套表和VARRAY 的表 位图索引 7、检查传送设置 PL/SQL 过程DBMS_TTS.TRANSPORT_SET_CHECK 可用于验证表空间集是否为自包含 脚本dbmsplts.sql 由catproc.sql 运行创建DBMS_TTS 程序包 如果可移动的表空间集为自包含,则函数DBMS_TTS.ISSELFCONTAINED 返回TRUE 否则 返回FALSE

41

十六、管理口令安全性和资源
1、配置文件 1) 配置文件是下列口令和资源限制的命名集合 口令过期和失效 口令历史记录: 检查新口令,确保在指定的时间长度内或指定的口令更改次 数内不重新使用此口令 口令复杂性校验:检查口令的复杂性,验证其复杂性足以阻止试图通过猜测 口令闯入系统的入侵者 帐户锁定 C P U 时间 I/O 操作 空闲时间 连接时间 内存空间仅用于MTS 的SQL 专用区域 并发会话 2) 配置文件的用途 限制用户执行某些需要大量资源的操作 确保在用户会话空闲一段时间后将用户从数据库注销 对相似的用户启用组资源限制 容易为用户分配资源限制 管理大型、复杂的多用户数据库系统中的资源使用 控制口令的使用 3) 创建配置文件-----口令设置 CREATE PROFILE grace_5 LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNLIMITED PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_TIME 30 PASSWORD_VERIFY_FUNCTION verify_function PASSWORD_GRACE_TIME 5; 语法: CREATE PROFILE profile LIMIT [FAILED_LOGIN_ATTEMPTS max_value]: [PASSWORD_LIFE_TIME max_value] [ {PASSWORD_REUSE_TIME |PASSWORD_REUSE_MAX} max_value] [ACCOUNT_LOCK_TIME max_value] [PASSWORD_GRACE_TIME max_value] [PASSWORD_VERIFY_FUNCTION {function|NULL|DEFAULT} ] FAILED_LOGIN_ATTEMPTS:指定在锁定帐户之前,试图登录用户帐户的失败次数 PASSWORD_LIFE_TIME:限制使用同一口令用于验证的天数,如果在此期限内不更 改口令,则口令将过期而此后的连接将被拒绝。 PASSWORD_REUSE_TIME:指定天数。此天数过后才能重新使用口令。如果将 PASSWORD_REUSE_TIME 设置为整数值,则必须将PASSWORD_REUSE_MAX

42

设置为UNLIMITED PASSWORD_REUSE_MAX:在重新使用当前口令之前,指定需要更改口令的次数。如 果将PASSWORD_REUSE_MAX 设置为整数值,则必须将 PASSWORD_REUSE_TIME 设置为UNLIMITED PASSWORD_LOCK_TIME:在指定的连续若干次登录尝试失败后,指定帐户将被锁定 的天数 PASSWORD_GRACE_TIME:指定宽限期开始后的天数,在此期间发出警告并允许登 录,如果在宽限期内未更改口令则口令失效 通过显式设置用户口令失效,可将用户的帐户状态改为EXPIRED 。即用 户登录时帐户进入宽限期。 PASSWORD_VERIFY_FUNCTION:允许将PL/SQL 口令复杂性校验脚本作为变量传递 给CREATE PROFILE 语句 4) 创建配置文件----管理资源 命令: CREATE PROFILE developer_prof LIMIT SESSIONS_PER_USER 2 CPU_PER_SESSION 10000 IDLE_TIME 60 CONNECT_TIME 480; 语法: CREATE PROFILE profile LIMIT [SESSIONS_PER_USER max_value] [CPU_PER_SESSION max_value] [CPU_PER_CALL max_value] [CONNECT_TIME max_value] [IDLE_TIME max_value] [LOGICAL_READS_PER_SESSION max_value] [LOGICAL_READS_PER_CALL max_value] [COMPOSITE_LIMIT max_value] [PRIVATE_SGA max_bytes] CPU_PER_SESSION: 总CPU 时间(以百秒为单位) SESSIONS_PER_USER: 每个用户名所允许的并发会话数 CONNECT_TIME: 用去的连接时间(以分钟为单位) IDLE_TIME: 非活动时间长度(以分钟为单位) LOGICAL_READS_PER_SESSION: 数据块数(物理读取和逻辑读取 PRIVATE_SGA:SGA 的专用空间(以字节为单位,仅用于MTS) CPU_PER_CALL: 每个调用的CPU 时间(以百秒为单位) LOGICAL_READS_PER _CALL:每个调用可以读取的数据块数 5) 启用资源限制:ALTER SYSTEM SET RESOURCE_LIMIT=TRUE; 6) 相关数据字典:DBA_USERS;DBA_PROFILES 7) 删除配置文件 DROP PROFILE developer_prof CASCADE; CASCADE 从被分配了配置文件的用户处撤消配置文件(Oracle 服务器自动将 DEFAULT 描述文件分配给这些用户。指定此选项以删除当前分配给用户的配置文 件) 。 2、DEFAULT 描述文件

43

创建数据库时,Oracle 服务器自动创建DEFAULT 描述文件。没有被显式分配特定配置 文件的用户遵从DEFAULT 描述文件的所有限制。DEFAULT 描述文件的所有限制最初为无限 制

十七、管理用户

1、创建新用户:数据库验证 命令: CREATE USER peter IDENTIFIED BY my1stson DEFAULT TABLESPACE data TEMPORARY TABLESPACE temp QUOTA 15m ON data PASSWORD EXPIRE; 语法: CREATE USER user IDENTIFIED {BY password | EXTERNALLY} [ DEFAULT TABLESPACE tablespace ] [ TEMPORARY TABLESPACE tablespace ] [ QUOTA {integer [K | M ] | UNLIMITED } ON tablespace [ QUOTA {integer [K | M ] | UNLIMITED } ON tablespace ] ...] [ PASSWORD EXPIRE ] [ ACCOUNT { LOCK | UNLOCK }] [ PROFILE { profile | DEFAULT }] EXTERNALLY:指定通过操作系统验证用户 external_name :全局验证用户 QUOTA :定义表空间tablespace 中允许用户拥有对象所具有的最大空间,可将限额定

44

义为integer 字节或千字节和兆字节。 关键字UNLIMITED 用于指定用户拥有的对象可使用 表空间内的全部可用空间。缺省情况下用户在任何表空间上都没有限额 PASSWORD EXPIRE: 强制用户在使用SQL Plus 登录到数据库时重置口令(该选项仅在 用户通过数据库进行验证时有效) 2、创建新用户:操作系统验证 OS_AUTHENT_PREFIX=OPS$ 使验证用户更为灵活既。可通过操作系统进行验证, 也可通过Oracle 服务器进行验证 CREATE USER ops$user IDENTIFIED BY password ... 登录到运行Oracle 服务器的计算机上的用户无须提供口令,如果用户从远程 客户端连接。则可提供口令以实现连接 设置另一个初始化参数REMOTE_OS_AUTHENT=TRUE,指定用户可通过远程操作系统 进行验证。缺省值FALSE 表示用户只能通过运行Oracle 服务器的计算机进行验 证。 3、相关数据字典 DBA_USERS:DBA_TS_QUOTAS

十八、管理权限
1、系统权限 1) 概述: 每个系统权限都使用户可以执行特定的数据库操作或一类数据库操作。 这些操作包括创 建、删除和改变表、视图、回退段和过程。有大约126 种系统权限 2) 系统权限可按如下分类 启用系统范围内操作的权限,如CREATE SESSION ,CREATE TABLESPACE 启用管理用户自己方案方案中对象的权限,如CREATE TABLE 启用管理任何方案中对象的权限,如CREATE ANY TABLE GRANT 命令向用户或用户组添加权限 REVOKE 命令删除权限 3) 系统权限: 示例

45

没有CREATE INDEX 权限 诸如CREATE TABLE 、CREATE PROCEDURE 或CREATE CLUSTER 等权限包括删除这些 对象 CREATE TABLE 包括CREATE ANY INDEX 和ANALYZE 命令。 用户必须有表空间的限额, 或必须授予UNLIMITED TABLESPACE 权限 无法将UNLIMITED TABLESPACE 授予角色 若要截断表,则必需有DROP ANY TABLE 权限 4) 把权限赋给用户 命令: GRANT CREATE SESSION TO scott WITH ADMIN OPTION; 语法: GRANT {system_priv|role} [, {system_priv|role} ]... TO {user|role|PUBLIC} [, {user|role|PUBLIC} ]... [WITH ADMIN OPTION] PUBLIC 将系统权限授予所有用户 WITH ADMIN OPTION 使被授予者进一步将权限或角色授予其他用户或角色授予系 统权限 5) SYSDBA 和SYSOPER SYSOPER: STARTUP SHUTDOWN ALTER DATABASE OPEN | MOUNT ALTER DATABASE BACKUP CONTROLFILE ALTER TABLESPACE BEGIN/END BACKUP RECOVER DATABASE

46

ALTER DATABASE ARCHIVELOG RESTRICTED SESSION SYSDBA: SYSOPER privileges WITH ADMIN OPTION CREATE DATABASE RECOVER DATABASE UNTIL 6)、口令文件验证 检查是否已创建口令文件; 如果没有, 则使用ORAPWD创建 检查初始化参数REMOTE_LOGIN_PASSWORD_FILE 已设置为EXCLUSIVE 数据库管理员可通过授予SYSOPER 或SYSDBA 系统权限, 将用户添加到口令文 件 查看V$PWFILE_USERS 以显示已授予SYSDBA 或SYSOPER 权限的用户 相关数据字典:DBA_SYS_PRIVS 视图显示在数据库级别授予角色和用户的所 有系统权限。而SESSION_PRIVS 视图仅显示会话的当前权限 7)、系统权限限制 O7_DICTIONARY_ACCESSIBILITY = TRUE 还原为Oracle7 的行为 缺省值为TRUE SELECT ANY TABLE 权限允许访问其它方案中的视图和表,但不允许选择字典 对象。如果参数设置为缺省值TRUE, 则允许访问SYS 方案中的对象Oracle7 行。如果参数设置为FALSE, 则允许访问其它方案中对象的系统权限将无法 访问字典方案中的对象。 8)、撤消系统权限 REVOKE CREATE TABLE FROM karen; REVOKE {system_priv|role} [, {system_priv|role} ]... FROM {user|role|PUBLIC} [, {user|role|PUBLIC} ]... REVOKE 命令只能撤消已使用GRANT 命令直接授予的权限 假设: 使用GRANT admin OPTION 将对象权限SELECT 授予USER 1 USER 1 将EMP 上的SELECT 权限授予USER 2 结果:以后撤消USER 1 的SELECT 权限该撤消不会级联到USER 2 2、对象权限 每个对象权限都使用户可以在特定的对象(如表、视图、序列、过程、函数或 程序包)上执行特定的操作。 1)授予对象权限 GRANT UPDATE(first_name, salary) ON employee TO karen WITH GRANT OPTION; WITH GRANT OPTION 选项不能用于将权限授予角色 假设: 使用GRANT OPTION 将对象权限SELECT 授予USER 1 USER 1 将EMP 上的SELECT 权限授予USER 2 结果:以后撤消USER 1 的SELECT 权限该撤消也被级联到USER 2 3) 相关的数据字典:DBA_TAB_PRIVS,DBA_COL_PRIVS 6、 审计

47

1)启用和禁用数据库审计 AUDIT_TRAIL = value DB 启用审计并将所有审计记录定向到数据库审计线索(SYS.AUD$) OS 启用审计并将所有审计记录定向到操作系统审计线索,如果操作系统允许 NONE 禁用审计,这是缺省值 2)相关数据字典: 查看审计选项:ALL_DEF_AUDIT_OPTS:缺省审计选项 DBA_STMT_AUDIT_OPTS:语句审计选项 DBA_PRIV_AUDIT_OPTS:权限审计选项 DBA_OBJ_AUDIT_OPTS:方案对象审计选项 查看审计结果: DBA_AUDIT_TRAIL:所有审计线索项 DBA_AUDIT_EXISTS:AUDIT EXISTS/NOT EXISTS 的记录 DBA_AUDIT_OBJECT:关于方案对象的记录 DBA_AUDIT_SESSION:所有的连接和断开项 DBA_AUDIT_STATEMENT:语句审计记录

十九、管理角色
1、角色的优点 不为任何人所有也不存在于任何方案中 可以撤消对象权限而不导致级联撤消 可启用和禁用角色以暂时打开和关闭权限 2、创建角色 CREATE ROLE role [NOT IDENTIFIED | IDENTIFIED {BY password | EXTERNALLY }] NOT IDENTIFIED 表明当启用该角色时,不需要进行验证 IDENTIFIED 表明当启用该行时,需要进行验证 BY password 提供用户在启用角色时,必须指定的口令 EXTERNALLY 表明在启用该角色之前,用户必须由外部服务,例如操作系统或 第三方服务授权 3、缺省角色 用户可以有许多分配的角色缺省角色是用户登录时自动启用的角色的子集缺省情况 下登录时启用分配给用户的所有角色使用ALTER USER 命令可以限制用户的缺省角色 建立缺省角色 ALTER USER scott DEFAULT ROLE hr_clerk, sales_clerk; ALTER USER scott DEFAULT ROLE ALL; ALTER USER scott DEFAULT ROLE ALL EXCEPT hr_clerk; ALTER USER scott DEFAULT ROLE NONE; 对于需要用口令验证的角色当该角色作为缺省角色时不需要口令 4、启用和禁用角色 SET ROLE hr_clerk; SET ROLE sales_clerk IDENTIFIED BY commission; SET ROLE ALL EXCEPT sales_clerk; SET ROLE NONE; 不能在存储过程中启用角色 5、显示角色信息 DBA_ROLES:数据库中存在的所有角色 DBA_ROLE_PRIVS:授予用户和角色的角色

48

ROLE_ROLE_PRIVS:授予角色的角色 DBA_SYS_PRIVS:授予用户和角色的系统权限 ROLE_SYS_PRIVS:授予角色的系统权限 ROLE_TAB_PRIVS:授予角色的表权限 SESSION_ROLES:用户当前已启用的角色

二十、使用本国语言支持
1、概况: 目前Oracle 支持大约45 种语言60 个地域60 个语言学上的分类和许多编码字符集 当客户机和服务器使用不同的字符集时,Oracle 服务器自动处理字符集的转换 2、不同类型的编码方案 单字节字符集: 在单字节字符集中, 每个字符只占一个字节单字节。 7 位编码方案可以 定义多达128 个字符。单字节8 位编码方案可以定义多达256 个字符。 7 位字符集:美国7 位ASCII 码(US7ASCII) 8 位字符集:西欧ISO 8859-1 码(WE8ISO8859P1) 西欧8 位EBCDIC 代码页500 码(WE8EBCDIC500) 西欧8 位DEC 码(WE8DEC) 宽度可变的多字节字符:在多字节字符集中,每个字符以一个或多个字节表示。多字节 字符集通常用于支持亚洲语言。 日文扩展UNIX 代码(JEUC) 中文GB2312-80 (CGB2312-80) 宽度固定的多字节字符集:宽度固定的字符集提供类似于多字节字符集的支持,只是采 用每个字符的字节数固定的格式。 16 位日文JA16EUCFIXED 码JA16EUC 码的宽度固定的子集 16 位日文JA16SJISFIXED 码JA16SIJS 码的宽度固定的子集 Unicode (UTF8, AL24UTFFSS):Unicode 是一种全球字符编码标准,可以代表计算机中 使用的所有字符,包括技术符号和出版用字符。 Unicode 全套字符可由多种不同的编码格式代表 UCS2 (通用字符集两位字节形式)是一种两位字节、宽度固定的格式 UTF8 (通用字符集转换格式)是一种多字节宽度可变的格式UCS2 和UTF8 对相 同的字符指令系统编码Unicode 1.1 或者Unicode 2.0 Oracle7 采用按UTF8 格式编码的Unicode 1.1 (字符集AL24UTFFSS) Oracle8 另外提供了按UTF8 格式编码的Unicode 2.0 (字符集UTF8)。 UTF8 的优点是包括使用相同单字节编码方案的ASCII 码 3、数据库字符集和国家字符集 CREATE DATABASE 语句包含CHARACTER SET 子句和附加可选子句。 NATIONAL CHARACTER SET, 用以声明要作为数据库字符集和本国字符集使用的字符集。创建数据库后,便不能 更改这两个字符集中的任何一个。如果不存在NATIONAL CHARACTER SET 子句,本国字符 集将缺省为数据库字符集

49

4、NLS 初始化参数 初始化参数NLS_LANGUAGE定义语言相关惯例值,例如 Oracle 消息所使用的语言 日期和月份名称及其缩写所使用的语言 a.m p.m A.D. 和B.C 的语言等价物所使用的符号 缺省的字符数据排序顺序 初始化参数NLS_TERRITORY 定义地域相关惯例值,其中包括 缺省日期格式 十进制字符和组分隔符 本地货币符号 ISO 货币符号 ISO 周数计算 一周起始日 5、相关语言和地域缺省值 NLS_LANGUAGE:AMERICAN NLS_DATE_LANGUAGE:AMERICAN-----显式更改日期、月份名及其缩写和其它日期格式元素 的拼写值所使用的语言 NLS_SORT:BINARY--------更改Oracle 服务器用于排序字符值的文字排序顺序 NLS_TERRITORY:AMERICA NLS_CURRENCY:$---------显式指定新的本地货币符号 NLS_ISO_CURRENCY:AMERICA---------显式指定应使用ISO 货币符号的地域 NLS_DATE_FORMAT:DD-MON-YY----------显式指定新的缺省日期格式值必须是日期格 式模型 NLS_NUMERIC_CHARACTERS:,. ----------显式指定新的十进制字符和组分隔符 6、指定会话与语言相关的行为 环境变量: NLS_LANG=<语言>_<地域>.<字符集> 7、SQL 函数中的NLS 参数

50

数字格式掩码元素 D 用于十进制分隔符 G 用于组千位分隔符 L 用于本地货币符号 C 用于本地ISO 货币符号 U 用于欧元的双重货币符号 日期格式掩码元素 RM rm 用于罗马月份数字 IW 用于ISO 星期号 IYYY IYY IY 和I 用于ISO 年份 SELECT TO_CHAR(hiredate,‘DD.MON.YYYY’,‘NLS_DATE_LANGUAGE=GERMAN’) FROM emp; SELECT ename, TO_CHAR(sal,‘9G999D99’,‘NLS_NUMERIC_CHARACTERS=‘‘,.’’’) FROM emp; 8、使用NLS 导入和装载数据 导入过程中将数据由NLS_LANG 转换为数据库字符集 LOADER:– 常规: 将数据转换为由NLS_LANG 指定的会话字符集 – 直接: 直接将数据转换为数据库字符集 在导入中数据自动转换为由NLS_LANG 参数确定的指定会话的字符集。数据转换为会话字 符集后,接着转换为数据库字符集。这意味着NLS_LANG 必须设置为导出文件的字符集。SQL* 加载程序也具有将数据从数据文件字符集转换为数据库字符集的能力 9、获取有关字符集的信息 NLS_DATABASE_PARAMETERS 获取有关NLS 设置的信息 NLS_INSTANCE_PARAMETERS:显示初始的NLS设置 NLS_SESSION_PARAMETERS:显示当前会话的NLS设置 V$NLS_VALID_VALUES V$NLS_PARAM ETERS

51



热文推荐
猜你喜欢
友情链接: 幼儿教育 小学教案 初中教案 高中教案 职业教育 成人教育