ORACLE 管理undo

undo的作用 使用undo tablespace 存放从datafiles 读出的数据块的前镜像,提供以下四种情况所需要的信息 1)回滚事务:rollback 2)读一致性:正在做DML操作的数据块,事务结束前,其他用户读undo里面的数据前镜像 3)实例的恢复:instance recover(undo -->rollback) 4)闪回技术 :flashback query、flashback table等 7.2 undo 的管理模式: 1)manaual 手工:roll segment(淘汰) 2)auto 自动:undo tablespace (init parameter :undo_management = auto) 7.3 undo 表空间管理 1)可以建立多个undo表空间,但一个时刻只有一个处于active 2)处于active状态的undo tablespace 不能offline 和 drop 01:08:31 SQL> select tablespace_name,status,contents from dba_tablespaces; TABLESPACE_NAME STATUS CONTENTS ------------------------------ --------- --------- SYSTEM ONLINE PERMANENT UNDOTBS1 ONLINE UNDO SYSAUX ONLINE PERMANENT TEMP ONLINE TEMPORARY USERS ONLINE PERMANENT EXAMPLE ONLINE PERMANENT TEST ONLINE PERMANENT 09:47:55 SQL> select tablespace_name,contents from dba_tablespaces; SQL> select tablespace_name,contents from dba_tablespaces; 7.4 查看当前正在使用的undo tablespace 09:48:00 SQL> show parameter undo; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1 00:20:50 SQL> select * from v$rollname; USN NAME ---------- ------------------------------ 0 SYSTEM 1 _SYSSMU1_1363316212$ 2 _SYSSMU2_1363316212$ 3 _SYSSMU3_1363316212$ 4 _SYSSMU4_1363316212$ 5 _SYSSMU5_1363316212$ 6 _SYSSMU6_1363316212$ 7 _SYSSMU7_1363316212$ 8 _SYSSMU8_1363316212$ 9 _SYSSMU9_1363316212$ 10 _SYSSMU10_1363316212$ 7.5 切换undo 创建一个undo表空间: create undo tablespace undotbs2 datafile '/u01/disk1/undotbs2.dbf' size 30M; 09:50:10 SQL> alter system set undo_tablespace=undotbs2; //memory动态修改 09:50:28 SQL> show parameter undo NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS2 SQL> select * from v$rollname; USN NAME ---------- ------------------------------ 0 SYSTEM 11 _SYSSMU11_1357956213$ 12 _SYSSMU12_1357956213$ 13 _SYSSMU13_1357956213$ 14 _SYSSMU14_1357956213$ 15 _SYSSMU15_1357956213$ 16 _SYSSMU16_1357956213$ 17 _SYSSMU17_1357956213$ 18 _SYSSMU18_1357956213$ 19 _SYSSMU19_1357956213$ 20 _SYSSMU20_1357956213$ 7.6 删除undo tablespace SQL> drop tablespace undotbs1 including contents and datafiles; SQL> select * from v$tablespace; TS# NAME INC BIG FLA ENC ---------- ------------------------------ --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 4 USERS YES NO YES 6 EXAMPLE YES NO YES 8 TEST YES NO YES 3 TEMP NO NO YES 5 UNDOTBS2 YES NO YES 7.7 undo 数据的4种状态 1)active: 表示transaction还没有commit,不可覆盖, 2)unexpired:已经commit,但是还在undo_retention内,不可以覆盖(非强制),加GUARANTEE属性后强制undo_retention内不覆盖。 3)expired: 已经commit,且时间超过了undo_retention,随时可以覆盖。 4)free: 分配了但未使用过。 undo retention参数和undo autoextend on特性 undo retention参数规定了unexpired commit数据的保留期,它是保证一致性读,和大多数闪回技术成功的关键, 将undo表空间设为autoextend on,这是DBCA创建数据库时的缺省设置,这一个特性将在undo空间不足时优先扩展新的空间,其次才是覆盖unexpired commit。 如果undo retention=0,则Oracle会启用undo自动调优,它使用900秒作为undo retention的参考值。然后根据收集到的数据库中最长查询及撤销生成率自动调整undo retention。 注意点:如果要减少ORA_O1555错误(snapshot too old),考虑延长undo retention并使之guarantee,同时使undo autoextend on。 7.8 关于undo_retention 参数 //这个参数只对已commit的undo状态有效 01:10:46 SQL> select tablespace_name,contents,retention from dba_tablespaces; TABLESPACE_NAME STATUS CONTENTS RETENTION ------------------------------ --------- --------- ----------- SYSTEM ONLINE PERMANENT NOT APPLY SYSAUX ONLINE PERMANENT NOT APPLY TEMP ONLINE TEMPORARY NOT APPLY USERS ONLINE PERMANENT NOT APPLY EXAMPLE ONLINE PERMANENT NOT APPLY TEST ONLINE PERMANENT NOT APPLY UNDOTBS2 ONLINE UNDO NOGUARANTEE guarantee属性随undo表空间建立,可以修改 09:52:22 SQL> alter tablespace undotbs2 retention guarantee; //保证在retention 期间不允许被覆盖 01:11:16 SQL> select tablespace_name,retention from dba_tablespaces; 缺省配置下undo retention是 noguarantee, SQL> alter tablespace undotbs2 retention noguarantee; 7.9 undo 信息的查询 1) v$session 查看用户建立的session 2) v$transaction 当前的事务 3) v$rollname undo段的名称 4) v$rollstat undo段的状态 5) dba_rollback_segs 数据字典里记录的undo段状态 一般来说,一个session同时只能承载一个事务,建立了session未必有事务,只有事务处于活动状态时,v$transaction才能看到这个事务。换句话说,如果看到了事务(在 v$transaction里),那一定有个session和它对应,将两个视图连在一起,信息看得更为清楚。 cmd下scott登录: 10:03:28 SQL> select username,sid,serial# from v$session where username is not null; //看看有几个session连上来了。 USERNAME SID SERIAL# ------------------------------ ---------- ---------- SCOTT 131 18 SYS 170 5 cmd下 update emp1 set sal=1000 where empno=7788; // 产生一个活动事务 SQL> select a.sid,a.serial#,a.username,b.xidusn,xidslot,b.ubablk,b.status from v$session a,v$transaction b where a.saddr=b.ses_addr; 10:08:29 SQL> col name for a10 SID SERIAL# USERNAME XIDUSN XIDSLOT UBABLK STATUS ---------- ---------- -------------------- ---------- ---------- ---------- ---------------- 131 18 SCOTT 18 5 305 ACTIVE //两表联查,sid和serial#在v$session里,在v$transaction里 XIDUSN是undo segment 的id ,XIDSLOT 是事务槽的id,UBABLK是undo块号 对照上面看,下面语句显示出_SYSSMU18是一个活动段,与XIDUSN=8吻合, 说明这个段被读进buffer了. SQL> select a.usn,b.name,a.xacts from v$rollstat a,v$rollname b where a.usn=b.usn; USN NAME XACTS ---------- ------------------------- -------- 0 SYSTEM 0 11 _SYSSMU11_1357956213$ 0 12 _SYSSMU12_1357956213$ 0 13 _SYSSMU13_1357956213$ 0 14 _SYSSMU14_1357956213$ 0 15 _SYSSMU15_1357956213$ 0 16 _SYSSMU16_1357956213$ 0 17 _SYSSMU17_1357956213$ 0 18 _SYSSMU18_1357956213$ 1 19 _SYSSMU19_1357956213$ 0 20 _SYSSMU20_1357956213$ 0 7.10 system表空间的undo 默认system表空间会有一个单独的undo segment(usn为0)。其他表空间的事务不能使用它。缺省下undo tablespace 会被分配10个undo段,理论上一个段可以有多个事务,但Oracle的策略并不情愿如此,实验表明,对应并发的事务,通常每个事务会分配一个UNDO段,也就是说如果这10个段不够,Oracle会自动再增加段。 当数据库启动时,如果碰到undo数据文件损坏或不同步,可以将其offline,即只有一个系统表空间的undo也能进入系统,以便数据字典得以维护,但不能对其他表空间做DML操作。 7.11 测试:模拟数据库open下的undo损坏和修复。 如果数据库打开时,当前undo坏掉的话,比如现在UNDOTBS2出现了介质损坏,那么数据库就不能继续DML操作了。如果这时UNDOTBS2表空间上还有active状态的事务(未提交),Oracle会将其下的所有段都标志为NEEDS RECOVERY,这时如有备份可以恢复这个UNDOTBS2,但如果没有备份,那你只能用新建的UNDO替代损坏的UNDO,那么损坏UNDO上的未提交事务也将不得不丢弃。但Oracle没有提供自动解决NEEDS RECOVERY的机制,如果你想删除这个损坏的UNDO表空间,必须另做处理(需要系统择时重启),我们模拟一下这种情况: [oracle@timran timran]$ mv undotbs02.dbf undotbs02.bak 00:29:28 SQL>alter system checkpoint; cmd端再做update 语句时会报错 SQL> update emp1 set sal=1000 where empno=7902; ORA-01116: 打开数据库文件 3 时出错 ORA-01110: 数据文件 3: '/u01/oradata/timran11g/undotbs02.dbf' ORA-27041: 无法打开文件 00:29:28 SQL> startup force mount SQL> select file#,checkpoint_change# from v$datafile; FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 6708724 2 6708724 3 6708724 4 6708724 5 6708724 6 6708724 SQL> select file#,checkpoint_change# from v$datafile_header; FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 6708724 2 6708724 3 0 4 6708724 5 6708724 6 6708724 SQL> alter database datafile 3 offline; SQL> alter database open; SQL> select * from v$rollname; USN NAME ---------- ------------------------------ 0 SYSTEM SQL> select segment_name,status from dba_rollback_segs; //这个静态视图可以列出所有(online或offline)UNDO段信息 SEGMENT_NAME STATUS ------------------------------ ---------------- SYSTEM ONLINE _SYSSMU20_1357956213$ NEEDS RECOVERY _SYSSMU19_1357956213$ NEEDS RECOVERY _SYSSMU18_1357956213$ NEEDS RECOVERY _SYSSMU17_1357956213$ NEEDS RECOVERY _SYSSMU16_1357956213$ NEEDS RECOVERY _SYSSMU15_1357956213$ NEEDS RECOVERY _SYSSMU14_1357956213$ NEEDS RECOVERY _SYSSMU13_1357956213$ NEEDS RECOVERY _SYSSMU12_1357956213$ NEEDS RECOVERY _SYSSMU11_1357956213$ NEEDS RECOVERY SQL>create undo tablespace undotbs1 datafile '/u01/oradata/timran11g/undotbs01.dbf' size 100m autoextend on; SQL>select * from v$tablespace; TS# NAME INC BIG FLA ENC ---------- ------------------------------ --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES 6 EXAMPLE YES NO YES 8 TEST YES NO YES 5 UNDOTBS2 YES NO YES SQL> alter system set undo_tablespace=UNDOTBS1; 注意:此时原有活动事务的信息(未提交)可能仍然保存在UNDOTBS2,已经没有恢复的必要了。 SQL> update emp1 set sal=1000 where empno=7902; //emp1表被锁住,不能做DML操作 update emp1 set sal=1000 where empno=7902 * 第 1 行出现错误: ORA-00376: 此时无法读取文件 7 ORA-01110: 数据文件 7: '/u01/oradata/timran11g/undotbs02.dbf' SQL> drop tablespace undotbs2 including contents and datafiles; drop tablespace undotbs2 including contents and datafiles * 第 1 行出现错误: ORA-01548: 已找到活动回退段 'SYSSMU11_1357956213$',终止删除表空间 //这个UNDOTBS2删不掉是因为Oracle把其下的所有段都标志成 NEEDS RECOVERY了,再查看一下相关的数据字典: SQL> select segment_name,status from dba_rollback_segs; 解决有两个办法:1)使用备份恢复,2)使用oracle提供的隐含参数_CORRUPTED_ROLLBACK_SEGMENTS 我们假设没有备份,就使用第2种方法 SQL>create pfile from spfile; //建立静态参数文件 SQL>shutdown abort #vi /u01/oracle/dbs/inittimran11g.ora //在静态参数文件里第一行插入以下内容 _CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU11_1357956213$,_SYSSMU12_1357956213$,_SYSSMU13_1357956213$,_SYSSMU14_1357956213$,_SYSSMU15_1357956213$,_SYSSMU16_1357956213$,_SYSSMU17_1357956213$,_SYSSMU18_1357956213$,_SYSSMU19_1357956213$,_SYSSMU20_1357956213$) 然后存盘,再使静态参数文件启动数据库 SQL> startup pfile='/u01/oracle/dbs/inittimran11g.ora' SQL> drop rollback segment "_SYSSMU11_1357956213$"; 回退段已删除。 ...... SQL> drop rollback segment "_SYSSMU20_1357956213$"; SQL> select segment_name,status from dba_rollback_segs; SEGMENT_NAME STATUS ------------------------------ ---------------- SYSTEM ONLINE _SYSSMU10_1384520126$ ONLINE _SYSSMU9_1384520126$ ONLINE _SYSSMU8_1384520126$ ONLINE _SYSSMU7_1384520126$ ONLINE _SYSSMU6_1384520126$ ONLINE _SYSSMU5_1384520126$ ONLINE _SYSSMU4_1384520126$ ONLINE _SYSSMU3_1384520126$ ONLINE _SYSSMU2_1384520126$ ONLINE _SYSSMU1_1384520125$ ONLINE 已选择11行。 SQL> drop tablespace undotbs2 including contents and datafiles; 表空间已删除。 如果仍然删除失败(比较少见),则尝试修改字典 select * from v$tablespace; 记下要删除的undo对应的ts#号,比如是=2,则执行下行语句: update seg$ set type# = 3 where ts#=2; 然后再删除该表空间即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读773次,点赞6次,收藏9次。【代码】c# json字符串转Oracle的insert into的小程序。
文章浏览阅读8.7k次,点赞2次,收藏17次。此现象一般定位到远端的监听服务来找问题,在远端查看监听服务状态(具体看下面的解决方案会详细呈现),服务是否开启,另外查看监听端点概要是否存在host未指向到计算名的,如无直接进入监听配置文件listener.ora内添加指向即可。2、查看监听服务状态 lsnrctl status,右边为远端端点状态,未添加host指向到计算名;1、本地及远端安装好Oracle并配置好连接,Oracle服务和监听已启动;1、远程Oracle数据库:Oracle11g R2。或者进入下述服务手动重启。,再进行远程连接即可。_ora-12541:tns:无监听程序
文章浏览阅读2.8k次。mysql脚本转化为oracle脚本_mysql建表语句转oracle
文章浏览阅读2.2k次。cx_Oracle报错:cx_Oracle DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library_cx_oracle.databaseerror: dpi-1047: cannot locate a 64-bit oracle client libr
文章浏览阅读1.1k次,点赞38次,收藏35次。本文深入探讨了Oracle数据库的核心要素,包括体系结构、存储结构以及各类参数。通过解析Oracle数据库的体系结构,读者可以深入了解其内部组成和工作原理。存储结构部分介绍了数据在Oracle中的存储方式,从表空间到数据文件的层层逻辑。最后,我们深入探讨了Oracle数据库中各类参数的作用和配置方法,帮助读者更好地理解和优化数据库性能。本文旨在帮助读者全面理解Oracle数据库的运作机制,为其在实践中的应用提供基础和指导。
文章浏览阅读1.5k次。默认自动收集统计信息的时间为晚上10点(周一到周五,4个小时),早上6点(周六,周日,20个小时)由于平时默认每天只收集4小时,时间有点短了,改成每天可收集8小时。oracle 18c中默认是打开的。查看当前自动收集统计信息的时间。_oracle自动收集统计信息
文章浏览阅读929次,点赞18次,收藏20次。只有assm(Automatic Shared Memory Management)模式可以使用大页,需要关闭amm(Memory Manager Process)HugePages_Free: 306 (空闲306页,已使用306-306=0页)防止oracle使用的内存交换,所以设置的大小与oracle配置的sga、pga相关。HugePages_Rsvd: 0 (操作系统承诺给oracle预留的页数)HugePages_Total: 306 (总共306页)_oracle11g 大页
文章浏览阅读801次。例如:10046:0,1,4,8,12。默认redo日志有三个,大小为50M,循环覆盖使用。redo log再覆盖之前,会被归档,形成归档日志。答:不同事件,不同级别。trace的不同级别?_oracle 日志
文章浏览阅读4.2k次,点赞84次,收藏77次。主要讲解MySQL中SQL的DDL语句,其中包括对数据库和表的一系列操作。_sql ddl 新增字段 mysql
文章浏览阅读1.1k次。ON DEMAND:仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;ON COMMIT:一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。Method =>'C',物化视图有三种刷新方式:COMPLETE、FAST和FORCE。物化视图会占用空间,一半可用于大量数据查询时,减缓主表的查询压力使用。例如创建一个物化视图,让对接单位查询。_oracle物化视图定时刷新
文章浏览阅读713次,点赞21次,收藏18次。1.背景介绍在当今的大数据时代,数据量越来越大,传统的关系型数据库已经无法满足业务需求。因此,NoSQL数据库技术迅速崛起,成为企业和开发者的首选。Oracle NoSQL Database是Oracle公司推出的一款分布式NoSQL数据库产品,具有高性能、高可用性和易于扩展等特点。在本文中,我们将深入了解Oracle NoSQL Database的集成与开发者工具,帮助您更好地掌握这款产品的...
文章浏览阅读2.5k次,点赞2次,收藏4次。今天遇见一个问题需要将字段中包含中文字符串的筛选出来。_oracle查询包含中文字符
文章浏览阅读802次。arcmap 在oracle删除表重新创建提示表名存在解决放啊
文章浏览阅读4.3k次,点赞2次,收藏4次。Oracle连接数据库提示 ORA-12638:身份证明检索失败_ora-12638
文章浏览阅读3.4k次,点赞6次,收藏25次。etc/profile是一个全局配置文件,所有用户登录都会使用该文件构建用户环境。与windows配置环境变量是一个道理。选择Linux系统,找到适合自己系统的安装包,我的是CentOS 8 x64。接下来需要登陆Oracle账户才能下载,无账户的可以自己注册一个。Linux中export 命令用于设置或显示环境变量。模式,利用上下键到文档最后,添加以下代码。出现如图所示版本号字样,则说明安装成功。点击下载,勾选1,点击2。记住完整路径用于后面配置。找到Java并点击进去。往下翻,找到Java8。_linux安装jdk1.8
文章浏览阅读2.4w次,点赞26次,收藏109次。JDK 是的简称,也就是 Java 开发工具包。JDK 是整个 Java 的核心,其中JDK包含了 Java 运行环境(Java Runtime Envirnment,简称 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基础类库(比如 rt.jar)。最主流的 JDK 是Oracle公司发布的 JDK,除了 Oracle JDK(商业化,更稳定)之外,还有很多公司和组织开发了属于自己的 JDK,比较有名的有IBM JDK(更适合 IBM) 和OpenJDK。_jdk安装教程
文章浏览阅读7.5w次。出现 “java.sql.SQLNonTransientConnectionException:Could not create connection to database server” 的错误通常是由于无法连接到数据库服务器引起的。_java.sql.sqlnontransientconnectionexception: could not create connection to
文章浏览阅读849次,点赞7次,收藏10次。在ClickHouse中创建用户、数据库并进行权限分配是一个重要的管理任务,它涉及到安全性和访问控制。下面是一个基本的指南来帮助你完成这些操作:1. 创建数据库首先,需要创建一个数据库。使用以下命令:CREATE DATABASE IF NOT EXISTS your_database_name;将 your_database_name 替换为你想要的数据库名。2. 创建用户接下来,创建一个新用户。使用以下命令:CREATE USER your_username IDENTIFIED WIT_在clickhouse中如何创建用户 赋权
文章浏览阅读1.2k次,点赞53次,收藏39次。本文是一篇关于Oracle数据库安装和使用的博文摘要。作者以轻松幽默的笔调介绍了自己在实验中掌握的Oracle数据库基本操作,包括使用组件查看命令、配置数据库监听器等。作者也分享了在实验中遇到的一些有趣问题,如SQL语句缺少分号导致的意外错误。此外,作者还强调了登录sys用户和启动实例加载数据库的注意事项,并鼓励读者面对挑战时保持乐观,不断提升自己的能力。整体风格风趣严谨,引人入胜。
文章浏览阅读820次,点赞17次,收藏16次。KingbaseES、xml、dbms_xmlgen、SETSKIPROWS、人大金仓、KingbaseES兼容Oracle包dbms_xmlgen的功能是通过SQL查询将关系表中数据转化为XML文档。转化方式一共有两种:(1)通过查询字符串直接转化。(2)通过上下文句柄转化。对于通过查询字符串直接转化的方式,无法跳过若干行进行查询,只能直接将表格中的所有数据转化为XML文档。