Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

73

积分

0

好友

3

主题
1#
发表于 2012-7-14 12:13:38 | 查看: 5114| 回复: 2
有一个存储过程,大致就是往分区表里写数据。但是一直提示
ORA-01688: unable to extend table mat.BUY_MAT_HIS partition BUY_MAT,在10点钟已经增加了数据文件。但是现在还在报这个错误

[oracle@100 ~]$ oerr ora 01688
01688, 00000, "unable to extend table %s.%s partition %s by %s in tablespace %s"
// *Cause:  Failed to allocate an extent of the required number of blocks for
//          table segment in the tablespace indicated.
// *Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
//          files to the tablespace indicated.

备注,在alert日志中没有记录这个错误。
2#
发表于 2012-7-14 13:35:01
在线等待!!!

回复 只看该作者 道具 举报

3#
发表于 2012-7-14 20:17:46
action plan:
请贴出该报错的完整信息

ORA-01688: unable to extend table mat.BUY_MAT_HIS partition BUY_MAT

就这个信息看没有 表空间名字

运行以下脚本并贴出结果:
  1. REM tablespace report

  2. select * from v$version;

  3. set linesize 200


  4. select a.tablespace_name,
  5.        round(a.bytes_alloc / 1024 / 1024) megs_alloc,
  6.        round(nvl(b.bytes_free, 0) / 1024 / 1024) megs_free,
  7.        round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) megs_used,
  8.        round((nvl(b.bytes_free, 0) / a.bytes_alloc) * 100) Pct_Free,
  9.        100 - round((nvl(b.bytes_free, 0) / a.bytes_alloc) * 100) Pct_used,
  10.        round(maxbytes / 1048576) Max
  11.   from (select f.tablespace_name,
  12.                sum(f.bytes) bytes_alloc,
  13.                sum(decode(f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) maxbytes
  14.           from dba_data_files f
  15.          group by tablespace_name) a,
  16.        (select f.tablespace_name, sum(f.bytes) bytes_free
  17.           from dba_free_space f
  18.          group by tablespace_name) b
  19. where a.tablespace_name = b.tablespace_name(+)
  20. union all
  21. select h.tablespace_name,
  22.        round(sum(h.bytes_free + h.bytes_used) / 1048576) megs_alloc,
  23.        round(sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) /
  24.              1048576) megs_free,
  25.        round(sum(nvl(p.bytes_used, 0)) / 1048576) megs_used,
  26.        round((sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) /
  27.              sum(h.bytes_used + h.bytes_free)) * 100) Pct_Free,
  28.        100 -
  29.        round((sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) /
  30.              sum(h.bytes_used + h.bytes_free)) * 100) pct_used,
  31.        round(sum(f.maxbytes) / 1048576) max
  32.   from sys.v_$TEMP_SPACE_HEADER h,
  33.        sys.v_$Temp_extent_pool  p,
  34.        dba_temp_files           f
  35. where p.file_id(+) = h.file_id
  36.    and p.tablespace_name(+) = h.tablespace_name
  37.    and f.file_id = h.file_id
  38.    and f.tablespace_name = h.tablespace_name
  39. group by h.tablespace_name
  40. ORDER BY 1
  41. /




  42. ttitle -
  43.    center  'Database Freespace Summary'  skip 2

  44. comp sum of nfrags totsiz avasiz on report
  45. break on report

  46. set pages 999
  47. col tsname  format     a16 justify c heading 'Tablespace'
  48. col nfrags  format 999,990 justify c heading 'Free|Frags'
  49. col mxfrag  format 999,999 justify c heading 'Largest|Frag (MB)'
  50. col totsiz  format 999,999 justify c heading 'Total|(MB)'
  51. col avasiz  format 999,999 justify c heading 'Available|(MB)'
  52. col pctusd  format     990 justify c heading 'Pct|Used'

  53. select total.TABLESPACE_NAME tsname,
  54.        D nfrags,
  55.        C/1024/1024 mxfrag,
  56.        A/1024/1024 totsiz,
  57.        B/1024/1024 avasiz,
  58.        (1-nvl(B,0)/A)*100 pctusd
  59. from
  60.     (select sum(bytes) A,
  61.             tablespace_name
  62.             from dba_data_files
  63.             group by tablespace_name) TOTAL,
  64.     (select sum(bytes) B,
  65.             max(bytes) C,
  66.             count(bytes) D,
  67.             tablespace_name
  68.             from dba_free_space
  69.             group by tablespace_name) FREE
  70. where
  71.       total.TABLESPACE_NAME=free.TABLESPACE_NAME(+)
  72. /

  73. select count(*),blocks from dba_extents where segment_name='BUY_MAT_HIS' and PARTITION_NAME='BUY_MAT' group by blocks;
复制代码
确认以上 BUY_MAT_HIS是表名,而 BUY_MAT是造成问题的分区名

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 00:29 , Processed in 0.053812 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569