Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Изменение типа столбца в таблице с INTEGER на BIGINT  [new]
kogor
Member

Откуда:
Сообщений: 29
Есть таблица FRAGMENTS.

---------------------------------------------
-- DDL Statements for Table "DB2INST1"."FRAGMENTS"
------------------------------------------------
 

CREATE TABLE "DB2INST1"."FRAGMENTS"  (
		  "FRGMNT_ID" BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (  
		    START WITH +1  
		    INCREMENT BY +1  
		    MINVALUE +1  
		    MAXVALUE +9223372036854775807  
		    NO CYCLE  
		    CACHE 20  
		    NO ORDER ) , 
		  "ATTACH_ID" BIGINT , 
		  "SEQ_NUM" SMALLINT NOT NULL , 
		  "OFFSET" INTEGER NOT NULL , 
		  "FRGMNT_SIZE" INTEGER NOT NULL , 
		  "DATA" BLOB(104857600) NOT LOGGED COMPACT , 
		  "ARCH_MSG_ID" BIGINT )   
		 IN "USERSPACE1" ; 


-- DDL Statements for Primary Key on Table "DB2INST1"."FRAGMENTS"

ALTER TABLE "DB2INST1"."FRAGMENTS" 
	ADD PRIMARY KEY
		("FRGMNT_ID");



-- DDL Statements for Indexes on Table "DB2INST1"."FRAGMENTS"

CREATE INDEX "DB2INST1"."ATT_IDX" ON "DB2INST1"."FRAGMENTS" 
		("ATTACH_ID" ASC)
		PCTFREE 10 MINPCTUSED 10

		COMPRESS NO ALLOW REVERSE SCANS;

-- DDL Statements for Indexes on Table "DB2INST1"."FRAGMENTS"

CREATE INDEX "DB2INST1"."ATT_SEQ_IDX" ON "DB2INST1"."FRAGMENTS" 
		("SEQ_NUM" ASC,
		 "ATTACH_ID" ASC)
		PCTFREE 10 MINPCTUSED 10

		COMPRESS NO ALLOW REVERSE SCANS;

-- DDL Statements for Indexes on Table "DB2INST1"."FRAGMENTS"

CREATE INDEX "DB2INST1"."SEQ_O_IDX" ON "DB2INST1"."FRAGMENTS" 
		("SEQ_NUM" ASC)
		PCTFREE 10 MINPCTUSED 10

		COMPRESS NO ALLOW REVERSE SCANS;

-- DDL Statements for Foreign Keys on Table "DB2INST1"."FRAGMENTS"

ALTER TABLE "DB2INST1"."FRAGMENTS" 
	ADD CONSTRAINT "CC1206717424234" FOREIGN KEY
		("ARCH_MSG_ID")
	REFERENCES "DB2INST1"."ARCH_MESSAGES"
		("ARCH_MSG_ID")
	ON DELETE CASCADE
	ON UPDATE NO ACTION
	ENFORCED
	ENABLE QUERY OPTIMIZATION;

ALTER TABLE "DB2INST1"."FRAGMENTS" 
	ADD CONSTRAINT "FRAG_ATCH_FK" FOREIGN KEY
		("ATTACH_ID")
	REFERENCES "DB2INST1"."ATTACHS"
		("ATTACH_ID")
	ON DELETE CASCADE
	ON UPDATE NO ACTION
	ENFORCED
	ENABLE QUERY OPTIMIZATION;



В таблице 100 млн записей. Одно из полей OFFSET имеет тип INTEGER. Теперь его стало не хватать, и нужно переделать в BIGINT. Как правильно выполнить процедуру?
Пытался сделать через db2cc, но он по всей видимости пересоздает таблицу и делает еще какие то магические вещи. Процедура выполняется нереально долго, ни разу не дождался ее выполнения.
Давал из командной строки команду:
ALTER TABLE FRAGMENTS ALTER COLUMN OFFSET SET DATA TYPE BIGINT

Выполняется успешно и практически моментально.

Вопрос такой. Какая последовательность изменения типа поля правильная?
Нужно ли предпринимать какие то дополнительные действия после выполнения команды из консоли?
Подскажите пожалуйста!

Заранее спасибо!
22 авг 18, 12:58    [21650642]     Ответить | Цитировать Сообщить модератору
 Re: Изменение типа столбца в таблице с INTEGER на BIGINT  [new]
CawaSPb
Member

Откуда: Питер/Москва/Wroclaw
Сообщений: 991
kogor,

Почитайте вот здесь ALTER TABLE statement от слов SET DATA TYPE.

Изменение типа колонки (кроме как увеличение размера CHAR/VARCHAR полей) требует изменения физического представления существующих строк таблицы в страницах, что в свою очередь требует классической реорганизации таблицы (offline reorg).
До того, как выполнен реорг таблица будет доступна только на чтение.

Для больших таблиц может быть эффективней пересоздать таблицу и перезалить LOAD'ом из курсора, а потом переименовать. Есть нюансы.

Удачи.
22 авг 18, 16:01    [21650937]     Ответить | Цитировать Сообщить модератору
 Re: Изменение типа столбца в таблице с INTEGER на BIGINT  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4839
kogor,

Таблица в read-only режим встанет, пока ее не реорганизовать в оффлайне.
Если надо в онлайне, пользуйтесь процедурой admin_move_table, которая фактически перезагрузит таблицу.
22 авг 18, 16:06    [21650950]     Ответить | Цитировать Сообщить модератору
 Re: Изменение типа столбца в таблице с INTEGER на BIGINT  [new]
kogor
Member

Откуда:
Сообщений: 29
Mark Barinstein,CawaSPb

Спасибо! Сделал reorg table , и все заработало.
28 авг 18, 18:41    [21656765]     Ответить | Цитировать Сообщить модератору
 Re: Изменение типа столбца в таблице с INTEGER на BIGINT  [new]
D9HFh07wae
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 1
Extremely good post.Really thank you! Will read on… car games unblocked
4 янв 19, 04:48    [21778202]     Ответить | Цитировать Сообщить модератору
 Re: Изменение типа столбца в таблице с INTEGER на BIGINT  [new]
Wilmiles
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 1
kogor,

192.168.8.1 router login and password for your device at 192.168.8.1. We will help you get into your router or other devices on your network.
23 мар 19, 13:47    [21841655]     Ответить | Цитировать Сообщить модератору
 Re: Изменение типа столбца в таблице с INTEGER на BIGINT  [new]
henryjones147
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 1
I am new to this forum and the sql language. Can anybody help me for the same to design a game for android?
Dissertation Proposal Help | Dissertation help UK
29 мар 19, 14:32    [21847099]     Ответить | Цитировать Сообщить модератору
 Re: Изменение типа столбца в таблице с INTEGER на BIGINT  [new]
kelvinnox
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 1
About what this table is this code is legit and also want some free Webkinz codes
2 апр 19, 23:02    [21850738]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить