PART0-Oracle数据库介绍

1. Oracle数据库介绍

1.1. 关于关系型的数据库

每个组织都有必须存储和管理的信息,以满足其需求。例如,公司必须收集和维护员工的人力资源记录。这些信息必须对需要它的人可用。信息系统是一个用于存储和处理信息的正式系统。

信息系统可以是一组包含文件夹的纸箱,以及存储和检索文件夹的规则。然而,如今大多数公司使用数据库来自动化其信息系统。数据库是一个被作为一个单元处理的有组织的信息集合。数据库的目的是收集、存储和检索相关信息,以供数据库应用程序使用。

1. DBMS

数据库管理系统(DBMS)是一种控制数据存储、组织和检索的软件。通常,DBMS 具有以下元素:

  • 内核代码:这段代码管理数据库管理系统的内存和存储
  • 元数据仓库:这个仓库通常被称为数据字典
  • 查询语言: 这种语言使应用程序能够访问数据

2. 关系模型

关系模型基于集合论实现,关系指的存储一组无序的属性值的元组。关系型数据库的关系模型是用二维模型表示的表,行就是元组,列即是属性。关系模型有主要的三个方面,结构-用来定义对象以及数据的访问,操作-允许应用操作数据库的数据和结构,以及完好的规则保护数据库的数据和结构的操作。

3. 关系型数据库管理系统(RDBMS)

RDBMS把应用程序对数据库的逻辑操作物理的实现,包括如何将数据写入数据库,如何存储数据,以及如何从数据库中读出数据等。Oracle是一个RDBMS,除此之外Oracle实现了面向对象的功能,如用户自定义类型,继承,多态,因此又被称为对象-关系型的RDBMS。Oracle将关系模型扩展至对象-关系模型使得在关系型的数据库中存储更复杂的业务模型成为可能。

1.2. 用户对象(Schema Objects)

RDBMS的一个特征即是物理数据与逻辑数据结构独立开来。在Oracle数据库中,数据库的模式是逻辑数据结构或者该模式下所有对象的集合,数据库的模式由数据库用户所有,并等同于数据库用户名称。
模式下的对象是由用户创建的数据结构,这些结构与存储在数据库里面的数据直接相关。数据库支持多种类型的模式对象,最重要的表和索引。一个模式对象也是数据库对象,一些如profile,roles没有包含在模式里面。

1. 表

表描述了一种实体,比如说员工。比如当创建一张员工表时,你需要创建表名,一组数据列,并为每个数据列取列名和指定列的宽度。表是一组行的集合,表的某一列标识实体的某一种属性,而表的行标识实体的实例。例如,employees实体的属性对应于员工ID和姓氏列。一行标识一个特定的员工。

你能为每张表的每一列选择性的指定规则。这些规则被称为完整性约束(integrity constraints)。非空约束就是一个完整性约束的例子,这个约束强制每一行的每一列都含有值。

2. 索引

索引是一种能够在表的一个列和多个列上创建的一种可选的数据结构,它能够提高检索数据的性能。当处理一个请求时,数据库可以使用可用的索引有效的定位请求的行。当应用请求一个具体的行或者某个范围的行时,索引的好处就显现出来了。

1.3. 数据访问

1. 结构化查询语言

SQL是基于集合的声明式语言,给像Oracle这样的关系型数据库管理系统提供了接口。与类C这样的描述事情应该怎样被完成的过程性语言相对,SQL是一种非过程性语言,并且描述了什么事情应该被做。用户指定他们想要的结果,而不是如何获取结果。对于关系型的数据来说,SQL是一门符合ANSI标准的语言。
所有在Oracle数据库的数据上的操作都是使用SQL去运行。比如,你使用SQL创建表,查询表并且修改表的数据。SQL语句被认为是非常简单但强大的电脑程序或者指令。一条SQL语句类似于下面的SQL文本的字符串:

SELECT first_name,last_name FROM emoployees;

SQL语句允许你执行下面的任务:

  • 查询数据
  • 插入、更新、并且删除表中的数据
  • 创建、替代、更改并且删除对象
  • 控制访问数据库和它的对象
  • 保证数据库的一致性和完整性

SQL将上述任务统一为一种一致的语言。OracleSQL是一种ANSI标准的实现,OracleSQL支持并扩展了标准SQL外许多功能。

2. PL/SQL与Java

PL/SQL是OracleSQL拓展的过程性语言。PL/SQL与Oracle数据库集成,允许你使用Oracle数据库的SQL语句,函数,数据类型。你能使用PL/SQL去控制SQL程序的流程,使用变量,并且错误处理的子程序。

PL/SQL的一个主要的好处就是存储应用程序的逻辑到数据库里面的能力。一个PL/SQL的存储过程或者函数是有一组SQL语句和其他PL/SQL结构,相同的组的模式对象,他们都存储在数据库中,并且作为一个单元运行去解决具体的问题或者与执行一组相关的任务。服务侧编程的主要好处就是内置的函数能够部署到任务地方。

Oracle数据库也能够存储java写的程序单元。Java的存储是一个发布给SQL的Java方法,存储在数据库中。你能使用Java调用PL/SQL程序,也能使用PL/SQL调用Java程序。

1.4. 事务管理

1. 事务

关系数据库管理系统(RDBMS)必须能够将 SQL 语句分组,使它们要么全部提交(即应用到数据库),要么全部回滚(即撤销)。事务是一个包含一个或多个 SQL 语句的逻辑、原子工作单元。
一个需要使用事务的例子是从储蓄账户向支票账户转账。转账包括以下独立操作:

  • 减少储蓄账户的金额
  • 增加支票账户的金额
  • 在交易日志中记录该笔交易

Oracle 数据库保证这三个操作要么全部成功,要么全部失败。例如,如果硬件故障导致事务中的某条语句无法执行,则其他语句必须回滚。事务是将 Oracle 数据库与文件系统区分开来的特性之一。如果你执行一个更新多个文件的原子操作,而系统在执行过程中途失败,那么这些文件将不一致。相比之下,事务将 Oracle 数据库从一个一致状态移动到另一个一致状态。事务的基本原则是“要么全有,要么全无”:原子操作要么整体成功,要么整体失败。

2. 数据并发性

多用户RDBMS的一个要求是控制并发,即多个用户同时访问相同数据。如果没有并发控制,用户可能会错误地更改数据,破坏数据的完整性。例如,一个用户可能在另一个用户同时更新某行时更新该行。
如果多个用户访问相同的数据,一种管理并发的方法是让用户等待。然而,DBMS的目标是减少等待时间,使其几乎不存在或可以忽略。所有修改数据的SQL语句必须在尽可能少的干扰下进行。必须避免破坏性交互,即错误更新数据或更改底层数据结构的交互。
Oracle数据库使用锁来控制对数据的并发访问。锁是一种机制,可以防止访问共享资源的事务之间发生破坏性交互。锁有助于在允许最大并发访问数据的同时确保数据的完整性。

3. 数据一致性

在 Oracle 数据库中,每个用户都必须看到数据的一致视图,包括用户自己事务所做的可见更改以及其他用户已提交事务的更改。例如,数据库不得允许脏读,这是指一个事务看到另一个并发事务所做的未提交更改的情况。
Oracle 数据库始终强制执行语句级读一致性,这保证了单个查询返回的数据是已提交的,并且在某个时间点上是一致的。根据事务隔离级别,这个时间点可以是语句开始执行的时间,也可以是事务开始的时间。闪回查询功能使您能够明确指定这个时间点。
数据库还可以为事务中的所有查询提供读一致性,这称为事务级读一致性。在这种情况下,事务中的每个语句都能看到相同时间点的数据,即事务开始时的数据。

1.5. Oracle数据库架构

数据库服务器是信息管理的关键。通常情况下,服务器能够在多用户环境中管理大量数据保证可靠性,以便用户可以同时访问相同的数据。数据库服务器还可以防止未经授权的访问,并提供有效的故障恢复解决方案。

1. 数据库与实例

一个Oracle数据库服务器由一个数据库和至少一个数据库实例(通常简称为实例)组成。由于实例和数据库之间的联系非常密切,因此有时使用术语Oracle数据库来指代实例和数据库。严格来说,这些术语有以下含义:

  • 数据库(database): 数据库是位于磁盘上的一组文件,用于存储数据。这些文件可以独立于数据库实例存在。
  • 数据库实例(database instance): 实例是一组内存结构,用于管理数据库文件。实例由一个称为系统全局区域(SGA)的共享内存区域和一组后台进程组成。实例可以独立于数据库文件存在。

图1-1展示了一个数据库及其实例。对于连接到实例的每个用户,应用程序由客户端进程运行。每个客户端进程都与其自己的服务器进程相关联。服务器进程具有其自己的私有会话内存,称为程序全局区域(PGA)。
数据库可以从物理和逻辑两个角度来考虑。物理数据是在操作系统级别可见的数据。例如,操作系统实用程序如Linux的ls和ps可以列出数据库文件和进程。逻辑数据(如表)仅对数据库有意义。SQL语句可以列出Oracle数据库中的表,但操作系统实用程序则无法做到。
数据库具有物理结构和逻辑结构。由于物理和逻辑结构是分开的,因此可以管理数据的物理存储而不影响对逻辑存储结构的访问。例如,重命名物理数据库文件不会重命名存储在该文件中的表。

2. 数据库存储结构

关系型数据库的一个基本任务是数据存储。本节简要描述Oracle数据库使用的物理和逻辑存储结构。

2.1. 物理存储结构

物理数据库结构是存储数据的文件。当您执行SQL命令CREATE DATABASE时,会创建以下文件:

  • 数据文件:每个 Oracle数据库都有一个或多个物理数据文件,其中包含所有数据库数据。逻辑数据库结构的数据,如表和索引,实际上存储在数据文件中。
  • 控制文件:每个 Oracle数据库都有一个控制文件。控制文件包含了指定数据库的物理结构的元数据,包括数据库名称以及数据库文件的名称和位置。
  • 在线重做日志文件:每个Oracle 数据库都有一个在线重做日志,它是由两个或多个在线重做日志文件组成的集合。在线重做日志由重做条目(也称为重做记录)组成,记录了对数据所做的所有更改。

许多其他文件对于Oracle 数据库服务器的正常运行也非常重要。这些文件包括参数文件和诊断文件。备份文件和归档重做日志文件是离线文件,对于备份和恢复至关重要。

2.2. 逻辑存储结构

本节讨论逻辑存储结构。以下逻辑存储结构使Oracle数据库能够对磁盘空间使用进行细粒度控制:

  • 数据块:在最细粒度级别上,Oracle数据库中的数据存储在数据块中。每个数据块对应磁盘上的特定字节数。
  • 区:区是若干逻辑上连续的数据块的集合,在单次分配中获取,用于存储特定类型的信息。
  • 段:段是一组为用户对象(例如表或索引)、撤销数据或临时数据分配的区。
  • 表空间:数据库分为称为表空间的逻辑存储单元。表空间是段的逻辑容器。每个表空间包含至少一个数据文件。

3. 数据库实例结构

Oracle数据库使用内存结构和进程来管理和访问数据库。所有内存结构都存在于构成关系数据库管理系统 (RDBMS) 的计算机的主内存中。
当应用程序连接到Oracle数据库时,它们连接到一个数据库实例。该实例通过分配除 SGA(系统全局区)之外的其他内存区域,并启动除后台进程之外的其他进程,为应用程序提供服务。

3.1. Oracle数据库进程

一个进程是在操作系统中运行一系列步骤的机制。一些操作系统使用作业、任务或线程等术语。在本讨论中,线程等同于进程。一个 Oracle 数据库实例包含以下类型的进程:

  • 客户端进程:这些进程是为运行应用程序或Oracle工具的软件代码而创建和维护的。大多数环境中,客户端进程运行在独立的计算机上。
  • 后台进程:这些进程整合了原本由每个客户端进程运行的多个Oracle数据库程序的功能。后台进程异步执行 I/O 操作并监控其他 Oracle 数据库进程,从而提供更高的并行性以提高性能和可靠性。
  • 服务器进程:这些进程与客户端进程通信并与Oracle数据库交互以满足请求。
    Oracle进程包括服务器进程和后台进程。在大多数环境中,Oracle进程和客户端进程运行在不同的计算机上。
3.2. 实例内存结构

Oracle数据库创建并使用内存结构来实现多种目的,如存储程序代码、用户间共享的数据以及每个连接用户的私有数据区。以下内存结构与数据库实例相关联:

  • 系统全局区 (SGA):SGA是一组共享内存结构,包含一个数据库实例的数据和控制信息。SGA组件的示例包括缓存的数据块和共享的SQL区域。
  • 程序全局区 (PGA):PGA是一个内存区域,包含服务器或后台进程的数据和控制信息。对PGA的访问是该进程独有的。每个服务器进程和后台进程都有自己的PGA。

4. 应用与网络架构

为了充分利用给定的计算机系统或网络,Oracle数据库允许将处理工作分割在数据库服务器和客户端程序之间。运行关系数据库管理系统 (RDBMS) 的计算机负责数据库服务器的职责,而运行应用程序的计算机负责数据的解释和显示。

4.1. 应用架构

应用程序架构指的是数据库应用程序连接到 Oracle 数据库的计算环境。最常见的数据库架构有两种:客户端/服务器架构和多层架构。
在客户端/服务器架构中,客户端应用程序发起一个请求,以在数据库服务器上执行某个操作。服务器运行 Oracle 数据库软件,并处理并发共享数据访问所需的功能。服务器接收并处理来自客户端的请求。
在传统的多层架构中,一个或多个应用服务器执行部分操作。应用服务器包含大量的应用逻辑,提供对客户端数据的访问,并执行一些查询处理,从而减轻数据库的负载。应用服务器可以作为客户端和多个数据库之间的接口,并提供额外的安全层。
面向服务的架构(SOA)是一种多层架构,其中应用功能被封装在服务中。SOA 服务通常实现为 Web 服务。Web 服务通过 HTTP 访问,并基于 XML 标准,如 Web 服务描述语言 (WSDL) 和 简单对象访问协议 (SOAP)。
Oracle 数据库可以在传统的多层架构或 SOA 环境中充当 Web 服务提供者。

4.2. 网络架构

Oracle Net服务是数据库与网络通信协议之间的接口,促进分布式处理和分布式数据库的实现。通信协议定义了数据在网络上传输和接收的方式。Oracle Net服务支持所有主要的网络协议,包括TCP/IP、HTTP、FTP和WebDAV。
Oracle Net是Oracle Net服务的一个组件,它从客户端应用程序到数据库服务器建立并维护网络会话。网络会话建立后,Oracle Net作为客户端应用程序和数据库服务器之间的数据传递者,交换它们之间的消息。由于Oracle Net位于网络中的每台计算机上,因此能够执行这些任务。
Net Services的一个重要组件是Oracle Net Listener(称为监听器,它是一个在数据库服务器或网络其他位置运行的独立进程。客户端应用程序可以向监听器发送连接请求,监听器管理这些请求的流量到数据库服务器。当连接建立后,客户端和数据库直接进行通信。
配置Oracle 数据库以服务客户端请求的最常见方法有:

  • 专用服务器架构:每个客户端进程连接到一个专用服务器进程。服务器进程在客户端会话期间不与任何其他客户端共享。每个新会话都分配一个专用服务器进程。
  • 共享服务器架构:数据库使用一组共享进程来处理多个会话。客户端进程与调度程序通信,调度程序是一个允许许多客户端连接到同一数据库实例的进程,而无需为每个客户端专门分配服务器进程。

1.6. Oracle数据库文档路线图

本节解释了如何阅读本手册以及它如何与整个 Oracle 数据库文档集相配合。
对于新用户来说,Oracle 数据库文档库可能显得令人生畏。不仅有超过175本手册,而且许多手册都有几百页长。然而,文档设计了特定的访问路径,以确保用户能够尽可能高效地找到他们需要的信息。
文档集分为三层或组:基础、中级和高级。用户从基础组的手册开始(如Oracle Database 2 Day DBAOracle Database 2 Day Developer's Guide或本手册),然后继续阅读中级组的手册(2 天 + 系列),最后阅读高级手册,其中包括剩余的文档集。

1. 基础组

对于新接触 Oracle 数据库的技术用户,他们开始阅读基础组中的一个或多个手册,从头到尾阅读。该组中的每个手册都设计成在两天内阅读完毕。除了本手册外,基础组还包括:

  • Oracle Database 2 Day DBA:这本手册是一个基于任务的 DBA 快速入门,教您如何执行日常数据库管理任务。它教您执行所有保持数据库运行所需的常见管理任务,包括如何执行基本故障排除和性能监控活动。
  • Oracle Database 2 Day Developer's Guide:这本手册是一个基于任务的数据库开发人员快速入门指南,通过 SQL 和 PL/SQL 解释如何使用 Oracle 数据库的基本功能。基础组中的手册之间密切相关,这在交叉引用的数量中反映出来。例如,Oracle Database Concepts经常引导用户到 2 天手册中去学习如何执行基于概念的任务。2 天手册经常引用Oracle Database Concepts以获取关于任务的概念背景信息。

2. 中级组

从基础组进一步向上的是中级组。该组中的手册以“2 天 +”为前缀,因为它们扩展并假设了 2 天手册中包含的信息。这些手册比基础手册更深入地涵盖了各种主题,或者涵盖了特别感兴趣的主题。如表 1-1 所示,“2 天 +”手册被划分为 DBA 和开发人员手册。

3. 高级组

从中级组进一步向上的是高级组。这些手册适用于需要比“2 天 +”手册提供的更详细信息的专业用户。高级组中的基本参考手册包括:

  • Oracle Database SQL Language Reference:该手册是关于 Oracle SQL 的权威信息源。
  • Oracle Database Reference:该手册是关于初始化参数、数据字典视图和动态性能视图的权威信息源。
    高级指南太多而无法在本节中列出。表1-2列出了大多数专家 DBA 和开发人员在某个时候会使用的指南。

其他高级指南取决于用户的责任领域。例如,安全主管自然会参考Oracle Database Security Guide

热门相关:重生八零俏佳妻   煌煌天道无上剑宗   剑仙三千万   娇妻太甜:禁欲总裁,别太急   寒门状元