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

undo表空间用于存放undo数据,当执行DML操作(insert、update、delete)时,oracle会将这些操作的旧数据写入到undo段。
undo数据的作用
1.回退事务
当执行DML操作修改数据后,旧数据被存放在undo段中。只要数据为提交、回滚段未写满或者回滚段为超时的情况下,旧数据都能被回滚回来。
2.读一致性
通过DML操作后的数据没有提交之前,其他用户读取的数据都是回滚段里面的旧数据。
使用undo参数
1.undo_management
该初始化参数用于指定undo数据的管理方式。如果要使用自动管理模式,必须设置为auto,如果使用手工管理模式必须设置该参数为manual,使用自动管理模式时,oracle会使用undo表空间管理,使用手工管理模式时,oracle会使用回滚段管理undo数据。需要注意,使用自动管理模式时,如果没有配置初始化参数UNDO_TABLESPACE,oracle会自动选择第一个可用的UNDO表空间存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告。
2,UNDO_TABLESPACE
该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间.
在RAC(Real Application Cluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的UNDO表空间.
3,UNDO_RETENTION
该初始化参数用于控制UNDO数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以查看到的最早时间点.
手工管理回滚段的规划:
SQL show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL show parameter transactions;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
transactions integer 187 ----------系统准备支持的事务连接数量。
transactions_per_rollback_segment integer 5 --------------每个回滚段支持的事务连接数量。回滚段数=187/5
SQL show parameter rollback;
NAME TYPE VALUE
------------------------------------ ----------- ----------
fast_start_parallel_rollback string LOW
rollback_segments string ----------------------设置回滚段的数量
transactions_per_rollback_segment integer 5
SQL
当数据库启动的时候会判断私有回滚段是否满足我们事务的要求,如果满足则打开数据库;否则数据库会去找公有回滚段。
oracle undo表空间被删除,数据库无法启动,请问如何恢复
首先,undo表空间满是正常的,oracle自然会重用或者扩展它,一般不用管它。
然后,现在要解决的话,需要先把undo
tablespace设置成手动,启动数据库,创建新的undo
tablespace。把新的设置成默认的。
假设你的库现在是mounted状态
1
创建PFILE(如果已有就是更新)
SQLcreate
pfile
from
spfile;
2
关闭数据库
SQLshutdown
immediate
3
在你的$ORACLE_HOME/dbs目录下面找个叫做
init数据库.ora的文件,把其中有undo_management=AUTO的一行改成
undo_management=MANUAL
如果没有就在文件末尾填一行
4
以sysdba身份连接数据库
SQLconnect
"/
as
sysdba"
用刚才改过的文件启动数据库
SQL
startup
pfile=刚才的文件全路径和名字
这步是最关键的,如果成功,后面就没问题了
5
drop掉原来的表空间
SQL
drop
tablespace
原来的undo表空间名字
including
contents;
6
创建新的undo表空间
SQL
create
UNDO
tablespace
undotbs2
datafile
'/u01/app/oracle/oradata/orcl/undotbs02.dbf'
size
100M
autoextend
on;
7
关闭数据库,
SQLshutdown
immediate
在开始那个init文件里设置UNDO_MANAGEMENT=AUTO
和
UNDO_TABLESPACE=UNDOTBS2
8
再做一次第四步
9
更新spfile
SQLcreate
spfile
from
pfile;
10
关闭数据库,正常重新启动
SQLshutdown
immediate
SQLstartup
11
去网上教你删undo那个地方骂它。非常想当然的做法。没有任何理由这么做
12
让你的工程师去学oracle
培训
以上步骤的中的第5步可能会出问题。我不确认。。。
但是即使第5步不成功,问题应该也不大
oracle中undo表空间是用来保存什么的?
oracle中undo是用来存放回滚数据的。
撤销(Undo)数据是反转DML语句结果所需的信息。撤销数据通常被称为“回滚数据”,在过去的Oracle版本中,“回滚数据”和“撤销数据”可以交替使用,但从 9i版本开始,这两个术语有所不同:功能相同,但管理方式不同。只要某个事务修改了数据,那么更新前的原有数据就会被写入一个回滚段或撤销段。回滚段在 11g版本中依然存在,但从9i版本开始,Oracle数据库引入了可供选择的撤销段。Oracle强烈建议所有数据库都应当使用撤销段,回滚段只被保留用于向后兼容 。
undo表空间:
一个数据库可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间。撤销表空间必须被创建为持久的、本地管理的并且能够自动扩展分配空间的表空间。
事务与undo段:
在某个事务启动时,Oracle会为其指派一个撤销段。任何一个事务都只能受一个撤销段保护,一个事务生成的撤销数据无法被分配到多个撤销段中。
在某个事务更新表和索引数据块时,回滚该变化所需的信息会被写入指定撤销表空间的数据块。撤销数据在提交后过期的事实意味着可以采用循环方式使用撤销段。如果使用原有的、人工管理的回滚段,那么调整的重要环节是控制具体事务分别受哪些回滚段保护。
如何删除oracle undo表空间占用的空间
1. 启动SQLPLUS,并用sys登陆到数据库。
#su - oracle
$sqlplus / as sysdba
2. 查找数据库的UNDO表空间名,确定当前例程正在使用的UNDO表空间:
Show parameter undo_tablespace。
3. 确认UNDO表空间;
SQL select name from v$tablespace;
NAME
------------------------------
UNDOTBS1
4. 检查数据库UNDO表空间占用空间情况以及数据文件存放位置;
SQLselect file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS%';
5. 查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。
SQL 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;
6. 检查UNDO Segment状态;
SQL select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
from v$rollstat order by rssize;
USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
1 0 0 0.000358582 0.000358582 0
2 14 0 0.796791077 0.796791077 735
3 44 1 0.00920867919921875 3.99295806884766 996
这还原表空间中还存在3个回滚的对象。
7. 创建新的UNDO表空间,并设置自动扩展参数;
SQL create undo tablespace undotbs2 datafile '/opt/oracle/oradata/ge01/UNDOTBS2.dbf' size 100m reuse autoextend on next 50m maxsize 5000m;
Tablespace created.
8. 切换UNDO表空间为新的UNDO表空间 , 动态更改spfile配置文件;
SQL alter system set undo_tablespace=undotbs2 scope=both;
System altered.
9.验证当前数据库的 UNDO表空间
SQL show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- --------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS2
9. 等待原UNDO表空间所有UNDO SEGMENT OFFLINE;
select usn,xacts,status,rssize/1024/1024,hwmsize/1024/1024, shrinks from v$rollstat order by rssize;
select t.segment_name,t.tablespace_name,t.segment_id,t.status from dba_rollback_segs t;
SEGMENT_NAME TABLESPACE_NAME SEGMENT_ID STATUS
1 SYSTEM SYSTEM 0 ONLINE
2 _SYSSMU1$ UNDOTBS1 1 OFFLINE
3 _SYSSMU2$ UNDOTBS1 2 OFFLINE
4 _SYSSMU47$ UNDOTBS1 47 OFFLINE
上面对应的UNDOTBS1还原表空间所对应的回滚段均为OFFLINE
10.到$ORACLE_HOME/dbs/init$ORACLE_SID.ora如下内容是否发生变更:
#cat $ORACLE_HOME/dbs/initddptest.ora
……
*.undo_management=’AUTO’
*.undo_retention=10800
*.undo_tablespace=’UNDOTBS2’
……
如果没有发生变更请执行如下语句:
SQL create pfile from spfile;
File created.
11. 删除原有的UNDO表空间;
SQL drop tablespace undotbs1 including contents;
最后需要在重启数据库或者重启计算机后到存储数据文件的路径下删除数据文件(为什么要手动删除呢:以上步骤只是删除了ORACLE中undo表空间的逻辑关系,即删除了数据文件在数据字典中的关联,不会自动删除项关联的数据文件)。
drop tablespace undotbs1 including contents and datafiles;
oracle如何扩展undo表空间?
处理方法有两种,
一是添加undo 表空间的数据文件,
二是切换undo tablespace. 这种情况下多用在undo 表空间已经非常大的情况。
增加数据文件:sql alter tablespace undo add datafile 'D:\undo02.dbf' size 100m reuse;
表空间已更改。然后切换undo 表空间。
1、建立新的表空间undotbs2
sql create undo tablespace undotbs2 datafile 'D:\undo03.dbf' size 100m reuse;
表空间已创建。
2、切换到新建的undo表空间上来,操作如下
sql alter system set undo_tablespace=undotbs2 scope=both;
系统已更改。
3、将原来的undo表空间,置为脱机:
sql alter tablespace undo offline;
表空间已更改。
4、删除原来的undo表空间:
sql drop tablespace undo including contents and datafiles cascade constraints
表空间已删除。