本文汇总DMS刷新/同步字典(同步元数据)场景下的常见问题及排查方法,涵盖通用问题、Redis专题和Oracle专题。
通用问题
为什么数据库中已经存在库或表,DMS中却看不到?
DMS展示的库表信息不一定是实时从数据库读取的。
安全托管实例:DMS会采集并存储实例元数据。首次录入时触发全量采集,并默认每天18:00定时全量采集。
非安全托管实例:DMS仅持久化库级信息,其他元数据在登录后实时加载。
通过DMS执行的DDL变更会触发增量采集。一般在操作完成后约5秒内,可在DMS中刷新对象列表后查看最新的库表结构;实际生效时间可能受数据库负载和采集任务状态影响。
通过数据库控制台或其他客户端执行的变更,可能需要手动刷新或同步字典。
更多信息,请参见数据库元数据采集展示检索。
如何手动刷新数据库和表信息?
可通过以下任意方式操作:
方式一:在DMS首页左侧实例列表中右键单击目标实例,选择刷新/同步字典,确认后等待采集完成。
方式二:在顶部导航栏选择,在实例列表中找到目标实例,选择。
如果变更是在其他客户端执行的,也可以尝试重新登录实例,重新加载元数据。
更多信息,请参见同步数据库实例的数据字典和重新加载DMS库表元数据的时机与原因。
刷新或同步字典后,仍然看不到数据库怎么办?
建议按以下顺序排查:
1. 检查DMS使用的数据库账号权限
DMS只能采集当前数据库账号有权访问的数据库。该问题可能出现在RDS MySQL、RDS PostgreSQL、RDS SQL Server、PolarDB MySQL、PolarDB PostgreSQL等阿里云数据库,以及他云或自建数据库中。
请确认:
DMS中配置的数据库账号和密码有效。
账号具有目标数据库的访问权限。
新建数据库后,已将该数据库授权给DMS使用的账号。
如需展示实例下全部数据库,应为账号授予全部目标数据库的访问权限。
PostgreSQL系列还需要检查目标Database、Schema及相关对象权限。
RDS MySQL、RDS PostgreSQL、RDS SQL Server、PolarDB MySQL、PolarDB PostgreSQL新建数据库后,均可能不会将新库自动授权给DMS使用的账号。此时即使刷新字典,DMS仍无法展示该数据库,需要先为DMS使用的数据库账号授予新库访问权限,再重新执行刷新/同步字典。
不同数据库引擎的账号授权方式有所不同,具体操作请参见:
2. 检查实例连接状态
请确认:
数据库实例处于正常运行状态。
数据库地址、端口、账号和密码正确。
DMS IP已加入数据库白名单。
安全组、防火墙和网络链路允许DMS访问。
数据库启用SSL/TLS后,DMS中也配置了对应的SSL连接方式。
更多信息,请参见数据库登录连接问题排查FAQ和添加DMS IP至实例白名单。
3. 检查是否被系统库过滤规则屏蔽
安全协同模式默认会屏蔽部分系统库。安全规则还可以自定义过滤数据库或Schema。被过滤后,DMS不会采集相应元数据,也无法搜索或展示这些数据库。
更多信息,请参见DMS默认屏蔽的实例系统库和自定义屏蔽系统库。
4. 检查当前DMS用户的元数据访问权限
数据库账号具有访问权限,不代表当前登录DMS的用户一定具有查看权限。开启元数据访问控制后,没有实例或数据库权限的用户无法查看对应资源。
如果管理员能够看到,但普通用户看不到,应优先检查:
是否开启用户、数据库或实例级元数据访问控制。
用户是否拥有目标数据库的查询、导出或变更权限。
DBA或管理员是否已为用户分配相应权限。
更多信息,请参见设置元数据访问控制。
为什么同步字典长时间没有完成?
元数据同步耗时与实例中的库表数量有关。库表较多时,同步任务可能需要数分钟甚至更长时间。
当前系统采集字典所执行SQL的超时时间最大为120秒。如果单个数据库下的表数量过多(例如达到10万张以上量级),采集SQL可能因超过120秒而超时,导致元数据同步无法完成,DMS无法正常展示该库的表列表。这属于当前系统的能力限制,10万张表是参考量级而非严格阈值,实际是否超时还会受到数据库性能、负载和网络状况等因素影响。
建议:
避免短时间内重复触发同步。
等待当前同步任务完成后重新查看。
确认数据库连接稳定。
确认数据库账号权限未发生变化。
如果是非托管实例,尝试重新登录实例后查看。
更多信息,请参见同步数据库实例的数据字典。
为什么只有部分用户看不到数据库?
通常属于DMS用户权限问题,而不是元数据采集问题。
请检查:
是否开启用户、数据库或实例级元数据访问控制。
用户是否拥有目标数据库的查询、导出或变更权限。
DBA或管理员是否已为用户分配实例或数据库权限。
如果管理员能够看到而普通用户看不到,应优先排查此项。
为什么系统库或某些Schema看不到?
安全协同模式会默认屏蔽部分系统库,例如:
MySQL:
mysql、information_schema、performance_schema等。SQL Server:
master、model、msdb、tempdb等。PostgreSQL:主要过滤
information_schema、pg_catalog等系统Schema。
此外,安全协同模式的实例可以通过,按完整名称或正则表达式自定义过滤系统库、高敏感业务库;PostgreSQL系列过滤的是Schema。修改过滤规则后,需要再次执行"刷新/同步字典",也可以等待每天18:00的自动元数据同步使配置生效。
更多信息,请参见DMS针对各数据库类型默认屏蔽的系统库列表和如何在DMS中自定义屏蔽系统库。
为什么数据库被锁或状态异常后,DMS中看不到Schema?
DMS刷新/同步字典时需要连接目标数据库并执行元数据采集SQL。如果RDS实例或目标数据库处于被锁定、不可用等异常状态,DMS将无法正常获取Schema等元数据信息,此时重复刷新/同步字典通常无法解决。
建议按以下步骤处理:
在对应的云数据库控制台检查实例及目标数据库的运行状态。
如果数据库被锁定,先根据云数据库控制台提示完成解锁,使数据库恢复正常可访问状态。
在DMS中测试连接,确认数据库可以正常访问。
重新执行"刷新/同步字典",等待采集完成后刷新对象列表。
更多信息,请参见数据库登录连接问题排查FAQ。
Redis专题
通过公网录入Redis集群后,为什么只能看到DB0?
DMS官方文档说明:他云或自建Redis集群架构录入DMS后,目前仅支持展示DB0。
这属于当前产品支持范围限制,重复刷新或同步字典通常无法解决。
建议:
阿里云Tair/Redis实例优先通过阿里云数据库来源录入。
他云或自建Redis集群应提前确认DMS的展示能力。
更多信息,请参见连接他云或自建数据库。
DMS如何识别Redis集群模式?
Redis集群架构的识别能力与实例来源和接入方式有关。
阿里云Tair/Redis集群实例建议通过阿里云数据库来源录入。
通过公网、他云或自建方式录入的Redis集群存在能力限制。
官方文档已明确,他云和自建Redis集群目前仅支持展示DB0。
Oracle专题
为什么Oracle实例刷新/同步字典后,仍看不到Schema、表或字段?
DMS采集Oracle元数据时,需要使用录入实例时配置的数据库账号查询Oracle系统表或系统视图。如果该账号缺少相关对象的查询权限,可能导致Schema、表、字段、索引、约束或注释等元数据采集不完整,刷新/同步字典后仍无法正常展示。
请确保DMS使用的数据库账号至少具备以下系统表或系统视图的查询权限:
V$INSTANCESYS.DBA_USERSSYS.DBA_TABLESSYS.DBA_SEGMENTSSYS.DBA_TAB_COMMENTSSYS.DBA_TAB_COLUMNSSYS.DBA_COL_COMMENTSSYS.DBA_SYNONYMSSYS.DBA_OBJECTSSYS.DBA_INDEXESSYS.DBA_CONSTRAINTSSYS.DBA_IND_COLUMNS
其中,V$INSTANCE通常是动态性能视图的同义词,实际授权时可能需要由Oracle DBA对底层对象SYS.V_$INSTANCE授予查询权限,具体以目标Oracle版本和权限配置为准。
完成授权后,请重新执行"刷新/同步字典"。