You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何同一ObjectID 885578193会出现在两个不同数据库中?

同一ObjectID出现在多个数据库的原因分析

你遇到的核心问题是查询语句中的OBJECT_NAME函数使用错误,导致出现了同一个ObjectID跨数据库显示的假象,具体原因和解决方法如下:

1. 根本原因:OBJECT_NAME的上下文问题

sys.dm_db_index_usage_stats中的object_id是数据库级唯一的——不同数据库里完全可能存在ID相同的对象,但它们是完全独立的两个对象。

你使用的OBJECT_NAME(Object_id)没有指定第二个参数database_id,这个函数默认会用当前查询所在的数据库上下文去解析对象ID,导致:

  • 当当前数据库是A库时,会把B库的object_id解析成A库中同名ID的对象;
  • 反之亦然,最终看起来同一个object_id同时属于两个不同数据库。

2. 验证与修正方法

把查询语句中的OBJECT_NAME(Object_id)改为OBJECT_NAME(Object_id, Database_id),让函数用每个对象所属的数据库上下文去解析名称,就能得到正确的结果:

SELECT
    DB_NAME(Database_id) AS DBName
    , OBJECT_NAME(Object_id, Database_id) AS TableName
    ,  *
FROM sys.dm_db_index_usage_stats
WHERE DB_NAME(Database_id) NOT LIKE 'Master%'
    AND NOT DB_NAME(Database_id) = 'msdb'
ORDER BY DBName, TableName;

执行修正后的语句后,你会发现两个数据库中的885578193对应完全不同的表名,证实它们是不同库的独立对象。

补充:其他少见场景

如果修正后确实存在同一ID跨库对应同一对象,那可能是以下情况:

  • 数据库通过还原、备份复制创建,原库和复制库保留了相同的对象ID;
  • 使用了跨数据库的对象引用(如同义词),但这种情况不会导致sys.dm_db_index_usage_stats中出现跨库的同一ID记录。

内容的提问来源于stack exchange,提问作者Axium7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:05:58