首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能丢弃撤销TABLESPACE

不能丢弃撤销TABLESPACE
EN

Database Administration用户
提问于 2014-05-14 09:29:21
回答 4查看 17.8K关注 0票数 7

我们在两个不同的服务器上有Oracle11gR1 RAC两个实例,新的撤销表空间UNDOTBS20140508创建了30G,我想删除旧的UNDOTBSX02,我做了以下工作:

代码语言:javascript
运行
复制
CREATE UNDO TABLESPACE UNDOTBS20140508  DATAFILE '+DATA/....../UNDOTBS20140508' SIZE 20G;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS20140508;
DROP TABLESPACE UNDOTBSX02 INCLUDING CONTENTS AND DATAFILES;

当尝试删除UNDOTBSX02时,它会显示以下错误:

从行开始: 13在命令行中删除TABLESPACE UNDOTBSX02,包括内容和数据文件错误报告- SQL错误: ORA- 00604 :在递归SQLLevel-1 ORA-06502: PL/ SQL :数值或值错误ORA-06512:在第57行ORA-30013:撤消表空间'UNDOTBSX02‘目前正在使用00604。00000 -“错误发生在递归SQL级别%s”*原因:在处理递归SQL语句(应用于内部字典表的语句)时发生错误。*操作:如果可以纠正堆栈上下一个错误中描述的情况,请这样做;否则,请与Oracle支持部门联系。

我检查了UNDOTBSX02是否有任何挂起的事务,它是空的。那怎么放下它呢?

注意:我不是Oracle DBA,但我必须完成这项任务。

EN

回答 4

Database Administration用户

发布于 2016-03-13 18:54:48

我尝试了上述建议,但没有工作,例如select SQL没有得到结果,而且我仍然不能删除撤消表空间。根本的问题是旧的撤消表空间仍然作为撤销在Oracle中注册,因此我们需要将其更改为新的撤销表空间。

以下是我所做的和成功的事情:

  1. 创建一个新的撤消表空间:
代码语言:javascript
运行
复制
CREATE SMALLFILE UNDO TABLESPACE "UNDO" 
DATAFILE '+DATA/t2/datafile/undo_01.dbf' SIZE 10G 
REUSE AUTOEXTEND ON NEXT 500M MAXSIZE 10G;
  1. 将新撤消切换到“正式”撤消表空间:
代码语言:javascript
运行
复制
alter system set undo_tablespace='UNDO' scope=both;
  1. 删除旧的撤消表空间:
代码语言:javascript
运行
复制
DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

希望这能有所帮助。

票数 3
EN

Database Administration用户

发布于 2014-05-22 18:17:46

你不想开始放弃连接。您如何知道这些连接正在做什么,以及如果这些连接被丢弃,会发生什么中断。

最好是等待会话开始使用新的表空间。最终,旧的撤销表空间将不再被使用。那时你可以放下它。如果需要磁盘空间,可以尝试缩小撤消表空间,但这可能行不通。您还可以获得关闭数据库的停机时间,以限制模式打开数据库,然后删除旧的撤消表空间,即关闭和不受限制地启动数据库。

票数 1
EN

Database Administration用户

发布于 2016-11-15 08:19:53

以前的海报提供的答案对于创建新撤消表空间和将系统切换到新撤消表空间的语法都是正确的。

甲骨文文档声明以下语句将切换到新的撤销表空间:

代码语言:javascript
运行
复制
ALTER SYSTEM SET UNDO_TABLESPACE = <name of new UNDO TS>;

例如@Mohammad Jolani:

代码语言:javascript
运行
复制
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS20140508;

然而,对这种转换有一些限制,这些限制被记录为:

开关操作不等待旧撤消表空间中的事务提交。如果旧的撤消表空间中有任何挂起的事务,则旧的撤消表空间进入挂起的脱机模式(状态)。在此模式下,现有事务可以继续执行,但新用户事务的撤消记录不能存储在此撤消表空间中。即使在成功完成切换操作之后,也可以在此挂起的脱机模式中存在撤消表空间。另一个实例不能使用挂起的脱机撤消表空间,也不能删除它。最终,在所有活动事务提交之后,撤消表空间将自动从挂起的脱机模式转到脱机模式。从那时起,撤销表空间可用于其他实例(在Oracle集群环境中)。

因此,根据挂起的脱机撤消表空间,其他实例不能使用它,也不能删除它。您必须等到Oracle完全切换了当前的撤消表空间。

尝试使用以下方法查询表空间的状态:

代码语言:javascript
运行
复制
select file#, ts#, status, bytes, substr(name, 0, 30) from v$datafile;

您可能会发现,旧的撤消表空间仍在使用或处于PENDING OFFLINE状态。

您还可以尝试用以下方法来回切换撤消表空间:

代码语言:javascript
运行
复制
ALTER SYSTEM SET UNDO_TABLESPACE = '';

即使在成功完成切换操作之后,也可以在此挂起的脱机模式中存在撤消表空间。另一个实例不能使用挂起的脱机撤消表空间,也不能删除它。最终,在所有活动事务提交之后,撤消表空间将自动从挂起的脱机模式转到脱机模式。从那时起,撤销表空间可用于其他实例(在Oracle集群环境中)。如果UNDO TABLESPACE的参数值设置为“”(两个单引号),则当前撤消表空间将被关闭,下一个可用的撤消表空间将被切换。小心使用此语句,因为如果没有可用的撤消表空间,则使用系统回滚段。这将导致在试图写入与系统回滚段无关的撤消时发出ORA-01552错误。

除非关闭数据库,否则无法强制切换。如果Oracle认为它仍然需要旧的撤销TS,那么就这样吧。您的系统将已经写到新的撤销TS,所以没有必要强制任何东西,除非你有特殊的要求。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/65099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档