关于 ORA-19502 ORA-15081 问题

来源:互联网 发布:市政工程师待遇知乎 编辑:程序博客网 时间:2024/05/01 13:57

作者 阿九【转载时请务必以超链接形式标明文章原始出处和作者信息】


今天本来做了个ASM实验,想验证磁盘容量大小不一致rebalance会有什么影响,在测试的时候出现了错误:
ORA-19502: 文件 "+DATA", 块编号 384 (块大小=8192) 上出现写入错误
ORA-15081: 无法将 I/O 操作提交到磁盘
ORA-15081: 无法将 I/O 操作提交到磁盘

查看ASM实例的ASM磁盘组容量
SQL> select group_number,disk_number,total_mb,free_mb from v$asm_disk order by disk_number;


GROUP_NUMBER DISK_NUMBER   TOTAL_MB    FREE_MB
------------ ----------- ---------- ----------
           1           0       3072       2328
           1           1       1024        764
           1           2         52         36
           1           3       3072       2412


SQL> 
SQL> 
SQL> !asmcmd lsdg
State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512   4096  1048576      7220     5540                0            5540              0             N  DATA/


SQL> 
看到空闲容量还有 5540M,于是想添加一个5120M的表空间看看。
[oracle@rh5-ora11g ~]$ sqlplus /nolog


SQL*Plus: Release 11.2.0.1.0 Production on 星期五 12月 7 06:14:24 2012


Copyright (c) 1982, 2009, Oracle.  All rights reserved.


SQL> conn /as sysdba
已连接。
SQL> create tablespace testasm1 datafile '+DATA' size 5120M;
create tablespace testasm1 datafile '+DATA' size 5120M
*
第 1 行出现错误:
ORA-01119: 创建数据库文件 '+DATA' 时出错
ORA-17502: ksfdcre: 4 未能创建文件 +DATA
ORA-15041: diskgroup "DATA" space exhausted




SQL> 




报错了,提示空闲空间不足,但ASM显示的可用空间为5540M,而我们只是添加5120M的文件,为什么会报错呢?


我们再看下ASM磁盘的容量


ASM实例:
SQL> select group_number,disk_number,total_mb,free_mb from v$asm_disk order by disk_number;


GROUP_NUMBER DISK_NUMBER   TOTAL_MB    FREE_MB
------------ ----------- ---------- ----------
           1           0       3072       2328
           1           1       1024        764
           1           2         52         36
           1           3       3072       2412


SQL> 


可以看到容量并没有变化,而总体的空闲容量是够我们添加那么大的数据文件的,但还是报空间不足的错误。
那我们添加一个和第三个盘一样大小的表空间看会发生什么


database实例,添加表空间
[oracle@rh5-ora11g ~]$ sqlplus /nolog


SQL*Plus: Release 11.2.0.1.0 Production on 星期五 12月 7 06:22:36 2012


Copyright (c) 1982, 2009, Oracle.  All rights reserved.


SQL> conn /as sysdba
已连接。
SQL> create tablespace testasm1 datafile '+DATA' size 2412M;
create tablespace testasm1 datafile '+DATA' size 2412M
*
第 1 行出现错误:
ORA-19502: 文件 "+DATA", 块编号 384 (块大小=8192) 上出现写入错误
ORA-15081: 无法将 I/O 操作提交到磁盘
ORA-15081: 无法将 I/O 操作提交到磁盘




SQL>

再次按5120M来添加文件,则报错又和开始时候一样了
SQL> create tablespace testasm1 datafile '+DATA' size 5120M;
create tablespace testasm1 datafile '+DATA' size 5120M
*
第 1 行出现错误:
ORA-01119: 创建数据库文件 '+DATA' 时出错
ORA-17502: ksfdcre: 4 未能创建文件 +DATA
ORA-15041: diskgroup "DATA" space exhausted




SQL> 

在metalink上也没有相关问题的解释,推测应该是5120M添加失败的操作将ASM某个位置hang住导致后续操作失败,
具体是哪问题,现在还不得而知,(我还重启过ASM实例和database实例,但问题依旧)想到的解决办法是删除其他几个磁盘,然后添加一个小于剩余磁盘容量的表空间看报错不
ASM实例:
SQL> col name for a40
SQL> col failgroup for a40
SQL> col path for a50
SQL> select name,failgroup,path from v$asm_disk;


NAME                                     FAILGROUP                                PATH
---------------------------------------- ---------------------------------------- --------------------------------------------------
DATA_0003                                DATA_0003                                /dev/raw/raw4
DATA_0002                                DATA_0002                                /dev/raw/raw3
DATA_0001                                DATA_0001                                /dev/raw/raw2
DATA_0000                                DATA_0000                                /dev/raw/raw1


SQL> 
SQL> alter diskgroup "DATA" drop disk 'DATA_0003' rebalance power 11;


Diskgroup altered.


SQL> alter diskgroup "DATA" drop disk 'DATA_0002' rebalance power 11;


Diskgroup altered.


SQL> alter diskgroup "DATA" drop disk 'DATA_0001' rebalance power 11;


Diskgroup altered.


SQL>


查看容量
SQL> select group_number,disk_number,total_mb,free_mb from v$asm_disk order by disk_number;


GROUP_NUMBER DISK_NUMBER   TOTAL_MB    FREE_MB
------------ ----------- ---------- ----------
           0           0          0          0
           1           0       3072       1367
           0           1          0          0
           0           2          0          0


SQL>

创建一个30M的表空间试试:
SQL> create tablespace testasm2 datafile '+DATA' size 30M;


表空间已创建。


SQL> 
额,这样终于不报错了,然后在把其他几个盘加回来吧。。。
ASM的多磁盘管理和平衡能力真的是。。。
原创粉丝点击