• Oracle数据库之初步接触


      每个Oracle数据库都是数据的集合,这些数据包含在一个或多个文件中。数据库有物理和逻辑两种结构。在开发应用程序的过程中,会创建诸如表和索引这样的结构,这些结构用于数据行的存储和查询。可以为对象的名称创建同义词(synonym),通过数据库链接在不同的数据库中查看对象,并能够限制对象的访问权限。甚至可以使用外部表访问数据库之外的文件中的数据行,其效果就像访问表中的数据行一样。

      Oracle实例(instance)由命名为系统安全局(System  Global  Area,SGA)的内存区域和相应的后台进程组成,这些后台进程负责SGA和数据库磁盘文件之间的交互。在Oracle实时应用集群(Oracle  Real  Application  Cluster,RAC)中,会有多个实例同时使用同一个数据库。这些实例通常位于不同的服务器上,这些服务器保持高速内部互联(interconnect)。

      数据库技术

      在Oracle数据库中,基本的结构是表。Oracle  Database  支持多种类型的表:

    • 关系表(relational table)  使用Oracle提供的数据类型,可以创建存储行数据的表,这些行是由应用程序插入和操作的。表中包含列定义,可以根据应用程序的需求变化添加或删除。创建表时使用create  table命令。
    • 对象关系表(object-relational  table)为了充分利用诸如类型继承等功能,可以使用Oracle的对象关系功能。可以定义自己的数据类型,并在列定义、对象表、嵌套表、可变数组等其它的地方使用这些数据类型。
    • 索引组织表(index-organized  table)可以创建一个表,这个表把数据存储在一个索引结构中,是的表中的数据根据索引的值排列。
    • 外部表(external  table)可以把存储在平面文件中的数据看做表,用户可以对其直接进行查询,并在查询中把它和其他表关联起来。可以使用外部表,在不需要把大量数据导入到数据库中的情况下就可以对这些数据进行访问。Oracle还支持BFILE数据类型,它是一个指向外部二进制文件的指针。在创建一个BFILE或外部表之前,必须在Oracle中(通过create  direction命令)创建一个目录别名,使这个目录指向外部文件的物理位置。
    • 分区表(partitioned  table)可以把一个表分成多个部分,并单独管理表的每一部分。可以向表中添加新的分区、拆分已经存在的分区并在独立于请他分区的情况下管理某个分区。对表进行分区能够简化维护操作,或能够提高用户查询效率。可以按照一定的数据范围、数据列表、列数据的哈希值或者这几个条件的某种组合来对表进行分区。
    • 物化视图(materialized  view)  物化视图是由查询检索到数据的副本。用户查询可能会被重定向到物化视图,以避免在查询执行期间访问大型表------Oracle优化程序会自动重写查询。
    • 临时表(temporary  table)可以使用create  global  temporary  table 命令创建一个表,该表允许多个用户在其中插入数据。每个用户只能看到他自己在表中插入的数据。
    • 集群表(clustered  table)如果两个表经常被一起查询,那么可以通过集群(cluster)结构把他们存储到物理相邻的位置。
    • 删除的表(dropped  table)可以通过flashback  table to  before  drop 命令迅速恢复已删除的表,可以一次把多个表和整个数据库恢复到某个时间点之前的状态。Oracle支持闪回查询(flashback  query),这种查询将返回表以前某个版本中的数据。

    为了访问表,可以使用视图。视图能够处理链接(join)和聚集(aggregation)、限制返回的数据行数或更改显示的列。视图可以是只读的,也可以是可更新的,而且他们可以引用本地表或远程表。远程表可以通过数据库链接来访问。可以用同义词隐藏表的物理位置。

      为了调整对表的访问,Oracle支持很多类型的索引:

    • B*树索引(B*tree  index)B*树索引是Oracle标准索引类型,它对于选择符合某个等式条件或范围条件的数据非常有用。这种索引由create  index命令创建。
    • 位图索引(bitmap index)对于只有极少几个值的列,位图索引也许能提高查询性能。位图索引只应该在数据被批量加载时使用。
    • 反键使用(reverse key index)如果在连续插入数据时牵涉I/O操作,Oracle会在存储数据之前动态地反转已经按索引排序好的数据。
    • 基于函数的索引(function-based index)除了以一列作为索引,还可以把基于函数的列作为索引,如UPPER(name)。这种基于函数的索引可以为Oracle优化器在选择执行路径时提供更多的选择。
    • 分区索引(partitioned  index)可以对索引分区,以支持分区表或者简化索引管理,索引分区可以只作用于表分区,也可以作用于表中所有的行。
    • 文本索引(text  index)可用文本数据为索引,以支持高级的搜索功能,如扩展单词词干或搜索短语。文本索引是由Oracle维护的一系列表和索引值,这些表和索引值能够满足复杂的文本搜索需要。

    存储数据

      所有这些逻辑结构都必须存储在数据库中的某个地方。Oracle维护一个数据字典,这个字典中记录了与所有对象有关的元数据,对于需要自己的物理空间里存储对象,Oracle会在一个表空间(tablespace)中为其分配空间。

      1、表空间

      表空由一个或多个数据文件组成;数据文件是表空间的一部分,而且也只能是一个表空间的一部分。Oracle  Database至少为每个数据库创建两个表空间:SYSTEM 和SYSAUX以支持其内部管理的需要。可以使用Oracle托管文件(OMF,Oracle  Managed  File)和自动存储管理(Automatic  Storage Management,ASM)简化数据文件的创建和维护。

      可以创建一种特殊的表空间,称为bigfile表空间,其大小可达几千个TB。借助于OMF,对bigfile的管理使得对表空间的登录对DBA完全透明;DBA可以把表空间作为一个整体来管理,而不用担心空间的大小和底层数据文件的各种结构。

      如果一个表空间被指定为临时表空间,则这个表空间本身是永久性的,但是保存在它里面的数据是临时的。Oracle使用临时表空间来支持诸如创建索引和连接处理这样的排序操作,临时数据段和永久对象不应该存储在相同的表空间中。

    Oracle用户和权限

      Oracle中,一般不会轻易在一个服务器上创建多个数据库,在一个数据库中,不同的项目由不同的用户访问,每一个用户拥有自身创建的数据库对象,因此用户的概念在Oracle中非常重要。Oracle的用户可以用create  user命令了创建:

      create  user 用户名  identified  by  口令了  [account  lock|unlock]

      lock|unlock 创建用户时是否锁定,默认为锁定状态。锁定的用户无法正常的登录进行数据库操作。尽管用户创建成功,但是还不能正常的登录Oracle数据库,因为该用户还没有任何权限。如果用户能够正常登录,至少需要create session系统权限。

      Oracle用户对数据库管理或对象操作的权利,分为系统权限和数据库对象权限。系统权限比如:create  session,create  table 等,拥有系统权限的用户,允许拥有相应的系统操作。数据库对象权限,比如对表中的数据进行增删改操作等,拥有数据库对象权限的用户可以对所拥有的对象进行相应的操作。

      还有一个概念就是数据库角色(role),数据库角色就是若干个系统权限的集合。

    • connect 角色,主要应用在临时用户,特别是那些不需要建表的 用户,通常只赋予connect 角色。connect是使用Oracle的简单权限,拥有connect角色的用户,可以与服务器建立会话(session,客户端与服务器连接,称为会话)。
    • resource角色,更可靠和正式的数据库用户可以授予resource角色。resource提供给用户另外的权限以创建它们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)等。
    • DBA角色,拥有所有的系统权限-----包括无限制的空间限额和给其它用户授予各种权限的能力。用户SYSTEM拥有DBA角色。

      一般情况下,一个普通用户,拥有connect和resource两个角色即可进行常规的数据库开发工作。可以把某个权限授予某个角色,可以把权限、角色授予某个用户。系统权限只能由DBA用户授予,对象权限由拥有该对象的用户授权:grant  角色|权限  to 用户(角色)

      回收权限:revoke  角色|权限  from  用户(角色)

      修改用户密码: alter  user  用户名  identified  by 新密码

      修改用户锁定(非锁定)状态: alter  user  用户名  account  lock|unlock

    SQL简介

      SQL是结构化查询语言(Structured  Query  Language),专门用于三角存取、数据更新及数据库管理等操作。

      在Oracle开发中,客户端把SQL语句发送给服务器,服务器对SQL语句进行编译、执行,把执行的结果返回给客户端。Oracle  SQL语句:

    • 数据定义语言(DDL),包括create(创建)命令、alter(修改)命令、drop(删除)命令等
    • 数据操作语言(DML),包括insert(插入)命令,update(更新)命令、delete(删除)命令、select...from(查询)等
    • 数据查询语言(DQL),包括基本查询语句、Order  by 子句、Group  by子句等
    • 事物控制语言(TCL),包括commit(提交)命令、savepoint(保存点)命令、rollback(回滚)命令。
    • 数据控制语言(DCL),grant(授权)命令、revoke(撤销)命令。

      目前主流的数据库产品都支持标准的SQL语句。数据定义语言,表的增删改操作、数据简单查询、事物的提交和回滚,权限的授予和撤销等。

    Oracle数据类型

      Oracle数据库的核心是表,表中使用到的常用数据类型:

    类型 含义
    char(length) 存储固定长度的字符串。参数length指定长度,如果存储的字符串长度小于length,用空格填充。默认长度是1,最长不超过2000字节
    varchar2(length) 存储可变长度的字符串。length指定了该字符串的最大长度。默认长度是1 ,最长不超过4000字符。
    number(p,s) 既可以存储浮点数,也可以存储整数,p表示数字的最大位数(如果是小数包括整数部分和小数部分,p默认是11位),s是指小数位数
    DATE() 存储日期和时间,存储纪元、4位年、月、日、时、分、秒,存储时间从公元前4712年1月1日到公元后4712年12月31日
    TIMESTAMP 不但存储日期的年月日,时分秒,以及秒后6位,同时包含时区
    CLOB 存储大的文本,比如存储非结构化的XML文档
    BLOB 存储二进制对象,如图形、视频、声音等

    对于日期类型,可以使用sysdate内置函数可以获取当前的系统日期和时间,返回DATE类型,用systimestamp函数可以返回当前日期、时间和时区。

    创建表和约束

      Oracle创建表同SQL  Server一样,使用create  table 命令来完成。创建约束则使用如下命令:   alter  table  表名   add constraint  约束名  约束内容 ;

      不论创建表还是约束,与SQL  Server基本相同,注意:在Oracle中default 是一个值,而SQL Server 中default 是一个约束,因此Oracle的default设置可以在建表的时候创建。

      

  • 相关阅读:
    Eclipse 安装插件
    java 之 Spring 框架(Java之负基础实战)
    tomcat 修改网站路径(Java之负基础实战)
    tomcat 修改编码(Java之负基础实战)
    tomcat 修改端口(Java之负基础实战)
    linux vi 操作
    解压文件--linux
    smarty用法
    thinkphp调试手段
    kindeditor上传文件的使用
  • 原文地址:https://www.cnblogs.com/sdlzspl/p/7301702.html
Copyright © 2020-2023  润新知