PARTVI-Oracle数据库管理与开发-数据库管理员和开发人员的主题

17.数据库管理员和开发人员的主题

17.1. 数据库安全概述

通常情况下,数据库安全涉及用户认证、加密、访问控制和监控。

17.1.1. 用户账户

每个Oracle数据库都有一个有效数据库用户的列表。数据库包含几个默认账户,包括默认的管理员账户SYSTEM(参见第2-5页的“SYS和SYSTEM模式”)。你可以根据需要创建用户账户。要访问数据库,用户必须提供有效的用户名和认证凭据。凭据可能是密码、Kerberos票据或公钥基础设施(PKI)证书。你可以配置数据库安全以锁定基于失败登录尝试的账户。

17.1.1.1. 权限和角色授权

通常情况下,数据库访问控制涉及限制数据访问和数据库活动。例如,你可以限制用户查询指定的表或执行指定的数据库命令。

用户权限是运行特定SQL语句的权利。权限可以分为以下几类:

  • 系统权限:这是在数据库中执行特定操作或对特定类型的对象执行操作的权利。例如,CREATE USER和CREATE SESSION是系统权限。
  • 对象权限:这是对对象执行特定操作的权利,例如查询员工表。权限类型由数据库定义。

权限是由其他用户自行决定授予的。管理员应该根据用户完成工作所需的权限来授予权限。良好的安全实践是只授予需要该权限来完成必要工作的用户权限。角色是一组相关权限的命名集合,你可以将其授予用户或其他角色。角色有助于管理数据库应用程序或用户组的权限。图17-1描述了角色的常见用途。PAY_CLERK、MANAGER和REC_CLERK角色被分配给不同的用户。应用程序角色ACCTS_PAY,包括执行ACCTS_PAY应用程序的权限,被分配给具有PAY_CLERK和MANAGER角色的用户。应用程序角色ACCTS_REC,包括执行ACCTS_REC应用程序的权限,被分配给具有REC_CLERK和MANAGER角色的用户。

17.1.1.2. 配置文件

在系统资源的背景下,用户配置文件是一组命名的资源限制和密码参数,用于限制用户对数据库使用和实例资源的访问。配置文件可以限制用户并发会话的数量、每个会话可用的CPU处理时间以及可用的逻辑I/O数量(参见第14-10页的“缓冲区I/O”)。例如,职员配置文件可能会将用户限制在执行文书任务所需的系统资源上。

注意:最好使用数据库资源管理器来限制资源,并使用配置文件来管理密码。

配置文件为共享一组属性的用户提供了一个单一的参考点。你可以为一组用户分配一个配置文件,并对所有其他用户分配一个默认配置文件。每个用户在任何时候最多只能分配一个配置文件。

17.1.2. 授权

在Oracle数据库中,数据库认证是用户向数据库出示凭据的过程,数据库验证凭据并允许访问数据库。验证身份建立了进一步交互的信任关系。认证还通过将访问和操作链接到特定身份,实现了可追溯性。

Oracle数据库提供了不同的认证方法,包括以下方法:

  • 由数据库进行认证
    Oracle数据库可以使用密码、Kerberos票据或PKI证书来认证用户。Oracle还支持符合RADIUS标准的设备进行其他形式的认证,包括生物识别。在Oracle数据库中创建用户时,必须指定认证类型。
  • 由操作系统进行认证
    某些操作系统允许Oracle数据库使用它们维护的信息来认证用户。用户在被操作系统认证后,可以在不指定用户名或密码的情况下连接到数据库。

数据库操作,如关闭或启动数据库,不应由非管理数据库用户执行。这些操作需要SYSDBA或SYSOPER权限(参见第13-6页的“使用管理员权限连接”)。

17.1.3. 加密

通常情况下,加密是使用秘钥和加密算法将数据转换为不可读格式的过程。加密通常用于满足监管合规要求,例如与支付卡行业数据安全标准(PCI-DSS)或违规通知法律相关的要求。例如,必须加密信用卡号、社会安全号码或患者健康信息。

网络加密:在客户端和服务器之间通过网络传输数据时对其进行加密称为网络加密。入侵者可以使用网络数据包嗅探器捕获在网络上传输的信息,然后将其转储到文件中以供恶意使用。在网络上加密数据可以防止这类活动。

透明数据加密:Oracle Advanced Security的透明数据加密使你能够加密单个表格列或表空间。当用户将数据插入加密列时,数据库会自动加密数据。当用户选择该列时,数据会被解密。这种形式的加密是透明的,提供高性能且易于实施。透明数据加密包括行业标准的加密算法,如高级加密标准(AES)和内置的密钥管理。

17.1.4. Oracle数据屏蔽

从Oracle Database 11g Release 2(11.2.0.4)开始,Oracle Data Redaction使您能够对低权限用户或应用程序查询的数据进行屏蔽(红action)。当用户查询数据时,红action会实时发生。Oracle Data Redaction是Oracle Advanced Security的一部分。数据红action支持以下红action函数类型:

  • 完整数据红action
    在这种情况下,数据库会红action表格或视图中指定列的全部内容。例如,用于姓氏的VARCHAR2列显示为一个空格。

  • 部分数据红action
    在这种情况下,数据库会红action显示输出的部分内容。例如,应用程序可以将信用卡号1234显示为xxxx-xxxx-xxxx-1234。您可以为完整和部分红action使用正则表达式。正则表达式可以根据搜索模式红action数据。例如,您可以使用正则表达式来红action特定的电话号码或电子邮件地址。

  • 随机数据红action
    在这种情况下,数据库根据列的数据类型显示为随机生成的值。例如,数字1234567可以显示为83933895。

数据红action不是全面的安全解决方案。例如,它不能防止直接连接的特权用户对红action数据进行推理攻击。这种攻击识别红action列,并通过重复猜测存储值的SQL查询,通过排除法尝试回溯到实际数据。为了检测和防止来自特权用户的推理和其他攻击,Oracle建议将Oracle Data Redaction与相关的数据库安全产品配对,如Oracle Audit Vault and Database Firewall,以及Oracle Database Vault。

数据红action的工作方式如下:

  • 使用DBMS_REDACT包为指定的表创建一个红action策略。
  • 在策略中,指定一个预定义的红action函数。
    数据库显示列的实际值还是红action值取决于策略。如果数据被红action,则红action发生在顶层选择列表立即显示给用户之前。

以下示例为hr.employees表的employee_id列添加了一个完整数据红action策略:

BEGIN DBMS_REDACT.ADD_POLICY( 
object_schema => 'hr'
, object_name => 'employees'
, column_name => 'employee_id'
, policy_name => 'mask_emp_ids'
, function_type => DBMS_REDACT.FULL 
, expression  => '1=1' );
END; /

在前面的示例中,表达式设置为真,将红action应用于未被授予EXEMPT REDACTION POLICY权限的用户。

17.1.5. 访问控制

Oracle数据库提供了许多控制数据访问的技术。本节总结了其中一些技术。

17.1.5.1. Oracle数据库保险箱(Oracle Database Vault)

Oracle数据库保险箱是一种安全选项,它限制特权用户对应用程序数据的访问。你可以使用Oracle数据库保险箱来控制数据库、数据和应用程序何时、何地以及如何被访问。因此,你可以解决常见的安全问题,例如防止内部威胁、遵守法规要求以及执行职责分离。

17.1.5.2. 虚拟专用数据库(VPD)

Oracle虚拟专用数据库(VPD)使你能够在行和列级别执行安全性。安全策略建立了保护数据库免受意外或恶意破坏数据或损坏数据库基础设施的方法。当权限和角色等安全保护措施不够细粒度时,VPD非常有用。例如,你可以允许所有用户访问员工表,但创建安全策略以限制用户访问与其在同一部门的员工。本质上,数据库会向针对应用了Oracle VPD安全策略的表、视图或同义词发出的SQL语句添加动态的WHERE子句。WHERE子句只允许通过安全策略的凭据的用户访问受保护的数据。

17.1.5.3. Oracle标签安全(OLS)

Oracle标签安全(OLS)是一种安全选项,它允许你分配数据分类并使用安全标签控制访问。你可以为数据和用户分配标签。

当分配给数据时,标签可以作为隐藏列附加到现有表中,为现有SQL提供透明度。例如,包含高敏感数据的行可以被标记为HIGHLY SENSITIVE,而敏感度较低的行可以被标记为SENSITIVE,依此类推。当用户尝试访问数据时,OLS会比较用户标签和数据标签,并确定是否应该授予访问权限。与VPD不同,OLS提供了现成的安全策略和用于定义和存储标签的元数据仓库。

17.1.6. 监控

Oracle数据库提供了多种工具和技术来监控用户活动

17.1.6.1. 数据库审计

数据库审计是对选定的用户数据库操作进行监控和记录。您可以使用标准审计来审计SQL语句、权限、模式、对象以及网络和多层活动。或者,您可以使用细粒度审计来监控特定的数据库活动,例如对数据库表的操作或活动发生的时间。例如,您可以审计在晚上9:00之后访问的表。

使用审计的原因包括:

  • 为当前操作启用未来的可追溯性
  • 基于用户的责任,阻止用户(或其他人,如入侵者)进行不适当的操作
  • 调查、监控和记录可疑活动
  • 满足合规性审计要求

17.1.6.2. Oracle审计保险箱和数据库防火墙

Oracle Audit Vault和Database Firewall(Oracle AVDF)为数据库提供了第一道防线,并从数据库、操作系统和目录中整合审计数据。基于SQL语法的引擎在未授权的SQL流量到达数据库之前对其进行监控和阻断。为了合规性报告和警报,Oracle AVDF将网络中的数据库活动数据与详细的审计数据结合起来。您可以定制审计和监控控制措施,以满足企业安全需求。

17.1.6.3. Oracle Enterprise Manager审计支持

Oracle Enterprise Manager 使您能够查看和配置与审计相关的初始化参数。此外,您还可以在审计语句和模式对象时管理对象。例如,企业经理使您能够显示和搜索当前审计的语句、权限和对象的属性。您可以根据需要启用和禁用审计。

17.2. 高可用概述

可用性是指应用程序、服务或功能按需提供的程度。例如,在线书店使用的OLTP数据库在其可供客户进行购买时是可用的。高可用性的主要特征包括可靠性、可恢复性、及时的错误检测和持续运行。

在数据库环境中,高可用性的重要性与停机成本有关,停机时间是指资源不可用的时间。停机时间可以是计划内的或非计划内的。设计高可用环境的主要挑战是检查所有可能导致停机的原因,并制定应对计划。

17.2.1. 高可用性和非计划性停机

Oracle数据库提供了多种高可用性解决方案,以预防、容忍和减少所有类型的非计划性故障导致的停机时间。非计划性停机可以根据其原因进行分类:

  • 站点故障
  • 计算机故障
  • 存储故障
  • 数据损坏
  • 人为错误

17.2.1.1. 站点故障

站点故障是指某个事件导致应用程序全部或大部分停止处理或减缓至无法使用服务水平。站点故障可能影响数据中心的所有处理,或者影响数据中心支持的应用程序子集。例子包括持续的全站点电源或网络故障、自然灾害使数据中心无法运行,或对运营或站点的恶意攻击。针对站点故障最简单的保护形式是使用RMAN创建数据库备份并将其存储在异地。你可以将数据库恢复到另一台主机上。然而,这种技术可能耗时较长,而且备份可能不是最新的。在Data Guard环境中维护一个或多个备用数据库,可以在生产站点发生故障时提供持续的数据库服务。

17.2.1.2. 计算机故障

计算机故障停机发生在运行数据库的系统变得不可用,因为它已经关闭或不再可访问时。计算机故障的例子包括硬件和操作系统故障。以下Oracle特性可以防止或帮助响应计算机故障:

  • 企业网格
    在Oracle实时应用集群(Oracle RAC)环境中,Oracle数据库在集群中的两个或更多系统上运行,同时并发访问一个共享的数据库。一个数据库系统跨越多个硬件系统,但对应用程序来说,它看起来像一个单一的数据库。参见第17-12页的“网格计算概述”。

  • Oracle Data Guard
    Data Guard使您能够维护一个生产数据库的副本,称为备用数据库,它可以位于不同的大陆或同一个数据中心。如果主数据库因停机而不可用,那么Data Guard可以将任何备用数据库切换到主角色,从而最小化停机时间。参见Oracle Data Guard概念和管理员指南。

  • Oracle Restart
    Oracle数据库软件堆栈中的组件,包括数据库实例、监听器和Oracle ASM实例,在组件故障或数据库主机计算机重新启动后可以自动重启。Oracle Restart确保Oracle组件按照组件依赖关系的正确顺序启动。参见Oracle数据库管理员指南,了解如何配置Oracle Restart。

  • 快速启动故障恢复
    系统故障或崩溃是计划外停机的常见原因。Oracle数据库中的快速启动故障恢复技术可以自动限制数据库实例恢复时间。有关快速启动故障恢复的信息,请参见Oracle数据库性能调整指南。

17.2.1.3. 存储故障

存储故障停机发生在存储数据库部分或全部内容的存储变得不可用时,因为它已经关闭或不再可访问。存储故障的例子包括磁盘驱动器或存储阵列的故障。除了Oracle Data Guard,解决存储故障的解决方案包括:

  • Oracle自动存储管理(Oracle ASM)
    Oracle ASM是数据库内核中的一个垂直集成文件系统和卷管理器(参见第11-3页的“Oracle自动存储管理(Oracle ASM)”)。Oracle ASM消除了与数据和磁盘管理相关的复杂性,并简化了镜像以及添加和移除磁盘的过程。

  • 备份和恢复
    Recovery Manager(RMAN)实用工具可以备份数据,从先前的备份中恢复数据,并恢复到故障发生前的数据变更(参见第18-9页的“备份和恢复”)。

17.2.1.4. 数据损坏

数据损坏发生在硬件、软件或网络组件导致读取或写入损坏数据时。例如,卷管理器错误可能导致磁盘读取或写入错误。数据损坏很少见,但可能对数据库以及业务产生灾难性影响。

除了Data Guard和Recovery Manager,Oracle数据库支持以下防止数据损坏的保护形式:

  • 丢失写入保护
    数据块丢失写入发生在I/O子系统确认块写入完成时,而实际上写入并未发生。您可以配置数据库,以便在重做日志中记录缓冲区缓存块读取。当与Data Guard一起使用时,丢失写入检测最为有效。

  • 数据块损坏检测
    块损坏是一个数据块不在公认的Oracle格式中,或者其内容在内部不一致。包括RMAN在内的几个数据库组件和实用工具可以检测到损坏的块,并将其记录在V$DATABASE_BLOCK_CORRUPTION中。如果环境使用了实时备用数据库,那么RMAN可以自动修复损坏的块。

  • 数据恢复顾问
    Data Recovery Advisor是一个Oracle工具,它可以自动诊断数据故障,确定并呈现适当的修复选项,并在用户请求时执行修复。

17.2.1.5. 人为错误

人为错误停机发生在无意中或恶意的行为导致数据库中的数据逻辑上损坏或无法使用时。人为错误停机对服务水平的影响可以根据受影响数据的数量和关键性质而有很大差异。

许多研究将人为错误视为停机的主要原因。Oracle数据库提供了强大的工具,以帮助管理员快速诊断并从这些错误中恢复。它还包括一些功能,使用户能够在没有管理员参与的情况下从问题中恢复。

针对人为错误,Oracle数据库推荐以下保护形式:

  • 限制用户访问
    防止错误的最好方法是限制用户对数据和服务的访问。Oracle数据库提供了广泛的安全工具,通过验证用户身份,然后允许管理员仅授予用户执行其职责所需的权限来控制用户对应用程序数据的访问(参见第17-1页的“数据库安全概述”)。

  • Oracle Flashback技术
    Oracle Flashback技术是Oracle数据库中一系列用于纠正人为错误的功能。Oracle Flashback提供了一个SQL接口,用于快速分析和修复人为错误。例如,您可以执行:

    • 对局部损坏进行细粒度的外科手术式分析和修复
    • 对更广泛的损坏进行快速更正
    • 在行、事务、表、表空间和数据库级别进行恢复
  • Oracle LogMiner
    Oracle LogMiner是一个关系工具,它使用SQL读取、分析和解释在线重做日志文件(参见第18-8页的“Oracle LogMiner”)。

17.2.2. 高可用性和计划停机

计划内停机可能同样会扰乱运营,特别是在支持多个时区用户的全球性企业中。在这种情况下,设计一个系统以最小化计划内的中断非常重要,例如常规操作、定期维护和新的部署。计划内停机可以根据其原因进行分类:

  • 系统和数据库变更
  • 数据变更
  • 应用程序变更

17.2.2.1. 系统和数据库变更

计划内的系统变更发生在执行常规和周期性维护操作以及新的部署时,包括在数据库中的组织数据结构之外对操作环境进行计划内的变更。示例包括添加或移除CPU和集群节点(节点是数据库实例所在的计算机)、升级系统硬件或软件,以及迁移系统平台。Oracle数据库提供了动态资源配置作为应对计划内系统和数据库变更的解决方案:

  • 数据库的动态重配置
    Oracle数据库可以动态适应硬件和数据库配置的各种变更,包括在SMP服务器上添加和移除处理器,以及使用Oracle ASM添加和移除存储阵列。例如,Oracle数据库监控操作系统以检测CPU数量的变化。如果CPU_COUNT初始化参数设置为默认值,那么数据库工作负载可以动态利用新添加的处理器。

  • 自动调优内存管理
    Oracle数据库使用非集中式策略在SGA和PGA的每个子组件中释放和获取内存。Oracle数据库通过提示操作系统将内存粒度转移到需要它的组件来自动调优内存。有关详细信息,请参见第18-15页的“内存管理”。

  • 数据文件、控制文件和在线重做日志文件的自动分布
    Oracle ASM通过自动将它们分布在所有可用磁盘上,自动化和简化了数据文件、控制文件和日志文件的布局。要了解有关Oracle ASM的更多信息,请参见Oracle自动存储管理管理员指南。

17.2.2.2. 数据变更

计划内的数据变更发生在Oracle数据库对象的逻辑结构或物理组织发生变化时。这些变更的主要目标是提高性能或可管理性。示例包括表重定义、添加表分区以及创建或重建索引。Oracle数据库通过在线重组和定义来最小化数据变更的停机时间。这种架构使您能够在数据库打开时执行以下任务:

  • 执行在线表重定义,这使您能够在不显著影响表可用性的情况下修改表结构。
  • 创建、分析和重组索引(参见第3章“索引和索引组织表”)。
  • 移动表分区(参见第4-1页的“分区概述”)。

17.2.2.3. 应用变更

计划内的应用程序变更可能包括对数据、模式和程序的更改。这些变更的主要目标是提高性能、可管理性和功能性。一个例子是应用程序升级。Oracle数据库支持以下解决方案,以最小化对应用程序数据库对象进行更改时所需的应用程序停机时间:

  • 滚动补丁更新
    Oracle数据库支持以滚动方式对Oracle RAC系统的节点应用补丁。参见《Oracle数据库高可用性最佳实践》。

  • 滚动发布升级
    Oracle数据库支持以滚动方式安装数据库软件升级和应用补丁集,几乎不会造成数据库停机,方法是使用Data Guard SQL Apply和逻辑备用数据库。参见《Oracle数据库升级指南》。

  • 基于版本的重定义
    基于版本的重定义使您能够在应用程序使用时升级数据库对象,从而最小化或消除停机时间。Oracle数据库通过在称为版本的私有环境中更改(重新定义)数据库对象来完成此任务。参见《Oracle数据库高级应用开发者指南》。

  • 使用默认WAIT选项的DDL
    DDL命令需要对内部结构获得独占锁(参见第9-24页的“DDL锁”)。在以前的版本中,如果无法获得锁,则DDL命令将失败。使用WAIT选项指定的DDL解决了这个问题。参见《Oracle数据库高可用性概述》。

  • 以禁用状态创建触发器
    您可以在禁用状态下创建触发器,以确保在启用触发器之前代码能够成功编译。参见《Oracle数据库PL/SQL语言参考》。

17.3. 网格计算概述

网格计算是一种计算架构,它有效地将大量服务器和存储资源汇集成一个灵活的、按需的资源池,以满足所有企业计算需求。数据库服务器网格是一组连接在一起的商品化服务器,用于运行一个或多个数据库。数据库存储网格是一组低成本的模块化存储阵列,组合在一起并被数据库服务器网格中的计算机访问。

通过数据库服务器和存储网格,您可以构建一个系统资源池。您可以根据业务优先级动态分配和释放这些资源。

图17-2展示了网格企业计算环境中的数据库服务器网格和数据库存储网格。

17.3.1. 数据库服务器网格

Oracle Real Application Clusters(Oracle RAC)允许多个通过互联连接的实例共享对Oracle数据库的访问。在Oracle RAC环境中,Oracle数据库在集群中的两个或更多系统上运行,同时并发访问一个单一的共享数据库。Oracle RAC通过提供一个跨多个低成本服务器的单一数据库,实现了数据库服务器网格,但对应用程序来说,它看起来像是一个单一的、统一的数据库系统。

Oracle Clusterware是一种软件,它使得服务器能够像一个服务器一样协同工作。每个服务器看起来都像任何独立的服务器。然而,每个服务器都有额外的进程,它们相互通信,使得不同的服务器像一个服务器一样协同工作。Oracle Clusterware提供了运行集群所需的所有功能,包括节点成员资格和消息服务。

17.3.1.1. 可扩展性

在数据库服务器网格中,Oracle RAC允许您根据容量需求的增加向集群添加节点。Oracle RAC中实现的Cache Fusion技术使您能够在不更改应用程序的情况下扩展容量。因此,您可以逐步扩展系统以节省成本,并消除用更大的节点替换较小的单节点系统的需求。

您可以逐步向集群添加节点,而不是用更大的节点替换现有系统。网格即插即用(Grid Plug and Play)简化了从集群中添加和移除节点的过程,使得在动态配置环境中部署集群更加容易。网格即插即用还支持以位置无关的方式管理和提供数据库及服务。单一客户端访问名称(SCAN)使客户端能够在不考虑其在网格内的位置的情况下连接到数据库服务。

17.3.1.2. 容错

故障容错是由高可用性架构提供的,用于防止架构中某个组件故障的保护措施。Oracle RAC架构的一个关键优势是多个节点所固有的故障容错能力。由于物理节点独立运行,一个或多个节点的故障不会影响集群中的其他节点。

故障转移可以发生在网格上的任何节点。在极端情况下,即使只剩下一个节点,Oracle RAC系统也提供数据库服务。这种架构允许一组节点在维护期间透明地上线或下线,而集群的其余部分继续提供数据库服务。

Oracle RAC与Oracle客户端和连接池提供了内置集成。通过这种能力,应用程序会立即通过终止连接的池得到任何故障的通知。应用程序避免了等待TCP超时,并可以立即采取适当的恢复行动。Oracle RAC将监听器与Oracle客户端和连接池集成,以创建最佳的应用程序吞吐量。Oracle RAC可以根据事务发生时的负载平衡集群工作负载。

17.3.1.3. 服务

Oracle RAC支持服务,可以将数据库工作负载分组,并将工作路由到提供服务的最优实例。服务代表了具有共同属性、性能阈值和优先级的应用程序工作负载。

您可以为这些服务定义和应用业务策略,以执行诸如在高峰处理期间分配节点或自动处理服务器故障等任务。使用服务确保在需要时和地点应用系统资源,以实现业务目标。服务与数据库资源管理器集成,使您能够限制服务在实例中使用的资源。此外,Oracle Scheduler作业可以使用服务运行,而不是使用特定的实例。

17.3.2. 数据库存储网格

数据库管理员或存储管理员可以使用Oracle ASM接口指定数据库存储网格中ASM应该管理的磁盘,跨越所有服务器和存储平台。ASM划分磁盘空间,并在提供给ASM的磁盘上均匀分布数据。此外,随着存储阵列中的磁盘被添加或从数据库存储网格中移除,ASM会自动重新分布数据。

17.4. 数据仓库与商业智能概述

数据仓库是一个为查询和分析而设计的关系数据库,而不是用于事务处理。例如,数据仓库可以跟踪历史股票价格或所得税记录。仓库通常包含来自历史交易数据的数据,但也可以包括来自其他来源的数据。

数据仓库环境包括除关系数据库之外的几种工具。一个典型的环境包括ETL解决方案、OLAP引擎、Oracle Warehouse Builder、客户端分析工具,以及其他收集数据并将其提供给用户使用的应用程序。

17.4.1. 数据仓库与OLTP

介绍数据仓库的常见方式是引用William Inmon提出的数据仓库特征:

  1. 面向主题(Subject-Oriented)
    数据仓库允许您按主题定义数据库,例如销售。

  2. 集成(Integrated)
    数据仓库必须将来自不同来源的数据放入一致的格式中。它们必须解决命名冲突和度量单位不一致等问题。当它们实现这一目标时,就被认为是集成的。

  3. 非易变(Nonvolatile)
    仓库的目的是使您能够分析已经发生的事情。因此,数据进入仓库后,数据不应更改。

  4. 时间变化(Time-Variant)
    数据仓库的重点是随时间变化的情况。

数据仓库和OLTP数据库有不同的需求。例如,为了发现业务趋势,数据仓库必须维护大量数据。相比之下,良好的性能要求定期将历史数据从OLTP系统移动到存档系统。表17-1列出了数据仓库和OLTP之间的差异。

17.4.2. 数据仓库架构

数据仓库及其架构根据业务需求而有所不同。本节描述了常见的数据仓库架构。

17.4.2.1. 数据仓库架构(基础)

图17-3显示了一个数据仓库的简单架构。最终用户直接访问从几个源系统传输到数据仓库的数据。

图17-3展示了传统OLTP系统和汇总数据的元数据和原始数据。汇总是一种聚合视图,它通过预先计算昂贵的连接和聚合操作,并将结果存储在表中来提高查询性能。例如,汇总表可以包含按地区和产品划分的销售总额。汇总也被称为物化视图。

17.4.2.2. 数据仓库架构(带有暂存区)

在图17-3所示的架构中,操作数据在放入仓库之前必须进行清洗和处理。图17-4显示了一个带有暂存区的数据仓库,暂存区是数据进入仓库前进行预处理的地方。暂存区简化了构建汇总和管理仓库的任务。

17.4.2.3. 数据仓库架构(带有暂存区和数据集市)

您可能希望为组织内的不同团队定制您的仓库架构。您可以通过将数据仓库中的数据传输到数据集市来实现这一目标,数据集市是为特定业务或项目设计的独立数据库。通常,数据集市包括许多汇总表。图17-5将采购、销售和库存信息分离到独立的数据集市中。财务分析师可以查询数据集市以获取有关采购和销售的历史信息。

17.4.3. ETL概述

ETL(提取、转换、加载)是数据仓库中用于将数据从源系统迁移到目标系统(如数据仓库)的一个关键过程。尽管ETL通常被看作是一个包含三个步骤的过程,但实际上它是一个更广泛的过程,而不是三个明确定义的步骤。

在典型的ETL场景中,数据从一个或多个操作型系统中提取出来,然后物理传输到目标系统或中间系统进行处理。在这个过程中,根据传输方法的不同,可能会发生一些转换。例如,一个直接通过网关访问远程目标的SQL语句可以在SELECT语句中合并两个列。

Oracle数据库本身不是一个ETL工具,但它提供了一组丰富的功能,这些功能可以被ETL工具使用,如Oracle Warehouse Builder和定制的ETL解决方案。Oracle数据库提供的ETL功能包括:

  1. 可传输表空间(Transportable Tablespaces):可以在不同的计算机架构和操作系统之间传输表空间。对于在两个Oracle数据库之间移动大量数据,可传输表空间是最快的方式。有关详细信息,请参阅《Oracle数据库管理员指南》。

  2. 表函数(Table Functions):表函数可以生成一组行作为输出,并可以接受一组行作为输入。表函数为在PL/SQL、C或Java中实现的转换提供了流水线和并行执行的支持,而不需要使用中间暂存表。有关详细信息,请参阅《Oracle数据库数据仓库指南》。

  3. 外部表(External Tables):外部表允许直接并行地连接外部数据,而不需要先将数据加载到数据库中。因此,外部表实现了加载阶段与转换阶段的流水线化。

  4. 表压缩(Table Compression):为了减少磁盘使用和内存使用,可以将表和分区表存储在压缩格式中。使用表压缩通常可以提高只读操作的扩展性,并加快查询执行速度。

  5. 变更数据捕获(Change Data Capture, CDC):这个功能可以有效地识别和捕获已添加到、更新或从关系表中删除的数据,并将这些变更数据提供给应用程序或个人使用。

这些功能使得Oracle数据库成为一个强大的ETL工具的后端,可以支持复杂的数据转换和加载任务。

17.4.4. 商业智能

商业智能是对组织信息的分析,以帮助做出商业决策。商业智能和分析应用程序主要由钻取上下层次结构和比较聚合值等操作所主导。Oracle数据库提供了多种技术来支持商业智能操作。

17.4.4.1. 分析型SQL

Oracle数据库引入了许多SQL操作来执行分析操作。这些操作包括排名、移动平均、累积总和、比率报告和周期对比。例如,Oracle数据库支持以下形式的分析SQL:

■ 聚合SQL
聚合函数如COUNT基于行组而非单行返回单个结果行。聚合是数据仓库的基础。为了提高数据仓库中的聚合性能,数据库为GROUP BY子句提供了扩展,以使查询和报告更简单、更快。有关聚合的详细信息,请参阅《Oracle数据库数据仓库指南》。

■ 分析SQL
分析函数基于行组计算聚合值。它们与聚合函数不同,因为它们为每个组返回多行。Oracle使用一系列分析SQL函数提供了高级的SQL分析处理能力。例如,这些分析函数可以让您计算排名和百分位以及移动窗口。有关分析和报告的SQL的详细信息,请参阅《Oracle数据库数据仓库指南》。

■ 建模SQL
使用MODEL子句,您可以从查询结果创建多维数组,并对此数组应用规则以计算新值。例如,您可以按国家划分销售视图的数据,并在每个国家上执行模型计算,这是由多个规则定义的。一个规则可以计算2011年的产品销售量为2009年和2010年销售量的总和。有关SQL建模的详细信息,请参阅《Oracle数据库数据仓库指南》。

17.4.4.2. OLAP

Oracle在线分析处理(OLAP)提供了原生的多维存储和在多个维度上分析数据时的快速响应时间。OLAP使分析师能够在交互会话期间快速获得复杂、迭代查询的答案。

Oracle OLAP具有以下主要特点:

■ Oracle OLAP与数据库集成,因此您可以使用标准的SQL管理、查询和报告工具。
■ OLAP引擎在Oracle数据库的核心内运行。
■ 维度对象以原生多维格式存储在Oracle数据库中。
■ 立方体和其他维度对象是Oracle数据字典中表示的一等数据对象。
■ 数据安全性以标准方式进行管理,通过授予和撤销Oracle数据库用户和角色的权限。
Oracle OLAP提供了简单性的强大功能:一个数据库,标准的管理和安全性,以及标准的接口和开发工具。

17.4.4.3. 数据挖掘

数据挖掘涉及自动在大型数据存储中搜索模式和趋势,这些模式和趋势超出了简单分析的范围。数据挖掘使用复杂的数学算法来分割数据并评估未来事件的可能性。数据挖掘的典型应用包括呼叫中心、自动取款机、电子商务关系管理(ERM)和商业规划。使用Oracle数据挖掘,数据、数据准备、模型构建和模型评分结果都保留在数据库中。Oracle数据挖掘支持PL/SQL API、Java API、用于模型评分的SQL函数,以及一个名为Oracle Data Miner的图形用户界面。因此,Oracle数据库为应用程序开发人员提供了一个基础设施,以便将数据挖掘与数据库应用程序无缝集成。

17.5. Oracle信息集成概述

随着组织的发展,它变得越来越需要能够在多个数据库和应用程序之间共享信息。共享信息的基本方法如下:

■ 整合(Consolidation)
您可以将信息整合到一个单一的数据库中,这样就消除了进一步集成的需要。Oracle RAC(实时应用集群)、网格计算和Oracle VPD(虚拟私有数据库)可以帮助您将信息整合到一个单一的数据库中。

■ 联合(Federation)
您可以保留信息的分布式,同时提供联合这些信息的工具,使其看起来像是在单个虚拟数据库中。

■ 共享(Sharing)
您可以共享信息,这允许您在多个数据存储和应用程序中维护信息。

本节重点介绍Oracle在联合和共享信息方面的解决方案。

17.5.1. 联合访问(Federated Access)

联合访问的基础是一个分布式环境,这是一个由不同系统组成的网络,它们能够无缝地相互通信。环境中的每个系统称为一个节点。用户直接连接的系统称为本地系统。用户访问的额外系统称为远程系统。

分布式环境使得应用程序能够访问和交换来自本地和远程系统的数据。所有数据可以同时被访问和修改。

17.5.1.1. 分布式SQL(Distributed SQL)

分布式SQL可以同步访问和更新分布在多个数据库中的数据。Oracle分布式数据库系统对用户来说是透明的,它使系统看起来像是一个单一的Oracle数据库。分布式SQL包括分布式查询和分布式事务。Oracle分布式数据库架构提供了查询和事务的透明性。例如,标准的DML(数据操作语言)语句在分布式数据库环境中的运作方式与非分布式数据库环境相同。此外,应用程序使用标准的SQL语句COMMIT、SAVEPOINT和ROLLBACK来控制事务。

17.5.1.2. DB Link(Distributed SQL)

数据库链接是两个物理数据库之间的连接,它使用户能够将它们作为逻辑数据库来访问。Oracle数据库使用数据库链接来使用户能够在一个数据库上访问远程数据库中的对象。本地用户可以访问远程数据库的链接,而不需要成为远程数据库上的用户。

图17-6显示了一个例子,用户hr访问远程数据库上的employees表,该远程数据库的全局名称为hq.example.com。employees的同义词隐藏了远程模式对象的身份和位置。

17.5.2. 信息共享(Information Sharing)

任何集成的核心都是企业应用程序之间的数据共享。Oracle Streams是Oracle数据库中的异步信息共享基础设施。这个基础设施使得数据流中的数据、事务和事件的传播和管理得以实现,无论是在数据库内部,还是从一个数据库到另一个数据库。

Oracle Streams包括复制和消息传递。复制是在多个数据库之间共享数据库对象和数据的过程。消息传递是应用程序和用户之间共享信息的过程。

17.5.2.1. Oracle Streams复制

在Oracle Streams复制中,对一个数据库中的数据库对象所做的更改可以与其他数据库在复制环境中共享。例如,Oracle Streams将对一个员工表的更新传播到不同数据库中的相同员工表。通过这种方式,复制环境中的所有数据库中的数据库对象和数据都保持同步。

Oracle Streams复制的典型用途包括:
■ 创建一个报告站点,以减轻主要OLTP站点的处理压力。
■ 为呼叫中心或类似应用程序提供负载均衡,以及提高可伸缩性和可用性。
■ 在地点之间提供站点自治,以满足某些常见的业务需求。
■ 从多个地点转换和整合数据。
■ 在不同平台和Oracle数据库版本之间复制数据,以及跨广域网(WAN)。

Oracle Streams信息流:Oracle Streams的架构非常灵活。图17-7描述了复制环境中的基本信息流。

如图17-7所示,Oracle Streams包含以下基本元素:

■ 捕获(Capture):Oracle Streams可以隐式捕获DML(数据操作语言)和DDL(数据定义语言)更改。规则决定了哪些更改被捕获。更改被格式化成逻辑变更记录(LCRs),这些是具有特定格式的消息,描述了数据库的更改。

■ 暂存(Staging):LCRs被放置在暂存区,这是一个存储和管理捕获消息的队列。消息暂存提供了一个具有安全性的暂存区域,以及对消息数据的审计和跟踪。传播(Propagations)可以将消息从一个队列发送到另一个队列。这些队列可以位于同一个数据库或不同的数据库中。

■ 消费(Consumption):LCRs保留在暂存区,直到订阅者隐式或显式地消费它们。应用过程(apply process)隐式地应用包含在LCRs中的更改。

注意:Oracle Streams与物化视图完全互操作,您可以使用物化视图来维护可更新或只读的数据副本(请参阅第4-16页的“物化视图概述”)。

Oracle Streams复制环境:Oracle Streams允许您配置许多不同类型的自定义复制环境。然而,以下类型的复制环境最为常见:

■ 两数据库(Two-Database)
只有两个数据库共享复制的数据库对象。在一个数据库上对复制的数据库对象所做的更改被捕获并直接发送到另一个数据库,在那里它们被应用。
在单向复制环境中,只有一个数据库允许对复制的数据库对象进行更改,另一个数据库包含这些对象的只读副本。在双向复制环境中,两个数据库都可以允许对复制对象进行更改。在这种情况下,两个数据库都捕获对这些数据库对象的更改,并将更改发送到另一个数据库,在那里它们被应用。

■ 中心辐射型(Hub-and-Spoke)
一个中心数据库(或称为中心)与辅助数据库(或称为辐射)进行通信。辐射之间不直接相互通信。在中心辐射型复制环境中,辐射可能允许也可能不允许对复制的数据库对象进行更改。

■ N方(N-Way)
每个数据库都直接与环境中的每个其他数据库通信。在一个数据库上对复制的数据库对象所做的更改被捕获并直接发送到环境中的每个其他数据库,在那里它们被应用。

17.5.2.2. Oracle Streams高级队列(AQ)

Oracle Streams高级队列(AQ)是与Oracle数据库集成的健壮且功能丰富的消息队列系统。当组织中的不同系统需要相互通信时,消息传递环境可以提供一种标准、可靠的方式,在这些系统之间传输关键信息。

一个示例用例是,一家企业在总部的Oracle数据库中输入订单。当输入订单时,企业使用AQ将订单ID和订单日期发送到仓库的数据库。这些消息提醒仓库的员工关于订单,以便他们可以填写并发货。

消息排队和出队:高级队列将用户消息存储在称为队列的抽象存储单元中。入队是生产者将消息放入队列的过程。出队是消费者从队列中检索消息的过程。

显式出队支持允许开发人员使用Oracle Streams可靠地交换消息。他们还可以利用Oracle Streams的更改捕获和传播功能,通过通知应用程序更改。图17-8显示了一个示例应用程序,它通过高级队列显式地入队和出队消息,使其能够使用不同的消息系统与合作伙伴共享信息。消息入队后,可以在出队到合作伙伴的应用程序之前进行转换和传播。

高级队列特性:Oracle Streams高级队列支持消息队列系统的所有标准特性。这些特性包括:

■ 异步应用程序集成
Oracle Streams高级队列提供了多种入队消息的方式。捕获过程或同步捕获可以隐式捕获消息,或者应用程序和用户可以显式捕获消息。

■ 可扩展的集成架构
许多应用程序与分布式中心辐射模型集成,以Oracle数据库作为中心。在Oracle数据库上的分布式应用程序与同一中心的队列通信。多个应用程序共享相同的队列,消除了为支持额外应用程序而添加队列的需要。

■ 异构应用程序集成
高级队列为应用程序提供了Oracle类型系统的全部功能。它包括对标量数据类型、具有继承的Oracle数据库对象类型、带有XML数据附加操作符的XMLType以及ANYDATA的支持。

■ 遗留应用程序集成
Oracle消息传递网关将Oracle数据库应用程序与其他消息队列系统(如Websphere MQ和Tibco)集成。

■ 基于标准的API支持
Oracle Streams高级队列支持行业标准的API:SQL、JMS和SOAP。使用SQL所做的更改自动作为消息被捕获。

17.5.2.3. Oracle Streams使用用例

作为一个示例用例,假设一家公司使用Oracle Streams来维护公司网站的多个副本。业务需求包括:

■ 报告数据库必须包含最新数据,以便纽约办公室的分析师进行即席查询。
■ 必须支持现场销售员工使用的可更新物化视图。数据必须与托管在Sybase数据库上的应用程序共享。图17-9展示了这个Streams配置。

Oracle Streams用于在包括纽约、伦敦和东京在内的n方配置中复制数据。在每个站点,Streams隐式捕获机制收集每个本地区域订阅表的任何更改,并将它们在本地队列中暂存。每个区域捕获的更改随后被转发到其他区域数据库。每个数据库所做的更改都可以反映在其他每个数据库中,为全球范围内订阅的对象提供完整的数据。

在每个区域数据库中,Oracle Streams应用过程自动应用这些更改。在应用更改时,Oracle Streams会检查并解决任何冲突。Streams还可以用来与非Oracle数据库交换特定表的数据。使用Oracle Database Gateway for Sybase,Streams应用过程使用与Oracle数据库相同的机制将更改应用到Sybase数据库。

报告数据库托管在纽约。这是一个完全功能的Oracle数据库,包含了相关应用程序表的只读副本。报告站点未配置为捕获这些应用程序表上的更改。Oracle Streams对这个报告数据库的配置或使用没有任何限制。

伦敦站点还作为几个可更新物化视图站点的主站点。每个销售人员接收所需数据部分的可更新副本。这些站点通常每天只连接一次,以上传他们的订单并下载上次刷新后所做的任何更改。

posted @   脆皮老弟  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示