oracle中做数据字典,Oracle事物管理、数据字典

事物管理:

a4c26d1e5885305701be709a3d33442f.png

一、可恢复的空间分配问题

当一个持续时间较长的数据库操作在执行过程中遭遇空间分配失败时,Oracle 可以将此操作暂时挂起(suspend),并在空间分配问题解决后恢复(resume)其执行。当发生空间分配问题时,Oracle 数据库服务器不会立即给执行此操作的用户返回错误提示,而是等待管理员解决此问题。当空间分配问题被纠正后,挂起的操作可以自动地恢复执行。

只有在客户端使用 ALTER SESSION 语句的语法显式地将会话(session)设定为可恢复(

resumable)后,SQL 语句才能运行在可恢复模式下(resumable

mode)。

当满足以下条件之一时,运行于可恢复的空间分配模式下的语句将被挂起(suspend):

·

无可用空间

·

达到最大的数据扩展(maximum

extent)限制

·

超出空间配额(space

quota)限制

在不可恢复的空间分配模式下,以上条件将导致运行错误,并使SQL 语句回滚(roll

back)。

二、事务管理概述

在 Oracle

中一个事务(transaction)开始于首个可执行的

SQL 语句(executable SQL

statement)。可执行的 SQL 语句指产生了对实例(instance)的调用(call)的

SQL 语句,包括 DML

和 DDL

语句。

当一个事务(transaction)开始时,Oracle 为此事务分配一个可用的撤销表空间(undo

tablespace)来记录其产生的回滚条目(rollback entry)。

一个事务(transaction)在满足以下条件之一时结束:

·

用户提交了 COMMIT 语句,或不包含 SAVEPOINT 子句的 ROLLBACK 语句。

·

用户执行了 CREATE,DROP,RENAME,或

ALTER 等 DDL

语句。如果当前事务中包含 DML

语句,那么 Oracle

首先提交(commit)此事务,然后将

DLL 语句作为一个只包含一条 SQL

语句的新事务运行并提交。

·

用户断开了与 Oracle

的连接。当前事务将被提交。

用户进程异常结束。则当前事务被回滚(roll

back)。

三、事务提交

提交(commit)一个事务(transaction)意味着将此事务中

SQL 语句对数据的修改永久地记录到数据库中。

在一个修改了数据的事务(transaction)被提交之前,Oracle进行了以下操作:

·

Oracle生成了撤销信息(undo information)。撤销信息包含了事务中各个

SQL 语句所修改的数据的原始值。

·

Oracle在

SGA 的重做日志缓冲区(redo log

buffer)中生成了重做日志条目(redo log entry)。重做日志记录(redo log record)中包含了对数据块(data block)和回滚块(rollback block)所进行的修改操作。这些记录可能在事务提交之前被写入磁盘。

·

对数据的修改已经被写入 SGA

中的数据库缓冲区(database

buffer)。这些修改可能在事务提交之前被写入磁盘。

已提交事务(committed

transaction)中对数据的修改被存储在

SGA 的数据库缓冲区(database

buffer)中,她们不一定立即被后台进程

DBWn 写入数据文件(datafile)内。Oracle将选择适当的时机进行写操作以保证系统的效率。因此写操作既可能发生在事务提交之前,也可能在提交之后。

当事务(transaction)被提交之后,Oracle进行以下操作:

1. 撤销表空间(undo

tablespace)内部的事务表(transaction table)将记录此次提交(commit),Oracle为此事务分配一个唯一的系统变化编号(system change number,SCN),并将其记录在事务表中。

2. 重做日志写进程(The log writer

process,LGWR)将

SGA 内重做日志缓冲区(redo log

buffer)中的重做日志条目(redo log entry)写入重做日志文件(redo log file)。同时还将此事务的

SCN 也写入重做日志文件。由以上两个操作构成的原子事件(atomic event)标志着一个事务成功地提交。

3.Oracle释放加于表或数据行上的锁(lock)。

4.Oracle将事务标记为完成。

在默认状态下,LGWR

将重做信息(redo

log)写入联机重做日志文件(online redo log file)的工作应与事务(transaction commit)提交同步,重做信息写入磁盘后系统才能通知用户提交(commit)结束。但是为了缩短事务提交带来的延迟,应用开发者可以设定事务提交

与重做信息写入异步地执行,即事务提交无需等待重做信息被写入磁盘就可以结束。

四、事务回滚

回滚(rolling back)的含义是撤销一个未提交事务(uncommitted transaction)中已执行的

SQL 语句对数据的修改。Oracle使用撤销表空间(undo tablespace)(或回滚段(rollback segment))来存储被修改的数据的原始值。而重做日志(redo log)内则保存了对数据修改操作的记录。

用户可以回滚(roll

back)整个未提交事务(uncommitted transaction)。除此之外,用户还可以部分回滚未提交事务,即从事务的最末端回滚到事务中任意一个被称为保存点(savepoint)的标记处。

以下各种类型回滚操作(rollback)的过程基本相同:

·

语句级回滚(tatement-level

rollback)(由于语句执行错误或死锁(deadlock)造成)

·

回滚到一个保存点(savepoint)

·

依据用户请求回滚一个事务(transaction)

·

由于进程异常终止而回滚一个事务

·

由于实例(instance)异常终止而回滚所有正在执行的事务

·

在数据库恢复(recovery)过程中回滚不完整的事务

不考虑保存点(savepoint)而回滚(rolling

back)整个事务(transaction)的过程如下:

1

Oracle使用相关撤销表空间(undo tablespace)内的信息来撤销事务内所有

SQL 语句对数据的修改

2

Oracle释放事务中使用的所有锁

3

事务结束

五、redo log

buffer 和dabase

buffer写入磁盘的时机?

(1)DBWn根据极懒算法执行写入:尽可能少,再尽可能少。在以下四种情况下,DBWn将执行写操作;没有任何可用缓冲区、脏缓冲区过多、遇到三秒超时(DBWn每过3s会对一些缓冲区)或遇到更多的检查点(当遇到检查点时,会写入所有缓冲区)。

在提交事务时,DBWn什么都不做。

脏数据块:更新过,但尚未写回磁盘的数据。

脏缓冲区数量过多:究竟何为过多,这是由一个内部阀值确定的。服务器进程都可以找到可用缓冲区,但总体而言,脏缓冲区数量过多;这将导致DBWn将其中一些缓冲区写入到磁盘。

(2)在三种情况下,LGWR将转储日志缓冲区(将日志缓冲区写入到联机重做日志文件的过程):会话发出COMMITA、日志缓冲区占用率达1/3、DBWn要写入脏缓冲区

数据字典:

一、数据字典简介

·

数据字典(data

dictionary)是

Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表。数据字典中包

含:数据库中所有方案对象(schema

object)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等)

·

数据库为一个方案对象分配了多少空间,以及该对象当前使用了多少空间

·

列的默认值

·

完整性约束(integrity

constraint)信息

·

数据库用户名

·

每个用户被授予(grant)的权限(privilege)与角色(role)

·

监控(audit)信息,例如哪个用户对某个方案对象进行了访问或更新操作

·

数据库中的其他概要信息

与数据库内的其他数据相同,数据字典也是以表及视图的形式组织的。一个数据库全部的数据字典表与数据字典视图都存储在该数据库的

SYSTEM 表空间内。

1.数据字典的组织结构

1)基表:

基表(base

table)用于存储相关的数据库信息。只有

Oracle 才能读写这些表。用户很少直接访问她们,因为这些表是规范化的(normalized),且其中的大部分数据的含义是普通用户无法理解的。

2)用户访问视图:

用户访问视图(user-accessible

view)用于对数据字典基表内存储的数据进行汇总与展示。这些视图利用连接(join)及

WHERE 子句简化基表中的数据,将其解码(decode)为用户可理解的信息,例如用户名,表名等。大多数数据库用户只能访问这些视图,而不能访问基表。

2.SYS,数据字典的所有者

Oracle

中的 SYS 用户拥有数据字典中的所有基表(base

table)及用户访问视图(user-accessible view)。其他

Oracle 用户不应修改(UPDATE,DELETE,或

INSERT)SYS 方案中的对象定义及数据,否则将危害数据库的数据完整性(data integrity)。安全管理员必须严格控制此账户。二、如何使用数据字典

1.数据字典有三个主要用途:

·

Oracle 利用数据字典来获取关于用户,方案对象,及存储结构(storage structure)的信息。

·

每当数据库中执行了 DDL

语句后,Oracle

将对数据字典进行修改。

·

所有 Oracle

用户都可以使用数据字典来获取关于数据库的信息。

Oracle

如何使用数据字典:

数据字典基表(base

table)中的数据是

Oracle 正常工作所必须的。因此,只有 Oracle 才能增加或修改数据字典中的信息。当用户对数据库进行升级(upgrade)或降级(downgrade)的操作时,Oracle 提供了修改数据字典表的脚本。

在数据库运行期间,Oracle

通过数据字典内的信息来确定方案对象(schema

object)是否存在,以及用户是否具备相应的权限。Oracle 会持续地更新数据字典,以便反映数据库在结构,数据,授权,监控(audit)等方面的变化。

2.如何使用数据字典

所有数据库用户都可以参考数据字典视图提供的信息。用户可以使用 SQL 语句来访问数据字典视图。有些视图可以供所有 Oracle 用户使用,而有些只有 DBA

才能访问。

只要数据库处于打开(open)状态,用户就可以使用数据字典。因为数据字典存储在

SYSTEM 表空间内,此表空间在数据库被打开后总是联机(online)的。

数据字典视图可以被分为多组。大多数情况下,一组视图由三个包含相似信息的视图构成,其中的区别在于视图名称的前缀:

前缀

覆盖范围

USER

用户视图(用户方案(schema)内的对象)

ALL

扩展的用户视图(用户可访问的对象)

DBA

DBA 视图 (所有用户方案内的对象)

USER_###

1)

以 USER

为前缀的视图

普通数据库用户最常使用是以 USER

为前缀的数据字典视图。这些视图的特点是:

·

反映了数据库中某个用户的全部情况,包括由此用户创建的方案对象,此用户所做的授权行为,等等。

·

只展示和某个用户相关的信息

·

与其他视图拥有相同的列,只有 OWNER

信息是隐含的

·

其内容是以 ALL 为前缀的视图的子集

·

可以在其上创建经过缩写(abbreviated)的

PUBLIC 同义词(synonym)以便于使用

以下查询返回当前用户方案内的全部数据库对象:

SELECT

object_name, object_type FROM USER_OBJECTS

2)以 ALL 为前缀的视图

以 ALL 为前缀的视图反映了某个用户所能看到的全部数据库内容。其中除了包含用户所拥有的方案对象之外,还包含了用户可访问的公共对象,以及通过授予(grant)权限

或角色而能够访问的方案对象。

以下查询返回当前用户所能访问的全部数据库对象:

SELECT

owner,

object_name, object_type FROM

ALL_OBJECTS;

3)

以 DBA

为前缀的视图

以 DBA 为前缀的视图能够展现整个数据库的全部内容。不应在这些视图上创建同义词,因为以 DBA 为前缀的视图只应由管理员查询。因此在查询 DBA 视图时,管理员必须在视图名之前加上其拥有者的前缀 SYS,如下所示:

SELECT owner,

object_name, object_type FROM SYS.DBA_OBJECTS、

三.动态性能表

在数据库运行过程中,Oracle

将维护一组虚拟表(virtual

table)用于记录数据库的当前状态(current database activity)。这组表被称为动态性能表(dynamic performance table)。

动态性能表并不是真正的表,大多数用户不应访问其中的信息。但是数据库管理员可以对其进行查询,或在其上创建视图并将访问权限授予其他用户。这些视图有时被称为固定视图(fixed view),因为数据库管理员不能将其修改或移除。

动态性能表由 SYS 用户所拥有;她们的名字都以 V_$ 开头。这些表上创建有视图,而视图上创建有公共同义词。这些公共同义词的名字都以 V$ 开头。例如,V$DATAFILE 视图包含了数据库文件的信息,V$FIXED_TABLE 视图包含了数据库中所有动态性能表及视图的信息。.四.数据库对象元数据

DBMS_METADATA包为用户提供了获取数据库对象完整定义的接口。此包可以通过

XML 或 SQL DDL

的形式提供定义信息。此包具备两类接口:

·

用于进行编程的灵活且完善的接口

·

用于随机查询(ad hoc

querying)的简化接口

方案对象:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值