本文共 6441 字,大约阅读时间需要 21 分钟。
接触Oracle数据库也有一年多了,之前对于Oracle数据库也就停留在简单的增、删、改、查,数据库创建,会写一些SQL,能够使用JDBC开发项目。对于Oracle数据库的很多认识都是欠缺的,停留在很肤浅的层面,这段时间重新深入的学习了一些知识,包括Linux常用命令、操作系统、Oracle官方手册,知道自己欠缺的知识太多了,非一朝一夕可以填补这个空白的,对于一个半道出家的来说缺少系统的学习,在很多方面学起来还是挺吃力的。这篇是我学习做的笔记,一些比较常用到的概念知识,总体来说笔记还是挺混乱的,也就是以防自己遗忘。
SQL语言分为四大类
数据查询语言(DQL)、数据操纵语言(DML)、数据定义语言(DDL)、数据控制语言(DCL)
数据查询语言DQL: select
数据操纵语言DML: insert、update、delete
数据定义语言DDL: 数据定义语言用来创建数据库中的各种对象,表,视图,索引,同义词,聚簇等。(DDL操作是隐形提交的。不能rollback)
数据控制语言DCL: 数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。
数据控制语言包括:
在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。
提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。(1) 显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:
SQL>COMMIT;
(2) 隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
(3) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其格式为:SQL>SET AUTOCOMMIT ON;
数据库和实例
数据库(database):物理操作系统文件或磁盘(disk)的集合。使用Oracle的自动存储管理(Automatic Storage Management,ASM)或RAW分区时,数据库可能不作为操作系统中单独的文件,淡定一任然不变。
实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。这里可以维护易失的、非持久性内容(有些可以刷新输出到磁盘)。就算没有磁盘存储,数据库实例也能存在。
模式对象模型
索引是一种模式对象,对于每一个被索引的表行或表簇行,索引都包含一个条目,以提供直接、快速的存取。Oracle数据库支持几种类型的索引。B-树索引,位图索引。
分区是大型表和索引的分片。
视图是对一个或多个表、或其他视图中的数据的自定义表示。
序列是一个由用户创建的对象,可以被多个用户共享,用于生成整数。通常,序列用于生成主键值。
维度定义多个列集之间的父-子关系,列集中的所有列必须都来自同一个表。维度通常用于对客户、产品、和时间之类的数据进行分类。
同义词是另一个模式对象的别名。因为同义词只是一个别名,它在数据字典中除了其定义之外,没有存储。
PL/SQL是Oracle对sql的过程化扩展。PL/SQL块,可以带参数调用。PL/SQL包用于将逻辑上相关的PL/SQL类型、变量、和子程序进行分组。
SYS和SYSTEM模式
SYS管理账户在创建数据库时自动创建。此账户可以执行所有的数据库管理功能。SYS模式存储数据字典基表和视图。SYS模式中的表只由数据库操作,决不能被任何用户修改。
在创建数据库时,也会自动创建SYSTEM账户。SYSTEM模式存储其它一些用于显示管理信息的表和视图,以及用于各种数据库选项和工具的内部表和视图。永远不要使用SYSTEM模式来存储非管理性用户的表。
Oracle数据库表分为以下几个基本类型:
rowid数据类型
存储在数据库中的每一行都有一个地址。
物理rowids存储堆组织表、表簇、表分区和索引分区中的行地址。 逻辑rowids存储索引组织表中的行地址 外部rowids是外来表(如通过网关访问的DB2表)中的标识符。rowid的功能:
rowids是访问特定行的最快方式
rowids提供了查看表的组织方式的能力。 rowids是给定表中的行的唯一标识符。ROWID伪列
Oracle数据库中的每个表都有一个名为ROWID的伪列。并不占用存储空间。伪列的值是表示每个行的地址的字符串。
基本/OLTP表压缩
基于字典的表压缩提供了很好的压缩率。
基本表压缩:这种类型的压缩只能压缩由直接路径加载插入的数据,只支持有限的数据类型和SQL操作。OLTP表压缩:这种类型的压缩用于OLTP应用程序,并可压缩任何SQL操作的数据。
数据库以行主要格式存储压缩行。一个行的所有列都存储在一起,接下来是下一行的所有列,依次类推。
表簇
表簇是一组表,它们共享公共的列,并将相关的数据存储在相同的数据块中。当表被聚簇时,单个数据块可以包含多个表中的行。 簇键是所有被聚簇的表的共有列或列集。如emp表和dept表的dept_id列。索引化表簇概述
索引化聚簇是使用索引来查找数据的表簇。而簇索引是一个簇键上的B*树索引。索引必须先被创建,然后才能将行插入到表簇中。哈希簇概述
索引键被替换为一个哈希函数,哈希簇就像一个索引化聚簇。它没有单独的簇索引存在,对于一个哈希簇来说,数据本身就是索引。哈希簇变体
单表哈希簇是哈希簇的优化版本,一次只支持一个表,哈希键和行之间存在一一映射。 排序哈希簇存储哈希函数的每个值对应的行,通过某种方式,数据库可以有效的把他们按已排定的顺序返回。索引和索引组织表
索引概述
索引是一种与表簇相关联的可选结构,有时可以提高数据访问速度。通过在表中的一个或多个列上创建索引,在某些情况下使您能够快速地从随机分布的表行中检索一小部分行。索引是减少磁盘I/O的许多手段之一。
在一下情况可以考虑在某列上创建索引:
索引的特征:
索引是一种模式对象,它在逻辑上和物理上都与其关联的对象中的数据保持独立。因此,可以删除或创建索引而不会实际影响相关的表。索引具有以下属性:
键和列:键是一个列集或表达式。
注意:主键和唯一键会自动生成索引,有时还需要在外键上创建索引。
复合索引
复合索引,也称为连接索引,是在表中的多个列上的索引。复合索引中的列应该以在检索数据的查询中最有意义的顺序出现,但在表中不必是相邻的。
唯一索引:
保证在表的键列或键列集上没有具有重复的值得行。每个数据值都存在一个rowid,叶快中的数据根据键排序。
非唯一索引:允许在索引的列或列集中有重复的值,按索引键和rowid(升序)排序。索引类型
索引组织表
索引组织表是存储在B-树索引结构的一种变体中的表。在堆组织表中,行被插入到适合他们的位置。在索引组织表中,行被存储在表的主键索引中。
分区、视图和其他模式对象
分区
分区使你能够将非常大的表和索引分解成更小、更易于管理的叫做分区片段。每个分区是一个独立的对象,具有其自己的名称和存储特征。
分区特征:每个表或索引的分区必须具有相同的逻辑属性,如列名称、数据类型、约束等。每个分区可以有单独的物理属性,如所属的表空间。
分区策略:范围分区、列表分区、哈希分区
分区表
分区表包含一个或多个分区,他们可以单独进行管理,并且可以独立于其他分区进行操作。表要么是分区表要么是非分区表。即使分区表只包含一个分区,也与未分区表不同。
分区表由一个或多个表分区段组成。如果创建一个名为hash_products的分区表,但没有为词表分配表段。相反,数据库将每个表分区的数据存储在自己的分区段中。每个表分区段包含表数据的一部分。堆组织表中的某些分区可以存储为压缩格式。视图
视图是一个或多个表的逻辑表示形式。视图在本质上是一个存储的查询。视图的数据来自它所依赖的称为基表的表。
序列
序列是一种模式对象,多个用户可以用它来生成唯一整数。序列发生器提供高可扩展性和性能良好的方法,来位数字数据类型生成代理键。例如:
CREATE SEQUENCE list_sales_seqSTART WITH 1000 --从1000开始INCREMENT BY 1 --步长为1NOCACHENOCYCLE;
维度与事实
一个典型的数据仓库有两个重要组成部分:维度和事实。维度是用于阐述业务问题的类别,如,时间、地理位置、等等。事实是与一组特定的维度的值相关的时间或实体,如销量、利润等。数据完整性
完整性约束
Oracle数据库能够在表级或列级应用约束。作为列或属性定义的一部分而指定的约束,称为行内规范约束。作为表定义的一部分而指定的约束称为行外规范约束。
注意:键仅指在完整性约束中定义的列。因为数据库通过在键列上隐含创建或重用索引来强制执行唯一性约束,术语唯一键有事会被错误地用作唯一键约束或唯一索引的同义词。
主键约束
每个表只能有一个主键,起到确定行的作用。外键约束
只要两个表包含一个或多个公共列,则数据库可以通过一个外键约束来强制建立两个表之间的关系。数据字典和动态性能视图
Oracle数据库都具有制度参考表和视图中最重要的部分,统称为数据字典。
数据字典
数据字典的内容
前缀 | 用户访问 | 内容 | 注意 |
---|---|---|---|
DBA_ | 数据库管理员 | 所有对象 | 一些 DBA_ 视图具有更多的列,其中包含对管理员有用的信息。 |
ALL_ | 所有用户 | 用户具有访问权限的对象 | 包括用户所拥有的对象。这些视图服从当前已启用的角色集合。 |
USER_ | 所有用户 | 用户所拥有的对象 | 以 USER_为前缀的视图通常不包括OWNER 列。此列隐含为对该 USER_ 视图发出查询的用户。 |
动态性能视图
在Oracle数据库的操作过程中,会维护一组记录当前数据库轰动的虚拟表。这些视图称为动态性视图,因为他们在数据库处于打开状态和在使用过程中会不断更新。这些视图有时也称为V$视图,包含以下信息:
动态性能视图用途:
数据库对象的元数据
DBMS_METADATA软件包提供了用于提取数据库对象的完整定义的接口。定义可以按XML或SQL DDL来表示。
数据并发行和一致性
数据并发行,确保多个用户可以同时访问数据
数据一致性,确保每个用户看到数据的一致的视图,包括可以看到用户自己的事务所做的更改,和其他用户已提交的事务所做的更改。Oracle数据库通过使用多版本一致性模型和各种类型的锁和事务,来维护数据的一致性。
多版本读一致性
在Oracle数据库中,多版本即同时实现数据的多个版本的能力。Oracle数据库维护多版本读取一致性,有以下特征:
注意:Oracle不允许发生脏读,当一个事务读取了另一个事务中未提交的数据时,就会发生脏读。
非阻塞查询
数据读取者和写入者不会相互阻塞。语句级读取一致性
Oracle数据库始终强制执行语句级读取一致性,保证单个查询所返回的数据是已提交的、且关于某个单一时间点一致。单个SQL语句所一致的时间点取决于事务的隔离界别和查询的性质。在读提交隔离界别,该时间点是语句打开的时间。
在可串行化或只读事务隔离级别,该时间点为食物开始的时间。 在闪回查询操作中,SELECT语句显示指定时间点。读取一致性及撤销
ANSI/ISO事务隔离级别
Oracle数据库事务隔离级别
已提交读隔离级别
可串行化隔离级别
只读隔离级别
数据库锁定机制
锁是一种机制,用来防止多个共同访问共享数据的事务之间的破坏性交互。
锁分为独享锁和共享锁。在一个资源上,只能获得一个独占锁,但在单个资源上可以获得很多共享锁。 以下规则总结了Oracle数据库中读取者和写入者的锁定行为:独占锁模式
此模式可防止先关资源被共享。当一个事务修改数据时,获取一个独占锁。直到独占锁被释放之前,第一个以独占方式锁定资源的事务是唯一可以更改资源的事务。
共享锁模式
取决于所涉及的操作,此模式允许相关资源被共享。读取数据的多个用户可以共享数据,并持有共享锁,以防止企图获取独占锁的写入者并发访问。多个事务可以同时获取在同一资源上的共享锁。
锁转换和锁升级
数据库在必要时执行锁转换。在锁转换中,数据库自动将较低限制的表锁转换为较高限制的其它锁定。
转载地址:http://zdrji.baihongyu.com/