Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Изменение типа столбца в таблице с INTEGER на BIGINT / 4 сообщений из 4, страница 1 из 1
22.08.2018, 12:58
    #39691699
kogor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа столбца в таблице с INTEGER на BIGINT
Есть таблица FRAGMENTS.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
---------------------------------------------
-- 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, но он по всей видимости пересоздает таблицу и делает еще какие то магические вещи. Процедура выполняется нереально долго, ни разу не дождался ее выполнения.
Давал из командной строки команду:
Код: sql
1.
ALTER TABLE FRAGMENTS ALTER COLUMN OFFSET SET DATA TYPE BIGINT


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

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

Заранее спасибо!
...
Рейтинг: 0 / 0
22.08.2018, 16:01
    #39691876
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа столбца в таблице с INTEGER на BIGINT
kogor,

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

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

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

Удачи.
...
Рейтинг: 0 / 0
22.08.2018, 16:06
    #39691888
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа столбца в таблице с INTEGER на BIGINT
kogor,

Таблица в read-only режим встанет, пока ее не реорганизовать в оффлайне.
Если надо в онлайне, пользуйтесь процедурой admin_move_table, которая фактически перезагрузит таблицу.
...
Рейтинг: 0 / 0
28.08.2018, 18:41
    #39694549
kogor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типа столбца в таблице с INTEGER на BIGINT
Mark Barinstein,CawaSPb

Спасибо! Сделал reorg table , и все заработало.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Изменение типа столбца в таблице с INTEGER на BIGINT / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]