免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6289 | 回复: 16
打印 上一主题 下一主题

大表alter为何占用rootdbs空间? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-16 15:03 |只看该作者 |正序浏览
50w记录的表,表大概2G多,包含byte字段,对其中一个varchar字段扩位
alter table t1 modify ( col1 varchar(9) );
事先已经关闭数据库日志

时间较长,onstat -d观察rootdbs可用空间不断减少,最后alter语句报错,为啥会占用rootdbs空间呢?

>time sh alter.sh

Database selected.


  618: Error on copying blob data.

  131: ISAM error: no free disk space
Error in line 1
Near character position 56

Database closed.

=====================
IBM161:informix:/home/informix>onstat -d|grep rootdbs
70000002016ee50  1        0x1        1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   141918            PO-   /home/informix/dbs/rootdbs

IBM161:informix:/home/informix>onstat -d|grep rootdbs
70000002016ee50  1        0x1        1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   117310            PO-   /home/informix/dbs/rootdbs

IBM161:informix:/home/informix>onstat -d|grep rootdbs
70000002016ee50  1        0x1        1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   95294             PO-   /home/informix/dbs/rootdbs

IBM161:informix:/home/informix>onstat -d|grep rootdbs
70000002016ee50  1        0x1        1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   42046             PO-   /home/informix/dbs/rootdbs

。。。。

论坛徽章:
0
17 [报告]
发表于 2009-02-04 09:34 |只看该作者
你没有使用 TEMPDBSPACE 这个环境变量吧,
在onconfig文件中填上 TEMPDBSPACE 或在用户的环境变量中设 TEMPDBSPACE=tempdbs

还要注意的一个,Informix 的空间不足,有时是系统的 /tmp 空间不足。

论坛徽章:
0
16 [报告]
发表于 2009-01-22 16:50 |只看该作者

回复 #15 日月如尧 的帖子

原来是 onload的时候,没指定表空间,放到root里面去了,
对于DDL建表,如果不指定,他应该会放到db创建的时候指定的dbs中,如不指定,就是rootdbs

论坛徽章:
0
15 [报告]
发表于 2009-01-22 14:36 |只看该作者
我看LZ的表结构里并没有指定dbspace啊
系统默认用的是rootdbs
建议LZ把表里数据unload出来
重建表,指定dbspace
然后把数据load到表里

否则随着表数据增多,只有给rootdbs加chunk啦

[ 本帖最后由 日月如尧 于 2009-1-22 14:39 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2009-01-19 13:46 |只看该作者

回复 #13 welion 的帖子

你可以测试一下嘛,把那个字段删除,然后再进行alter操作,看会不会。。。
反正就是测试,

论坛徽章:
0
13 [报告]
发表于 2009-01-19 13:42 |只看该作者

回复 #10 我是DBA 的帖子

也就是说如果没有专门的 blob空间,我做alter时候,blob字段数据会占用rootdbs?
可我alter的是其他varchar2的字段啊

alter table ** modify ( transerialid varchar(9) );

论坛徽章:
0
12 [报告]
发表于 2009-01-19 10:40 |只看该作者
如果表是之前建好的
alter table 表名 put 字段 in (sbspace);

论坛徽章:
0
11 [报告]
发表于 2009-01-19 10:33 |只看该作者
1.首先要建立smart blob space 比如 (spspace) 。命令如下
       userid onspaces -c -S sbspace -g 4k  -p <path name > -o 0 -s 4000
2。将建立的 smart blob space 设置为默认值 ,修改 $INFORMIXDIR/etc/$ONCONFIG, 确认你的配置文件包含:
     SBSPACENAME sbspace

论坛徽章:
0
10 [报告]
发表于 2009-01-19 10:28 |只看该作者
blobspace 是特殊的dbspace 只包含BLOG数据。INFORMIX  BYTE 与TEXT类型数据存放在BLOB,此空间专用于一种数据类型。BLOB空间中的数据越过缓冲区,物理日志以及逻辑日志,直接从共享内存写入磁盘。

论坛徽章:
0
9 [报告]
发表于 2009-01-19 10:22 |只看该作者
-618    拷贝blob数据出错。

这个语句从一行到另一行拷贝一个BYTE或TEXT值,但一些意外的错误干扰了这一操
作。滚回当前的事务。检查相应的ISAM错误的代码以得到更多的信息。可能是一个硬
件错误,或blobspace或tblspace上的数据损坏,或缺少磁盘空间,或一个非法的
blobspace名。如果这个错误又发生,请记录全部的环境并和Informix 技术支持部联
系。

我知道了,跟你最后一个字段有关系,     servicedata byte
你或者建一个blobdbs
然后改一下配置文件

SBSPACENAME                     # Default smartblob space name - this is where blobs
                       # go if no sbspace is specified when the smartblob is
                       # created. It is also used by some datablades as
                       # the location to put their smartblobs.

[ 本帖最后由 我是DBA 于 2009-1-19 10:36 编辑 ]
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP