问题现象: 测试库使用如下方式创建索引: create index IDX_ANA_OFFICE on ANA (OFFICE_CITY, OFFICE_NO) tablespace IDX pct

问题现象:

测试库使用如下方式创建索引:

create index IDX_ANA_OFFICE on ANA (OFFICE_CITY, OFFICE_NO)

tablespace IDX

pctfree 10

initrans 2

maxtrans 255

storage

(

initial 128K

next 128K

minextents 1

maxextents unlimited

pctincrease 0

);

报错:ORA-01654: unable to extend index GALT.IDX_OFFICE by 128 in tablespace IDX

改为默认创建:

create index IDX_ANA_PNR_OFFICE on ANA (OFFICE_CITY, OFFICE_NO)

tablespace IDX;

查看SQL是:

storage

(

initial 64K

next 1M

minextents 1

maxextents unlimited

);

问题追查:

1、首先针对1654这个报错,MOS是这样介绍的:

Error: ORA-01654

Text: unable to extend index %s.%s by %s in tablespace %s

-------------------------------------------------------------------------------

Cause: Failed to allocate extent for index segment in tablespace.

Action: Use the ALTER TABLESPACE ADD DATAFILE statement to add one or more

files to the specified tablespace (1)、针对表空间不足的情况,建议使用DBA_FREE_SPACE视图进行查询(Note: 121259.1提供了若干脚本)。

(2)、另外,针对索引的问题,DBA_INDEXES视图则描述了下一个分区(NEXT_EXTENT)的大小,以及所有索引的百分比增长(PCT_INCREASE)。“next_extent”指的是试图分配的区大小(也就是报错中涉及的内容)。

区分配计算:next_extent = next_extent * (1 + (pct_increase/100))

在Concept中描述了为段分配区的算法

How Extents Are Allocated

Oracle uses different algorithms to allocate extents, depending on whether they are locally managed or dictionary managed. With locally managed tablespaces, Oracle looks for free space to allocate to a new extent by first determining a candidate datafile in the tablespace and then searching the datafile’s bitmap for the required number of adjacent free blocks. If that datafile does not have enough adjacent free space, then Oracle looks in another datafile.

MOS也提出了若干可能的解决方法:

Possible solutions:

------------------

- Manually coalesce adjacent free extents:

ALTER TABLESPACE COALESCE;

The extents must be adjacent to each other for this to work.

- Add a datafile:

ALTER TABLESPACE ADD DATAFILE ' name>' SIZE ;

- Resize the datafile:

ALTER DATABASE DATAFILE '' RESIZE ;

- Enable autoextend:

ALTER DATABASE DATAFILE '' AUTOEXTEND ON

MAXSIZE UNLIMITED;

- Defragment the Tablespace

- Lower "next_extent" and/or "pct_increase" size:

ALTER STORAGE ( next pctincrease );

下面这句话我认为是重点:

“这个错误并未指出表空间中是否有足够的空间,仅仅说明Oracle不能找到一个足够大的连续空间用来匹配next extent。

2、另一篇文章“TROUBLESHOOTING GUIDE (TSG) - UNABLE TO CREATE / EXTEND Errors”说明了各种关于“UNABLE TO CREATE / EXTEND”的错误。

“unable to extend"的错误是指当没有足够连续的空间用来分配段的情况。

I. 提出了解决这种错误所需要的信息:

(1)、判断报错表空间中最大的连续空间是多少。

SELECT max(bytes) FROM dba_free_space WHERE tablespace_name = '';

这个SQL返回的是表空间最大允许的连续块大小。(DBA_FREE_SPACE不会返回临时表空间的信息,可以参考“DBA_FREE_SPACE Does not Show Information about Temporary Tablespaces (文档 ID 188610.1)”这篇文章会介绍如何查看临时表空间的连续块大小)。

如果在这个报错之后立即执行上述SQL,则返回的表空间中连续的最大块会小于这个对象正在试图分配的next extent的空间。

(2)、判断NEXT_EXTENT大小。

a) 对于PCT_INCREASE=0的字典管理表空间(DMT)或者使用统一UNIFORM区管理的本地管理表空间(LMT),使用如下SQL:

SELECT NEXT_EXTENT, PCT_INCREASE

FROM DBA_SEGMENTS

WHERE SEGMENT_NAME = AND SEGMENT_TYPE = AND OWNER = AND TABLESPACE_NAME = ;

其中segment_type会展示在错误信息中,可能包含如下类型的segment:

CLUSTER

INDEX

INDEX PARTITION

LOB PARTITION

LOBINDEX

LOBSEGMENT

NESTED TABLE

ROLLBACK

TABLE

TABLE PARTITION

TYPE2 UNDO

TYPE2 UNDO (ORA-1651)

同样地,segment_name可以在错误信息中找到。

b) 对于使用SYSTEM|AUTOALLOCATE区管理的本地管理表空间(LMT)。

没有方法可以查询它的next extent大小。只能查询错误信息,错误信息中的块数乘以表空间的块大小,以此来判断需要创建的区大小。

c) 对于PCT_INCREASE>0的字典管理表空间(DMT)。

SELECT EXTENT_MANAGEMENT FROM DBA_TABLESPACES WHERE TABLESPACE_NAME = '';

使用如下公式计算需要分配的区大小:

extent size = next_extent * (1 + (pct_increase/100)

例如:

next_extent = 512000

pct_increase = 50

next extent size = 512000 * (1 + (50/100)) = 512000 * 1.5 = 768000

注意:

ORA-01650 Rollback Segment

pct_increase仅用于Oracle若干早期版本,后面版本中回滚段的pct_increase默认是0。

ORA-01652 Temporary Segment

临时段与表空间创建的存储默认值相同。

如果查询出现错误,则需要判断这个查询语句是否尽可能地最优以完成排序。

相关阅读:

Oracle ORA-01555 快照过旧 说明

ORA-01078 和 LRM-00109 报错解决方法

ORA-01555超长的Query Duration时间

ORA-00471 处理方法笔记

ORA-00314,redolog 损坏,或丢失处理方法

ORA-00257 归档日志过大导致无法存储的解决办法

(3)、判断表空间是否包含了AUTOEXTENSIBLE,并已经达到MAXSIZ。

对于数据文件:

SELECT file_name, bytes, autoextensible, maxbytes FROM dba_data_files WHERE tablespace_name='';

对于临时文件:

SELECT file_name, bytes, autoextensible, maxbytes FROM dba_temp_files WHERE tablespace_name='';

(4)、判断哪种解决方法最优。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

oracle -3233,ORA-3233表空间相关问题处理相关推荐

  1. Oracle创建用户与表空间的相关操作

    用户相关操作 --创建用户 create user scottuser identified by scottuser; --给用户分配权限 grant connect,resource to sco ...

  2. Oracle一次缩小表空间的处理过程

    Oracle一次缩小表空间的处理过程 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩ ...

  3. Oracle bigfile 大文件表空间会影响rman等备份效率

    Database 是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成.表空间内的逻辑存储单位为段(segment),段又可以继续划分为数据扩展(extent).而数据扩展是由一组连续 ...

  4. 数据库-Oracle【Oracle数据库设置默认表空间问题及Oracle,SQL,MySQL的自增变量设置】...

    一. Oracle数据库设置默认表空间问题 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间-- ...

  5. oracle创建表空间工具,使用sqlplus命令行工具为oracle创建用户和表空间

    这篇文章主要介绍了使用sqlplus为oracle创建用户和表空间的方法,本文介绍的是使用Oracle 9i所带的命令行工具:SQLPLUS,需要的朋友可以参考下 用Oracle10g自带的企业管理器 ...

  6. oracle system和sysaux表空间清理和回收

    oracle system和sysaux表空间清理和回收   前几天和一个网友讨论了下SYSAUX表空间使用率过高的问题,今天有时间整理一下,正好我们的测试数据库也存在这个问题.本案例数据库版本为11 ...

  7. Oracle数据库新建默认表空间并指定用户

    Oracle数据库新建默认表空间并指定用户 1,创建一个空的文件夹(用于存储生成的表空间) 2,打开SQL PLUS 使用system用户登录,并输入相关命令 命令解析: 创建表空间: create ...

  8. oracle创建数据库、表空间、用户并授权

    oracle创建数据库.表空间.用户并授权 在安装完Oracle数据库软件之后可以使用默认的数据库orcl,也可以根据需要创建自定义的数据库.表空间用于对数据库中的资源进行分类,每个用户都有默认的表空 ...

  9. oracle数据库解决system表空间已爆满的问题

    oracle数据库解决system表空间已爆满的问题 参考文章: (1)oracle数据库解决system表空间已爆满的问题 (2)https://www.cnblogs.com/chxmtl/p/1 ...

  10. oracle rman恢复表空间,Oracle数据库RMAN恢复之表空间和数据块介质的恢复

    示例一:表空间的数据文件被误删除 open状态下删除表空间对应的所有数据文件. 在open状态下使用alter tablespace ... offline for recover 脱机表空间. 使用 ...

最新文章

  1. z-index 用法
  2. 托盘图标菜单_全新开始菜单和任务栏,Windows 10X 抢先体验
  3. 【POJ - 3177】Redundant Paths(边双连通分量,去重边)
  4. Linux常用命令——chattr、lsattr
  5. 找礼物(find)(模拟)
  6. 使用spring data Querydsl 实现动态查询功能
  7. e5 e3 php,e3v3平台和e5平台怎么选择
  8. 4月30日世界表白日_2020520世界表白日 你该怎么表白
  9. matlab需要什么运行库,运行库是什么?常用软件运行库都有哪些?
  10. 平面的几种的方程表示
  11. spec 文件 autopatch
  12. screenX、clientX、pageX三者间的区别
  13. Android项目:基于Android手机校园外卖订餐系统(计算机毕业设计)
  14. linux文件分隔符
  15. 安卓下的c语言ide,C语言编译器IDEapp-C语言编译器IDE安卓版下载v2.4.0-飞飞世界
  16. 请假流程如何快速实现(OA )呢?:Activiti工作流
  17. python 中 self的用法
  18. uni-app中uni-ui组件库的使用
  19. Tomcat| 设置https端口时,8443和443区别
  20. 假如时光可以倒流我要如何选择

热门文章

  1. 一淘网是马云手中的防守牌
  2. JavaScript 教程+代码(下)
  3. 【Python+selenium】浏览器后台运行 隐藏窗口执行
  4. 商鞅的APP运营之道
  5. android 动态表情包,搞笑斗图动态表情包
  6. Jlink调试芯唐Cortex_M0简单步骤
  7. 简述cookie增删改查的函数封装
  8. 计算机网络之网络安全基础-网络安全协议
  9. ppt模板网站哪个好
  10. wps在任务栏取消显示多个文档的预览