Oracle DML语句概述

DML语句包括:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • MERGE

 

DML语句错误的原因:

1、语法错误

2、引用不存在的对象和列

3、访问权限问题

4、违反约束条件

5、空间问题

 

控制事务

一个事务包含一个或多个DML语句,以ROLLBACK或COMMIT命令结尾;

Oracle事务一致性是靠undo segments和redo log files文件保证的;

关系型数据库必须保证:ACID

A:Atomicity 原子性:原子性是保证事务中的各个部分要么全部执行成功,要么全部失败;

C:Consistency 一致性:一致性要保证所有的查询结果都是一样的;

I:Isolation  隔离性:每一个事务之间都是互相不可见的;

D:Durability 持久性:一旦事务完成,数据库就不能丢失数据;

 

当一个查询进行时发现其中的数据已经更改了,那么他就会到undo segment中去读取旧的版本;

 

所有的DML操作都需要在datablocks ,undo blocks, 并且产生redo logs

A,C and I需要产生undo blocks;

D需要产生 redo logs;

 

只有事务提交后,数据的改变才能永久的保存下来,并且被其他session可见

事务是不能嵌套的,不允许在一个事务结束前开始另外一个事务;事务是嵌套可以通过PL/SQL来完成;

显示的事务控制语句的命令为:COMMIT,ROLLBACK, SAVEPOINT;也有隐身控制的语句,如:

  • 实施DDL(CREATE, ALTER, DROP,SELECT FOR UPDATE)或DCL(GRANT, REVOKE)语句
  • 从用户端工具中退出,如:SQL*PLUS或SQL Developer
  • 当客户端会话死掉:这时整个事务会rollback
  • 当系统宕机;事务会rollback

 

SAVEPOINT并不是SQL标准的一部分;

 

COMMIT:并不会用DBWn往磁盘数据文件上写数据,而仅仅是将log buffer中的数据写入磁盘,并且将事务的标志置为完成;

The redo log stream includes allchanges: those applied to data segments and to undo segments, for bothcommitted and uncommitted transactions;

 

当你使用EXIT退出sqlplus时,事务会提交,当你点击关闭按钮退出sqlplus时,事务会回滚;

有一个SET AUTOCOMMIT ON语句可以在SQLPLUS中设置,在DML语句执行时,自动提交事务;

 

 

PL/SQL对象

PL/SQL是Oracle公司私有的第三代语言,PL/SQL总是在数据库上进行运行,而不管它是存储在服务器上还是客户端。

Stored PL/SQL对象是存储在数据字典中的,

anonymous PL/SQL对象是存储在远端的;

PL/SQL对象总共有六种类型:

  • Procedure
  • Function
  • Package
  • Package body
  • Trigger
  • Type body

 

使用触发器的好处:

  • 审计用户的行为
  • 执行复杂的编辑
  • 安全
  • 加强复杂的约束

 

one session can take an exclusivelock on a row, or a whole table, at a time

but  shared locks can be taken on the same objectby many sessions;

不应该在行级别上使用共享锁;

使用共享锁的目的是防止其他会话在这个对象上加操作锁;

当执行DML语句的时候,会话必须在操作对象的行级别上加操作锁,在表级别上加共享锁;

加共享锁的目的是防止其他会话对该表进行DDL操作;

 

队列机制

可以使用SELECT….FOR UPDATE NOWAIT 或 SELECT ….FOR UPDATE WAIT(n),来避免使用该语句是的排队等待;

 

引起锁竞争的原因:

长时间 运行的事务会导致锁竞争;

一些第三方用户 进程会提高锁的级别,从行级锁提高的表级锁;

 

当会话发生锁定而需要终止时,可以使用Database Control发现锁定的的会话,并使用ALTER SYSTEM KILL SESSION 命令来终止会话

 

死锁不是DBA的错误,而是错误的程序设计产生的,它可以由数据库自动的进行处理;

你可能感兴趣的:(Oracle那些事儿-学习笔记)