Oracle事务和常用数据对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle事务和常用数据对象相关的知识,希望对你有一定的参考价值。

前言:本次内容的相关知识点我们在学习sqlserver2008R2的时候介绍过一些,包括:事务、索引、视图等。那么今天我们学习在oracle上实现这些重要的内容,以实现数据库的优化。

一、事务

1、简介
事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败。DBMS通过事务的管理来协调用户的并发行为,减少用户访问资源的冲突。
技术分享图片
1)显示提交:当事务遇到COMMIT指令时,将结束事务并永久保存所有的更改的数据。
2)显示回滚:当事务遇到ROLLBACK指令时,也将结束事务的执行,但是此时它回滚所有更改的数据到事务开始时的原始值,即取消更改,数据没有变化。
3)DDL语句:一旦用户执行了DDL(数据定义语言,如create,drop等)语句,则之前的所有DML(数据操作语言)操作作为一个事务提交,这种提交称为隐示提交。
4)正常结束程序:如果oracle数据库应用程序正常结束,如使用sqlplus工具更改了数据,而正常退出该程序(exit),则oracle自动提交事务。
5)非正常地结束程序:当程序崩溃或意外终止时,所有数据更改都被回滚,这种回滚成为隐示回滚。

2、事务的特点
事务有4个特性,简写为ACID特性。
1)原则性:以转账操作为例,转出账户余额减少和转入余额增加是两个DML语句,但是必须作为一个不可分割的完整操作。要么同时成功,要么同时失败,只转出而没有转入显然是不可接受的。
2)一致性:无论是在事务前、事务中、事务后,数据库始终处于一致的状态。例如:转账前分别是2000和1000,总金额是3000,转账300后分别是1700和1300,总金额还是3000.这就叫做一致性。不一致就是在某个时间点查询到的总金额不是3000.
3)隔离性:在某个时间段,肯定有很多人都在转账,每个人的转账都是在自己的事务中,所以在一个数据库中,会有很多事物同时存在。虽然同时存在很多事物,但是事物之间不会相互影响。
4)持久性:如果事物提交成功,则数据修改永远生效,如果是回滚,则数据完全没有没修改,就相当于没有这件事情发生。

3、学会事物的控制
1)使用COMMIT和ROLLBACK实现事物控制
COMMIT:提交事物,把事物中对数据库的修改进行永久保存。
ROLLBACK:回滚事物,取消对数据库所做的任何修改。技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片
4)验证持久性
一旦使用commit命令来结束某个事务,那么就必须保证数据库不丢失这个事务。在事务进行期间,隔离性的原则要求除了指定会话涉及的用户之外的任何用户都不能查看当前所做的变化。不过事务一旦完成,所有用户都必须能够立即看到所做的变化,同时数据库必须保证这些变化绝不会丢失。Oracle通过使用日志文件来满足这个需求。日志文件具有两种形式:联机重做日志文件,归档重做日志文件。
一个正确配置的oracle数据库是不可能丢失数据的。当然用户的错误(包括不恰当的DML或删除对象)也会造成数据的丢失。DDL语句有自动提交功能(create、drop、truncate、alter)
技术分享图片技术分享图片技术分享图片技术分享图片
关于事物的总结:

  1. 需要注意的是,Commit:只是用来确认这个数据已经正式的修改了,不一定非得写入硬盘,DBWn什么都不做。执行commit命令时发生的所有物理操作时LGWR进程将日志缓冲区的内容写入磁盘。DBWN进程完全没有执行任何操作。DBWN进程与提交事物处理没有关系,不过最终DBWN进程会将变化的数据块写入磁盘。
  2. commit和rollback语句只应于DML语句,我们无法回滚DDL语句。DDL语句一旦被执行就会立即具有持久状态。
    3.自动提交和隐式提交:oracle在某些情况下可以进行自动提交:执行DDL语句是一种情况,退出某个用户进程也是一种自动提交。

二、索引

1、索引的含义
Oracle 数据库对象又称模式对象,数据库对象是逻辑结构的集合,最基本的数据库对象是表,索引也是其中之一。其他数据库对象包括:

技术分享图片
索引是oracle的一个对象,是与表关联的可选结构,提供了一种快速访问数据的途径,提高了数据库检索性能。索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需要的数据。就像书的目录,可以通过目录快速查找所需信息,无需阅读整本书。

2、索引的特点
适当地使用索引可以提高查询速度
可以对表的一列或多列建立索引
建立索引的数量没有限制
索引需要磁盘存储,可以指定表空间,由oracle自动维护
索引对用户透明,检索时是否使用索引由oracle自身决定
Oracle数据库管理系统在访问数据时使用以下三种方式:
?全表扫描
?通过ROWID(行地址,快速访问表的一行)
?使用索引
当没有索引或者不选择使用索引时就用全表扫描的方式

3、索引的分类
1)B树索引结构
索引的顶部为根,其中包含指向下一级索引的项。下一级为分支块,分支块又指向索引中下一级的块,最低一级的块称为叶节点,其中包含指向表数据行的索引项。叶节点为双向连接,有助于按关键字值得升序和降序扫描索引。
例如:查询id从2到31行的数据

技术分享图片
上图中使用索引遍历过程如下:
先找到id<=50的分支块,再找到30-40的分支块,在找到id=31对应的索引项,之后通过叶节点双向链接,平行地找到包含id=2的索引块,完成对id的查询

4、创建索引的语法
create [unique] index 索引名称 on 表名(列名)[tablespace 表空间名称]

解释:
[unique]用于指定唯一索引,默认情况下为非唯一索引
[tablespace]为索引指定表空间

1)创建标准索引
SQL> CREATE INDEX index_name ON tablename(columnname)
TABLESPACE index_tbs;
2)重建索引
SQL> ALTER INDEX index_name REBUILD;

合并索引碎片
SQL>ALTER INDEX index_name COALESCE;

3)删除索引
SQL> DROP INDEX index_name;
技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片
技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片

三、视图

1、概述
视图是一个虚表,不占用物理空间,因为视图本身的定义语句存储在数据字典里,视图中的数据是一个或多个实际表中获得的。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。

2、视图的优点:
1)提供了另外一种级别的表安全性
2)隐藏的数据的复杂性:一个视图可能是用多表连接定义的,但用户不需要知道多表连接的语句也可以查询数据。
3)简化的用户的SQL命令:查询视图的时候不需要写出复杂的查询语句,只需要查询视图名称即可。
4)隔离基表结构的改变:视图创建好了之后,如果修改了表的结构,也不会影响视图的。
5)通过重命名列,从另一个角度提供数据:例如在销售系统中,每日下班前要对当日数据进行汇总,在销售人员眼中,该汇总表成为日销售统计表,在财务人眼中,该销售表成为销售日报表。

3、创建视图的语法:
1) CREATE [OR REPLACE] [FORCE] VIEW
view_name [(alias[, alias]...)]
AS select_statement
[WITH CHECK OPTION]
[WITH READ ONLY];
解释:
OR REPLACE:如果视图已存在,此选项将重新创建该视图。
FORCE:如果使用此关键字,则无论基表是否存在,都将创建视图。
NOFORCE:这是默认值,如果使用此关键字,则仅当基表存在时才创建视图。
VIEW_NAME:要创建视图的名称
Alias:指定由视图的查询所选择的表达式或列的别名。别名的数目必须与视图所选择的表达式的数目相匹配。
Select_statement:select语句
WITH CHECK OPTION :此选项指定只能插入或更新视图可以访问的行。术语constraint表示为CHECK OPTION约束指定的名称。
WITH READ ONLY:此选项保证不能在此视图上执行任何修改操作。

2)视图中的ORDER BY子句
可以在创建视图时在SELECT语句中使用ORDER BY子句,以便按照特定的顺序进行排序,这样,在查询视图时即使不使用ORDER BY子句,结果集也会按指定的顺序进行排列。

3)创建带有错误的视图
如果在create view语句中使用FORCE选项,即使存在系列情况,oracle也会创建视图。
?视图定义的查询引用了一个不存在的表。
?视图定义的查询引用了现有表中无效的列。
?视图的所有者没有所需的权限。
在这些情况下,oracle仅检查create view语句中的语法错误。如果语法正确,将会创建视图,并将视图的定义存在数据字典中。但是,该视图却不能使用。这种视图被认为是“带错误创建”的。可使用SHOW ERRORS VIEW视图名来查看错误。
技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片
技术分享图片

四、序列

序列是用来生成唯一、连续的整数数据库对象。序列通常用来自动生成主键或唯一键的值。序列可以按升序排列,也可以按降序排列,与excel的自动排序,以及sqlserver的标识符是一样的。
技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片
技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片

五、同义词

同义词是对象的一个别名,不占用任何的实际存储空间,只在oracle的数据字典中保存其定义描述,在使用同义词时,oracle会将其翻译为对应对象的名称。
1、同义词的用途
1)简化sql语句
如果用户创建的表的名字很长,可以为这个表创建一个oracle同义词来简化语句。
2)隐藏对象的名称和所有者
多用户协同开发中,可以屏蔽对象的名称及持有者。如果没有同义词,当操作其他用户的表时,必须通过“用户名.表名”的形式操作,采用了oracle同义词之后就可以隐藏掉用户名。例如:用户user1要访问用户的SCOTT的EMP表,必须使用SCOTT.emp来引用。如果为用户创建一个名为emp的同义词代表SCOTT.emp,那么user1就可以用该同义词像访问自己的表一样引用SCOTT.emp了。
3)为分布式数据库的远程对象提供位置透明性
要完成远程对象的访问,先要了解数据库连接的概念。数据库链接是一个命名的对象,说明一个数据库到另一个数据库的路径,通过其可以实现不同的数据库之间的通信。同义词在数据库链接中的作用就是提供位置透明性。
4)提供对数据库对象的公共访问
公有同义词只是为数据库对象定义了一个公共的别名,即其他用户都可以通过这个别名访问,但能够通过该别名访问成功,还要看是否已经具有数据库对象的访问权限。

2、同义词的分类
?同义词分为以下两类:私有同义词和公有同义词
?私有同义词只能在其模式内访问,且不能与当前模式的对象同名
?公有同义词可被所有的数据库用户访问

2-1:私有同义词
私有同义词只能被当前模式的用户访问,私有同义词名称不可与当前模式的对象名称相同。要在自身的模式创建私有同义词,用户必须拥有create synonym系统权限。要在其他用户模式创建私有同义词,用户必须拥有create any synonym系统权限。
2)创建私有同义词的语法如下:
CREATE OR REPLACE SYNONYM [schema.]synonym_name FOR [schema.]object_name;

synonym_name:要创建同义词的名称
object_name:指定要为之创建同义词的对象的名称。

技术分享图片
技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片

六、分区表

1、分区表的含义
Oracle允许把一个表重的所有行分成几个部分,并将它们存储在不通的表空间,分成的每一部分成为一个分区,被分区的表成为分区表。
技术分享图片
对于包含大量数据的表来说,分区很有用,优点有以下几点:
1)改善表的查询性能。在对表进行分区后,用户执行sql查询时可以只访问表中的特定分区而非整个表。
2)表更容易管理。因为分区表的数据存储在多个部分中,按分区加载和删除数据比在表中加载和删除更容易。
3)便于备份和恢复。可以独立地备份和恢复每个分区。
4)提高数据安全性。将不同的分区分布在不同的磁盘,可以减少所有分区的数据同时损坏的可能性。

复合一下条件的表可以建成分区表:
1)数据量大于2GB。
2)已有的数据和新添加的数据有明显的界限划分。
表分区对用户是透明的,及应用程序可以不知道表已被分区,在更新和查询分区表时当做普通表来操作,但oracle优化程序知道表已被分区。

注意:要分区的表不能具有LONG和LONG RAW数据类型的列。

2、分区表的分类
Oracle提供的分区方法有范围分区、列表分区、散列分区、复合分区、间隔分区和虚拟列分区等。其中间隔分区和虚拟列分区是oracle11g的新特性
技术分享图片
技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片

以上是关于Oracle事务和常用数据对象的主要内容,如果未能解决你的问题,请参考以下文章

Oracle事务和常用数据对象

oracle系列oracle事务和常用数据库对象

Oracle事务和常用数据对象

Oracle事务和常用数据库对象

Oracle事务和对象上集(视图索引)

在oracle中,事务中使用下列SQL语句不会引起锁定?