第一章..绪论
1.1..背景
需要对明年所有系统的表新建。
1.2..要求
对导切建表可能遇到的一些问题罗列及解决办法。
第二章..新建表的的过程
1.1..获取DDL
获取DDL一定要在服务器上去获取,千万别用gds去导出ddl。
1.1.1..切换数据库用户
su – gbasedbt
1.1.2..根据需要选取以下其中一个DDL导出方式
获取某个库的DDL
dbschema -d 库名 -ss > 库名.sql
获取某个表的的DDL
dbschema -d 库名 表名 -ss > 表名.sql
1.2..修改上面一步导出的sql文件里的DDL
总共有以下三处要改:
同一个库的表名必须唯一,需要改表名。
同一个库的约束名必须唯一,需要改主键或者唯一约束名。
同一个库的索引名必须唯一,需要改索引名称。
1.3..新建2025年所有系统的表
1.3.1..根据需要选取以下其中一个方式建表
dbaccess 库名 库名.sql
dbaccess 库名 表名.sql
第三章..测试
1.1..测试
1.1.1..拷贝到测试环境
将导出的sql文件拷贝到测试环境的/home/gbase/,
1.1.2..切换到root用户,授予sql文件777权限
su - root
chmod 777 库名.sql
chmod 777 表名.sql
1.1.3..切换到数据库用户, 根据需要选取以下其中一个方式建表
su - gbasedbt
dbaccess 库名 库名.sql
dbaccess 库名 表名.sql
第四章..实施步骤
1.1..执行建表
切换到数据库用户, 根据需要选取以下其中一个方式建表
su - gbasedbt
dbaccess 库名 库名.sql
dbaccess 库名 表名.sql
第五章..建表遇见的问题
1.1..在线修改表结构
如果有业务在访问该表,此时需要去修改表结构,会遇到如下两个问题。
1.1.1..在线表结构成功应用报错
Table (tablename) has been dropped, altered or renamed
如果遇见上面报错内容,一般只会报错一次就会恢复,如果连续报错,请重启应用
1.1.2..在线表结构修改失败
失败原因是不能独占锁资源,请用如下语句去修改
dbaccess 库名 -
SET ENVIRONMENT FORCE_DDL_EXEC "60";--强制修改表结构
SET LOCK MODE TO WAIT 60;--锁等待
alter 语句;
rename 语句;
1.2..not null 要在default表达式后面
not null不在default会建表报错
1.3..建表时候不能default ‘’ not null
因为数据库ENABLE_NULL_STRING 配置参数,启用或禁用空字符串(’’)查询时是否等同于 NULL 的功能。
1 = 启用(缺省值),空字符串(’’)等同于 NULL
0 = 禁用,空字符串(’’)不等同于 NULL
default ‘’ not null此时没问题,'一个空格' 等价于 '多个空格’,原因gbase会丢弃字符串右边大于1的空格。
当ENABLE_NULL_STRING是1 = 启用时候,此时null 等价于 ’’ 等价于’ ’,'一个空格' 等价于 '多个空格’,原因gbase会丢弃字符串右边大于1的空格,default ‘’ not null逻辑矛盾,建表会成功,但是insert会报错误.