страницы достаточного размера не существует - вставка DB2

У меня есть запрос DB2 (простой оператор вставки), который пытается вставить около 27 столбцов. Из этих столбцов 1 — это Clob, и проблема в нем. В моем столбце Clob иногда значение может содержать даже 28K символов. И в таких крайних случаях я получаю следующую ошибку:

 A system temporary table space with sufficient page size does not exist .. SQLCODE=-1585, SQLSTATE=54048, DRIVER=3.64.82

Когда я гуглил и просматривал некоторые страницы, я обнаружил сущность под названием System Temporary Table Space, которая будет использоваться БД при выполнении запроса. (Я не уверен, но на нескольких страницах говорится, что она будет использоваться только для сортировки и объединения, но в моем запросе их нет).

Изучив несколько предложений, я создал Системное временное табличное пространство с размером страницы 32 КБ, используя приведенный ниже запрос:

CREATE SYSTEM TEMPORARY TABLESPACE STB PAGESIZE 32K MANAGED BY SYSTEM USING ( 'C:\DB2\NODE0005') BUFFERPOOL BP32K

Тем не менее моя проблема продолжается. Каким будет правильный способ выполнить мой запрос. Я пытаюсь понять важность системного временного табличного пространства, размера страницы и т. д. Но любая помощь которые могли бы решить эту проблему на данный момент, были бы очень признательны.


person Kannan Ramamoorthy    schedule 03.09.2014    source источник


Ответы (3)


Вы можете создать системное временное табличное пространство для каждой страницы как SMS (управляемое системой). В этом случае ваш запрос всегда найдет табличное пространство с соответствующим размером страницы.

CREATE SYSTEM TEMPORARY TABLESPACE STB_4 PAGESIZE 4K 
CREATE SYSTEM TEMPORARY TABLESPACE STB_8 PAGESIZE 8K 
CREATE SYSTEM TEMPORARY TABLESPACE STB_16 PAGESIZE 16K 
CREATE SYSTEM TEMPORARY TABLESPACE STB_32 PAGESIZE 32K 

При создании SMS табличное пространство не будет предварительно выделять место на диске, и они будут только увеличиваться по мере их использования.

person AngocA    schedule 03.09.2014
comment
Решение сработало отлично. Но все еще ищу объяснение. В моем случае более 28 КБ символов, поэтому я предполагаю, что для него подойдет только табличное пространство 32 КБ. У меня была проблема, когда у меня было только табличное пространство 8K и 32K. Есть ли объяснение, отвечающее на мой вопрос? - person Kannan Ramamoorthy; 04.09.2014
comment
CREATE SYSTEM TEMPORARY TABLESPACE STB_8 PAGESIZE 8K может вернуть SQL1582N, см. ibm.com/support/knowledgecenter/SSEPGG_9.5.0/ - person Wolfgang Fahl; 24.03.2016

Суть AngocA, похоже, в принципе работает, она соответствует принципам http://www-01.ibm.com/support/docview.wss?uid=swg21529563.

Для системного временного табличного пространства 4K команда

CREATE SYSTEM TEMPORARY TABLESPACE STB_4 PAGESIZE 4K 

будет работать сразу, если 4K является размером страницы по умолчанию. Чтобы избежать ошибки SQL 1582N, http://www.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.messages.sql.doc/doc/msql01582n.html

вам может понадобиться создать буферные пулы 8K, 16 и 32K:

CREATE BUFFERPOOL BP8K pagesize 8K
CREATE SYSTEM TEMPORARY TABLESPACE STB_8 PAGESIZE 8K BUFFERPOOL BP8K
CREATE BUFFERPOOL BP16K pagesize 16K
CREATE SYSTEM TEMPORARY TABLESPACE STB_16 PAGESIZE 16K BUFFERPOOL BP16K
CREATE BUFFERPOOL BP32K pagesize 32K
CREATE SYSTEM TEMPORARY TABLESPACE STB_32 PAGESIZE 32K BUFFERPOOL BP32K
person Wolfgang Fahl    schedule 24.03.2016
comment
Огромное спасибо. Я потратил целый день, пытаясь понять, как решить эту проблему. Голосование. - person The Impaler; 13.06.2018

Сначала вам нужно проверить существующий размер страницы. Вы можете создать буферный пул с размером страницы 8k, 16k, 32k и т. д.

Сначала создайте буферный пул с требуемым размером страницы, а затем создайте системное временное табличное пространство с требуемым размером страницы. Ниже приведена пошаговая процедура.

sql1585n-system-temporary-tablespace-issue

person Rosel    schedule 10.12.2018