首页 oracle_DBA_教程

oracle_DBA_教程

举报
开通vip

oracle_DBA_教程下载 第一部分 数据库体系结构 第1章 Oracle体系结构 每一种新版本的 Oracle,都要增加一些新的性能或对原有性能进行某些改善。在 Oracle8i 中,除了增加许多新的性能外,还改进了原版本的许多功能。同时 Oracle增加了许多新的工具 以简化数据库管理任务。在本书的第一部分,你不仅能看到对 Oracle体系结构及其实现的综合 介绍,而且还将看到创建 Oracle数据库所需要采取的步骤。 本书的第二部分介绍管理 Oracle数据库的具体方针,例如回滚段的管理及口令的建立。第 三部分描述...

oracle_DBA_教程
下载 第一部分 数据库体系结构 第1章 Oracle体系结构 每一种新版本的 Oracle,都要增加一些新的性能或对原有性能进行某些改善。在 Oracle8i 中,除了增加许多新的性能外,还改进了原版本的许多功能。同时 Oracle增加了许多新的工具 以简化数据库管理任务。在本书的第一部分,你不仅能看到对 Oracle体系结构及其实现的综合 介绍,而且还将看到创建 Oracle数据库所需要采取的步骤。 本书的第二部分介绍管理 Oracle数据库的具体方针,例如回滚段的管理及口令的建立。第 三部分描述 Oracle在网络环境中的使用方法。最后一部分介绍最常用的 SQL命令的语法,并含 有一个不同 Oracle版本初始化参数变化的导引。 这一部分提供 Oracle体系结构的基本框架和创建数据库所要遵循的步骤。第 1章向你介绍 Oracle数据库的组件和实现其用途的基本原理。管理 Oracle数据库需要了解这些不同组件之间 的相互关系、它们在框架中的位置以及如何以最佳方式定制系统以满足用户需要。总之,本 章宛如其他章节深入讨论数据库管理的一个向导。 1.1 数据库概述及实例 要了解Oracle体系结构,必须先了解两个基本概念:数据库和实例。下面两节将详细描述 这两个基本概念及其在 Oracle中的实现。 1.2 数据库 数据库 (database)是一个数据集合。 Oracle能够提供按照一致性方式定义的定义模型 (称作 关系模型 )存储和访问数据的方法,因此 Oracle被认为是一种关系数据库管理系统 (RDBMS)。 对“数据库”一词的大多数引用不仅是指物理的数据,也指本章中描述的物理、内存及进程 对象的组合。 数据库中的数据存储在表中。关系表由列 (column)定义,并赋予一个列名。数据在表中以 行(row)的方式存储。表可以相互关联,数据库可用来实施这些关联。表结构的一个样例如图 1-1所示。 除了按关系格式存储数据外, Oracle(例如Oracle 8)支持面向对象 (OO)的结构(如抽象数据 类型和方法 )。对象既可以与其他对象建立关系,也能包含其他对象。如第 5章中所述,可以 用对象视图来启动面向对象的数据接口,而不必对表做任何修改。 2 第一部分 数据库体系结构 下载 表名 列名 数据行 列 图1-1 表结构样例 无论是采用关系结构还是面向对象的结构, Oracle数据库都将其数据存储在文件中。在其 内部,数据库结构提供数据对文件的逻辑映射,允许不同类型的数据分开存储。这些逻辑划 分被称作表空间。下面两小节介绍表空间和文件。 1.2.1 表空间 表空间 (tablespace)是数据库的逻辑划分,每个数据库至少有一个表空间 (称作SYSTEM表 空间)。为便于管理和提高运行效率,可以使用一些附加表空间来划分用户和应用程序。例如: USER表空间供一般用户使用, RBS表空间供回滚段使用 (有关这方面的情况在本节后面描述 )。 一个表空间只能属于一个数据库。 1.2.2 文件 每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件 (datafile)。一个数 据文件只能属于一个表空间。在 Oracle 7.2中,数据文件创建后可改变大小。创建新的表空间 需要创建新的数据文件。 数据文件一旦加入到表空间中,就不能从这个表空间中移走,也不能与其他表空间发生 联系。 如果数据库对象存储在多个表空间中,那么可以通过把它们各自的数据文件存放在不同 磁盘上来对其进行物理分割。在规划和协调数据库处理 I/O请求的方法中,数据分割是一种很 重要的工具。数据库、表空间和数据文件之间的关系如图 1-2所示。 数据库 表空间 表空间 第二表 空间 第三表 空间 数据文件 图1-2 数据库、表空间和数据文件之间的关系 下载 第1章 Oracle体系结构 3 1.3 实例 为了访问数据库中的数据, Oracle使用一组所有用户共享的后台进程。此外,还有一些存 储结构 (统称为 System Global Area,即SGA)用来存储最近从数据库查询的数据。数据块缓存 区和SQL共享池 (Shared SQL Pool)是SGA中的最大部分,一般占分配给 SGA的内存 95%以上。 通过减少对数据文件的 I/O次数,这些存储区域可以改善数据库性能。 数据库实例 (instance)也称作服务器 (server),是用来访问数据库文件集的存储结构及后台 进程的集合。一个数据库可以被多个实例访问 (这是Oracle的并行服务器选项 )。实例与数据库 之间的关系如图 1-3所示。 实例1 (SGA+进程) 实例2 (SGA+进程) 数据库文件 图1-3 Oracle中的实例和数据文件 决定实例的大小及组成的参数存储在 init.ora文件中。实例启动时需要读这个文件,并且 在运行时可以由数据库管理员修改。对该文件的任何修改都只有在下一次启动时才起作用。 实例的 init.ora文件名通常包含该实例的名字;如果一个实例名为 ORCL,则init.ora文件通常将 被命名为 initorcl.ora。另一个配置文件 config.ora存放一些在数据库创建后就不再改变的变量 值(如数据库的块大小 )。实例的 config.ora文件名通常也包含该实例的名字;如果实例名字为 ORCL,则config.ora文件一般将命名为 configorcl.ora。为便于使用 configorcl.ora设置值,在实 例的init.ora文件中,该文件必须通过 IFILE参数作为包含文件列出。 1.4 数据库内部结构 通过上面对数据库及实例的介绍, Oracle数据库结构可分为三个范畴: · 数据库内部的结构 (如表)。 · 存储区内部的结构 (包括共享存储区和进程 )。 · 数据库外部的结构。 以下几小节将对每一范畴内的每个元素进行介绍。这些范畴按上述顺序给出。 下一节将对数据库内部结构的元素进行介绍,这些元素包括: · 表、列、约束条件、数据类型(含抽象数据类型)。 · 分区与子分区。 · 用户与模式。 · 索引、簇和散列簇。 · 视图。 4 第一部分 数据库体系结构 下载 · 序列。 · 过程、函数、软件包和触发器。 · 同义词。 · 权限及角色。 · 数据库链接。 · 段、盘区和块。 · 回滚段。 · 快照与显形图。 下面对上述每一种元素进行详细介绍。 1.4.1 表、列和数据类型 表是数据在一个 Oracle数据库中的存储机制,如图 1-1所示,它包含一组固定的列。表中 的列描述该表所跟踪的实体的属性,每个列都有一个名字及各自的特性。 列由两部分组成:数据类型 (datatype)和长度 (length)。对于使用 NUMBER数据类型的列, 可以指定列的小数位及精度特性,精度决定数值的有效位数,小数位表示数值的小数点位置。 说明为 NUMBER(9,2)的列表示该列总共有 9位数,其中 2位数在小数点右边。缺省的数值精度 为38位数,这也是 Oracle所允许的最大数值精度。 表1-1列出了可用的数据类型。 表1-1 Oracle数据类型 数据类型 描 述 CHAR NCHAR VARCHAR2 NVARCHAR2 DATE NUMBER LONG RAW LONG RAW MLSLABEL BLOB CLOB NCLOB BFILE ROWID UROWID 固定长度字符域,最大长度可达 2 000个字节 多字节字符集的固定长度字符域,长度随字符集而定,最多为2 000个字符或2 000个字节 可变长度字符域,最大长度可达 4 000个字符 多字节字符集的可变长度字符域,长度随字符集而定,最多为 4 000个字符或4 000个字节 用于存储全部日期的固定长度 (7个字节)字符域,时间作为日期的一部分存储其中。除非 通过设置 init. ora文件的 NLS_DATE_FORMAT参数来取代日期格式,否则查询时,日期以 DD-MON-YY格式表示,如 13-APR-99表示1999.4.13 可变长度数值列,允许值为 0、正数和负数。 NUMBER值通常以 4个字节或更少的字节存 储 可变长度字符域,最大长度可到 2GB 表示二进制数据的可变长度字符域,最长为 2 000个字节 表示二进制数据的可变长度字符域,最长为 2GB 只用于 Trusted Oracle,这个数据类型每行使用 2至5个字节 二进制大对象,最大长度为 4GB 字符大对象,最大长度为 4GB 多字节字符集的 CLOB数据类型,最大长度为 4GB 外部二进制文件,大小由操作系统决定 表示RowID的二进制数据, Oracle 8 RowID的数值为 10个字节,在 Oracle7中使用的限定 RowID格式为6个字节 用于数据寻址的二进制数据,最大长度为 4 000个字节 除了表 1-1所列的数据类型外, Oracle还提供可作为 ANSI 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 数据类型的替代类型。对于 ANSI数据类型 CHARACTER及CHAR,使用 Oracle的CHAR数据类型;对于 ANSI数据类型 CHARACTER VARYING及CHAR VARYING,使用 Oracle的VARCHAR2数据类型;对于 下载 第1章 Oracle体系结构 5 ANSI NUMERIC、DECIMAL、DEC、INTEGER、INT和SMALLINT数据类型,使用 Oracle 的NUMBER数据类型;对于 ANSI标准的 FLOAT、REAL和DOUBLE PRECISION数据类型, Oracle支持PL/SQL中的一个 FLOAT数据类型。 从Oracle 8起可以创建用户自己的抽象数据类型。也可以使用特定的 REF数据类型,这些 REF数据类型引用数据库其他地方的行对象 (参见第5章)。 用户SYS和SYSTEM所拥有的表被称为数据字典表 (data dictionary table),数据字典表提 供一个数据库用来管理自己的系统目录。数据字典由 Oracle提供的一组目录脚本文件创建。每 当安装或升级一个数据库时,都需要使用创建或修改数据字典表的的脚本文件。当在数据库 中安装一个新的选项时,可能要运行另外一些附加的目录脚本文件。 表通过其共用的列相互关联。可以要求数据库通过引用完整性 (referential integrity)实施这 些关联。如果使用 Oracle面向对象的特征,就可以通过称作对象 ID(OID)的内部引用使行相互 关联。引用完整性通过约束条件在数据库级实施。 1.4.2 约束条件 可以在一个表的列上创建约束条件 (constraint),当一个约束条件应用于一个表时,表中的 每一行都必须满足约束条件定义所规定的条件。在下面的 create table命令中,表 EMPLOYEE 就是由多个约束条件创建的。 首先,表被赋予了表名 (EMPLOYEE),表中的每个列都有各自的列名 (EmpNo、Name等), 每个列都有指定的数据类型及长度。 EmpNO列被定义为 NUMBER数据类型,没有小数位 (等 同于一个整数 )。Name列被定义为 VARCHAR2(40),表示 Name是一个可变长度列,其最大长 度可以达到 40个字符。 表中的主键 (Primary Key)是表中的一个列或多个列,它们决定表中每个行的唯一性,数 据库中的主键列必须是非空值 (NOT NULL),表示存储在表中的每一行必须有这个列的一个 值;它不能为空值 (NULL)。非空值约束条件可用于表中的其他列 (如上例中的 Name列)。 一个列可以有一个 DEFAULT(缺省 )约束条件,这种约束条件使得在往表中插入一个行但 没有为列指定值时生成一个值。 CHECK(检查 )约束条件确保指定列中的值符合一定的条件 (如本例中, Salary列的值小于 1000000)。CHECK列约束条件不能引用一个独立表。非空值约束条件被数据库看作是一个 CHECK约束条件。 另一个约束条件是 UNIQUE(唯一性 ),用于保证应具有唯一性而又不是主键的一部分的那 些列的唯一性。在这个例子中, Soc_Sec_Num列拥有 UNIQUE约束条件,所以表中的每个记 录都必须有该列的唯一值。 6 第一部分 数据库体系结构 下载 外键(foreign key)约束条件规定表间的关系性质。一个表的外键引用数据库中此前定义的 主键。 例如,如果表 DEPT有主键 DeptNo,则DEPT中的 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 将列出全部有效的 DeptNo值。上述 程序段中所示的 E M P L O Y E E 表中的 D e p t N o 列,引用了 D E P T. D e p t N o 列。通过指定 EMPLOYEE.DeptNo作为 DEPT.DeptNO的一个外键,可以保证只有 DEPT表中已存在 DeptNo 值时才能输入到 EMPLOYEE表中。 数据库的约束条件有助于确保数据的引用完整性。引用完整性保证数据库中的所有引用 都有效且全部约束条件都得到满足。 1.4.3 抽象数据类型 在Orcle8中,你可以定义自己的数据类型,例如,可以创建一个包括个人名字的多个部分 —名、姓、中名首字母、后缀等—的数据类型作为一个单独的数据类型。 NAME_TY数 据类型的创建如下: 上面清单中的 creat type命令对 Oracle8有效。可以用用户定义的数据类型来 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 应用程序 中对数据的使用。例如,你可以在任何地方像使用其他数据类型一样来使用 NAME_TY数据 类型。在下面的例子中,对 EMPLOYEE表进行重建;这次 EMPLOYEE.Name列的数据类型是 NAME_TY数据类型: 如上面NAME_TY创建语句中所示,表 EMPLOYEE中的Name列包含四个属性。如果用户 对NAME_TY数据类型定义一些方法 (定义一些对数据类型属性起作用的程序 ),就可以把这些 方法应用于 EMPLOYEE表中 Name列的值。有关抽象数据类型及其他面向对象结构的使用和 管理例子,请参见第 5章。 1. 构造方法 当你创建一个抽象数据类型时, Oracle就自动创建一个构造方法来支持插入到使用这种数 据类型的那个列。如 NAME_TY数据类型,其构造方法被命名为 NAME_TY,这个方法的参数 是数据类型的属性。有关如何使用构造方法的例子,请参见第 5章。 2. 对象表 对象表是一种其行完全由对象组成的表,它们全部拥有对象 ID(OID)值。可以通过 create t a b l e命令来创建一个对象表。例如,可以利用下面列出的 create table 命令创建一个基于 下载 第1章 Oracle体系结构 7 NAME_TY数据类型的 NAME表。 然后就可以创建从其他表到 NAME对象表中行对象的引用,如果创建对 NAME行对象的 引用,就可以通过引用来选择 NAME行而不是直接查询 NAME表。有关通过对象视图使用行 对象和模拟行对象的例子,请参见第 5章。 3. 嵌套表和可变数组 嵌套表是一个表中的一个列 (或多个列 ),它含有表中一个行的多个值。例如,如果你有一 个人的多个地址,就可以在表中创建一个行,该行含有 Address列的多个值,但只有一个值可 用于其他列。嵌套表可以含有多个列和无限的行。称作可变数组的另一种集合器在其可含有 的行数方面受到限制。 对如何使用嵌套表及可变数组的深入讨论超越了本书的范围;请参见《 Oracle8完全参考 手册》中有关这些结构及其相关语法的详细例解。通常,嵌套表在数据管理上可提供比可变 数组更多的灵活性 (特别是在 Oracle8.0中,由于只能通过 PL/SQL来选择可变数组值 )。嵌套表 及可变数组都需要修改访问数据所使用的 SQL语法。一般来说,可以通过相关的关系表来模 拟嵌套表中的数据关系。 1.4.4 分区和子分区 随着表的增大,对它的维护也更加困难。在非常大的数据库中,可以通过把一个大表的 数据分成多个小表来大大简化数据库的管理活动。例如,可以根据表中的部门或产品值把一 个表分成独立的小表。 在Oracle8中,当把一个大表分成若干小表时,可以规定一些范围供数据库使用。这些称 作分区 (partition)的小表比大表的管理更加简单。例如,可以截断 (truncate)一个分区的数据而 不截断其他分区的数据。 Oracle将把分区表看作一个大表,但可以把这些分区作为一些独立的 对象来管理。 分区还可以改善应用性能。由于优化程序将知道作为分区基础使用的范围值,所以它在 表访问时就可以只使用特定的分区直接查询。因为在查询进程中只浏览少量数据,自然就改 善了查询性能。 除了表外,也可以对索引进行分区,一个分区索引的分区中的值范围可以与索引表使用 的范围相匹配,这种情况的索引叫作局部索引 (local index)。如果索引分区不能与表分区的值 范围相匹配,则该索引就叫作全局索引 (global index)。 在Oracle8i中,能够细分分区,创建子分区。例如,可以先根据一组值分割一个表,然后 再根据另一种分割方法分割分区。有关分区、子分区、局部索引和全局索引的管理问题,请 参见第12章。 1.4.5 用户 用户帐号虽然不是数据库中的一个物理结构,但它与数据库中的对象有着重要的关系, 这是因为用户拥有数据库的对象。用户 SYS拥有数据字典表,这些表存储了数据库中其他结 构的所有信息;用户 SYSTEM拥有访问数据字典表的视图,这些视图供数据库中其他用户 使用。 8 第一部分 数据库体系结构 下载 当在数据库中创建对象时,必须是在用户帐号下进行。可以对每一个用户帐号进行自定 义,以便将一个特定的表空间作为他的缺省表空间使用。 可以把数据库帐号与操作系统帐号连在一起,使用户能从操作系统直接访问数据库,而 不必既输入操作系统的口令,又输入数据库的口令。这样,用户就可以访问其拥有的对象或 被授权访问的对象。 1.4.6 模式 用户帐号拥有的对象集称为用户的模式 (schema)。可以创建不能注册到数据库的用户帐号。 这样的用户帐号提供一种模式,这种模式可以用来保存一组同其他用户模式分开的数据库对 象。 1.4.7 索引 在关系数据库中,一个行的物理位置无关紧要,除非数据库需要找到它。为了能找到数 据,表中的每一行均用一个 RowID来标识。 RowID告诉数据库这一行的准确位置 (指出行所在 的文件、该文件中的块、该块中的行地址 )。 注意 索引结构表没有传统的Oracle RowID,不过,其主键起一个逻辑 RowID的作用。 索引是一种供服务器在表中快速查找一个行的数据库结构。索引有三种形式:簇索引、 表索引和位映射索引。簇索引把簇关键字值存储在簇中;下面一小节将对簇的用途进行详细 描述。表索引除了确定行的物理位置 (RowID)外,还存储表的行值。位映射索引是表索引的一 种特殊形式,用于支持对大表进行查询 (这些大表很少有不同值的列 )。 每一个索引条目都由一个键值和 RowID组成。可以索引一个列或一组列, Oracle用B*树 (B*-tree)机制存储索引条目,以保证用最短路径访问键值。当一个查询访问索引时,就能找 到与查询条件相匹配的索引条目。与条目相匹配的 RowID值向Oracle提供相关行的物理位置, 以减轻定位数据所需要的 I/O负担。 索引既可以改善数据库性能,又可以保证列值的唯一性。当 create table 命令中规定有 UNIQUE或PRIMARY KEY约束条件子句时, Oracle就自动创建一个索引。也可以通过 create index命令来手工创建自己的索引。有关 create index命令的语法和选项的全部信息,请参见附 录A。 可以在表中的一列或多列上创建索引。如果使用前面给出的 EMPLOYEE表例子, Oracle 将自动在 EmpNo及Soc_Sec_Num列上创建唯一索引,因为这两列上分别声明了 PRIMARY KEY及UNIQUE。撤消一个索引将不影响先前进行过索引的表中的数据。 在Oracle7.3中,可以创建位映射索引 (bitmap index)。如第 12章所述,当数据的可选择性 很小(列中极少有不同值时 ),位映射索引就非常有用。位映射索引可加快搜索,这样无选择性 的列就能用作查询中的约束条件。位映射索引对于完全静态的数据非常有效。 在Oracle8中,可以用与存储顺序相反 (reverse)的数据创建索引。例如,数值是“ 1002” 的条目可以按“ 2001”创建索引。在创建索引之前将数据顺序反转可以使数据在索引中有更 好的分布。由于反转索引将数值颠倒,反转顺序索引只能用于执行等值查询,例如: 下载 第1章 Oracle体系结构 9 如果正在执行某一范围内的搜索,如: 那么反转顺序索引就无法有效地满足要求,因为相邻的值并不相近存储。由于连续的行 在索引中没有存储在一起,所以若对反转关键字索引的范围进行查询,就必须读取比传统索 引要多的块。 在Oracle8中,能够创建索引组织表。在索引组织表 (通过create table命令中的 organization index子句规定 )中,整个表存储在一个索引结构中,数据按表中的键存储。要创建一个索引组 织表,就必须为表规定一个主键约束条件。索引组织表没有行的 RowID(行标识 ),Oracle将把 主键值用作逻辑 RowID值。在Oracle8i中,可以对一个索引组织表创建二级索引。 1.4.8 簇 经常被同时访问的表在物理位置上可以存储在一起。为了将它们存储在一起,就要创建 一个簇 (cluster)来管理这些表。表中的数据一起存储在簇中,从而最小化必须执行的 I/O次数, 改善系统性能。 表中相关的列称为簇键 (cluster key)。簇键用一个簇索引(cluster index)来进行索引;对于簇 中的多个表,簇键值只存储一次。在把任何行插入簇的表中之前,都必须先创建一个簇索引。 对于经常频繁一起查询的表说,使用簇比较方便。在簇中,来自不同表的行存储在同一 个块中;因此同将表分开存储相比,连接这些表的查询就可能执行更少的 I/O。不过,与对非 簇表的相同操作比较,簇表的插入、更新和删除性能要差很多。在聚簇表之前,要判断共同 查询这些表的频率。如果这些表总是一起查询,就要考虑把它们合并成一个表而不是聚簇两 个表。 1.4.9 散列簇 散列簇(hash cluster)是簇的另一种形式。为确定行应存储的物理位置,对行的簇键使用散 列函数(hashing function)。散列簇可以大大提高等值查询的效率,例如下列查询: 在这个例子中,按 EmpNo列的准确匹配对 EMPLOYEE表进行查询。如果 EMPLOYEE表 是散列簇的一部分, EmpNo就是簇键的一部分,数据库就可以使用散列函数来快速确定数据 的物理位置。如果 where子句指定了一个值范围,就无法获得预期的效果,如下所示: 查找标准索引表中的一个行可能需要多次 I/O:一次 (或多次 )查找索引中的键值,另一次 从表中读取行。使用散列算法将减少等值查询时返回行所需要的 I/O次数。 1.4.10 视图 视图(view)像表一样由列组成,其查询方式与表相同。但是视图中没有数据。从理论上讲, 可以把视图看作是覆盖一个或多个表的“蒙版”,视图中的列可以在一个或多个基本表中找到。 10 第一部分 数据库体系结构 下载 所以视图不使用物理存储位置来存储数据。视图的定义 (包括作为基础的查询、列安排、授予 的权限)存储在数据字典中。 对一个视图进行查询时,视图将查询其基于的表,并且以视图定义所规定的格式和顺序 返回值。由于视图没有直接相关的物理数据,所以不能被索引。 视图经常用于对数据设置行级保密和列级保密。例如,可以授权用户访问一个视图,这 个视图只显示该用户可以访问的行,而不显示表中所有行。同样,可以通过视图限制该用户 访问的列。 对于Oracle8,可以采用对象视图在表上创建一个面向对象的层。可以使用对象视图模拟 抽象数据类型、对象 ID和引用。有关对象视图的应用实例,请参见第 5章。 对象视图 如果使用抽象数据类型,执行时可能会遇到一致性问题。访问抽象数据类型属性所使用 的语法不能用于访问正规列。因此,为了支持抽象数据类型,可能要改变 SQL企业编码标准。 在进行事务处理和对表查询时,还要记住哪个表使用了抽象数据。 对象视图为通向抽象数据类型之路架起了一座重要的桥梁。可以使用对象视图为自己的 关系数据提供一个对象关系图像。基本表不变化,但视图支持抽象数据类型定义。从数据库 管理员的观点来看,发生的是一些微小变化—就像管理数据库中其他任何表一样管理基本 表。从开发人员的观点来看,对象视图提供了对表数据对象关系的访问。有关实现和使用对 象视图的详细情况,请参见第 5章。 1.4.11 序列 序列(sequence)定义存储在数据字典中。序列通过提供唯一数值的顺序表用来简化程序设 计工作。 当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每一次查询中,序列 将产生一个按其指定的增量增长的值。序列可以是循环的,或者是连续增加的,直到指定的 最大值为止。 使用一个序列时,不保证将生成一串连续不断的值。例如,如果查询一个序列的下一个 值供insert使用,则该查询是能使用这个序列值的唯一会话。如果未能提交事务处理,则序列 值就不被插入表中,以后的 insert将使用该序列随后的值。 1.4.12 过程 过程(procedrure)是一个PL/SQL语句块,它存储在数据字典中并可被应用程序调用。你可 以使用过程存储数据库中频繁使用的应用逻辑。当执行一个过程时,其语句被作为一个整体 执行。过程不将任何值返回调用程序。 可以使用存储的过程来帮助实施数据的安全性。可以不授权用户直接访问应用程序中的 一些表,而是授权用户执行访问这些表的一个过程。当过程被执行时,它将以过程拥有者的 权限来执行。除非通过过程,否则用户就不能访问这些表。 1.4.13 函数 与过程一样,函数 (function)是存储在数据库中的代码块。其差别在于函数可以把值返回 下载 第1章 Oracle体系结构 11 调用程序。你可以建立自己的函数,并在 SQL语句中调用它们,就像执行 Oracle提供的函数一 样。 例如,Oracle提供一个 SUBSTR函数来执行字符串上的“取子串”操作,如果创建一个叫 做MY-SUBSTR的函数来执行一个自定义的取子串操作,就可以在一个 SQL命令中调用它: 如果你不拥有 MY_SUBSTR函数,则必须被授予对这个函数的 EXECUTE(执行)权限。如 果用户定义函数不改变数据库的任何行,在 SQL语句中就只能使用一个这样的函数。 1.4.14 软件包 可以使用软件包 (package)将过程及函数安排在逻辑分组中。包说明和包体都存储在数据 字典中。软件包在过程及函数所需要的管理任务中非常有用。 软件包中的不同元素可以定义为“公用”或“私有”。公用元素可以被软件包的用户使用, 私有元素则对用户是隐藏的。私有元素可以包括那些被包中其他过程调用的过程。 函数、软件包和过程的源代码被存储在数据字典表中。如果应用程序经常使用软件包, 就必须增加 S Y S T E M表空间的容量以适应数据字典容量的增长。例如在 O r a c l e财务软件 (Financial)工具中,就可能需要一个大于 250MB的SYSTEM表空间。 软件包的数量及复杂性在使用中直接影响着 SGA的SQL共享池 (Shared SQL Pool)部分的 大小。有关 SQL共享池的情况,将在本章的 1.5节“内部存储结构”中描述。 1.4.15 触发器 触发器 (trigger)是一些过程,当一个特定的数据库事件发生时就执行这些过程。可以使用 触发器来扩充引用完整性,实施附加的安全性或增强可用的审计选项。 触发器分为两种类型: · 语句触发器:对每一个触发语句触发一次。 · 行触发器:对受语句影响的表中的每一个行触发一次。 例如,语句级触发器对删除 10000行的delete(删除)命令触发一次;而行级触发器将对相同 的事务处理触发 10000次。 无论对于哪一种触发器,都能为每种触发事件类型创建 BEFORE触发器及 AFTER触发器。 触发事件包括 insert(插入)、update(更新)和delete(删除)。 如果触发器的动作代码不取决于受影响的数据,语句触发器就非常有用。例如,可以在 表上创建一个 BEFORE INSERT语句触发器,以防止在某些特定期限以外的时间对一个表进行 插入。 如果触发器动作取决于受事务处理影响的数据,行触发器就非常有用。例如,可以在表 上创建一个 AFTER INSERT行触发器来把一个新行插入一个审计表及触发器的基本表中。 对于Oracle8,可以创建 INSTEAD OF触发器。 INSTEAD OF触发器执行一个替代操作来 代替触发器的操作。也就是说,如果对表创建一个 INSTEAD OF INSERT触发器,将执行触发 器的代码且绝不会出现引起触发器执行的 insert操作。 INSTEAD OF触发器也可以应用于视图 中。如果一个视图在查询中涉及到多个表,只要用户试图通过视图更新行, INSTEAD OF触 发器就能引导 Oracle操作。 12 第一部分 数据库体系结构 下载 对于 O r a c l e 8 i,可以对系统级事件创建触发器。当发出 c r e a t e (创建 )、 a l t e r (变更 )或 delete(删除 )命令时,就可以触发被执行代码。也可以把登录、注销、数据库关闭和启动之类 的系统事件用作触发事件。有关命令语法的情况请参见附录 A中的创建触发器 (create trigger) 条目。 1.4.16 同义词 在一个分布式数据库环境中,为了完全识别一个数据库对象如表或视图,必须规定主机 名、服务器 (实例)名、对象的拥有者和对象名。具体需要多少参数根据对象的位置确定,一般 需要1至4个这样的参数。为了筛选用户的这个进程,开发者可以创建指向适当对象的同义词, 这样用户使用时只需知道同义词名即可。公用同义词由一个特定数据库的所有用户共享;私 有同义词只被数据库的各个用户帐号所有者所拥有。 例如,前面所述的 EMPLOYEE表必须由一个帐号 (例如HR)所拥有,对于同一数据库的其 他用户帐号,这个表可以作为 HR.EMPLOYEE被引用。然而,这种语法需要另一个帐号知道: H R 帐号是 E M P L O Y E E表的所有者。为避免这种情况发生,可以创建一个公用同义词 EMPLOYEE来指向 HR.EMPLOYEE,无论何时引用同义词 EMPLOYEE,它都将指向正确的 表。下列 SQL语句创建同义词 EMPLOYEE: create public synonym EMPLOYEE for HR.EMPLOYEE; 同义词提供表、视图、过程、函数、包和序列的指针,这些指针指向本地数据库或远程 数据库中的对象。指向远程数据库时需要通过使用数据库链接来完成,本章后面将对数据库 链接进行介绍。 不能为抽象数据类型创建同义词。进一步讲,当你创建同义词时, Oracle不检查这个同义 词的有效性。在创建同义词后,用户应自行测试,以保证同义词的有效性。 1.4.17 权限及角色 为访问其他帐号所拥有的对象,必须首先被授予访问这个对象的权限。一般情况下,非 所有者可以被授予对表、快照或视图的行进行 i n s e r t (插入 )、s e l e c t (选择 )、u p d a t e (更新 )、 delete(删除)的权限,也可以授予用户 select(选择)序列值和 execute(执行)过程、函数、包和抽 象数据类型的权限。由于索引或触发器只能在表操作过程中被数据库访问,所以没有针对索 引或触发器访问的权限。也以授予对目录 (对于BFILE数据类型 )的read(读)权限和对库 (由应用 代码调用的外部程序 )的execute(执行)权限。权限可以授予给某个用户或 PUBLIC,PUBLIC把 权限授予数据库中的全体用户。 可以创建角色 (role)—权限组—来简化权限管理进程。可以把一些权限授予一个角色, 而这个角色又可以被授予多个用户。由于把角色授予用户或从用户取消角色是一个简单的事 情,所以给应用程序增加一些新用户就成为一个非常容易的管理过程。 权限与角色的关系如图 1-4所示,在图 1-4a中,把对两个表的 select(选择)访问权授予四个 用户所需要的权限用线条表示;图 1-4b中的角色用于简化对权限的管理。许多权限被授予一 个角色,这个角色又被授予四个用户。在应用程序中角色可以被动态地允许或禁止。 也可以使用授予系统级权限的角色,如 create table (创建表 )。有关系统级角色将在第 5章 和第9章中详细讨论。 下载 表A 第1章 表B Oracle体系结构 13 用户1 用户2 用户3 用户4 a) 直接授予权限 表A 角色Z 表B 用户1 用户2 用户3 用户4 b) 通过角色授予权限 图1-4 权限与角色之间的关系 1.4.18 数据库链接 Oracle数据库具有引用本地数据库以外数据的能力。当需要引用这样的数据时,必须指定 远程对象的全限定名。在前面描述的同义词例子中,只是全限定名的两个部分—所有者及 表名—被指定。如果表在一个远程数据库中又该怎么办呢? 为了指定对远程数据库中一个对象的访问路径,必须创建一个数据库链接,数据库链接 既可以公用 (数据库中的所有帐号都可以使用 ),也可以私有 (只为某个帐号的用户创建 )。当创 建一个数据库链接时,必须指定与数据库相链接的帐号名、帐号的口令以及与远程数据库相 连的服务器名字。如果不指定帐号名, Oracle将使用本地帐号名和口令来建立与远程数据库的 链接。下面是创建一个名为 MY_LINK的公用链接例子: 这个例子中的链接规定,当使用这个链接时,它将打开由服务 (service)DB1指定的数据库 中的一个对话。当它在 D B 1 实例中打开一个对话时,将按用户帐号为“ H R ”、口令为 “puffinstuff”来注册。实例的服务名存储在由 SQL*Net(最新的 SQL*Net版本称为 Net8)使用的 配置文件中。服务名的配置文件称为 tnsnames.ora,它指定与每个服务名相关的主机、端口及 实例。 为使用这个链接来访问一个表,链接必须用 from子句来指定,如下例所示: 上述查询将通过 MY_LINK数据库链接来访问 EMPLOYEE表,也可以为该表创建一个同 义词,如下面的 SQL命令所示: create synonym EMPLOYEE for EMPLOYEE@MY_LINK; 请注意,数据库对象的全限定标志已被定义,其中包括通过服务名的主机和实例、通过 14 第一部分 数据库体系结构 下载 数据库链接的拥有者 (HR)和表名(EMPLOYEE)。 EMPLOYEE表的位置因而变得对终端用户完全透明。可以把 EMPLOYEE表移到一个不同 的模式或不同的数据库中。改变数据库链接的定义将把该同义词转移到新的位置。 注意 如果存储过程、包或触发器包含对一个数据库链接的引用,则必须有供 PL/SQL编译用的链接。 1.4.19 段、盘区和块 段(segment)是逻辑数据库对象的物理副本。段存储数据。例如,索引段存储与索引相关 的数据。对段的有效管理需要数据库管理员了解应用程序将使用的对象、数据如何进入这些 对象以及检索数据的方法。 由于段是一个物理实体,所以必须把它分配到数据库中的一个表空间中 (放在表空间的一 个数据文件上 )。段由称作盘区 (extent)的一些邻接的 Oracle块集合组成。一旦段中的现有盘区 不能再容纳新数据,该段将获取另外的盘区。如果需要的话,这种扩展将持续下去,直到表 空间的数据文件中没有自由空间或者已达到每个段内部的盘区最大数量为止。如果一个段中 有多个盘区,将无法保证这些盘区连接在一起。 对每个段最多能获得多少盘区都有范围限制。尽管在理论上对段中盘区的数量限制为数 十亿,但是如果每个表的盘区数量限制在 10000以内的话,大多数数据库维护操作就执行得很 好。可以在段级指定每个段中盘区的最大数量,也可以用缺省方式表示段的表空间。 当你撤消一个段时,该段所使用的盘区就成为自由盘区。 Oracle可以重新把这些自由盘区 用于新的段或现有段的扩展。有关对特定段类型的管理方法,请参见第 4章和第7章。 1.4.20 回滚段 为了保证数据库中多用户读的一致性和能够回滚事务, Oracle必须拥有一种机制来重新构 造一个前映像 (before image)数据,为未提交的事务服务。 Oracle用数据库中的回滚段来提供 一个前映像数据。 事务利用回滚段来记录变化前的数据映像。例如,一个大的 delete(删除 )操作需要一个大 的回滚段来保存被删除的记录。如果 delete(删除)事务被回滚,则 Oracle将使用回滚段重新构 造该数据。 查询也使用回滚段。由于 Oracle执行读一致性的查询操作,所以数据库必须能把数据重新 构造得与开始查询时存在的数据一样。如果一个事务在查询开始后结束, Oracle将连续使用这 个事务的回滚段条目来重新构造更改过的行。通常,应避免安排长时间执行并发查询的事务。 回滚段随它所支持的事务的增大而增大。如何有效地管理回滚段将在第 7章中描述。 1.4.21 快照和显形图 可以使用快照 (sanpshot)把远程数据的本地拷贝提供给用户。快照基于一个查询,该查询 使用数据库链接选择远程数据库中的数据。把快照的数据从源数据库复制到目标数据库,然 后用户就可以查询快照。可以把快照设置成只读方式或可更新方式。若要改善性能,可以索 引快照使用的本地表。 根据快照基本查询的复杂性,可以使用快照日志 (snapshot log)来提高复制操作的性能。 下载 第1章 Oracle体系结构 15 复制操作根据用户为每个快照的安排自动完成。有关创建和维护快照及快照日志的详细情况, 请参见本书的第三部分。 对于Oracle8i,你可以创建显形图 (materalized view)。显形图在结构上与快照非常相似。 它存储基于一个基本查询的复制数据。快照一般存储来自远程数据库的数据,而显形图通常 则存储从当前数据库中复制的数据。在数据库操作期间,如果显形图要返回相同的数据,优 化程序就可以动态地选择使用一个可利用的显形图,以代替对一个更大数据表的查询。显形 图还可以提供潜在的性能,但是要增加空间占用和维护代价。有关实现显形图的详细情况, 请参见第 12章。 1.5 内部存储结构 Oracle使用共享内存区和后台进程来管理其内存和文件结构。后台进程将在下节描述,本 节重点描述由 Oracle数据库全体用户使用的全局存储区。 根据所使用的数据库服务器选项,存储选项的可选择范围是非常广泛的。最通用的实现 方法在本章和第 2章中描述。 本节内容包括: · 系统全局区 (SGA)。 · 数据块缓存区。 · 字典缓存区。 · 重做日志 (redo log)缓冲区。 · SQL共享池。 · 大池。 · Java池。 · 多缓冲区池。 · 环境区。 · 程序全局区 (PGA)。 1.5.1 系统全局区 如果有人已经读过本书的某一章,要把这些知识传达给其他人的最快方法是哪一种呢? 可以请其他人也自己去读,但这不是最快的方法,最快的方法是将自己头脑中掌握的这方面 的全部知识传授给其他人。 Oracle数据库中的系统全局区 (SGA,System Global Area)用于同一目的—在用户间有效 地传输信息,它也包含有关数据库的最通用结构信息。 系统全局区 (SGA)的构成如图 1-5所示,图中所示的存储 单元 初级会计实务单元训练题天津单元检测卷六年级下册数学单元教学设计框架单元教学设计的基本步骤主题单元教学设计 的具体描述将在以后几节中 进行。 1. 数据块缓存区 数据块缓存区 (data block buffer cache)是SGA中的一个高速缓存区域,用来存储从数据库 中读取数据段的数据块 (如表、索引和簇 )。数据块缓存区的大小由数据库服务器 init.ora文件中 的DB_BLOCK_BUFFERS参数决定 (用数据库块的个数表示 )。在调整和管理数据库时,调整 数据块缓存区的大小是一个重要的部分。 16 第一部分 数据库体系结构 下载 数据块 缓存区 重做日志 缓冲区 字典缓 存区 SQL共 享池 图1-5 SGA结构 因为数据块缓存区的大小固定,并且其大小通常小于数据库段所使用的空间,所以它不 能一次装载下内存中所有的数据库段。通常,数据块缓存区只是数据库大小的 1%~ 2%, Oracle使用最近最少使用 (LRU,least recently used)算法来管理可用空间。当存储区需要自由 空间时,最近最少使用块将被移出,新数据块将在存储区代替它的位置。通过这种方法,将 最频繁使用的数据保存在存储区中。 然而,如果 SGA的大小不足以容纳所有最常使用的数据,那么,不同的对象将争用数据 块缓存区中的空间。当多个应用程序共享同一个 SGA时,很有可能发生这种情况。此时,每 个应用的最近使用段都将与其他应用的最近使用段争夺 SGA中的空间。其结果是,对数据块 缓存区的数据请求将出现较低的命中率,导致系统性能下降。有关如何控制数据块缓存区使 用的信息,请参见第 6章中的6.5.2节“统计报表解释”。 2. 字典缓存区 数据库对象的信息存储在数据字典表中,这些信息包括用户帐号数据、数据文件名、段 名、盘区位置、表说明和权限,当数据库需要这些信息 (如检查用户查询一个表的授权 )时,将 读取数据字典表并且将返回的数据存储在字典缓存区的 SGA中。 数据字典缓存区通过最近最少使用 (LRU) 算法来管理。字典缓存区的大小由数据库内部 管理。字典缓存区是 SQL共享池的一部分,共享池的大小由数据库文件 init.ora中的SHARED- POOL-SIZE参数来设置。 如果字典缓存区太小,数据库就不得不反复查询数据字典表以访问数据库所需的信息, 这些查询称为循环调用 (recuesive call),这时的查询速度相对字典缓存区独立完成查询时要低。 有关如何监控字典缓存区使用的有关信息,请参见第 6章的6.5.2节“统计报表解释”。 3. 重做日志缓冲区 重做日志文件将在本章 1.7.1节“重做日志”中加以描述。重做项描述对数据库进行的修 改。它们写到联机重做日志文件中,以便在数据库恢复过程中用于向前滚动操作。然而,在 被写入联机重做日志文件之前,事务首先被记录在称作重做日志缓冲区 (redo log buffer)的 SGA中。数据库可以周期地分批向联机重做日志文件中写重做项的内容,从而优化这个操作。 重做日志缓冲区的大小 (以字节为单位 )由init.ora文件中的 LOG_BUFFER参数决定。 4. SQL共享池 SQL共享池存储数据字典缓存区及库缓存区 (library cache),即对数据库进行操作的语句 信息。当数据块缓冲区和字典缓存区能够共享数据库用户间的结构及数据信息时,库缓存区 允许共享常用的 SQL语句。 SQL共享池包括执行 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 及运行数据库的 SQL语句的语法分析树。在第二次运行 (由任何 用户 )相同的 SQL语句时,可以利用 SQL共享池中可用的语法分析信息来加快执行速度。有关 监控SQL共享池使用的信息,请参见第 6章的6.5.2节“统计报表解释”一节。 下载 第1章 Oracle体系结构 17 SQL共享池通过 LRU算法来管理。当 SQL共享池填满时,将从库缓存区中删掉最近最少 使用的执行路径和语法分析树,以便为新的条目腾出空间。如果 SQL共享池太小,语句将被 连续不断地再装入到库缓存区,从而影响操作性能。 SQL共享池的大小 (以字节为单位 )由init.ora文件参数 SHARED_POOL_SIZE决定。 5. 大池 大池(Large Pool)是一个可选内存区。如果使用线程服务器选项或频繁执行备份 /恢复操作, 只要创建一个大池,就可以更有效地管理这些操作。大池将致力于支持 SQL大型命令。利用 大池,就可以防止这些 SQL大型命令把条目重写入 SQL共享池中,从而减少再装入到库缓存 区中的语句数量。大池的大小 (以字节为单位 )通过init. ora文件的 LARGE_POOL_SIZE参数设 置,用户可以使用 init.ora文件的 LARGE_POOL_MIN_ALLOC参数设置大池中的最小位置。 Oracle8i已不用这个参数。 作为 使用 L a rge Pool 的一 种选 择方 案 ,可 以用 i n i t . o r a文 件的 S H A R E D _ P O O L _ RESERVED_SIZE参数为SQL大型语句保留一部分 SQL共享池。 6. Java 池 由其名字可知, Java 池 为Java命令提供语法分析。 Java 池的大小 (以字节为单位 )通过在 Oracle8i引入的 init.ora文件的 JAVA_POOL_SIZE参数设置。 init.ora文件的 JAVA_POOL_SIZE 参数缺省设置为 10MB。 7. 多缓冲池 可以在 SGA中创建多个缓冲池,能够用多个缓冲池把大数据集与其他的应用程序分开, 以减少它们争夺数据块缓存区内相同资源的可能性。对于创建的每一个缓冲池,都要规定其 LRU锁存器的大小和数量。缓冲区的数量必须至少比 LRU锁存器的数量多 50倍。 创建缓冲池时,需要规定保存区 (keep area)的大小和再循环区 (recycle area)的大小。与 SQL共享池的保留区一样,保存区保持条目,而再循环区则被频繁地再循环使用。可以通过 BUFFER_POOL_KEEP参数规定来保存区的大小。例如: 保存和再循环缓冲池的容量减少了数据块缓冲存储区中的可用空间 (通过 DB_BLOCK_ BUFFERS参数设置 )。对于使用一个新缓冲池的表,通过表的 storage子句中的 buffer_pool参数 来规定缓冲池的名字。例如,如果需要从内存中快速删除一个表,就把它赋予 RECYCLE池。 缺省池叫作 DEFAULT,这样就能在以后用 alter table命令把一个表转移到 DEFAULT池。 1.5.2 环境区 在SQL共享区中,分为公用或私有两个区域,用户发出的每一个 SQL语句都需要一个 SQL 私有区,这个区一直保存到与该语句相应的游标关闭为止。对于 Oracle8,当使用与对象相关 的特征时,同样要使用一个私有对象缓存区。 1.5.3 程序全局区 程序全局区 (PGA,Program Global Area)是存储区中的一个区域,由一个 Oracle用户进程 所使用, PGA中的内存不能共享。 18 第一部分 数据库体系结构 下载 如果正在使用多线程服务器 (MTS,Multithreaded Server),PGA的一部分可以被存储在 SGA中。多线程服务器结构允许多个用户进程使用同一个服务器进程,从而减少数据库存储 区的需要。如果使用 MTS,用户对话信息就存储在 SGA中而不是 PGA中。如果使用 MTS,应 增加SQL共享池的容量以适应另外一些共享存储区的要求。 1.6 后台进程 数据库的物理结构和存储结构之间的关系
本文档为【oracle_DBA_教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_504557
暂无简介~
格式:doc
大小:4MB
软件:Word
页数:29
分类:互联网
上传时间:2012-06-06
浏览量:21