在把Oracle迁移至达梦后,对比源端和目的端对象,有时会发现达梦比oracle多出很多表。
或者在查询达梦数据库表数量或表名的时候,发现 select * from user_tables;查出来的表数量与实际的表数量不一致,存在个别表名并非真正的表的情况,这些表在管理工具的模式下是看不到的。
出现这种情况的原因主要是由于以下几种情况:
达梦创建位图索引时,会创建一张表,表名为:
BM$_+位图索引对象id 达梦创建外键,该外键关联的字段是本表的字段时,会创建3张临时表,表名为:
- SREF_CON_TAB+外键约束id+_LEVEL
- SREF_CON_TAB+外键约束id+_REFING
- SREF_CON_TAB+外键约束id+_REFED
达梦数据库创建全文索引时,会创建四张表,表名为:
- CTI$+全文索引名+$I
- CTI$+全文索引名+$P
- CTI$+全文索引名+$D
- CTI$+全文索引名+$N
因此,查询达梦数据库的实际的表可以使用以下SQL:
- --查看指定模式的所有表数量
- SELECT
- count(*)
- FROM
- SYSOBJECTS
- WHERE
- SCHID =
- (
- SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME ='模式名'
- )
- AND TYPE$ ='SCHOBJ'
- AND SUBTYPE$='UTAB'
- AND NAME NOT LIKE 'CTI%'
- AND NAME NOT LIKE 'SREF_CON_TAB%'
- AND NAME NOT LIKE 'BM$';