数据库——回滚的关键字 (数据库关键字回滚)

随着计算机科学技术的飞速发展,数据库管理系统已经成为现代信息技术应用领域不可或缺的核心技术之一。数据库管理系统能够通过对大量数据进行存储、管理和查询等处理,从而为各行业提供了更加高效、准确、安全和可靠的信息管理服务。在数据库管理系统的设计和运行过程中,各种关键字和操作都显得尤为重要。其中,回滚(Rollback)就是一个至关重要的关键字。

回滚是数据库管理系统中一个非常关键的操作,其作用是将一个或多个已经提交的事务所做的修改操作进行撤销,使数据库恢复到修改前的状态,从而保证数据库的一致性和可靠性。在实际应用中,回滚操作通常用于处理在事务处理过程中出现的故障或错误的处理方式,其他关键字如提交(Commit)、读取(Read)和写入(Write)等,都可以对回滚操作发挥必要的作用。

从技术实现机制上看,回滚操作主要基于事务的概念和多版本并发控制机制(MVCC)实现。在数据库中,事务可以被视为一系列操作的,这些操作要么全部被执行,要么全部无效。当事务提交时,所作的所有修改操作都会被永久地保存到数据库中。而当使用者需要撤销这些修改操作时,就可以调用回滚操作。数据库管理系统会相应地追踪这些修改操作的所有记录,进而将当前的数据库状态恢复到回滚操作执行之前的状态,从而实现数据的回滚。

在回滚操作的应用场景中,最常见的就是事务处理过程中出现故障或错误的情况。例如,在一个银行系统中,当一个用户转账时,系统会自动为他建立一个新的事务,以确保转账是安全和成功的。如果在转账处理过程中,系统出现故障或者用户账户余额不足等问题,就需要调用回滚操作,把当前的数据库状态恢复到执行事务之前的状态,防止用户的账户余额出现错误值或遭受损失。

此外,在多用户并发查询和修改同一数据库的情况下,回滚操作也是非常必要的。由于多用户同时操作数据库,可能会出现矛盾,如两个用户同时修改同一条数据,就会出现歧义,即谁的修改操作应该覆盖谁。这时候,回滚操作就能够将当前的数据库状态回到之前的状态,然后重新处理这些修改操作,从而避免数据冲突和错误。

总体来说,回滚是一个数据库管理系统中非常重要的关键字。它可以帮助用户解决在事务处理中出现的故障和错误,维护数据库的一致性和可靠性。回滚操作的实现机制和应用场景非常广泛,它不仅是数据库管理系统中的一个基础功能,也是信息管理和技术创新领域中必不可少的核心技术之一。因此,未来的数据库管理系统和技术应用领域需要更加深入的研究和探索,以进一步优化回滚操作的效果和性能,使其能够更好地满足用户的需求和应用场景。

相关问题拓展阅读:

简答题:SQL语言的四大功能及特点

17 D

18 C

19 B

20 C

填空

1 关系模型

2 实体

3 一大此对多 多对多

4 数据查询语言

5 域的完整性约束、实滚轿迅体完整性约束、参照完帆哪整性约束、用户定义的完整性约束条件

四、程序完善题

select xh,case when qmcj>=90 then 优秀 else

case when qmcj>=80 and qmcj=70 and qmcj=60 and qmcj

case when qmcj

SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL.其中用于定义数据的结构,比如 创建,修改或者删除数据库;DCL用于定义数据库用户的权限;在这篇文章中我将详细讲述这两种语言在Oracle中的使用方法.

DML语言

DML是SQL的一个子集,主要用于修改数据,下表列出了ORACLE支持的DML语句.

语句 用途

INSERT 向表中添加行

UPDATE 更新存储在表中的数据

DELETE 删除行

SELECT FOR UPDATE 禁止其他用户访问DML语句正在处理的行.

LOCK TABLE 禁止其他用户激做在表中使用DML语句

插入数据

INSERT语句常常用于向表中插入行,行中可以有特殊数据字段,或者可以用子查询从已存在的数据中建立新行.

列目录是可选的,缺省的列的目录是所有的列名,包哪悉括comlumn_id,comlumn_id可以在数据字典视图ALL_TAB_COLUMNS,USER_TAB_COLUMNS,或者DBA_TAB_COLUMNS中找到.

插入行的数据的数量和数据类型必须和列的数量和数据类型相匹配.不符合列定义的数据类型将对插入值实行隐式数据转换.NULL字符串将一个NULL值插入适当的列中.关键字NULL常常用于表示将某列定义为NULL值.

下面的两个例子是等价的.

INSERT INTO customers(cust_id,state,post_code)

VALUE(‘Ariel’,NULL,’94501′);

INSERT INTO customers(cust_id,state,post_code)

VALUE(‘Ariel’,,’94501′);

更新数据

UPDATE命令用于修改表中的数据.

UPDATE order_rollup

SET(qty,price)=(SELECT SUM(qty),SUM(price) FROM order_lines WHERE customer_id=’KOHL’

WHERE cust_id=’KOHL’

AND order_period=TO_DATE(’01-Oct-2023′)

删除数据

DELETE语句用来从表中删除一行或多行数据,该命令包含两个语句:

1,关键字DELETE FROM后跟准备从中删除数据的表名.

2,WHERE后跟删除条件

DELETE FROM po_lines

WHERE ship_to_state IN (‘TX’,’NY’,’IL’)

AND order_date

清空表

如果你想删除表中所有数据,清空表,可以考虑使用DDL语言的TRUNCATE语句.TRUNCATE就像没有WHERE子句的DELETE命令一样.TRUNCATE将删除表中所有行.TRUNCATE不是DML语句是DDL语句,他和DELETE右不同的特点.

TRUNCATE TABLE (schema)table DROP(REUSE) STORAGE

STORAGE子串是可选的,缺省是DROP STORAGE.当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT参数.REUSE STORAGE不会缩短表或者调整NEXT参数.

TRUNCATE和DELETE有以下几点区别

1,TRUNCATE在各种表上无论是大的还是小的都非常快.如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销.

2,TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令.

3,TRUNCATE将重新设置高水平线和所有的索引.在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多.

4,TRUNCATE不能触发任何DELETE触发器.

5,不能授予任何人清空他明缓衡人的表的权限.

6,当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能.

7,不能清空父表.

SELECT FOR UPDATE

select for update语句用于锁定行,阻止其他用户在该行上修改数据.当该行被锁定后其他用户可以用SELECT语句查询该行的数据,但不能修改或锁定该行.

锁定表

LOCK语句常常用于锁定整个表.当表被锁定后,大多数DML语言不能在该表上使用.LOCK语法如下:

LOCK schema table IN lock_mode

其中lock_mode有两个选项:

share 共享方式

exclusive 唯一方式

例:

LOCK TABLE intentory IN EXCLUSIVE MODE

死锁

当两个事务都被锁定,并且互相都在等待另一个被解锁,这种情况称为死锁.

当出现死锁时,ORACLE将检测死锁条件,并返回一个异常.

事务控制

事务控制包括协调对相同数据的多个同步的访问.当一个用户改变了另一个用户正在使用的数据时,oracle使用事务控制谁可以操作数据.

事务

事务表示工作的一个基本单元,是一系列作为一个单元被成功或不成功操作的SQL语句.在SQL和PL/SQL中有很多语句让程序员控制事务.程序员可以:

1,显式开始一个事物,选择语句级一致性或事务级一致性

2,设置撤销回滚点,并回滚到回滚点

3,完成事务永远改变数据或者放弃修改.

功能:插入、删除、查询、更新。

特点:简单易学,功能强大

Oracle数据库event事件与dump文件介绍

一 Oracle跟踪文件

  Oracle跟踪文件分为三种类型 一种是后台报警日志文件 记录数据库在启动 关闭和运行期间后台进程的活动情况 如表空间创建 回滚段创建 某些alter命令 日志切换 错误消息等

  在数据库出现故障时 应首先查看该文件 但文件中的信息与任何错误状态没有必然的联系 后台报警日志文件保存BACKGROUND_DUMP_DEST参数指定的目录中 文件格式为SIDALRT LOG 另一种类型是DBWR LGWR ON等后台进程创建的后台跟踪文件 后台跟踪文件根据后台进程运行情况产生 后台跟踪文件也保存在BACKGROUND_DUMP_DEST参数指定的目录中 文件格式为siddbwr trc sidon trc等 还有一种类型是由连接到Oracle的用户进程(Server Processes)生成的用户跟踪文件 这些文件仅在用户会话期间遇到错误时产生 此外 用户可以通过执行oracle跟踪事件(见后面)来生成该类文件 用户跟踪文件保存在USER_DUMP_DEST参数指定的目录中 文件格式为oraxx trc xx为创建文件的进程号(或线程号)

  

二 Oracle跟踪事件

  Oracle提供了一类命令 可以将Oracle各类让告内部结构中所包含的信息转储(dump)到跟踪文件中 以便用户能根据文件内容来解决各种故障 设置跟踪事件有两种方法 一种是在init ora文件中设置事件 这样open数据库后 将影响到所有的会话 设置格式如下

  亏卜EVENT= eventnumber trace name eventname : 通过:符号 可以连续设置多个事件 也可以通过连续使用event来设置多个事件

  另一种方法是在会话过程中使用alter session set events命令 只对当前会话有影响 设置格式如下

  alter session set events trace name eventname :

  通过:符号 可以连续设置多个事件 也可以通过连续使用alter session set events 来设置多个事件

  格式说明 eventnumber指触发dump的事件号 事件号可以是Oracle错误号(出现相应错误时跟踪指定的事件)或oralce内部事件号 内部事件号在 到 之间 不能与immediate关键字同用

  immediate关键字表示命令发出后 立即将指定的结构dump到跟踪文件中 这个关键字只用在alter session语句中 并且不能与 eventnumber forever关键字同用

  trace name 是关键字

  eventname指事件名称(见后面) 即要进行dump的实际销滑穗结构名 若eventname为context 则指根据内部事件号进行跟踪

  forever关键字表示事件在实例或会话的周期内保持有效状态 不能与immediate同用

  levelnumber表示事件级别号 一般从 到 表示只dump结构头部信息 表示dump结构的所有信息

   buffers事件 dump SGA缓冲区中的db buffer结构

  alter session set events immediate trace name buffers level ; 表示dump缓冲区的头部

   blockdump事件 dump数据文件 索引文件 回滚段文件结构

  alter session set events immediate trace name blockdump level ; 表示dump块地址为 的数据块

  在Oracle 以后该命令已改为

  alter system dump datafile block ; 表示dump数据文件号为 中的第 个数据块

   controlf事件 dump控制文件结构

  alter session set events immediate trace name controlf level ; 表示dump控制文件的所有内容

   locks事件 dump LCK进程的锁信息

  alter session set events immediate trace name locks level ;

   redohdr事件 dump redo日志的头部信息

  alter session set events immediate trace name redohdr level ; 表示dump redo日志头部的控制文件项

  alter session set events immediate trace name redohdr level ; 表示dump redo日志的通用文件头

  alter session set events immediate trace name redohdr level ; 表示dump redo日志的完整文件头

  注意 redo日志的内容dump可以采用下面的语句:

  alter system dump logfile logfilename ;

   loghist事件 dump控制文件中的日志历史项

  alter session set events immediate trace name loghist level ; 表示只dump最早和最迟的日志历史项

  levelnumber大于等于 时 表示 的levelnumber次方个日志历史项

  alter session set events immediate trace name loghist level ; 表示dump 个日志历史项

   file_hdrs事件 dump 所有数据文件的头部信息

  alter session set events immediate trace name file_hdrs level ; 表示dump 所有数据文件头部的控制文件项

  alter session set events immediate trace name file_hdrs level ; 表示dump 所有数据文件的通用文件头

  alter session set events immediate trace name file_hdrs level ; 表示dump 所有数据文件的完整文件头

   errorstack事件 dump 错误栈信息 通常Oracle发生错误时前台进程将得到一条错误信息 但某些情况下得不到错误信息 可以采用这种方式得到Oracle错误

  alter session set events trace name errorstack forever ; 表示当出现 错误时 dump 错误栈和进程栈

   systemstate事件 dump所有系统状态和进程状态

  alter session set events immediate trace name systemstate level ; 表示dump 所有系统状态和进程状态

   coalesec事件 dump指定表空间中的自由区间

  levelnumber以十六进制表示时 两个高位字节表示自由区间数目 两个低位字节表示表空间号 如 x 表示dump系统表空间中的 个自由区间 转换成十进制就是 即

  alter session set events immediate trace name coalesec level ;

   processsate事件 dump进程状态

  alter session set events immediate trace name processsate level ;

   library_cache事件 dump library cache信息

  alter session set events immediate trace name library_cache level ;

   heapdump事件 dump PGA SGA UGA中的信息

  alter session set events immediate trace name heapdump level ;

   row_cache事件 dump数据字典缓冲区中的信息

  alter session set events immediate trace name row_cache level ;

  

三 内部事件号

   用于监视事务恢复

   转储UNDO SEGMENT头部

  event = trace name context forever

   用于给出会话期间的登陆信息

   用于给出会话期间的注销信息

   转储排序的统计信息

   转储排序增长的统计信息

   跟踪Freelist管理操作

   跟踪SQL语句

  alter session set events trace name context forever level ; 跟踪SQL语句并显示绑定变量

  alter session set events trace name context forever level ; 跟踪SQL语句并显示等待事件

   转储优化策略

   模拟redo日志中的创建和清除错误

   阻止ON进程在启动时清除临时段

   转储 SQL*NET统计信息

   转储高水标记变化

   转储Hash连接统计信息

   转储分区休整信息

   转储一致性读信息

   转储一致性读中Undo应用

   允许在控制文件中模拟错误

   触发数据块检查事件

  event = trace name context forever level

   触发索引检查事件

   模拟在写控制文件后崩溃

   模拟在控制文件中的写错误

  levelnumber从 表示产生错误的块号 大于等于 则每个控制文件将出错

   模拟在控制文件中的读错误

   转储Undo头部变化

   ;转储Undo变化

   转储索引的分隔与删除

   转储基于字典管理的区间的变化

   模拟在数据文件上的I/O错误

   设置在全表扫描时忽略损坏的数据块

  alter session set events trace name context off ; 关闭会话期间的数据块检查

  event = trace name context forever level 对任何进程读入SGA的数据块进行检查

   将设置为软损坏(DBMS_REPAIR包设置或DB_BLOCK_CHECKING为TRUE时设置)的数据块dump到跟踪文件

   用于内存堆检查

  alter session set events trace name context forever level ;

   转储远程SQL执行

   跟踪PMON进程

   跟踪dispatch进程

   跟踪MTS进程

   模拟写数据文件头部错误

   模拟写redo日志文件错误

   允许连接时存在内存泄漏

  alter session set events trace name context forever level ; 允许存在 个字节的内存泄漏

   转储共享游标

   模拟控制文件头部损坏

   模拟控制文件打开错误

   模拟归档出错

   调试直接路径机制

   跟踪ON进程

   跟踪位图索引的创建

   跟踪enqueues

   跟踪全局enqueues

   跟踪RAC的buffer cache

   跟踪对位图索引的访问

   跟踪位图索引合并操作

   跟踪位图索引OR操作

   跟踪位图索引AND操作

   跟踪位图索引MINUS操作

   跟踪位图索引向ROWID的转化

   跟踪位图索引的压缩与解压

   跟踪位图索引的修改

   跟踪游标声明

   跟踪PL/SQL执行

   转储PL/SQL执行统计信息

  最后要说明的是 由于版本不同以上语法可能有些变化 但大多数还是可用的

  附完整的跟踪事件列表 event No to

  

  SET SERVEROUTPUT ONDECLAREerr_msg VARCHAR ( );BEGINdbms_output enable ( );FOR err_num IN LOOPerr_msg := SQLERRM ( err_num);IF err_msg NOT LIKE %Message ||err_num|| not found% THENdbms_output put_line (err_msg);END IF;END LOOP;END;/

   select sid serial# username osuser machine from v$session;查询session的sid serial#

   exec dbms_system set_sql_trace_in_session( true);开始跟踪

   exec dbms_system set_sql_trace_in_session( true) 停止跟踪

   tkprof * trc * txt

   select sid serial# username osuser machine from v$session;查询session的sid serial#

   exec dbms_system set_sql_trace_in_session( true);开始跟踪

   exec dbms_system set_sql_trace_in_session( true) 停止跟踪

   tkprof * trc * txt

   查看文件

   get trace file nameselect d value|| / ||lower(rtrim(i instance chr( )))|| _ora_ ||p spid|| trc trace_file_name from ( select p spid from sys v$mystat m sys v$session s sys v$process pwhere m statistic# = and s sid = m sid and p addr = s paddr) p  ( select t instance from sys v$thread  t sys v$parameter  v where v name = thread and (v value = or t thread# = to_number(v value))) i ( select value from sys v$parameter where name = user_dump_dest ) d

关于数据库关键字回滚的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 数据库——回滚的关键字 (数据库关键字回滚)