每个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设置可以在建表的时候创建。

  

Oracle数据库之初步接触的更多相关文章

  1. (转) C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracle数据库

    原贴链接:https://www.cnblogs.com/mq0036/p/11052359.html C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracl ...

  2. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  3. 【转】通过Hibernate将数据 存入oracle数据库例子

    一. Hibernate介绍 Hibernate是基于对象/关系映射(ORM,Object/Relational Mapping)的一个解决方案.ORM方案的思想是将对象模型表示的对象映射到关系型数据 ...

  4. ASP.NET操作ORACLE数据库之模糊查询

    ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...

  5. 记录排查解决Hubble.Net连接Oracle数据库建立镜像库数据丢失的问题

    起因 前几天在弄Hubble连接Oracle数据库,然后在mongodb中建立一个镜像数据库; 发现一个问题,原本数据是11W,但是镜像库中只有6w多条; 刚开始以为是没运行好,又rebuild了一下 ...

  6. Oracle 数据库对象

    数据库对象是数据库的组成部分,常常用CREATE命令进行创建,可以使用ALTER命令修改,用DROP执行删除操作.前面已经接触过的数据库对象有表.用户等. 今天将学习更多的Oracle数据库对象: 同 ...

  7. Oracle实例和Oracle数据库(Oracle体系结构)

    --========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...

  8. [VSTS]让ADO.NET Entity Framework支持Oracle数据库(转载)

    近期由于项目所需不得不研究Oracle数据库,回想上一次用Oracle还是07年的事情,实习时候做华晨宝马的项目简单接触了Oracle.这次的项目需要基于.NET平台,我个人的习惯是能用微软自带的就不 ...

  9. Oracle数据库——Scheduler Job

    日常的运维工作中,我们经常使用Linux Server的anacron服务来使得服务器执行一下计划之内的任务,可以按照特定的时间间隔,重复的执行相关的命令或者相关的脚本,来完成预期的目标,能够节省相关 ...

随机推荐

  1. Codeforces Round #418 (Div. 2) C

    Description Nadeko's birthday is approaching! As she decorated the room for the party, a long garlan ...

  2. 为什么站点使用https加密之后还能看到相关数据

    为什么站点使用了https加密之后,还是能够用firebug之类的软件查看到提交到的信息,并且还是明文的?例如说这样: 这是因为:https(ssl)加密是发生在应用层与传输层之间,所以在传输层看到的 ...

  3. php多文件上传类(含示例)

    在网上看到一个比较好的多文件上传类,自己改良了下,顺便用js实现了多文件浏览,php文件上传原理都是相同的,多文件上传也只是进行了循环上传而已,当然你也可以使用swfupload进行多文件上传! &l ...

  4. input标签属性

    很多时候,我们都用到了很多标签实现输入功能,所以在这里梳理一下. 1.建立一个文本框 <input type="text" name="userName" ...

  5. Ionic之ui-sref引入图片,图片部分挡住解决方案

    ionic图片设置大小跟图片像素相同,但是使用ui-sref="parkInfo"上半部分图片会挡住,增加height的高度,就可以显示原本图片 页面: <ion-conte ...

  6. Ionic开发-如何在ion-content形成上下结构 上面固定下层可滚动

    在一个系统设计中,一般有些需要固定位置,便利操作.现在我要做一个上下两层,需要固定上方,下方拉刷新数据. 页面: <ion-content scroll="false"> ...

  7. P2006 赵神牛的游戏

    题目描述 在DNF 中,赵神牛有一个缔造者,他一共有k点法力值,一共有m个技能,每个技能耗费的法力值为a[i],可以造成的伤害为b[i],而boss 的体力值为n,请你求出它放哪个技能,才可以打死bo ...

  8. Node.Js的Module System 以及一些常用 Module

    Node.Js学习就按照这本书的流程来. 在第7章结束与第10章结束时分别自己出一个小项目练练手.Node.Js的入门学习计划是这样. 目录:, QQ:1045642972 欢迎来索书以及讨论Node ...

  9. 微信小程序 可用性一览

    1. 调试vConsole微信小程序通过vConsole的形式观察控制台打印.打印到vConsole控制台的是由 JSON 转化的字符串.这还是可以起到调试作用的. Source Map当es6 转  ...

  10. git diff查看修改,出现^M换行问题

    通过命令git diff查看修改,出现^M换行问题,如图: 解决: git config --global core.whitespace cr-at-eol 换行符的问题: 提交时转换为LF,检出时 ...