今天把自己遇到的一個小問題跟大家分享一下如何修改db2資料庫表中列的屬性--將列的非空屬性改為允許空的屬性,修改資料表的某一列屬性其實很簡單但是裡面有需要細節需要dba注意,畢竟資料的安全才是最重要的啊!
db2資料庫支援直接使用ddl修改原表列屬性,但是在修改之前需要確認要修改的列是否存在唯一性約束,否則你是無法修改屬性的。
注:該操作會導致表處於pending狀態,在操作之前需要確認該表是否24小時表,是否為大表(因為需要reorg重置表狀態,資料量太大將導致業務中斷時間變長),謹慎操作~
以下是具體操作步驟,敬請參考:
1、首先檢查需要修改的列是否含有唯一性檢查約束(注:主鍵不可設定為null)
1)使用db2系統表查詢將要修改的表是否含有唯一約束
#db2 "select CONSTNAME, type from SYSCAT.TABCONST where TABNAME="T01""
#主要看type,一般type的值有P(主鍵約束)、U(唯一性約束)、K(列值檢查)、F(外來鍵)
#如果返回的type值中有沒有U型別的行則可以直接將原列設定為null然後reorg即可,反之需要繼續第二步
2)使用db2look工具確認
#db2look -d dbname -e -t tabname
#檢視將要修改的表的ddl語句,檢查是否有unique子句,如果有這證明有唯一性約束列存在
#db2 "alter table tabname drop unique CONSTNAME "
#回退步驟:db2 "alter table tabname add unique(colname)"
3、修改列的屬性為null
db2 "alter table tabname ALTER colname drop not null"
#回退步驟:db2 "alter table t01 ALTER colname set not null"
4、對該表進行重組
因為修改列的屬性後,該表處於reorg pending狀態所以我們必須進行reorg才能使該表恢復到正常狀態(這一步很重要)
db2 "reorg table tabname use tempsys"
db2 "runstats on table tabname with distribution and detailed indexes all"
5、驗證
db2 load query table tabname
如果返回表狀態為normal則此次操作完成。
今天把自己遇到的一個小問題跟大家分享一下如何修改db2資料庫表中列的屬性--將列的非空屬性改為允許空的屬性,修改資料表的某一列屬性其實很簡單但是裡面有需要細節需要dba注意,畢竟資料的安全才是最重要的啊!
db2資料庫支援直接使用ddl修改原表列屬性,但是在修改之前需要確認要修改的列是否存在唯一性約束,否則你是無法修改屬性的。
注:該操作會導致表處於pending狀態,在操作之前需要確認該表是否24小時表,是否為大表(因為需要reorg重置表狀態,資料量太大將導致業務中斷時間變長),謹慎操作~
以下是具體操作步驟,敬請參考:
1、首先檢查需要修改的列是否含有唯一性檢查約束(注:主鍵不可設定為null)
1)使用db2系統表查詢將要修改的表是否含有唯一約束
#db2 "select CONSTNAME, type from SYSCAT.TABCONST where TABNAME="T01""
#主要看type,一般type的值有P(主鍵約束)、U(唯一性約束)、K(列值檢查)、F(外來鍵)
#如果返回的type值中有沒有U型別的行則可以直接將原列設定為null然後reorg即可,反之需要繼續第二步
2)使用db2look工具確認
#db2look -d dbname -e -t tabname
#檢視將要修改的表的ddl語句,檢查是否有unique子句,如果有這證明有唯一性約束列存在
#db2 "alter table tabname drop unique CONSTNAME "
#回退步驟:db2 "alter table tabname add unique(colname)"
3、修改列的屬性為null
db2 "alter table tabname ALTER colname drop not null"
#回退步驟:db2 "alter table t01 ALTER colname set not null"
4、對該表進行重組
因為修改列的屬性後,該表處於reorg pending狀態所以我們必須進行reorg才能使該表恢復到正常狀態(這一步很重要)
db2 "reorg table tabname use tempsys"
db2 "runstats on table tabname with distribution and detailed indexes all"
5、驗證
db2 load query table tabname
如果返回表狀態為normal則此次操作完成。