Обновление материализованного представления DB2 iseries - PullRequest
0 голосов
/ 08 февраля 2019

Я создал следующую материализованную таблицу запросов:

CREATE TABLE SCHEMA.TABLE AS
  (SELECT * FROM SCHEMA.TABLEEXAMPLE)
     DATA INITIALLY DEFERRED
     REFRESH DEFERRED
     MAINTAINED BY USER
     DISABLE QUERY OPTIMIZATION;

Когда я выполняю REFRESH TABLE SCHEMA.TABLE, он блокируется для чтения другими пользователями.

Чтение этого документа из IBM https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000977.html

Я пытался выполнить это утверждение:

REFRESH TABLE SCHEMA.TABLE ALLOW READ ACCESS

Но я получаю следующую ошибку: SQL State: 42601 Unexpected keyword ALLOW

Чего мне не хватает в заявлении?Есть ли другой способ разрешить доступ на чтение к материализованной таблице запросов, пока она обновляется?

1 Ответ

0 голосов
/ 09 февраля 2019

MQT на Db2 для IBM я отстаю от функциональности, доступной в Db2 для LUW.

Я никогда не беспокоился об этом, вместо этого закодированный векторный индекс (EVI) с вычисляемыми столбцами удовлетворяет все мои потребностикаждый считается.(Обратите внимание, что в Db2 LUW нет EVI)

Согласно комментарию Мао, вы можете попытаться удалить воссозданный MQT со следующим:

CREATE TABLE SCHEMA.TABLE AS
  (SELECT * FROM SCHEMA.TABLEEXAMPLE)
     DATA INITIALLY DEFERRED
     REFRESH DEFERRED
     MAINTAINED BY USER
     DISABLE QUERY OPTIMIZATION
     with NC;

Но я думаю, что для обновления все равно потребуетсяэксклюзивный доступ к MQT.

Единственные варианты, которые я могу придумать для «обновления» MQT во время его использования

  • программно, с использованием любых триггеров на базетаблицы или, возможно, процесс, который использует SQL для обновления нескольких строк одновременно.

  • удаление DISABLE QUERY OPTIMIZATION и отсутствие прямого доступа к MQT.Вместо этого полагайтесь на оптимизатор, чтобы получить к нему доступ при необходимости.Теперь вы можете создавать его версию каждые несколько часов, и БД должен начать использовать более новую версию для новых запросов.Как только старый больше не используется, вы удаляете его (или REFRESH это)

...