Teradata 锁定表以供读取,同时通过具有访问权限的视图访问表

Posted

技术标签:

【中文标题】Teradata 锁定表以供读取,同时通过具有访问权限的视图访问表【英文标题】:Teradata locks table for read while accessing to table through view with access rights 【发布时间】:2017-02-02 12:18:48 【问题描述】:

这真的很奇怪。

我有 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 进行读取,但它应该阻止访问。是bug吗?

我可以说 Teradata 以这种方式手动启动它以阻止访问:

lock table t2 for access -- before the query

但是这种解决方案存在问题 - 管理员不给予此类授权。

TD 版本:15.10.03.07

TD 版本:15.10.03.09

我该如何解决这个问题?

【问题讨论】:

您的 Teradata 版本是什么? @dnoeth 更新问题信息 嗯,我不知道这是否是记录在案的行为,我永远不会使用lock row read 创建视图(无论如何它都是默认值)。您最好与您的 DBA 联系以联系 Teradata 支持。 @dnoeth 他们说,如果您在没有指定任何内容的情况下使用 join 编写此类选择查询,TD 将从两个视图中获得最大权限。这就是为什么t2 被阻止读取的原因。这至少很奇怪。还有一点,我发现查询似乎使用了相同的连接,但锁作为例外工作 最后管理员授权手动阻止表访问)) 【参考方案1】:

如果您在未指定任何内容的情况下使用 join 编写此类选择查询,则 TD 将从两个视图中获得最大权限。这就是为什么t2 被阻止读取的原因。

    始终使用explain 检查块 如果你不同意,手动屏蔽lock table t2 for access

【讨论】:

以上是关于Teradata 锁定表以供读取,同时通过具有访问权限的视图访问表的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pig - 如何维护一个分布式查找表以供我的 python UDF 访问?

mysql select for update:未锁定以供读取

Teradata 7423:HY000] 对象已锁定,现在等待。交易中止

使事务锁定一行以在 MariaDB 上读取

如何查询具有基数的表以显示所有 Pk,同时还显示具有 FK 的表中的匹配元素

Mnesia:如何同时锁定多行,以便我可以写入/读取一组“一致”的记录