当前位置:  数据库>oracle
本页文章导读:
    ▪字典的启发——深入浅出数据库索引        实际上,可以把索引理解为一种特殊的目录。聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明.........
    ▪Oracle编程入门经典 第6章 在Oracle中处理语句      6.1     SQL语句类别DDL:数据定义语言语句。这样的语句有CREATE、TRUNCATE和ALTER,它们用于建立数据库中的结构,设置许可等。用户可以使用它们维护Oracle数据词典。DML:数据操作.........
    ▪使用 Oracle Data Pump 加载和卸载数据库内容      概述Oracle 数据库 10g 提供了多种卸载和加载数据的方法。在本教程中,您将使用 Oracle Data Pump Export 实用程序卸载数据,然后使用 Oracle Data Pump Import 实用程序加载数据。何为 Oracle Data Pump?.........

[1]字典的启发——深入浅出数据库索引
    来源:    发布时间: 2013-10-16

  实际上,可以把索引理解为一种特殊的目录。聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别。 
  其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。 
  如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。 
  通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。进一步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。

本文链接


    
[2]Oracle编程入门经典 第6章 在Oracle中处理语句
    来源:    发布时间: 2013-10-16

6.1     SQL语句类别

  • DDL:数据定义语言语句。这样的语句有CREATE、TRUNCATE和ALTER,它们用于建立数据库中的结构,设置许可等。用户可以使用它们维护Oracle数据词典。
  • DML:数据操作语言语句。这些语句可以修改或者访问信息,包括INSERT、UPDATE和DELETE。
  • 查询:这是用户的标准SELECT语句。查询是指那么返回数据但是不修改数据的语句,是DML语句的子集。

6.2     怎样执行语句

相对于查询和DML语句,DDL更像是Oracle的一个内部命令。它不是在一些表上生成的查询,而是完成一些工作的命令。例如,如果用户使用:

Create table t(x int primary key, y date);

然而有意思的是,CREATE TABLE语句也可以在其中包含SELECT。我们可以使用:

Create table t as select * from scott.emp;

就像DML可以包含查询一样,DDL也可以这样做。当DDL包含查询的时候,查询部分会像任何其它查询一样接受处理。Oracle执行这些语句的4个步骤,它们是:

  • 解析
  • 优化
  • 行源生成
  • 执行语句

对于DDL,通常实际上只会应用第一个和最后一个步骤,它将会解析语句,然后执行它。“优化”CREATE语句毫无意义(只有一种方法可以建立内容),也不需要建立一般的方案(建立表的过程众所周知,已经在Oracle中直接编码)。应该注意到,如果CREATE语句包含了查询,那么就会按照处理其它查询的方式处理这个查询——采用以上所有步骤。

6.2.1          解析

这是Oracle中任何语句处理过程的第一个步骤。解析(parsing)是将已经提交的语句分解,判定它是哪种类型的语句(查询、DML或者DDL),并且在其上执行各种检验操作。

解析过程会执行三个主要的功能:

  • 语法检查。这个语句是正确表述的语句么?它符合SQL参考手册中记录的SQL语法么?它遵循SQL的所有规则么?
  • 语义分析。这个语句是否正确参照了数据库中的对象,它所引用的表和列存在么?用户可以访问这些对象,并且具有适当的特权么?语句中有歧义么?。
  • 检查共享池。这个语句是否已经被另外的会话处理?

以下便是语法错误:

SQL> select from where 2;

select from where 2

*

ERROR 位于第 1 行:

ORA-00936: 缺少表达式

总而言之,如果赋予正确的对象和特权,语句就可以执行,那么用户就遇到了语义错误;如果语句不能够在任何环境下执行,那么用户就遇到了语法错误。

解析操作中的下一步是要查看我们正在解析的语句是否牵线 些会话处理过。如果处理过,那么我们就很幸运,因为它可能已经存储于共享池。在这种情况下,就可以执行软解析(soft parse),换句话说,可以避免优化和查询方案生成阶段,直接进入执行阶段。这将极大地缩短执行查询的过程。另一方面,如果我们必须对查询进行解析、优化和生成执行方案,那么就要执行所谓的硬解析(hard parse)。这种区别十分重要。当开发应用的时候,我们会希望有非常高的比例的查询进行软解析,以跳过优化/生成阶段,因为这些阶段非常占用CPU。如果我们必须硬解析大量的查询,那么系统就会运行得非常缓慢。

  • Oracle怎样使用共享池

  • 正如我们已经看到的,当Oracle解析了查询,并且通过了语法和语义检查之后,就会查看SGA的共享池组件,来寻找是否有另外的会话已经处理过完全相同的查询。为此,当Oracle接收到我们的语句之后,就会对其进行散列处理。散列处理是获取原始SQL文本,将其发往一下函数,并且获取一个返回编号的过程。如果我们访问一些V$表,就可以实际看到这些V$表在Oracle中称为动态性能表(dynamic performance tables),服务器会在那里为我们存储一些有用的信息。

    可能通过如下方式实现访问V$表:

    为用户账号赋予SELECT_CATALOG_ROLE

    使用另一个具有SELECT_CATALOG_ROLE的角色(例如DBA)

    如果用户不能访问V$表以及V$SQL视图,那么用户就不能完成所有的“试验”,但是掌握所进行的处理非常容易。

    试验:观察不同的散列值

    (1)    首先,我们将要执行2个对大家来讲意图和目的都相同的查询:

    SQL> select * from dual;

    D

    -

    X

    SQL> select * from DUAL;

    D

    -

    X

    (2)    我们可以查询动态性能视图V$SQL来查看这些内容,它可以向我们展示刚才运行的2个查询的散列值:

    SQL> select sql_text,hash_value from v$sql

    2 where upper(sql_text)='SELECT * FROM DUAL';

    SQL_TEXT

    ------------------------------------------------

    HASH_VALUE

    ----------

    select * from DUAL

    1708540716

    select * from dual

    4035109885

    通常不需要实际查看散列值,因为它们在Oracle内部使用。当生成了这些值之后,Oracle就会在共享池中进行搜索,寻找具有相同散列值的语句。然后将它找到的SQL_TEXT与用户提交的SQL语句进行比较,以确保共享池中的文本完全相同。这个比较步骤很重要,因为散列函数的特性之一就是2个不同的字符串也可能散列为相同的数字。

    注意:

    散列不是字符串到数字的唯一映射。

    总结到目前为止我们所经历的解析过程,Oracle已经:

    • 解析了查询
    • 检查了语法
    • 验证了语义
    • 计算了散列值
    • 找到了匹配
    • 验证与我们的查询完全相同的查询(它引用了相同的对象)

    在Oracle从解析步骤中返回,并且报告已经完成软解析之前,还要执行最后一项检查。最后的步骤就是要验证查询是否是在相同的环境中解析。环境是指能够影响查询方案生成的所有会话设置,例如SORT_AREA_SIZE或者OPTIMIZER_MODE。SORT_AREA_SIZE会通知Oracle,它可以在不使用磁盘存储临时结果的情况下,为排序数据提供多少内存。圈套的SORT_AREA_SIZE会生成与较小的设置不同的优化查询方案。例如,Oracle可以选择一个排序数据的方案,而不是使用索引读取数据的方

        
    [3]使用 Oracle Data Pump 加载和卸载数据库内容
        来源:    发布时间: 2013-10-16
    概述

    Oracle 数据库 10g 提供了多种卸载和加载数据的方法。在本教程中,您将使用 Oracle Data Pump Export 实用程序卸载数据,然后使用 Oracle Data Pump Import 实用程序加载数据。

    何为 Oracle Data Pump?

    Oracle Data Pump 是 Oracle 数据库 10g 的一个新功能,通过它可以对 Oracle 数据库内容实现高速、并行的批量数据和元数据移动。新的公共接口 PL/SQL 程序包 DBMS_DATAPUMP 提供了一个服务器端基础架构,用于快速地移动数据和元数据。Oracle 数据库 10g 包含了使用该接口的新的导出 (expdp) 和导入 (impdp) 客户端。Data Pump Export 和 Import 工具显著增强了性能和功能,例如有可重启性能、灵活的对象选择以及对导出和导入作业的更好监视和控制。由于这些可贵的改进,Oracle 建议您使用 Data Pump 导入和导出客户端,而非原有的导出 (exp) 和导入 (imp) 客户端。

    案例

    MyCompany 正在对其产品系列进行评估,以确定哪些产品最终能够为其带来最大收益。为此,MyCompany 使用了 Data Pump Export 和 Import 工具来卸载和加载他们需要分析的各种数据库对象。Sales History (SH) 模式包含若干表格,此时需要先卸载这些表,然后再将它们加载到其他模式以进行分析。

    前提条件

    开始本教程之前,您应该:

    1.

    完成了教程在 Windows 上安装 Oracle 数据库 10g。

    2.

    下载 datapump.zip 并将其解压缩到您的工作目录 (c:/wkdir) 中。

     

     

     

    在本教程中,您可以执行这些文件,或者直接在命令提示符下输入命令。

    Data Pump 基于服务器,而不是基于客户端。因此,要以基于服务器的目录路径为参照来访问转储文件、日志文件和 SQL 文件,以便实施相应的文件安全性。Data Pump 要求您将目录路径指定为目录对象。目录对象将名称映射为文件系统上的目录名。

    要运行 Data Pump Export 或 Data Pump Import,DBA 或拥有 CREATE ANY DIRECTORY 权限的用户必须先创建目录对象。然后,在您使用 Export 或 Import 时,使用 DIRECTORY 参数指定目录对象。

    创建目录对象

    要创建目录对象,请执行以下步骤:

    1.

    要启动一个 SQL*Plus 会话,请选择开始 > 程序 > Oracle - OraDb10g_home1 > Application Development > SQL Plus。在 User Name 域中输入 system,在 Password 域中输入 oracle,然后单击 OK。

     

    2.

    执行以下命令,为本教程创建两个目录:

    @c:/wkdir/dir01

    dir01.sql 文件包括以下命令:

    CREATE DIRECTORY datadir1 AS 'c:/wkdir';
    CREATE DIRECTORY datadir2 AS 'c:/wkdir';

     

    3.

    创建目录对象后,您需要将它们的 READ 和 WRITE 权限授予其他用户。要允许 Oracle 数据库以用户SH 的身份读取和写入 datadir1 和 datadir2 目录中的文件,请执行以下命令:

    执行以下命令,为本教程创建两个目录:

    @c:/wkdir/dir02

    dir02.sql 文件包括以下命令:

    CONNECT / AS SYSDBA
    GRANT READ, WRITE ON DIRECTORY datadir1 TO sh;
    GRANT READ, WRITE ON DIRECTORY datadir2 TO sh;

     

     

     

    本文链接


        
    最新技术文章:
    ▪current online redo log缺失后的恢复
    ▪ORA-600 2662错误解决实例
    ▪ORA-00600 2662错误解决方法
    ▪Oracle Hidden Parameter:_allow_resetlogs_corruption
    ▪Oracle诊断事件列表
    ▪Oracle 隐含参数 _disable_logging 详解
    ▪ORA-00600 [2662]错误解决过程
    ▪Oracle里常见的执行计划
    ▪Oracle里另外一些典型的执行计划
    ▪Oracle服务器自动备份
    ▪Oracle固定SQL的执行计划(一)---SQL Profile
    ▪Oracle固定SQL的执行计划(二)---SPM
    ▪同一环境下新建Standby RAC库
    ▪Oracle快速克隆安装
    ▪Oracle单实例启动多个实例
    ▪Oracle的PLSQL别名中文出现乱码解决方法
    ▪ORA-00379: no free buffers available in buffer pool DEFAULT ...
    ▪RMAN-06023: no backup or copy of datafile 16 found to restor...
    ▪RMAN还原数据库报错问题解决案例
    ▪OEL6.8_X86平台部署Oracle 10gR2检测失败问题
    ▪Oracle 性能优化建议
    ▪Oracle SQL语句优化心得
    ▪Oracle慢SQL监控脚本实现
    ▪Oracle dblink 查询 tns:无法解析指定的连接标识...
    ▪Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结...
    ▪Linux6.6及以上版本配置Oracle ASM共享储存-UDEV
    ▪Oracle 12C 开启数据库归档模式
    ▪Solairs系统中配置Oracle 12c 开机启动
    ▪重建DBMS_STATS解决ORA-31626 ORA-21633以及ORA-04063 ORA...
    ▪Oracle ASMM 与AMM之间相互切换
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,