6.8 本章知识点回顾

描述各种数据操作语言(DML)语句

● INSERT在表中插入行。

● UPDATE调整现有行的值。

● DELETE删除行。

● MERGE可以合并INSERT、UPDATE和DELETE的功能。

● 虽然TRUNCATE不是DML命令,但它能够删除表中的所有行。

● INSERT可以将一些行插入多个表中。

● 可以用子查询来生成要插入的、要更新的和要删除的行。

● 在提交之前,INSERT、UPDATE和DELETE并不是永久的。

● TRUNCATE从表中删除所有行。

● TRUNCATE让变更立即变得永久:它无法回滚。

控制事务

● 事务是逻辑工作单元,可能由几个DML语句组成。

● 在提交之前,事务对其他会话不可见。

● 在提交之前,可以回滚事务。

● SAVEPOINT让会话回滚部分事务。

解释DML和撤消数据的生成

● 所有DML命令都生成撤消和重做内容。

● 重做保护对段(撤消段和数据段)所做的所有更改。

● 服务器进程从数据文件读取信息,DBWn针对数据文件执行写操作。

监控和管理撤消数据

● 实例将在一个指定的撤消表空间中使用撤消段。

● 可以存在多个撤消表空间,但每次只能使用一个。

● 撤消表空间应该具有足够的存储量,以便将最高撤消生成速率和运行时间最长的查询考虑在内。

● 撤消表空间数据文件与其他数据文件类似。

撤消数据和重做数据之间的区别

● 撤消操作保护事务,而重做操作保护块的变更。它们不是相反的,而是互补的。

配置撤消保留时间

● 撤消数据将始终保持到生成它的事务以COMMIT或ROLLBACK结束为止,这是“active”(活动)撤消。

● 撤消数据在进入不活动状态后,会保留一段时间,以便满足长期运行的查询的任何读一致性要求,这是“unexpired”(未过期)撤消。

● “expired”(过期)撤消是读一致性不再需要的数据,在重用撤消段的空间时,将随时重写“expired”(过期)撤消。

● 用undo_retention参数设置一个目标,就配置了撤消保留时间。这仅是一个目标,如果撤消表空间的空间不足,就不会达到该目标——除非把表空间设置为RETENTION GUARANTEE,这可能使事务因缺乏撤消空间而失败。

描述锁定机制和数据并发管理

● 默认的锁定级别是行级别。

● 锁定对于所有DML命令是必需的,对于SELECT是可选的。

● DML语句需要所涉及对象上的共享锁,以及所涉及行上的排他锁。

● DDL锁定需要受影响对象上的排他锁。

监视和解决锁定冲突

● 查询V$SESSION视图或使用Database Express,可以识别出行锁定导致的阻塞。

● 终止阻塞的事务或停止阻塞的会话,就可以解决锁定冲突。

● 死锁将自动解决。