Oracle11g 系统或目录表-DBA\uU/DBC-输出不稳定
我试图获取使用系统表或目录表引用特定字段的所有表/视图(换句话说,所有对象)的列表。我正在使用以下查询Oracle11g 系统或目录表-DBA\uU/DBC-输出不稳定,oracle11g,teradata,Oracle11g,Teradata,我试图获取使用系统表或目录表引用特定字段的所有表/视图(换句话说,所有对象)的列表。我正在使用以下查询 select * from dba_col_comments where column_name like('SXX_AXXX_%') order by 1; 然而,输出是不稳定的。当我重复运行相同的查询而不做任何更改时,输出是不同的。例如,它生成9300条记录,几分钟后生成9350条,几分钟后生成9347条 我在Teradata中也观察到了同样的行为 我的理论是——在生产环境
select *
from dba_col_comments
where column_name like('SXX_AXXX_%')
order by 1;
然而,输出是不稳定的。当我重复运行相同的查询而不做任何更改时,输出是不同的。例如,它生成9300条记录,几分钟后生成9350条,几分钟后生成9347条
我在Teradata中也观察到了同样的行为
我的理论是——在生产环境中,创建的临时对象可能会在系统/目录表中获得一个条目
有什么想法/方向吗?在Teradata中,您会发现,当全局临时表被实例化(由SQL语句引用)时,应该将记录添加到数据字典表TVM中。会话注销后,这些记录将被删除,只留下与提交的原始
CREATE GLOBAL TEMPORARY table
语句关联的基表记录
您可以使用viewDBC.allentitables
找到这些实例
在Teradata中,易失性表
不在数据字典中维护
编辑-您的里程数可能会有所不同,但这会让您开始使用Teradata
SELECT D1.DatabaseNameI AS DatabaseName_
, T1.TVMNameI AS TableName_
, F1.FieldName AS ColumnName_
FROM "DBC".TVM T1
INNER JOIN
"DBC".Dbase D1
ON D1.DatabaseId = T1.DatabaseId
INNER JOIN
"DBC".TVFields F1
ON F1.DatabaseId = T1.DatabaseId
AND F1.TableId = T1.TVMId
WHERE F1.FieldName = 'MyColumn'
--AND D1.DatabaseNameI IN ('{Database1}', ... '{Database99}') -- Filter on databases
AND F1.FieldType in ('i', 'i1', 'i2', 'i8') -- Integer, ByteInt, SmallInt, BigInt
--AND T1.TableKind IN ('T') -- Optional Filter to just tables.
AND NOT EXISTS
(SELECT 'x'
FROM "DBC".TempTables TT1
WHERE Tt1.TableId = T1.TVMId
)
;
你的理论听起来相当不错,很可能是Oracle为自己的内部流程创建了对象。你还没有描述你的问题是什么。。。你到底在追求什么?你确定你在追求什么?为什么不排除系统模式?我正在尝试的是——在我们的一个项目中,我们正在尝试将代理键的数据类型从整数更改为十进制(18,0)。这是一个非常重要的字段,用于近14000个表中。我试图确保使用system/catalog/data dictionary表是查找数据库对象的简单方法。然而,正如我所提到的,我试图了解为什么产出会出现这种波动,以及如何消除它们。换句话说,我如何获取此字段存在或引用的数据库对象列表,并确保这些对象不是临时的。您应该能够将考虑的数据库限制为仅包含目标表和临时表的数据库。消除最终用户能够创建表的任何数据库。还应考虑修改引用此列的全局临时表的任何基本定义。谢谢@Rob-您的回复非常有用。