2017-02-02 17 views
0

Это действительно странно.Teradata блокирует таблицу для чтения при доступе к таблице через представление с правами доступа

У меня есть 2 вида, один с правами доступа и другие с правами чтения на таблицу.

replace view v1_read as locking row for read 
select id1 from t1; 

replace view v2_access as locking row for access 
select id2 from t2; 

Затем я бег такого запроса на выборке и искать объяснения плана:

select id1, id2 
from v2_access left join v1_read on v2_access.id2=v1_read.id1; 

Teradata блоки таблицу t2 для чтения, но он должен блокировать для доступа. Это ошибка?

Я могу сказать, Teradata, чтобы начать его заблокировать для доступа вручную следующим образом:

lock table t2 for access -- before the query 

Однако существует проблема с таким решением - администраторы не дают такие грантов.

  • TD Выпуск: 15.10.03.07

  • TD Версия: 15.10.03.09

Как я могу исправить это?

+0

Каков ваш релиз Teradata? – dnoeth

+0

@dnoeth update question info – Rocketq

+2

Хмм, я не знаю, было ли это документированным поведением, я бы никогда не создал представление с 'lock row read' (по умолчанию он по умолчанию). Вам лучше поговорить с вашим администратором базы данных, чтобы связаться с поддержкой Teradata. – dnoeth

ответ

0

Если вы напишете такой запрос select с объединением без указания чего-либо, TD получит максимальные права от обоих представлений. Вот почему t2 заблокирован для чтения.

  1. Всегда проверять блоки с explain
  2. Если вы Арент согласны вручную блокировать его lock table t2 for access