我正在 Teradata 中设计一个大约有 30 列的表。这些列将需要存储多个时间间隔样式的值,例如 Daily、Monthly、Weekly 等。将实际字符串值存储在表中是一种糟糕的设计,因为这会导致严重的数据重复。相反,我想做的是创建一个原始查找表。该表将保存 Daily、Monthly、Weekly,并将使用 Teradata 的标识列来派生主键。这个主键然后将存储在我创建的表中作为外键。
该表将设计如下:
ID 类型值 --- ------------ ------------ 每天 1 次间隔 2 间隔每月 3 间隔每周 4 时间帧 24x7 5 时间帧 8x5
这对我的应用程序很有效,因为我需要知道的只是填充 Web 表单下拉列表时的原始键值。但是,我们使用的其他应用程序需要运行报告或通过提要接收这些数据。因此,需要创建一个视图,将这个表连接到基元表,以便它可以实际返回 Daily、Monthly 和 Weekly。
我关心的是性能。
我从未创建过包含如此大量外键字段的表,并且对 Teradata 还相当陌生。在我走上漫长的道路以艰难的方式弄清楚这一切之前,我希望获得任何建议,以实现我的目标的最佳方式。
我正在使用 Teradata 15。使用强大的数据库用户 sysdba,我创建了以下视图:
REPLACE VIEW DBA_TABLES_TEST.ROLE_ALL_APP_USERS AS
SELECT A.ROLENAME
FROM DBC.ROLEMEMBERSV A
WHERE A.ROLENAME LIKE 'TG%';
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Executed as Single statement. Failed [5315 : HY000] An owner referenced by user does not have SELECT WITH GRANT OPTION access to DBC.RoleMembersV.RoleName.
Elapsed time = 00:00:00.015
STATEMENT 1: Select Statement failed.
Run Code Online (Sandbox Code Playgroud)
然后我使用 DBC 授予 sysdba 选择权,但再次尝试查看,它不起作用:
GRANT SELECT ON DBC TO SYSDBA WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)
知道如何向 sysdba 授予正确的权限吗?
非常感谢!
据我了解,从 Teradata 中的表中选择时,该表默认处于锁定状态。我想做一个简单的select * from table不锁定表。意思是,我想做一个选择并允许其他用户从同一个表中进行选择,而不必等待我的选择结束。
我知道我可以使用LOCKING修饰符降级选择锁,如下所示:
locking table my_table for access select * from my_table
Run Code Online (Sandbox Code Playgroud)
但这将允许我的操作不等待锁定。据我了解,它仍然会锁定表,因此其他操作将不得不等待锁定。
任何有teradata数据库经验的人?我是这个数据库的新手,我的任务是增加数据库的大小。我正在使用 Teradata Administrator 来执行此操作。我正在使用Tools > Modify Database然后增加 Perm 空间的大小。
尝试修改数据库以增加大小时,我收到以下错误消息:
3541: The request to assign new PERMANENT space is invalid
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的理解是关键是在 DBC 中有足够的空间。我使用的数据库是父 (DBC) 的子数据库。
我可以从运行查询中看到,由于 DBC 足够大,我应该有足够的大小来增加我的数据库。
例子:
select sum(currentperm) c1, sum (maxperm) c2, c2-c1 from dbc.diskspace;
Run Code Online (Sandbox Code Playgroud)
结果:
currentperm maxperm c2-c1
293,696,239,616.00 2,382,684,039,413.76 2,088,987,799,797.76
273.525938 2219.047434 1945.521496
Run Code Online (Sandbox Code Playgroud)
这告诉我 DBC 中有 1.9TB 可用空间。我读对了吗?我有足够的空间。那么为什么我不能增加我的数据库呢?