温馨提示×

Linux Informix如何扩容表

小樊
45
2026-07-05 16:06:57
栏目: 智能运维

Linux 上的 Informix 中,“扩容表”通常指 增加表所在的 dbspace 空间,或 让表能使用更多存储空间。Informix 本身没有“直接扩容表大小”的命令,而是通过 扩容 dbspace / 增加 chunk 来实现。

下面按 常见场景 给你一个完整说明。


一、确认表当前所在的 dbspace

SELECT
    tabname,
    dbsname
FROM
    systables
WHERE
    tabname = 'your_table';

或者更详细:

SELECT
    t.tabname,
    d.name AS dbspace
FROM
    systables t,
    sysdbspaces d
WHERE
    t.dbsname = d.name
    AND t.tabname = 'your_table';

二、查看 dbspace 使用情况

SELECT
    name,
    total_size_kb,
    free_size_kb
FROM
    sysdbspaces;

或系统命令:

onstat -d

查看:

  • Dbspaces
  • Chunks
  • Free 空间

三、扩容表的核心方式(推荐做法)

✅ 方式 1:给表所在的 dbspace 增加 chunk(最常用)

1️⃣ 准备一个裸设备或文件

mkdir -p /informix/chunks
touch /informix/chunks/sql_chunk01
chmod 660 /informix/chunks/sql_chunk01
chown informix:informix /informix/chunks/sql_chunk01

创建 1GB 示例:

dd if=/dev/zero of=/informix/chunks/sql_chunk01 bs=1M count=1024

2️⃣ 添加 chunk 到 dbspace

ALTER DBSPACE dbspace_name
ADD CHUNK '/informix/chunks/sql_chunk01'
SIZE 1024000;   -- 单位:KB

✅ 成功后,表即可自动使用新增空间。


✅ 方式 2:新建更大的 dbspace,再迁移表

适合:

  • 原 dbspace 碎片化严重
  • 想换存储结构

1️⃣ 新建 dbspace

CREATE DBSPACE new_dbspace
FILE '/informix/chunks/new_chunk01'
SIZE 2 GB;

2️⃣ 迁移表(重建表)

ALTER TABLE your_table
PUT IN new_dbspace;

⚠️ 注意:

  • 重建表
  • 大表可能耗时较长
  • 需要足够临时空间

四、如果是表分区(Fragment)扩容

如果表是 分片表

ALTER FRAGMENT ON TABLE your_table
ADD PARTITION new_partition
IN dbspace_name;

五、临时表 / 排序空间不足

如果是 sort / temp 报错:

onstat -d

确认 temp_dbspace 是否有空间,必要时:

CREATE DBSPACE tempdbs
FILE '/informix/chunks/temp_chunk01'
SIZE 1 GB;

并在 onconfig 中配置:

DBSPACETEMP tempdbs

六、常见错误与排查

❌ 错误示例

-271 Could not insert new row into the table
-131 ISAM error: no free disk space

✅ 解决:

  • 扩容 dbspace
  • 或清理旧数据

七、总结(快速决策表)

场景 推荐方案
表空间不足 给 dbspace 加 chunk
表太大、想换存储 新建 dbspace + ALTER TABLE
分片表 ALTER FRAGMENT
临时空间不足 新建 temp dbspace

如果你愿意,可以告诉我:

  • Informix 版本(onstat -V
  • 表是否分片
  • 报错信息

我可以给你 精确的扩容命令

0