使用场景
在已经建好的数据表中新增一个clob类型(大字段都报错,包括text类型)的字段报错,报错信息如下所示:
出现这种问题的原因是当我们在建表时,选择主键,达梦数据库会默认将主键设置为聚集索引,而一旦表创建成功,再向该表增加大字段类型就会报错,所以解决办法就是怎么去除聚集索引.
解决方法
一.建表时
如果是建表时直接新增一列则没问题,我们以TEXT类型为例,两张表的建表语句如下
CREATE TABLE "GFSTACK"."TABLE_2"
(
"COLUMN_1" VARCHAR(50) NOT NULL,
CLUSTER PRIMARY KEY("COLUMN_1")) STORAGE(ON "MAIN", CLUSTERBTR) ;
CREATE TABLE "GFSTACK"."TABLE_3"
(
"COLUMN_1" VARCHAR(50) NOT NULL,
"COLUMN_2" TEXT,
NOT CLUSTER PRIMARY KEY("COLUMN_1")) STORAGE(ON "MAIN", CLUSTERBTR) ;
注意两张表的区别在于一个是“CLUSTER PRIMARY KEY”,一个是“NOT CLUSTER PRIMARY KEY”,如果建表时指定“NOT CLUSTER PRIMARY KEY”则可以随时添加大字段.
如果是通过DM管理工具界面建表,主键是不会指定“CLUSTER”或“NOT CLUSTER”的,直接就是“PRIMARY KEY”,这个时候就需要手动修改达梦数据库配置了,有三种方法:
1.关闭默认主键指定CLUSTER数据库参数,动态参数无需重启数据库(客户端需断开重新连接)
sp_set_para_value(1,'PK_WITH_CLUSTER',0);
之后再创建表就不会自动指定主键列为聚集索引了.
2.修改dm.ini配置文件,将“PK_WITH_CLUSTER”配置为0即可,修改后重启数据库实例,如果不行重启服务器
3.通过DM控制台工具修改一样
二.表已存在,不能删除重新建表
我们在日常使用中大部分遇到的都是这种情况.如果表已经存在且已经有了数据不能再重新创建表,这时候就比较麻烦了步骤如下所示
1.先创建一个新字段
alter table LU_ACTIVITIES add test VARCHAR
2.在新字段上创建一个聚集索引(会自动将主键上的聚集索引变为非聚集索引)
CREATE cluster INDEX test_index ON LU_ACTIVITIES (test);
其中test_index为索引名称,LU_ACTIVITIES为表名,test为字段名
3.然后删掉刚创建的聚集索引
drop index test_index
4.删除新加字段
ALTER TABLE LU_ACTIVITIES
DROP COLUMN test
这样问题就解除了,可以随意增加大字段了