ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle concepts(9.2.0) (中文翻译) (第一章)

oracle concepts(9.2.0) (中文翻译) (第一章)

原创 Linux操作系统 作者:mugen 时间:2019-06-16 15:09:06 0 删除 编辑
第一章
oracle服务器的介绍
本章提供以下关于oracle 服务器的介绍,本章包括以下主题:
*数据库结构和空间管理概览
*数据访问概览
*内存结构和进程概览
*应用程序体系结构概览
*分布式数据库概览
*数据并发和完整性概览
*数据库安全概览
*数据库管理概览
*数据仓库概览
*高可用性概览
*内容管理概览

数据库结构和空间管理概览

一个oracle数据库是作为一个单元的数据的集合。数据库的目的是存储和取出相关的

信息。一个数据库服务器是解决信息管理问题的关键。总的来说,一个服务器在多用

户环境可靠的管理大量的数据以致于多个用户可以同时访问相同的数据。这些都要以

高性能完成。一个数据库服务器同时还阻止未授权的访问,并且提供高效的容错和恢

复方案。

数据库有逻辑结构和物理结构。因为物理结构和逻辑结构是分开的,所有数据的物理

存储管理可以不影响对逻辑存储结构的访问。


逻辑数据库结构

 一个oracle数据库的逻辑结构包括 schema对象,data blocks,extents,

segments和tablespaces.
 
Schemas和schema对象
 一个schema是数据库对象的集合。一个schema由一个数据库用户所拥有,并

且和这个用户有同样的名称。Schema对象是能够直接引用数据库数据的逻辑结构。

Schema对象包括象表,视图,索引这样的结构(在一个表空间和一个schema之间没有

任何关系。在同一个schema的对象可以在不同的表空间,一个表空间可以拥有不同的

schema的对象)


一些最常用的chema对象定义在以下部分

表是在oracle数据库中最基本的数据存储单元。数据库表持有所有用户可访问的数据

。每个表有列和行。oracle存储一个数据库的表的每一行包含的数据,这个表最多可

以包括256列,(以一个row或更多的row pieces的形式)。一个表有一个employee数

据库,例如,可以有一列叫employee号,在这个列的每一行的是一个employee的号码

视图

视图是在一个或多个表或其他视图上的定制的数据库的表现。一个视图可以被认为是

存储的查询。视图实际上并没有数据,然而,他们可以从他们所基的表上取数据库,

这个表称为视图的基表。

象表一样,视图可以查询,更新,插入,删除,但是有一些限制。所有的视图上的操

作实际上影响这个视图的基表。

视图通过限制对预定义的表的行和列的访问提供额外级别的安全控制。它同时也隐形

了数据的复杂性和存储复杂的查询。

索引

索引是和表相关的可选的结构。索引可以用来提高取数据的性能。就象一本手册的索

引可以帮助你快速的定位特定的信息一样,一个oracle的索引也提供对表数据的访问

路径。
当处理一个请求的时候,oracle可以使用一些或者所有可用的索引来高效的定位所要

请求的行。当应用程序经常访问一定记录范围(或一条特定的记录)的表的时候,索

引非常的有用(例如,所有的收入高于1000美元的employee)。

索引可以创建在一个表的一列或多列上。索引创建之后,自动的由oracle来维护。对

于表数据的改变(例如添加更新或删除记录)会自动的关联到所有相关的索引,这次

对于用户来说是完全透明的。

你也可以对一个索引进行分区。

Clusters
Clusters是一个或多个表的分组,这些表物理的存储在一起,因为他们共享相同的列

,而且他们也经常同时使用。因为相关的行是物理存储在一起的,所以,磁盘访问时

间可以节省。

向索引一样,cluster也不影响应用程序的设计。一个表是不是cluster的对用户和应

用程序是透明的。数据存储在一个cluster的表和非cluster的表里面,用sql来访问是

相同的。

数据块,extents和段


逻辑存储结构包括数据块,extents和断,使的oracle对磁盘空间使用有一个 fine-grained的控制。

oracle数据块

一个最fine level的粒度,oracle 数据库的数据是存储在数据块中。一个数据块对应一定的物理数据库磁盘空间指定的字节。标准的块的大学是由初始化参数 db_block_size决定的。另外,你可以指定最多五个其他大小的block。一个数据库使用,分配数据库空间就是使用块。

extents
逻辑数据库空间的下一个级别就是extent。一个extent是指定数目的连续的数据块,从一个单一的分配中,用来存储特定类型的信息。

在extent上的逻辑数据库存储就是段了。一个段是分配给一定逻辑结构的extent的集合。下表描述了不同类型的段:


------------------
段    描述
数据段   | 每个非cluster的表有一个数据段,所有的表都存储在
            |数据段的extent中。对于分区表,每个分区有一个数据段
            | 每个cluster有一个数据段,在cluster中每一个表的数   

            |据存在cluster的数据段中
------------------
索引段   |每个索引有一个索引段存储它所有的数据
            |对于分区的索引,每个分区有一个索引段
------------------
临时段   |临时段是当一个sql语句为了完成执行需要临时的工作区
            |的时候创建的,当一个语句完成执行,这个临时段的   |extent返回给系统为了将来的使用 
------------------
回滚段   |如果你运行在自动重做管理模式,那么数据库服务器使用   |表空间管理undo space 
            |oracle公司推荐您使用 自动重做管理方式
            |然而,如果你运行在手工重做管理模式,那么需要由dba   |创建一个或多个回滚段为了临时的存储重做信息
            |在数据库恢复的过程中,需要用到回滚段的信息:
            |× 产生完整性读数据库信息
            |×回滚没有提交的事务
------------------

oracle会动态的分配空间,当一个存在的段的extent变满的时候,换句话说,当一个

段的extent满了,oracle会为这个段分配另一个extent。因为extengs在需要的时候分

配,所有一个段的extents可能是连续的也可能是不连续的。


表空间

一个数据库被分成逻辑的存储单元,这就是表空间,包含有相关的逻辑结构。例如表

空间通常可以把所有的应用程序对象组合在一起,为了简化管理的操作。

数据库,表空间和数据文件

它们的关系:
 每个数据库逻辑的分成一个或多个表空间
 一个或多个数据库文件是为每个表空间显示的创建的为了物理的存储一个表

空间的所有的逻辑结构的数据。
 一个表空间的数据库文件的总大小就是这个表空间的总存储能力
 一个数据库的总存储能力就是数据库的表空间的组合起来的存储能力


联机和脱机表空间

一个表空间可以联机(可访问)或脱机(不可访问)。
一个表空间一般是联机的,这样用户可以访问这个表空间的信息。然后,有时候表空间需要脱机,这样使的数据库的一部分不可用,这个时候,仍然可以对数据库的其他部分进行正常的访问。这样可以使得许多管理认为更容易来执行。

物理数据库结构


下面的部分节省一个oracle数据库的物理结构,包括数据文件,重做日志文件和控制文件


数据文件

每个oracle数据库有一个或多个物理数据文件。数据文件包括所有的数据库数据。逻辑数据的结构的数据,例如表和索引,都是物理的存储在为这个数据库分配的数据文件中。

数据文件的特性有:
 
×一个数据文件只能跟一个数据库相关联
×数据文件可以有一定的特性可以让它们自动的扩展当数据库用完成了空间的时候
×一个或多个数据库文件组成的数据库存储的逻辑单元叫表空间,前面已经讨论过了。

数据在数据文件中被读,在需要的时候,在正常的数据库操作,同时存放在oracle的内存缓冲区中。例如,假设一个用户希望访问一个数据库的一个表的某些数据,如果请求的信息没有在这个数据库的内存缓冲区中,按摩它就会从相应的数据文件中读,并且存放在内存中。

修改过的或新的数据不一定要马上写到数据文件中。为了减少磁盘访问的次数从而提高性能,数据被先放在pool中,然后全部写到相应的数据文件中,这个是由dbwn后台进程完成的。


redo log 文件

每个oracle数据库都有一套两个或更多的redo log文件。这套redo log文件就是这个数据库的redo log。一个redo log由rodo entries组成(也叫 redo 记录)

redo log的主要功能就是记录对数据的所有改变的记录。如果一个失败阻止了修改的数据永久的写到数据文件中,那么这个改变能从redo log中获取,这样工作就永不丢失。

为了保护关于redo log自身的错误,oracle容许多工log,这样两个或多个redo的copy能够在不同的磁盘上。

redo log的信息知识用来恢复数据库,当一个系统或媒介错误发生的时候,这阻止了数据库的数据写到数据文件中。例如,如果一个未预料的电源终止了数据库的操作,那么在内存中的数据就不能写到数据文件中,这样数据就丢失了。然后,丢失的数据可以在数据库打开的时候恢复回来,在电源恢复的时候。通过对数据库数据文件applying在最近使用的redo log文件上的信息,oracle能恢复到电源失败那个时刻的数据。

在恢复操作中应用redo log的过程称为前滚。


控制文件

每个oracle数据库都有一个控制文件,一个控制文件包含记录,这些记录确定了数据库的物理结构,它有下面的信息:
 数据库名称
 数据文件和redo log文件的名称和位置
 数据库创建的时间戳

向redo log一样,oracle也让控制文件多工为了保护它。

控制文件的使用
每次oracle 数据库的实例启动的时候,它的控制文件就确定数据库和redo log文件,为了oracle的操作能继续,它们必须被打开。如果一个数据库的物理组成被修改了(例如,新的数据文件或redo log文件创建了),那么这个控制文件会自动的被oracle更新,来反映这些变化。一个控制文件也用于数据库的恢复。

数据工具

有三个工具可以用来移动一个oracle数据库子集从一个数据库到另外一个数据库,它们是export,import和sql loader

export工具

export工具在oracle数据库之间转移数据对象,即使它们位于不同的硬件和软件平台上。export能从oracle数据库中抽取对象定义和表的数据,并且把它们存储在oracle的二进制格式的dump文件中,通常位于磁盘或磁带上。

这样的文件可以通过ftp或copy或物理的传送到不同的站点。它们可以用import工具来传送到数据库中,这些数据库不用通过网络联机,就向是备份一样。

当你运行export的时候,它抽取对象,例如表,以及它们相关的对象,然后写到export dump文件中。


import工具

import工具把通过export工具取出的数据从一个数据库插入到另外一个数据库中。export 的dump文件只能被import工具读出来。import 读出export从一个oracle数据库取出的对象的定义和表的数据,
export和import工具能方便高级复制的某些方便,例如offline instantiation.


sql loader 工具
exp dump文件只能被oracle 的imp工具读。如果你需要读ascii固定格式的文件或delimited文件,你可以使用sql loader工具,sql loader可以从外表中装载数据到一个数据库。sql loader在同一个load 会话中,接受各种格式的输入数据,执行过滤,把数据装到不同的oracle数据库的表里面。


数据字典概览


每个oracle数据库都有数据字典。一个oracle数据字典是一套表和视图,它们是对数据的只读参考。例如,一个数据字典存储关于数据库逻辑和物理结构的信息。一个数据字典也存储下面的信息:

 oracle数据的合法用户
 关于为数据库的表定义的完整性约束的信息
 为一个schema对象分配的空间数量以及它使用了多少。

一个数据字典当数据库创建的时候创建的。为了准确的反映数据库每个时候的状态,数据字典被oracle自动的更新,当做了相应的操作的时候,例如,当数据库的结构改变的时候。这个数据库依赖数据自动来记录,确认和指导继续的工作。例如,在数据库操作的时候,oracle读数据字典来确定schema对象是否存在以及这个用户能否访问他们。


数据访问概览


这个部分解释了oracle是怎样遵守业内的可接受的标准使用数据访问语言,以及oracle是这样控制数据完整性和数据的一致性。这个部分包含下面的主题:

sql 概览
对象概览
pl、sql概览
java概览
事务概览
数据完整性概览
sql plus概览

sql概览
sql是一种语言,用来定义和操作数据库。sql 数据库是关系形数据库,表示数据是通过一套简单的关系存储的。

sql语句

所有的关于oracle数据库信息的操作都是通过sql 语句来执行的。一个sql语句是一串sql文本。一个语句必须相当于完成的sql语句,就向:
  select last_name,department_id from employees;

只有一个完成的sql语句才可以成功的运行。一个句子的一部分,例如下面的,会报错,提示需要更多的文本。
select last_name;
一个sql语句可以被认为是简单但是很强大的计算机程序或指令。sql语句分为以下几类:

ddl语句
dml语句
事务控制语句
会话控制语句
系统控制语句
embedded sql语句

ddl语句

这些语句是创建,修改,维护和删除schema对象。ddl语句也包含容许用户能不能给其他的用户授权访问数据库以及数据的特定的对象。

dml语句

dml语句操作数据。例如查询,插入,更新和删除一个表的行都是dml操作。最常用的sql语句就是select语句,它从数据库中取数据。锁定一个表或视图,
检查一个sql语句的执行计划也是dml操作。


事务控制语句
这个语句管理dml语句做的改变,它
使得用户可以把这些变化组成一个逻辑的事务,例如commit,rollback和savapoint。

会话控制语句

这个语句让用户控制当年会话的属性,包括enable和disable角色和改变语言设置,这两个会话控制语句是alter session 和set role;

系统控制语句

这个语句控制oracle服务器实例的属性。唯一的系统控制语句是alter system.它使用户改变设置,例如共享服务器的最小数目,杀掉一个会话,或执行其他的操作。

embedded sql语句

这个语句陷入到ddl,dml和其他的事务控制语句中,在一个过程化语言的程序,例如使用oracle的预编译器。例如open,close,fetch和execute.


对象概览

oracle对象技术是oracle关系技术的抽象层。新的对象类型可以从内置的数据库类型中创建或者其他的已经创建的对象类型,对象引用和即使类型中创建。用户定义类型的metadata存储在对sql,plsql,java和其他已经发布的接口是可用。

一个对象类型不同于本地的sql 数据类型,因为它是用户定义的,它指定基本的,永久的数据(属性)和关系行为(方法)。对象类型是真实世界实体的抽象反映。例如订单。

对象类型和面向对象 的关系特性,例如可变长的数组和nested的表,提供高级别的对数据的组织和访问方式。在对象曾下面,数据是存储在列和表里面,但是你可以向真实世界的实体(例如客户和订单)哪里对数据进行加工,这样使得数据更有意义。当你查询数据库的时候,不用考虑列和表,只是简单的select 一个客户。

在内部,关于对象的语句仍然是级别的关于关系形表和列的语句,你可以继续操作关系形数据类型,把数据存储到关系形的表中。但是你有可以使用面向对象特性的advantage.你可以使用面向对象的特性当继续操作你的关系形数据的时候,你可以完全不用面向对象的方法。例如,你可以定义一些对象数据列席把它存储到关系形表的列中。你也可以根据对象模型,对存在的关系形数据创建对象实体来代表和访问数据。或者你也可以存储对象数据到对象表里面,每一行都是一个对象。


对象的advantage

总的来说,面向对象的模型更  c++和java的类 机制很相似。向类一样,对象可以使复杂的,真实世界的商务实体和逻辑更简单,而且可以重用这些对象,这样使得开发快速,高效的数据库应用程序变为可能。通过本地支持数据库的对象类型,oracle使得应用程序开发人员直接的访问他们的应用程序使用的数据结构。在客户端的对象和包含数据的关系形数据库的列和表之间不需要映射层。对象的抽象和对象行为的封装同样也使得应用程序更容易理解和维护。


PL/SQL 概览
plsql是oracle的对sql的过程化语言的扩展。plsql把简单和弹性的sql通过过程化的函数的sql语句(例如 if,then ,while, 和loop)联合在一起。

当设计一个数据库应用程序的时候,考虑使用存储的plsql的下来优势

plsql代码可以存储在数据库中。应用程序和数据库之间的网络流量减少了,这样应用程序和系统性能提高了。即使当plsql不存储在数据库中,应用程序可以把plsql的快发送到数据库中,而不是把单独的sql语句,这样也减少了网络流量。

数据访问可以通过存储的plsql的代码控制。这种情况下,pl sql的用户可以访问应用程序开发人员访问的数据,除非被授权另外的访问方法

plsql快可以通过应用程序发送到数据,在不加大过量的网络流量的情况下运行复杂的操作。

下面的部分介绍plsql程序单元是怎么在数据库中定义和存储的。

plsql 程序单元

程序单元是存储过程,函数,包,触发器和匿名事务。

过程和函数

过程和函数是sql和plsql语句的集合,组成一个单元来解决特定的问题,或者完成一套相关的任务。他们在数据库中以被编译的形式创建和存储,而且可以被用户或数据库应用程序执行

过程和函数是相同的,函数通常返回单值给用户,过程没有。


包把相关的过程,函数,变量和其他的结构封装在一起作为数据库中的一个单元。他们提供更多的功能(例如,global包边贸可以被声明,却可以在包里面的任何一个过程中引用)。他们也提高性能(例如,所有的包的对象都被解析,编译和装到内存)

数据库触发器


数据库触发器是plsql,java或c过程,当一个表或视图被修改或当一些用户操作或数据库系统操作凡是的时候能隐式的执行。数据库触发器可以为了管理数据的时候用各种方法来使用。例如,你可以自动化数据的产生,审计数据的修改,加强复杂的完整性约束,定制复杂的安全性授权。

autonomous 块
你可以在一个plsql快中调用autonomous事务。当一个autonomous pl sql快进入的时候,
这个调用者的事务文本就挂起来了。这个操作保证sql在这个block中执行的操作更这个调用的事务文本的状态没有依赖或影响。


java概览

java是一种面向对象的应用级别的程序。java有许多关键的特性使得它开发理想的服务器应用程序,这些特性是:

简单性--java是一种比其他的许多服务器应用程序更简单的语言,因为它的对象模型的完整的加强。大了,标准的类库,给了java开发人员各种平台上强大的开发工具。

可移植性--java几乎是在各个平台上都是可移植的。可以使用java写平台相关的代码,但是写能在不同的机器上无缝的移动的程序是很简单的。oracle服务器应用程序,也趋向于避免没有什么平台移植性的问题,它是不直接支持图形用户界面。

自动存储管理==java虚拟机自动的在程序运行的时候,执行内存分配和回收的工作。java程序员不必要显示的分配和释放内存。想法,他们依靠jva来执行这些bookkeeping操作,当他们创建对象的时候分配内存,当不需要使用对象的时候释放内存,后者又叫垃圾回收。

强类型--在你使用java变量之前,你必须声明这个对象的类。java的强类型使得在java和plsql应用程序直接语言内的调用中提供一种合理的安全的解决方案,而且也把同一个应用程序的sql调用集成到java中。

无指针--尽管java保留了很多c的特性和语法,但是它不支持直接的指针和指针的操作。你传递所有的参数,包括primitive类型,都是通过引用(对象的身份是保留的),而不是传值。java不提供c那样的低级的直接的对指针的访问,这样就减少了内存的破坏。

异常处理--java的异常是对象。java需要开发人员通过特定类的方法声明哪个异常可以抛处理

安全--java的字节码设计和jvm的内置机制保证了java二进制代码不会被tampered with。oracle 9i也是按照在安全管理器的实例上,这样,当结合oracle数据库安全的时候,决定谁可以调用java方法

对于关系行数据库的连接标准--jdba和sqlj使得java代码可以访问和操作在关系数据库上的数据。oracle提供了驱动,这样可以使得产商无关的,可移植的java代码访问关系数据库。


xml概览

xml,可扩展标价语言,是在web上的确定和描述数据的标准方式。它是人可以读的,机器可理解的,描述分层数据的通用的语法,在应用程序,数据库,电子商务,java,web开发,查询等等都是可用的。

oracle服务器包括oracle xml db,这是一套内置的高性能的xml存储和retrieval技术。xml db完全吸收了w3c xml数据模型到oracle服务器中,并且对导航和查询xml提供了新的标准访问方法。你可以同时得到关系行数据库技术和xml技术的好处。xml数据库的关键特性包括下面:

 本地数据类型 --xml类型 -存储和操作xml。多个存储选项(clob,decomposed的对象关系)都对xml类型可用,dba可以选这一个存储来满足fidelity  to original,简单查询,简单重新产生,等等的需要。使用xml类型,你可以执行sql操作,例如查询和对xml对象的olap函数和xml操作,例如xpath查找和xsl的转型,对sql 数据库,你可以建立在xml类型上一个常规的sql索引或oracle text索引,为了更好的性能和更广的应用程序。
 本地xml产生提供了内置的sql操作符和相应的plsql包来返回xml格式的sql查询的结果。
 一个xml资料库提供folding,访问控制,ftp和webdav协议的支持和版本控制。这使得应用程序操作xml数据的时候retain一个文件抽象 


xml数据库的补充是oracle xml开发包,又叫xdk。xdk是一套经常使用的blocks和工具为开发使用。xdk包含级别的读,操作,传输和看xml文档的块。为了提供更多范围的发布,xdk对java,javabeans,c,c++,plsql是可用的。oracle xdk包括xml解析器,一个xslt处理器,xml schema处理器,xml类产生器,xml transviewer javabeans,xml sql工具和xsql servlet。


高级队列是oracle数据库的信息对象功能。通过这样的功能,信息队列操作可用向对oracle数据库sql操作那样的执行。信息队列功能可用使得应用程序和oracle数据库的用户使用队列来进行异步通信。高级队列提供enqueue,dequeue,propagation和guaranteed 信息的传递,和异常处理用在万一信息不可传递。信息队列使用xml类型为xml信息的payloads有好处。


事务概览

事务是一个单用户运行的包括一条或多条sql语句的逻辑工作单元。按照ansi iso sql标准,这个oracle是兼容的,一个事务从这个用户的第一个可执行的sql语句开始。一个事务当这个用户显示的提交或回滚的时候结束。

考虑一个银行数据库,当一个银行客户把钱从一个储蓄账户给一个支票账户的时候,这个事务就由三个独立的部分构成:减少储蓄账户,增加支票账户,在事务journal中加上这样的事务记录。

oracle必须保证所有的三个sql语句都能执行,为了账户的平衡。当有事情阻止其中的一个语句运行的时候,这个事务的其他语句就必须取消。这被称为回滚。如果在做任何更新的时候有一个错误产生,那么没有一个更新产生。


图 略。

提交和回滚事务

构成事务的sql语句的改变可以提交或回滚。在一个事务提交或者回滚后,下一个事务从接下来是sql语句开始了。

提交 一个事务,这个事务的所有的sql语句执行的结果所产生永久的改变。这个事务中sql语句的改变对其他会话的事务,只有在事务提交的时候 ,是可见的。

回滚一个事务,取消这个事务的sql语句执行的所有的改变。在一个事务回滚之后,受影响的数据是没有被改变的,就象这个事务没有运行一样。


保存点

保存点把一个有许多sql语句的长的事务分成更小的部分。有了保存点,你可以在一个长是事务中,arbitarily来标价你的工作在任何一点。这样可以给你将来回滚的选项,在这个事务中,你可以从当前点回滚到已经声明的保存点。例如,你可以在一个长的复杂的一系列的更新中使用保存点,这样如果你有错误,你不必要resubmit每个语句。

使用事务的数据一致性

事务可以让用户来保证对数据的一致性,尽管一个事务的sql语句是逻辑组成在一起。一个事务应该包含所有需要的部分为了一个逻辑的工作单元,不能多也不能少。所有引用的表的数据应该在事务开始和结束的时候一致。事务应该包含仅仅是由这写sql语句对这些数据所做的一致性的改变。

例如,又用到银行的例子。两个账户之间的资金的转移应该包括增加一个账户和减少另外一个脏话,然后记录这个事务的操作。所有的行为要么失败要么成功,credit不一个在没有debit的时候提交。其他不相关的操作,例如新的deposit对一个账户,不一个包含在这个资金转移的事务中,这个语句一个在其他的事务中。


数据完整性概览

数据必须遵守相应的商务规则,就向dba和应用程序开发人员所定义的。例如,假设一个商务规则是,在inventory表里面不能有sale_discount列的数值型的记录大于9。如果插入或更新语句试图去违法这个完整性规则,那么oracle必须回滚这个非法的语句,然后给这个应用程序返回一个错误。oracle提供完整性约束和数据库触发器来管理数据完整性规则。


完整性约束

完整性约束是一个声明了的方法来定义一个表的一个列的商务规则。一个完整性约束是关于表的数据的要么是真的要么遵守下面规则的语句:
 
 如果一个完整性约束为一个表创建的时候,已经有存在的数据不满足这个约束,那么这个约束不能enforced。

在一个约束已经定义之后,如果dml操作的任何结果都违法这个完整性约束,那么这个语句被回滚,产生一个错误。


完整性约束定义在表上,做为表的定义的一部分存储在数据字典里。这样所有的数据库应用程序遵守同样的规则。当一个规则改变的时候,它仅仅需要在数据库级别改变一次,而且对每个应用程序不需要多少时间。

oracle支持下面的完整性约束:

not null, 不容许表的列中有空值
unique key ,不容许一列或多列上有重复值
primary key, 不容许一列或多列上有重复值和空值
foreign key,在一列和多列上的每一个值都必须匹配相关表的unique或primary key的每一个值。fk完整性约束也定义了引用完整性行为用来描述oracle在引用数据改变的时候应该对依赖的数据做什么操作。

check ,  不容易不满足这个约束的逻辑表达式的值。


keys
键 被用来定义完整性约束的几种类型的定义。一个key是列或多个类包含在对某种类型的完整性约束的定义中。key描述了不同的表之间和关系形数据库之间的列之间的关系。一个key的单独的值叫做key值。key有下面几种类型:

pk: 这个列或多个列包括在这个表的pk 约束的定义中。一个pk的值是唯一的区分表的行。一个表只能有一个pk可以定义。

unique key:这个列或多个列定义在unique约束中
foreign key:这个列或多个列定义在引用完整性约束的定义中
referenecd key:这个唯一key或primary key在同一个或不同的表被一个外key所引用。

sql plus 概览

sqlplus 是进入和运行特别的数据库语句工具。它让你可以运行sql语句或plsql块,还可以执行更多的任务。通过sqlplus,你能:

输入,编辑,存,取和运行sql语句和plsql块。
对查询结果进行格式化,计算,存储,打印和创建web输出。
对访问的任一个表列出列的定义,在sql数据库间copy数据
发送信息或者从一个end user接受响应。
执行数据库管理。


内存结构和进程概览

内存结构和进程概览

一个oracle服务器使用内存结构和进程来管理和访问数据库。所有的内存结构存在于组成这个数据库系统的计算机的内存中。进程是工作在这些计算机的内存中的作业。

本部分讨论的体系化的特性使的oracle服务器支持:

×多用户能同时访问同一个数据库
×并发的多用户,多应用程序的数据库系统的高性能

图略

oracle实例

一个oracle服务器包含一个oracle数据库和一个oracle服务器实例。每次数据库启动的时候,sga被分配,oracle后台进程启动。后台进程和内存缓冲区被称为一个oarcle实例。

RAC:多实例系统

有些硬件体系结构(例如,共享磁盘系统)使的多个计算机共享访问数据,软件或周边(peripheral)设备。rac通过这样的结构运行多个实例来共享一个单一的物理数据库来获得很多优势。在很多应用程序中,rac使得用户在多台计算机上访问单一的数据库来提高性能。

RAC是内在就具有很高的可用性系统。 Cluster是典型的RAC环境,能够提供连续的计划和非计划的outages的服务。

一个oracle服务器使用内存结构和进程来管理和访问数据库。所有的内存结构都存在组成这个数据库系统的计算机中的主内存中。进程是工作在这些计算机的内存中的作业。

内存结构

oracle创建和使用内存结构来完成许多作业。例如,内存存储要运行的程序代码和在用户间共享的数据。和oracle相关的有两种基本的oracle内存结构:sga和pga,下面的部分将详细介绍。

SGA

SGA是包含一个oracle实例的数据和控制信息的共享内存区。oracle当一个实例启动的时候分配sga,当一个实例关闭的时候回收它的空间。每个实例都有它自己的sga。

当前连接到一个oracle服务器的用户共享sga的数据。为了更好的性能,整个sga应该尽可能的大(当然要时候真正的内存),这可以尽可能多的存储数据和最小化磁盘的i/o。

存储在sga的内存分为几种不同的内存结构,包括数据库缓冲区,redo log 缓冲区和共享池。

sga中的数据库缓冲区

数据库缓冲区存储最近使用的数据块。一个实例的数据库缓冲区是这个数据库的缓冲区。这个缓冲区包含修改的和没有修改的数据。因为最近(包含经常的,最频繁的)使用的数据的保存在内存中,所有不必要什么磁盘的i/o,所有性能提高了。

sga中的redo log缓冲区

redo log缓冲区存储redo entries,对数据库所做改变的日志。redo entries村庄在redo log缓冲区中,要写到联机redo log中,可以用来在必要的时候进行数据库恢复。redo log的大小是固定的。

sga中的共享池

共享池包含共享内存结构,例如共享sql区。共享sql区在处理每个唯一的提交到oracle数据库的sql语言的时候是必须的。共享sql区包含例如相应的语句的解析树和执行计划的信息。多个执行同一个语句的应用程序使用同一个共享sql区,留下更多的共享内存给其他的用户使用。

sga中的large pool

大池是为oracle的备份和恢复操作,io服务器进程,shared服务器会话的内存和oracle xa(当事务跟多个数据库交换的时候使用)提供的大内存分配的可选区。


语句的handle或游标


一个游标是跟特定语句关联的内存结构的句柄(或指针)(oci,把这些叫做语句的句柄)。尽管很多oracle用户都系列oracle工具的自动游标处理,程序接口提供给应用程序设计人员对游标进行更多的控制。

例如,在预编译应用程序的开发中,一个游标是对一个程序可用的有名字的资源,而且能够被专门用来解析在这个应用程序中的sql语句。应用程序开发人员可以对一个程序进行编码,这样可以控制sql语句短语的执行从来提高应用程序的性能。

PGA

pga是包含一个服务器进程的数据和控制信息的内存缓冲区。当一个服务器进程启动的时候,pga被oracle创建。pga的信息依赖于oracle的配置。


进程体系结构

进程是一个“控制的线程”,或是一个能运行一系列步骤的操作系统的机制。有些操作系统用 作业或任务这样的术语。一个进程总的来说,有它自己的的私有内存,并且在这个私有内存中运行。

oracle服务器总的来说有两种类型的进程:用户进程和oracle进程。


用户(客户端)进程

创建和维护用户进程用来运行一个应用程序(例如proc 、c++程序)的软件代码或oracle工具(例如oracle企业管理器)。用户进程也通过程序接口来关联服务器进程间的通信,下面的部分会讲解。

oracle进程

oracle进程被其他的进程调用,代表其他的进程执行一定的功能。oracle进程的不同类型和他们相应的功能在下面讲解。

服务器进程

oracle为了处理连接用户进程的请求创建服务器进程。一个服务器进程更用户进程进行通信,和oracle进行交互,执行相应用户进程的请求。例如,如果一个用户查询不在数据库缓冲区的数据,那么相应的服务器进程就会把相应的数据块从数据文件中读到sga中。

oracle根据不同的用户进程来配置每个服务器进程。在专有服务器配置中,一个服务器进程处理单个用户进程的请求。在共享服务器配置中,让许多用户进程共享少数几个服务器进程,最小化服务器进程的个数和最大化系统资源的可用性。

在一些系统中,用户进程和服务器进程是分离的,有些系统中,他们是联合成一个单一的进程。如果一个系统使用共享服务器,或用户进程和服务器进程在不同的计算机上运行,那么用户进程和服务器进程一定是分离的。c/s结构的系统把用户进程和服务器进程分开,并且在不同的计算机上运行。


后台进程


oracle为每个实例创建一系列的后台进程。

oracle为每个实例创建一系列的后台进程。后台进程巩固了可以处理为每个用户进程

运行的oracle程序的功能。他们异步执行io和监控其他的oracle进程,为更好的性能

和可靠性提供更多的并行机制。

每个oracle实例可以使用多个后台进程,他们分别是

dbwn,lgwr,chpt,smon,pmon,arcn,reco,jnnn,dnnn,lms,和qmnn.

dbwn
dbw把修改的数据块从数据库缓冲区写到数据文件中。尽管在很多系统上一个dw进程(

dbw0)就已经足够了,但是你可以为一个修改数据特别多的系统配置更多的进程来提

供写的性能(dbw1到dbw9和dbwa到dbwj)。初始化参数db_writer_processes确定dbwn

进程的个数。


因为oracle使用提前写日志(write-ahead logging).dbwn不必在事务提交的时候写数

据块。相反,dbwn被设计为高效的执行批写。在许多的情况xia ,dbwn仅仅当需要读更

多的数据到sga中,这个时候没有了什么可用的数据库缓冲区,才写的。最不常用的数

据先写到数据文件中。dbwn也为了其他的功能,例如checkpointing来执行写操作。

lgwr


lgwr把redo log entries写到磁盘中。redo log entries在sga的redo log缓冲区中产

生,lgwr把redo log entries顺序的写到联机redo log中。如果数据库有多个redo

log,那么lgwr把redo log entries写到这组联机redo log文件中。


ckpt

在特定的时刻,所有的sga中修改数据库缓冲都被dbwn写到数据文件中。这个事件叫做

一个checkpoint。checkpoint进程用来在checkpoint的时候对dbwn发信号,同时更新

所有的数据文件和控制文件来标示最近的一次checkpoint。


smon
smon当实例崩溃在启动的时候执行恢复。在rac,一个实例的smon进程能够为其他的崩溃的实例进行实例恢复。smon也能清楚不在使用的临时段,恢复由于文件读或脱机错误而中止的事务。这些事务最终当表空间或文件联机的时候被smon恢复。smon也能在字典管理的表空间中整合extents,这样可以得到连续的空间,更易于分配。


pmon

pmon当用户进程失败的时候进行进程的恢复。pmon负责清除缓冲区,释放进程使用的资源。pmon也检查分发器和服务器进程,并且在他们失败的时候重新启动他们。


arcn

arcn在log 切换发生之后,把联机redo log文件写到归档的存储中。尽管单一的arcn进程对大多数系统已经足够了,你可以通过动态初始化参数设置log_archive_max_processes来设置最多10个arcn进程。如果当前数目的arcn的工作负荷太重,那么lgwr会自动的启动另外的arcn进程,最高10个。arcn当数据库运行在归档模式,并且是自动归档的时候才会起作用。

reco

reco被用来在分布试数据库中,解决分布式事务,由于网络或系统失败。在一定的时间间隔,本地的reco试图连接到远程的数据库,自动的完成提交或者回滚任一个pending的分布试事务的本地部分。

jnnn
作业队列进程,用来在批处理中。作业队列进程是动态管理的。这样,能使作业队列客

户端在需要的时候使用更多的作业队列进程。当他们是空闲的时候,这些进程使用的

资源就会释放。

dnnn

分发器是可选的后台进程,只有当使用了共享服务器配置的时候才有。对每个使用的

通信协议,至少有一个分发进程被创建(d000,,dnnn)。每个分发器负责把连接的

用户进程的请求路由到可用的共享服务器进程上,并且把响应返回给相应的用户进程


LMS
锁管理器服务进程用在RAC的实例间的锁。

QMNn

队列监控器是用来监控oracle 高级队列的队列信息的可选的后台进程。你最多可以配

置10个队列监控进程。


程序接口机制

程序接口,是一种用户进程和服务器进程通信的机制。它在任何客户端工具或应用程

序(例如oracle forms)和oracle软件之间,作为标准通信的一种方法。它有下面的

功能:

×通过格式化数据请求,传递错误,trapping和返回错误来作为一种通信机制
×执行数据的转换和翻译,尤其是在不同类型的计算机或在外部用户程序数据类型之

间。

通信软件和oracle net服务

如果用户和服务器进程在一个网络的不同的计算机上,或者用户进程通过分发进程连

接到共享服务进程上,那么用户进程和服务器进程使用oracle net 服务进行通讯。分

发器是在共享服务器配置下的一个可选的后台进程。

oracle net服务是一种oracle的机制,为了更由网络使用的通信协议进行更好的接口

,这样可以简化分布式处理和分布式数据库。通信协定定义了在网络中传输和接受的

数据的方式。在网络环境中,oracle数据库服务器跟客户工作站和使用oracle net服

务软件的其他oracle数据库进行通信。

oracle net服务支持大多数网络协议的通信,范围从pc lan到大型主机计算机系统。

使用oracle net服务器,应用程序开发人员不需要关心数据库应用程序支持的网络通

信。如果使用了新的协议,dba只有做很小的改动,应用程序不需要修改就可以继续运

行。

oracle是怎么工作的一个例子


下面的例子描写了oracle执行的最基本的操作。这个表明了当用户和相关的服务器进

程在不同的机器上(通过网络连接)的oracle配置。

1.一个实例在运行oracle的计算机启动了(通常也教主机或数据库服务器)
2.一个运行应用程序的计算机(本地或客户工作站)在用户进程里面运行这个应用程

序。客户应用程序试图通过相应的oracle net服务驱动来建立到服务器的连接。
3.服务器运行相应的oracle net 服务驱动。这个服务器发现了从应用程序发过来的连

接请求,并且代表这个用户进程创建了专有服务器进程。
4.用户运行sql语句,并且提交一个市委。例如用户改变了表的一个行的名字。
5.服务器进程接受到这个语句,并且在共享池里面检查,看是不是有共享sql区包含相

同的sql语句。如果发现了共享sql区,那么服务器进程就看用户是否对请求的数据有

没有访问权限,并且已经存在的共享sql区用来处理这个语句。如果没有,那么为这个

语句分配新的共享sql区,这样它就可以被解析和处理。
6.服务器进程从数据文件(表)或已经存在sga中取出需要的数据值。
7。服务器进程在sga修改数据。dbwn进程把修改过的数据永久的写到磁盘上(当这样

做是有效的时候)。
8。如果事务成功了,那么服务器进程通过网络向这个应用程序发送一条消息。如果没

有成功,那么就发送一条错误信息。
9.在整个过程中,其他的后台进程运行,看是不是有需要干预的条件。另外,数据服

务器管理其他用户的事务,并且在请求相同数据的时候阻止竞争。

应用程序体系结构概览


对于数据库有两种通用的方式:c/s和多层。计算环境中,internet计算机便的越来越

流行,许多数据库管理系统都迁移到多层环境中。


c/s体系结构

多处理为一套相关的作业使用不止一个处理器。分布式处理通过容许不同的处理器集

中在相关任务的子集来艰辛单一处理器的负荷,这样就从整体上提高了这个系统的性

能和能力。

oracle数据库系统能通过使用它的c/s体系结构来简单的实现分布式处理的优势。在这

样的体系结构中,数据库系统分成两个部分:前端或客户端和后端或服务器端。


客户端


客户端是前端数据库应用程序,由用户通过键盘,显示器,点击设备例如鼠标访问的。客户端不负责数据访问。它请求,处理和表现由服务器管理的数据。客户端工作站可以为它的作业做优化,例如,它不需要太大的磁盘空间,它可以从图形能力中获益。

通常客户端运行在不是数据库服务器的另外一台计算机上,通常是PC。许多客户端能同时对一个服务器进行访问。

服务器端

服务器端运行oracle软件,处理并发和贡献数据访问的请求。服务器接受和处理由客户端应用程序发起的sql和plsql语句。管理服务器的计算机可以优化,例如,给它很大的磁盘和很快的处理器。

多层体系结构:应用程序服务器


多曾体系结构有下面的组件:

×启动操作的客户端或初始处理 (initiator process)
×一个多多个应用程序执行这个操作的不同部分。应用程序服务器提供对数据的访问,执行其中的一些查询处理,这样可以减少数据库服务器的部分负荷。它可以作为在客户端和多个数据库服务器间的接口,包括提供额外级别的安全。
×数据库服务器存储在这个操作中使用的大部分数据。

这样的体系结构使得使用一个应用程序服务器可以:

×确认客户端的信用,例如一个web浏览器

×连接到oracle数据库服务器
×代表客户端进行请求的操作

客户端的身份由每层的连接来维护。


分步式数据库概览

分布式数据库是通过一起使用多个数据库服务器管理的数据库网络。他们通常不是被看做单一的逻辑数据库。分布式数据库上的所有的数据库上的数据可以被同时访问和修改。分布式数据库的主要好处就是,物理分开的数据库可以逻辑的连接起来,并且在一个网络上潜在的对所有的用户进行访问。

在分布式数据库中管理一个数据库的计算机叫做节点。对于用户直接连接的数据库叫做本地数据库。这个用户访问的其他的数据库叫做远程数据库。当本地数据库访问远程数据库的信息的时候,本地数据库是远程服务器的客户端,这是c/s体系结构的一个例子。

数据库连接描述了一个数据库访问另外一个数据库的路径。数据库连接当一个引用加上全局对象名称的时候被显示的引用。

当一个分布式数据库要能通过网络访问大量的数据的时候,它必须隐藏数据的位置,和通过网络的复杂性访问。分布式数据库管理系统也保留关系每个本地数据库的优势,就象他们不是分布式一样。


location transparency
location transparency发生在,当一个数据的物理位置对于数据库系统的应用程序和用户是透明的时候。一些数据库特性,例如视图,过程和同意词,能提供位置透明。
例如,视图连接几个数据库的表的数据,这样就提供了位置透明,因为用户的视图不需要知道数据库是从那里来的。

站点自治

站点自治的意思是分布式数据的每个数据库,都是分开管理和独立的,对于其他的数据库,就象每个数据库都是没有网络的数据库。尽管每个数据库能跟其他的数据库一起工作,他们的有区分的,独立的系统,能被单独的对待。


分布式数据操作


oracle分布式数据库体系结构支持所有的dml操作,包括查询,插入,更新和删除远程表的数据库。要访问远程数据,你要在远程对象加上远程对象名。对访问远程数据不需要进行编码或复杂的语法。

例如,查询sales远程数据库的employee表,这样来引用:

select * from employee@sales;

two-phase提交

oracle在分布式数据库中,象非分布式数据库环境一样的保证数据完整性。oracle使用事务模式和 tow-phase提交机制来提供保证。

在非分布式系统中,事务应该仔细的规划,包括sql语句的逻辑集,作为整体,要么成功,要么失败。oracle的two-phase提交机制保证了不管什么类型的系统或网络故障发生,分布式事务要么提交在所有的节点,要么回滚,保证了在全局的分布式数据库中的数据完整性。



高级复制概览

复制是copy和维护数据库对象,例如表的处理,在组成分布式数据库系统的多个数据

库之间。一个站点的变化,可以在本地捕获和存储,在转发和应用到每个远程节点之

前。oracle的复制完全集成了oracle服务器的特性,它不是一个分开的服务器。

复制使用分布式数据库技术在多个站点之间共享数据,但是复制数据库和分布式数据

库是不一样的。在分布式的数据库中,数据在许多位置上是可用的。但是特定的表只

是存在于一个位置。例如,employee表只能存在包含db2,db3数据库的分布式数据库系

统的db1数据库中。复制的意思的,相同的数据在多个位置是可用的,例如,employes

表可以在db1,db2,db3上。

表的复制

分布式数据库系统经常逻辑的复制被本地用户经常访问的远程表。通过有多个节点的

经常访问的数据,分布式数据库不必重复的在网络中发送信息,这样最大化了数据库

应用程序的性能。

数据能用物化视图来进行复制。


多层物化视图

oracle支持分层的和可更新的物化视图。多层复制提供设计一个分布式应用程序的更

多的灵活性。使用多曾物化视图,应用程序可以管理多层的数据子集,不在层直接不

需要直接的连接。

一个可更新的物化视图,可以让您插入,更新删除物化视图的积累,并且把这个变化

发布到目标主表。同步的和异步的复制都支持。

下图(略)是一个多层体系结构的范例,图表是个反向树结构,改变可以从向上或向

下沿着连接到master的最外端的物化视图的节点发生。


冲突解析

在oracle9i中,冲突解析是定义在最高层,master站点上,并且在必要的时候推入到

可更新的物化视图的站点。这样就使得有多层物化视图成为可能。存在系统定义的冲

突解析方法是支持的。

另外,用户可以写自己的冲突解析routines.用户定义的冲突解析方式是一个plsql函

数,返回真或假。真表示这个访问成功的为一个列组解析了所有有冲突的修改。

streams概览

oracle streams能够在数据流中共享数据和事件,不管在一个数据库还是从一个数据

库要另外一个数据库中。流把指定的信息送到指定的目的地。oracle streams提供必

要建立分布式企业和应用程序,数据仓库,高可用性解决方案的能力。你可以同时使

用oracle streams的所有的能力。如果你需要改变,你可以实施 streams的新的能力

,而不牺牲已经存在的能力。

使用oracle streams,你可以控制哪些信息放到流里面,流怎么从一个数据库留到另

外一个数据库,流进入每个数据库的时候哪些事件发生,以及流怎么终止。 通过配置

留的指定的能力,你可以发布特定的需求。基于你的配置,流可以自动捕捉和管理数

据库中的事件,包括,但不局限于,dms改变和ddl改变。你也可以报用户定义的事件

加入到一个流中。那么,streams就可以自动的把信息传播到其他的数据库或应用程序

。另外,基于您的设置,streams可以在目标数据库应用一个事件。

你可以使用流来:

×捕捉数据库的变化

 你可以配置后台捕捉进程来捕捉对表,schema或整个数据库的变化。捕捉进

程从redo log中捕捉变化,然后把每个捕捉的变化格式化成以个逻辑的改变积累。这

个在redo log中产生变化的数据库就是源数据库。

× 把事件排入一个队列。在strems队列中可以有两种类型的事件,lcr和用户信息
       捕捉进程把lcr事件排到一个你指定的队列中。这个队列可以在同个数据库或

和其他数据库共享lcr事件
 你也可以用用户应用程序显示的把用户事件排入一个队列。这些显示的队列

事件可以是lcr或用户信息。

×把事件从一个队列发布到另外一个。这些队列可以是一个数据库或不同的数据库间

×把事件从一个队列中去除。

   后台应用进程可以把事件从一个队列中取出。你月可以使用用户应用程序显示的去

除以个事件。

×在数据库中应用事件
 你可以配置一个应用进程来在队列中应用所有的事件或仅仅在你指定的事件

。你也可以配置一个应用进程去调研你自己的plsql子程序来处理事件。
 lcr事件被应用或其他类型的事件被处理的数据库被称为目的数据库,在一些

配置中,源数据库和目的数据库可以是一个数据库。

streams的其他能力有下列:

×捕捉lcr中的标签
×directed 的网络
×自动冲突检测和解析
×传送
×共享heterogeneous信息

高级队列概览

高级队列概览

oracle高级队列提供了为分布式应用程序使用信息异步通信的体系结构。oracle高级队列为了deferred retrival把信息存储到队列中,由oracle服务器处理。这样不用额外的软件例如事务处理监控器或面向信息的中间件就可以提供可靠的和高效的队列系统。

信息在客户端和服务器直接传递,就像不同服务器之间的进程
as well as between processes on different servers.有效的 信息系统实施基于内容的路由,订阅和查询。

信息系统可以分成两类:
同步通信
异步通信


同步通信

同步通信基于 请求/回复 paradigm --用于向另外一个程序发送,等待,直到收到回复的程序。
这个通信的模型(也叫在线或连接)适合那些需要得到回复才能继续处理工作的程序。传统的c/s体系结构就是基于这样的模型的。这种模型的主要缺点就是,被请求的程序必须是可用的,并且要为调用的应用程序运行。

异步通信

在未连接或deferred模式中,程序是异步通信的,把请求放到队列中,然后继续进行他们的作业。

例如,一个应用程序需要查询数据的入口,或者在到了特定条件下才执行一个操作。
接受的程序从对象中取出请求,并且执行它。这样的模型适合那些把请求放到队列(他们不会因为等待回复而阻塞)能继续执行的应用程序。

对于在网络,机器或应用程序错误中要正确的deferred的执行,请求必须永远的存储,并且就处理一次。这通过结合永久队列和事务保护来实现。



Heterogeneous(异构) 服务概览

Heterogeneous服务用来访问非oracle的数据库系统。术语“非oracle数据库系统”指的是:

通过用c写的pl/sql过程访问的任何系统(也就是通过外部过程)
通过sql访问的任何系统(也就是通过oracle 透明网关和 通用连接性)
通过过程化访问的系统(也就是通过过程的网关)


异构服务使得用户做下面的操作成为可能:

使用oracle的sql语句去取存储在非oracle系统的数据
使用oracle过程来调用非oracle系统,服务或应用程序接口,在一个oracle分布式环境中。

异构服务通常用下面两种方式实现:

×oracle透明网关和异构服务的联合起来访问特点的,产商提供的,非oracle系统,这就是oracle透明网关设计的目的。例如,你可以使用oracle透明网关来为solaris的sybase数据库访问运行在solaris平台的sybase数据库。
×异构服务的连接性用来通过odba或ole db接口访问非oracle的数据库。

数据并发性和完整性概览

这个部分接受了oracle使用的软件机制用来满足下面的信息管理系统中的重要需求:

数据必须以完整的方式来读和修改
多用户系统的数据并发必须最大化
在许多用户的数据库系统中,最大生产力的高性能


并发性

在多用户数据库管理系统中主要关心的就是如何控制并发性,也就是能被许多用户同

时访问相同的数据。没有相应的并发控制,数据就可能会被不正确的更新或修改,威

胁到数据完整性。


如果许多人访问相同的数据,管理数据并发性的一种方法是让每个用户轮流等待。数

据库管理系统的目的是减少这样的等待,这样对每个用户来说,等待要么是不存在,

要么是可以忽略。 所有的dml语句异构尽可能的没有什么影响的进行,同时必须组织

在并发事务间的破坏性的干预。破坏性的干预就是可能错误的更新数据库,或错误的

更改基本的数据结构的任何干预。都不能牺牲性能和数据完整性。

oracle能解决由于各种类型的锁和多个版本的完整性模型的问题。这些问题本部分下

面都会讨论。这些特性都是基于事务的概念。保证事务的并发性和完整性是应用程序

设计人员的工作。


读完整性

oracle支持的读完整性,做下面的工作:


×保证语句看到的数据集合是完整的,在某个时间点,并且在语句执行的过程中是不

会改变的
×保证数据库数据的读者不用等待同以数据的别的读者或作者数据
×保证数据库数据的作者不用等待同一数据的读者
×保证作者仅仅等待如果其他的做者要更新并发事务的同一行。


考虑oracle实现读完整性的最简单的方法就是想像每个用户操作数据库的私有的copy

,这样就有完整性模型的多个版本。


读完整性,undo记录和事务

为了管理多版本的完整性模型,oracle必须当一个表被查询(读)或者被同时更新(

写)的适合创建数据的完整性的结合。当发生一个更新的时候,原来的数据被这个更

新改变,并且被记录在数据库的undo记录中。尽管这个更新遗留在一个未提交事务的

部分,任何用户后来查询这个修改的数据看的是原来的值。oracle使用sga中当前的信

息,以及在undo记录中的信息为这个查询来构建这个表的数据的完整性的视图。

只有当事务提交的时候,事务才会永远的改变。在用户事务提交之后的发出的语句只

能看到这个提交的事务做的改变。


注意,事务是oracle提供读完整性的一个战略。提交(或未提交的)sql语句的单元是



阐述了代表代表读者产生完整性视图的起点
控制当修改的数据能被数据库的其他事务来进行读或更新。


只读事务

默认的,oracle保障语句基本的读完整性。由单一查询返回的语句集在一个时间点是完整的。然而,在某些情况下,你也许需要事务级别的完整性。这在单一的事务中需要运行多个查询的能力,所有的必须在单一时间点是读完整性的,这样事务中的查询,不会受到干预提交事务的影响。

如果你想对多个表运行许多查询,而且你也不做任何更新,那么你应该使用只读事务。指定你的事务是只读的,你就可以对任何表想做多少查询都行,因为在同一时间点每个查询的结果集都是完整的。


锁机制

oracle也使用锁来控制对数据的并发访问。锁是一种机制,用来在用户之间访问oracle数据的时候组织破坏性的操作。

锁也用来保证完整性和一致性。一致性指的是,一个用户看到的或改变的数据是没有变化的,直到用户完成了操作。完整性的意思是,数据库的数据和结构是按照正确的顺序来进行改变。

自动锁

自动锁不需要用户就可以自动的执行。在有必要的sql语句中会有隐示的锁发生,看是请求什么样的行为。

oracle的锁管理器自己的把表的数据锁到行级。通过行级锁,同一数据的竞争得到最小化。

oracle的锁管理器维护几种不同类型的锁,这依赖于建立锁的操作的类型.两种普通的锁是独占锁和共享锁.一个资源(例如表或行)只能有一个独占锁,然而,一个资源上可以有很多共享锁.独占锁和共享锁都可以容许对锁定的资源进行查询,但是禁止对资源的其它活动(例如更新或删除)

手工锁

在一些情况下,用户也许需要不考虑默认的锁.oracle无论是在行级别还是表级别(对行的第一次查询,这样就会容许接下来的语句进行update操作),容许手工的,不管自动锁的特性,


沉寂数据库(quiesce database)

数据库管理员,偶尔需要进行一些同当前的非数据库管理员隔离的操作.也就是说,隔离并发的非数据库管理员的失误,查询,或plsql语句.实现这样的隔离,一种方法是关闭数据库,然后以限制模式启动它.沉寂数据库的特性,提供了隔离的另外一种方式,把系统放置到沉寂的状态,不影响用户.

数据库管理用使用sql语句来沉寂数据库.当系统处于沉寂的状态,数据库管理员可以安全的进行一定的操作,这样的执行跟并发的非dba用户是隔离的


数据库安全概览


oracle包含有控制数据库是怎样被访问和使用的安全特性.例如,安全机制:

阻止非授权的数据库访问
阻止非授权的对schema对象的访问
审计用户操作


跟每个数据库用户相关联的是同名的schema.默认的,每个数据库用户创建,并且可以访问它相应的schema中所有的对象.
数据库安全可以分为两类: 系统安全和数据安全.

系统安全包括控制访问和系统级别的数据库使用的机制.例如,系统安全包括:

合法的 用户/口令 联合
对于用户schema对象的可用的磁盘空间的大小
用户的资源限制

系统安全机制检查一个用户是否授权连接到数据库,不管数据库审计是否active,以及用户能执行哪些系统操作.

数据安全包括控制访问和使用数据库的在schema对象级别的机制.例如,数据安全包括:

哪个用户访问了特定的schema对象,特定的类型的操作是对每个用户在这个对象上都是容许的.例如(用户scott可以执行select和insert语句但不可以对employees表执行delete语句)

数据加密阻止非授权的用户绕过oracle来访问数据.


安全机制

oracle服务器提供自由的访问控制,这是一种基于权限的限制访问方式.为了让用户访问schema对象,必须对这个用户赋相应的权限.相应的授权的用户可以给其它用户任意授权,所有,这种类型的安全就叫自由的.

oracle使用几种不同 的工具管理安全


数据库用户和schemas
权限
角色
存储设置和配额
属性和资源限制

图1-5(略)表明了不同oracle工具的关系,下面部分提供了用户,权限和角色的概览

数据库用户和schema

每个oracle用户都有一列的用户名.为了访问一个数据库,用户必须使用数据库应用程序,然后用合法的数据库用户名进行联系.每个用户为了阻止非授权的使用,都有相关的密码.

安全域

每个用户都有一个安全域--一套属性,用来确定:

对用户可用的行为
用户的表空间配额
用户的系统资源限制

每个用户安全域的属性下面部分要讨论.


权限

权限是运行特定类型的sql语句的权力.权限的例子包括下面的权力:

连接到数据库(建立一个会话)
在你的schema中创建一个表
从别人的表中选择行
执行别人的存储过程

oracle数据库的权限可以分为两类:系统权限和schema对象权限

系统权限

系统权限容许用户执行特定的系统级别的行为,或者是对特定类型的schema执行特定的操作.例如,创建表空间或删除数据库的任意表的行的权限是系统权限.许多系统权限是对管理员或应用程序开发人员开放,因为这个权限是非常强大的.

schema 对象权限

schema对象权限容许用户对特定的schema对象执行特定的操作.例如,删除特定的表的行就是对象权限,对象权限授权给用户,这样用户可以使用数据库应用程序完成特定的任务.

授权

权限赋予给用户,这样用户可以访问和修改数据库中的数据.用户可以以两种方式得到权限:

权限可以显示的授给用户,例如,插入employee表的权限,可以显示的赋给用户scott

权限可以赋给角色(一种权限组),然后角色在被赋给一个或多个用户.例如,插入employee表的权限可以授权给角色clerk,然后把它赋给用户scott和brian.

引用角色更容易使用,更好的管理权限,权限通常都是赋给角色,而不是给特定的用户.
下面的部分解释角色和他们的使用.

角色

oracle通过角色提供了简单和控制权限管理.角色是有名字的相关权限的组,这样你可以给用户或其它角色授权.

存储设置和配额

oracle提供了直接和限制磁盘空间分布给数据库每个用户的方法,包括默认的和临时的表空间以及表空间配额.

默认的表空间

每个用户都有默认的表空间.当用户创建表,索引,或束并且没有指定表空间的时候,如果用户在它的默认的表空间有创建schema 对象并且有配额的化,那么就创建在默认的表空间里.默认的表空间,在schema对象的位置没有指定的情况下,为oracle提供了直接空间使用的信息.

临时表空间

每个用户都有临时表空间.当一个用户运行sql语句的时候,如果需要临时段的创建(例如要创建索引),就会使用到临时表空间.通过把所有的用户的临时段指定不同的表空间,临时表空间可以在临时段和其它类型的段直接减少I/o的竞争.

表空间配额

oracle可以对schema的对象限制磁盘的可用空间的使用.可以为一个用户设置每个表空间的配额.表空间配额安全特性容许对磁盘空间的可选的控制,这些磁盘空间是知道schema的对象使用的.

属性和资源限制

每个用户都被分配一个属性,指定了对系统资源的限制,包括下面:

用户可以建立的并发会话的数目
cpu可以为下面操作的处理时间
用户会话
sql语句对oracle的单一调用
逻辑i/o的可用性
用户会话
sql语句对oracle的单一调用
每个用户会话的可用空闲时间
每个用户会话的连接时间
密码限制
在多次登录失败后账户锁定
密码过期和grace期限
密码重用和复杂性限制.

不同的属性可以创建和单独的给每个数据库用户分配.默认的属性是给所有的用户,而不是显示的分配一个属性.
资源限制特性阻止了对全局数据库系统资源的过多的消耗.

可选的审计和用户行为

oracle容许可选的审计(有记录的监控)用户行为,为了调查可疑的数据库使用.审计可以以三种级别执行:语句审计,权限审计和schema对象审计.

语句审计

语句的审计是对特定的sql语句的审计.而不管这个schema对象的名称.另外,数据库触发器让数据库管理员扩展和定制了oracle的内置的审计特性.
语句审计可以审计系统的所有用户,也可以审计系统的选定的用户.例如,通过用户的语句审计可以审计用户scott和lori连接和断开数据库.

权限审计

权限审计是不管指定哪个名字的schema对象的强大系统权限的审计.权限审计可以对所有的用户或对指定的用户进行审计.

schema对象审计

schema对象审计是对访问特定schema对象的审计,而不管用户.对象审计监控对象权限容许的语句,例如对给定表的select或delete语句.

对所有类型的审计,oracle容许对成功执行,不成功执行或都进行可选的审计.这样就可以监控可疑的语句,而不管是哪个用户是否有相应的权限执行这个语句.审计操作的结果记录在audit trail表中.audit trail表的预定义的视图,可以让我们很容易就取到审计记录.

Fine_grained 审计

fg审计容许基于内容的数据访问的监控.例如,一个中心税务当局需要跟踪对雇员窥探的访问.足够的详细需要能看哪些数据被访问了,而不是看特定用户对特定表有select权限.fg审计提供这样的功能.

总的来说,fg审计策略是在表对象上的基于简单的用户定义的sql谓词就向选择审计的情况一样.在取数据的时候,不论什么时候策略条件满足一个返回行,查询就被审计了.后来,oracle就用匿名事务来执行用户定义的审计事件来处理这个事件.

fg审计可以在用户应用程序中用dbms_fga包或用数据库触发器来实现.


数据库管理概览








管理oracle数据库系统的操作的人,我们都是知道是数据库管理员,负责创建数据库,保证题目的平滑操作,监控他们的使用.

企业管理器概览

企业管理器是为中央化管理混合环境提供集成的解决方案的系统管理工具.联合图像控制台,oracle管理服务器,oracle智能代理,公共服务,还有管理工具,em为管理oracle产品提供一个复杂的系统管理平台.

在客户端的界面,em控制台,你可以执行下面的任务:


管理完全的oracle环境,包括数据库,ias服务器,应用程序和服务
诊断,修改,调整多个数据库
在不同的时间间隔,在不同的系统上,计划任务.
通过网络监控数据库情况
在多个位置上管理多个网络节点和服务
和其它管理员共享任务
把有关的任务组在一起来简化管理任务.
启动集成的oracle和第三方工具
定制em管理员的显示


数据库备份和恢复概览

这个部分包括使用oracle提供下面操作的结构和机制

不同类型的失败后的oracle恢复
满足任何情况的弹性恢复操作
在备份和恢复操作期间数据的可用行,这样系统的用户可以继续工作

为什么恢复很重要

在每个数据库系统,系统或应用失败的可能性总是存在的.如果失败发生了,并且影响到了数据库,那么数据库就必须恢复.失败后的目标就是保证所有提交事务的结构反应在恢复的数据库上,并且可以尽快的进行正常操作,这样隔离用户由于失败造成的问题.

失败的类型

很多情况都会导致oracle数据库的停机.下面的表描述了通用的错误类型


----------------------------------------------------------------------
错误 | 描述
-----------------------------------------------------------------------------

用户错误 | 需要数据库幻灯到错误发生的前一个时间点.例如,一个用户偶尔的删除了一个表
| 为了恢复这个用户错误和适应其它的唯一恢复需求,oracle提供了时间点的恢复.例如
| 例如,如果一个用户偶尔的删除了一个表,数据库能恢复到这个表删除的前一个时间点
-----------------------------------------------------------------------------------------
语句失败 | 当在一个oracle程序中语句有逻辑错误发生.当语句失败发生了,这个语句的影响会自动的
| 被oracle取消,控制返回给用户
-----------------------------------------------------------------------------------------
进程错误 | 由于用户进程访问oracle导致的失败,例如,不正常的断开或进程终止.后台进程pmon自动的 | 发现错误的用户进程,回滚用户进程没有提交的事务,释放这个进程使用的所有的资源
-----------------------------------------------------------------------------------------
实例错误 | 当发现了一个问题阻止了实例继续工作.实例错误可能由于硬件问题,例如电源,或软件问题
| 例如操作系统错误.当实例错误发生的时候,在sga的buffer中的数据不会写到数据文件中.
| 实例失败后,oracle自动的执行实例恢复.如果在rac环境中的实例,另外的时候为为失败的 | 实例进行恢复重做.在但实例的数据库,或在rac环境中所有的实例都出错了,oracle在重新 |启动数据库的时候自动应用重做日志.
-----------------------------------------------------------------------------------------
媒介(磁盘)错误 | 需要进行数据库操作的时候,当试图去写或读磁盘上的文件的时候发生.通常是磁盘头的错 | 误,这会造成一个磁盘驱动器丢失所有的文件.
| 不同的文件会受这样磁盘错误的影响,包括数据文件,redo日志文件,和控制文件.当然,因为 | 数据库实例不能继续正常的运作,sga中数据库缓冲区的数据不能永久的写到数据文件中
| 磁盘错误需要你恢复丢失的文件,然后执行媒介恢复.不像实例恢复,媒介互访需要用户来执 | 行.媒介恢复更新恢复的数据文件,这样信息能更磁盘错误发生的最近的时间点相一致,包括 | 由于失败造成的提交的数据.
------------------------------------------------------------------------------------------

oracle提供了从各种类型的硬件错误,包括磁盘错误的完全媒介恢复.可以有选项提供数据库执行完全恢复或者到一个时间点的部分恢复.

如果数据文件由于磁盘错误的破坏,但是大部分是数据库是没有动的, 还可以进行操作,数据库可以继续打开,并且进行单独的恢复.这样,数据库没有破坏的部分依然可以正常使用,然而破坏的部分可以恢复.


用于恢复的结构

oracle使用许多结构来提供实例错误或磁盘错误的完全恢复:redo log,undo记录,控制文件,数据库备份.如果
兼容设置到oracle9i或更高,undo记录可以恢复到undo表空间或回滚段.

redo日志

redo日志是一套用来保护内存中的修改了的还没有写到数据文件中的数据.redo log包含两部分:联机redo日志和归档redo日志.

联机redo日志是一套两个或更多的联机redo日志文件,用来记录对数据的所有的改变,包括没有提交的和提交的改变.redo entries临时的存放在sga的redo log缓冲区中,后台进程lgwr把redo entries顺序的写到联机redo日志文件中.lgwr继续写redo entries,每次用户进程提交事务的时候也会写一个提交记录.

可选的,满了的联机日志文件可以在重新使用前手工的或自动归档,建立归档日志文件.

为了enable或disable归档,可以把数据库设置在下面模式中的一种:

归档模式:满了的联机日志文件可以在循环使用之前归档.
非归档模式:满了的联机文件不被归档.

在归档模式,数据库可以从实例错误或磁盘错误中完全的恢复.数据库也可以在打开的时候进行备份,并且可以使用.然后,维护归档的redo日志需要更多的管理操作.

如果数据库的redo log运行在非归档模式,数据库可以完全的进行实例恢复,而不是磁盘错误.而且,数据库只有在忘却关闭的时候进行备份.因为没有创建归档日志,所以不需要管理员进行额外的工作.

undo 记录

undo记录

undo记录即可以存在undo表空间也也存在回滚段中.oracle使用undo的数据有很多目的,包括访问在没有提交的事务中访问快的以前的映像.在数据库恢复的过程中,oracle应用记录在redo日志中的记录,使用undo信息来回滚没有提交的事务.


控制文件

数据库的控制文件保留有数据库的文件结构,当前的lgwr正在写的log序列号的信息.在正常的恢复过程中,控制文件中的信息用来指导恢复操作中的自动进程.oracle可以多工控制文件,同时维护几个相同的控制文件.


数据库备份

因为由于磁盘错误,一个或多个文件可能会物理的损坏,媒介恢复需要从数据库的最近的操作系统备份中恢复损坏的文件.

你可以使用rman来备份数据库文件,这是推荐的,也可以使用操作系统工具.rman是管理备份和恢复操作的oracle工具,可以创建数据库文件(数据文件,控制文件,归档文件)的备份,也可以从备份中恢复数据库.

数据仓库概览


数据仓库是设计为查询和分析而不是事务处理用的关系型数据库.它通常包括从事务数据中得到的历史数据,也包括其它来源的数据.它把分析的工作量从事务的工作量中分离处理,并且可以让一个组织从多个来源中巩固数据.

除了关系型的数据库,数据仓库环境还包括 etl 解决方案,olap引擎,客户端分析工具,还有其它的管理数据采集进程并且把它传给商务用户的其它应用程序.


数据仓库和oltp系统的不同点

数据仓库和oltp系统有许多不同的需求.这里有典型的数据仓库和oltp不同点的一些例子.

工作负载

数据仓库设计为容许特别的查询.你也许事先不知道你的数据仓库的工作负载,这样数据仓库就应该最佳化去执行尽可能多的大范围的查询操作.

OLTP系统仅支持预定义的操作.你的应用程序也许专门的调整或设计为执行仅有的哪些操作.

数据修改

数据仓库是通过基本的常规使用批数据修改技术的ETL处理(每个晚上或每周运行)来进行更新.数据仓库的终端用户不直接修改数据仓库.

在OLTP系统中,终端用户常规的执行单个的数据修改语句对数据库进行修改.OLTP数据库总是保证更新,并且反应当前每个商务事务的状态

schema设计

数据仓库经常使用非范式或部分的非范式的schema(例如星schema)来优化查询的性能.
OLTP系统经常使用完全范式的schema来优化dml性能,并且保证数据的完整性.

典型操作

典型的数据仓库查询扫描成百千万的行.例如,"找出所以客户上个月的总销售".
典型的OLTP操作仅访问百级别的记录,例如"取出这个客户当前的订单".

历史数据

数据仓库通常存储几个月的或几年是数据,这是为了支持历史性分析.
OLTP系统通常存储几个星期或几个月的数据OLTP系统只要在需要成功的满足当前事务的需求的时候才会存储历史数据.


数据仓库体系结构

数据仓库和它的结构根据特定的组织的情况的不同而不同,三种普通的体系结构是

数据仓库(基本的)
数据仓库(分段运输区的)
数据仓库(有分段运输区和数据超市的)


数据仓库(基本的)
图1-6(略) 显示了数据仓库的简单的体系结构.终端用户通过数据仓库直接访问来自不通数据源系统的数据.

在传统的OLTP系统中的元数据和裸数据,作为传统类型的数据,是汇总数据.
汇总在数据仓库中是非常有价值的,因为提前进行了预先计算长的操作.例如,典型的数据仓库查询就是取类似像八月的销售.

汇总在oracle中叫物化视图.

数据仓库(分段运输区的)

图1-6中,在你把操作的数据放入数据仓库之前,你需要清理和出来你的数据.你可以用程序来做,尽管数据仓库使用了分段运输区.分段运输区简化了建汇总表和通用仓库管理,1.7表示了这个类型的体系结构.

数据仓库(有分段运输区和数据超市的)

进去图1-7的体系机构是很普通的,你也许需要在你的组织里面为不同的组定义你的仓库体系结构.

通过添加数据超市可以做,这个为特定线路的商务设计的系统.图1-8表明了采购,销售和库存分开的例子.这个例子中,财务分析也许要分析采购和销售的历史数据.


物化视图

物化视图通过把查询的结构保存在另外的schema对象中.提供了非直接的对表的数据访问.不像普通的视图,普通的视图不占有存储空间也不包含任何数据,物化视图包含从对多个基表或视图的查询的结果的数据.物化视图能更基表一样存储在同一个或其它的数据库中.

物化视图存储在和它的基表同一个数据库中,能通过查询重写来提高查询性能.在数据仓库环境中,查询重写特别的有用.

OLAP概览

oracle为了支持商务智能把OLAP集成到了数据中.这样的集成,提高了在保留管理性,扩展性,可靠性的oracle数据库和sql的访问性的多维数据库的能力.
关系管理系统和oracle olap提供了支持完全范围的报表和事务分析的功能补充.应用程序开放人员可以选择使用sql olap函数来进行标准或特别的报表.当需要额外的分析功能的时候,oracle olap可以用来提供例如多维计算,预测,模型,假定分析的功能.这样的技术使的开发人员建立复杂的分析和规划应用程序,例如销售和市场分析,企业预算和财务分析,以及需求计划系统.

数据可以存为关系行表或多维对象,无论哪个都根据性能和自然来更适合.不管数据存在哪里,它都能使用java或sql的olap引擎进行操作.没有必要在关系型和多维数据源之间进行数据复制.

oracle olap包含下面的组件:

优化快速计算的计算引擎
存储临时或永久的多维数据的分析工作空间
执行数学,统计,建模和对多维数据的其它传送的olap dml语言
使多维数据可以用sql操作的对oracle olap的sql接口
为商务智能开发java应用程序的olap api
定义olap api多维数据的olao元数据资料库


改变数据捕捉概览(Change Data Caputuer)
cdc有效的识别和捕捉从oracle关系表要被添加,更新,或移动的数据,并且通过应用程序使变更的数据可以使用.
通常,数据仓库涉及到从一个或多个数据源中取出和运输数据到数据仓库进行分析.cdc能很快的识别和出来要改变的数据,而不是整个表,这样就可以进一步的使用变化的数据.

cdc不依赖中间平滑文件来筹备关系数据库外面的数据.它捕捉由对用户表进行insert,update和delete的改变的数据.变化的数据存到叫做改变表的数据库对象中,这个改变的数据以可控的方式对于应用程序来说是可用的.

高可用性概览

计算环境中配置为几乎是提供全部时间的可用性,被称为高可用性系统.典型的这样的系统有冗余的硬件和软件,使的在故障的时候,系统还是可用的.良好设计的高可用性系统避免单点故障.任何可能失败的硬件或软件组件都要有同类型的冗余组件.

当故障发生的时候,故障切换进程把失败组件执行的任务移到备份组件上.这个进程重新控制系统资源,恢复部分或失败的事务,把系统

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9408/viewspace-102274/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 在上海
下一篇: 上海随笔
请登录后发表评论 登录
全部评论

注册时间:2002-04-05

  • 博文量
    464
  • 访问量
    352752