oracle如何undo,oracle如何清理表数据并且释放表空间

如何让Oracle释放undo表空间

在日常的数据库维护和数据库编程中经常会遇到犹豫对大数据量做DML操作后是得ORACLE的undo表空间扩展到十几个G或者几十个G 但是这些表空间的所占用磁盘的物理空间又不会被oracle所释放,如果你用的是PC机很可能会遇到磁盘空间不足的问题,经过个人整理经过如下操作可以重构undo表空间,同样temp表空间也可能在你查询大数据或则创建索引的时候无限扩大导致磁盘空间不足,同样可以用如下方式解决此问题:

10年积累的成都网站制作、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有锡山免费网站建设让你可以放心的选择与我们合作。

--查看各表空间名称

select name from v$tablespace

--查看某个表空间信息

select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS1';

--查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。

select s.username, u.name from v$transaction t,v$rollstat r, v$rollname u,v$session s

where s.taddr=t.addr and t.xidusn=r.usn and r.usn=u.usn order by s.username;

--检查UNDO Segment状态

select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;

--创建新的UNDO表空间,并设置自动扩展参数;

create undo tablespace undotbs2 datafile 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS02.DBF' size 10m reuse autoextend on next 100m maxsize unlimited;

-- 动态更改spfile配置文件;

alter system set undo_tablespace=undotbs2 scope=both;

--等待原UNDO表空间所有UNDO SEGMENT OFFLINE;

select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;

--再执行看UNDO表空间所有UNDO SEGMENT ONLINE;

select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;

-- 删除原有的UNDO表空间;

drop tablespace undotbs1 including contents;

--确认删除是否成功;

ORACLE中,数据库的redo与undo分别是什么呀,两者是什么关系呢?

redo 是记录日志用的。

undo是记录数据的备份用的。

简单举个例子说明(实际过程比这要复杂的多):

1、当你发出一条update语句后,oracle先将更改前后信息写进redo(当满足一定条件后由日志写进程写入日志文件)

2、然后将更新前得数据镜像copy到undo中。

3、用户rollback后,oracle 将undo中的数据覆盖回去

用户commit后,oracle可以根据redo 的信息进行数据恢复。(当然也可以利用undo进行flashback)

简单的讲就是这样,慢慢理解吧。

Oracle的UNDO表空间和临时表空间

首先肯定不是一个概念,UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据。你听说UNDO也是临时表可能是因为这两个表空间都不会永久保存数据的原因

如何删除oracle undo表空间占用的空间

为了清理这部分的空间,下面通过如下几个步骤完成替换操作。

1、创建新的undo表空间undotbs2

CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/u01/app/oracle/oradata/mydb/undo02.dbf' SIZE 512M REUSE

AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED RETENTION NOGUARANTEE BLOCKSIZE 8K FLASHBACK ON;

将红色部分替换为实际的oracle数据库路径

2、切换系统表空间

alter system set undo_tablespace=UNDOTBS2 scope=both;

让oracle的当前undo表空间切换到undotbs2上

3、重启数据库

通过命令行方式登录数据库,

[root$smserver] sqlplus /nolog [root$smserver]conn / as sysdba [root$smserver] shutdown immediate;[root$smserver] startup

4、删除原来undo内容

drop tablespace undotbs1 including contents and datafiles;

5、重复第三部操作,重启数据库

Oracle的Undo机制是什么

1. UNDO表空间用于存放UNDO数据。当执行DML操作时,Oracle会将这些操作的旧数据写入UNDO段。管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间。

2. UNDO数据的作用:当用户执行DML操作修改数据时,UNDO数据被存放在UNDO段,而新数据则被存放到数据段中,如果事务操作存在问题,就需要回退事务,以取消事物变化。

例如:执行完UPDATE emp SET sal=1000 WHERE empno=7788后,发现应该修改雇员7963的工资,而不是7788.此时应该执行ROLLBACK语句。

3.读一致性

用户检索数据时,ORACLE总是使用户只能看到被提交过的数据,这是由Oracle自动提供的。当用户修改数据,但是没有提交时,另外一个用户使用select语句查找该值时,该值就是从undo表空间中取得的。

4.事务恢复

事务恢复是例程恢复的一部分,它是由Oracle Server自动完成的。如果在数据库运行过程中出线历程失败,那么当启动Oracle Server时,后台进程SMON会自动执行例程恢复。执行例程恢复时,Oracle会重做所有未应用的记录。然后打开数据库,回退未提交事务。

5.倒叙查询

倒叙查询用于取得某一特定时间点的数据库数据。

6.UNDO_MANAGEMENT

使用初始化参数用于指定UNDO数据的管理方式。如果使用自动管理模式,必须设置该参数为AUTO,此时采用UNDO表空间管理UNDO数据;如果使用手工管理模式,必须设置该值为MANUAl,此时采用回滚段管理UNDO数据。

7.UNDO_TABLESPACE

用于指定例程所要使用的UNDO表空间。使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间。

使用RAC结构时,必须为每个例程配置一个独立的UNDO表空间。

8.UNDO_RETENTION

该参数用于控制UNDO数据的最大保留时间,其默认值为900秒,该值时倒叙查询可以查看到的最早时间点。

9.UNDO表空间上不能建立任何数据对象。

请问oracle的redo和undo的两点疑问,谢谢

1、停电的情况,事务不会被提交。实际上,如果细说redo apply和undo apply过程的话,是这样的:数据库先用redo恢复数据文件(包括普通permanent表空间的数据文件和undo表空间的数据文件),这就是你说的“恢复系统到失败点”,这之后开数据库实例会被打开,实例打开后,实例会根据undo中记录的信息回滚未提交的事务。

以下是原厂手册中的说明:

In the context of recovery, the undo information is used to undo the effects of uncommitted transactions, once all the datafile changes from the redo logs have been applied to the datafiles. The database is actually opened before the undo is applied.

You should not have to concern yourself with undo segments or manage them directly as part of your backup and recovery process.

2、磁盘损坏的情况,这种恢复也叫介质恢复,在恢复(recover)之前,需要使用备份先还原(restore)损坏的文件。


网页标题:oracle如何undo,oracle如何清理表数据并且释放表空间
本文路径:http://cdiso.cn/article/hccgho.html

其他资讯