powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Изменение типа столбца в таблице с INTEGER на BIGINT
4 сообщений из 4, страница 1 из 1
Изменение типа столбца в таблице с INTEGER на BIGINT
    #39691699
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица 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
Изменение типа столбца в таблице с INTEGER на BIGINT
    #39691876
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogor,

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

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

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

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

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

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


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