db2中会导致表处于reorg pending状态的alter语句
会导致表处于reorg pending状态的alter table语句
通常在数据库上线之前,我们都会对数据库做周密的规划,无论在测试阶段还是上线之初,也难免由于需求的更改会对数据中的表做一些更改。而某些alter table语句则会导致该表处于reorg-pending状态。下面做一些总结:
alter table <tablename> alter <colname> set data type <new data type>
下面的表格,在reorg recommaded列注明了那些更改需要reorg:
1. SET INLINE LENGTH <integer>
更改之后,需要对表做reorg以使更改生效。
2. SET NOT NULL
更改之后,表将处于reorg pending状态。由于还需要对表中的数据做相应的检查,所以必须reorg之后才能后续访问该表。
3. DROP NOT NULL
更改之后,表将处于reorg pending状态
4. DROP COLUMN
如果DROP COLUMN表会处于reorg pending状态。在INSRT, UPDATE, DELETE以及使用索引扫描之前必须对表做REORG
5. APPEND OFF
由于更改该属性会导致DB2对于表空间中空闲空间的估计不准确,从而影响INSERT的新能,属于此时表会处于reorg pending状态
6. VALUE COMPRESSION <ACTIVATE/DEACTIVATE>
推荐对表做reorg否则有可能会影响UPDATE语句的性能。
总结:
如果ALTER TABLE语句影响到数据行中的数据格式,那么需要做REORG操作。同时,在reorg之前最多能发出三次同类型的ALTER TABLE命令(SQLSTATE 57016)。如果同时对表做了多次需要REORG TABLE的ALTER TABLE操作,那么只需要REORG TABLE一次。比如,在两次ALTER TABLE语句中DROP掉一个表的两列,那么此时只需要对表做一次REORG就可以了。
下面的命令,不受是否成功执行过REORG-commend操作的影响。
* ALTER TABLE之后,如果不触发任何数据一致性检查(Data Validation),否则以下命令也是运行不了的。
o ADD CHECK CONSTRAINT
o ADD REFERENTIAL CONSTRAINT
o ADD UNIQUE CONSTRAINT
o ALTER COLUMN SET NOT NULL
* DROP TABLE
* RENAME TABLE
* REORG TABLE
* TRUNCATE TABLE
* Table scan access of table data
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端