注册
【与达梦同行】Oracle-DM迁移表数量对比差异
技术分享/ 文章详情 /

【与达梦同行】Oracle-DM迁移表数量对比差异

数据库 2022/12/30 1239 1 1

在把Oracle迁移至达梦后,对比源端和目的端对象,有时会发现达梦比oracle多出很多表,或者在查询达梦数据库表数量或表名的时候,发现

select * from user_tables;

查出来的表数量与实际的表数量不一致,存在个别表名并非真正的表的情况,这些表在管理工具的模式下是看不到的。

出现这种情况的原因主要是由于以下几种情况:

  1. 达梦创建位图索引时,会创建一张表,表名为:
BM$_+位图索引对象id
  1. 达梦创建外键,该外键关联的字段是本表的字段时,会创建3张临时表,表名为:
SREF_CON_TAB+外键约束id+_LEVEL
SREF_CON_TAB+外键约束id+_REFING
SREF_CON_TAB+外键约束id+_REFED
  1. 达梦数据库创建全文索引时,会创建四张表,表名为:
CTI$+全文索引名+$I
CTI$+全文索引名+$P
CTI$+全文索引名+$D
CTI$+全文索引名+$N

因此,查询达梦数据库的实际的表可以使用以下SQL:

--查看指定模式的所有表名 SELECT NAME 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$'; --查看指定模式的所有表数量 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$'; --查看指定模式的所有表名 SELECT NAME 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$'; --查看指定模式的所有表数量 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$';
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服