Версия SQL Server - 2008 R2
Я работаю над оценкой решения DMS с целью получения обслуживания. Исходное решение имеет одну центральную базу данных, имеющую данные, относящиеся к производителю. Он также имеет одну базу данных для каждого дилера, что означает, что существует множество зависимостей между базами данных.
Проблемы:
- Документация без DB
- Нет комментариев коментария
- Много кучи
- Нет стандартных соглашений об именах объектов
- Центральный БД имеет 460+ таблиц и 900+ SProcs, в дополнение к другим объекты
- Каждая база данных дилера имеет 370+ таблиц и 2350+ SProcs, в дополнение к другим объекты
В качестве первого шага я рекомендую полную очистку БД, для которой важно понимать зависимости объектов, в том числе кросс-зависимые базы данных. Я попытался использовать решение Red Gate, но выход слишком объемный. Все, что я хочу, это список объектов в базах данных, которые не имеют каких-либо зависимостей - они не зависят от других объектов и не зависят от каких-либо объектов.
Вот script Я использовал для получения списка зависимостей:
SELECT
DB_NAME() referencing_database_name,
OBJECT_NAME (referencing_id) referencing_entity_name,
ISNULL(referenced_schema_name,'dbo') referenced_schema_name,
referenced_entity_name,
ao.type_desc referenced_entity_type,
ISNULL(referenced_database_name,DB_NAME()) referenced_database_name
FROM sys.sql_expression_dependencies sed
JOIN sys.all_objects ao
ON sed.referenced_entity_name = ao.name
Я создам таблицу - Dependencies - в которую я буду вставлять этот результирующий набор из каждого БД. В качестве следующего шага я также создам другую таблицу - AllObjects - которая будет содержать список всех объектов в Базах данных. Для этого выполните script:
SELECT
DB_NAME() DBName,
name,
type_desc
FROM sys.all_objects
WHERE type_desc IN
(
'VIEW',
'SQL_TABLE_VALUED_FUNCTION',
'SQL_STORED_PROCEDURE',
'SQL_INLINE_TABLE_VALUED_FUNCTION',
'USER_TABLE',
'SQL_SCALAR_FUNCTION'
)
Теперь список имен из этой таблицы, которые не отображаются в столбце referenced_entity_name в таблице зависимостей, должен содержать список объектов, которые я ищу.
SELECT
AO.DBName,
AO.name,
AO.type_desc
FROM AllObjects AO
LEFT OUTER JOIN Dependencies D ON
D.referenced_database_name = AO.DBName AND
D.referenced_entity_name = AO.name AND
D.referenced_entity_type = AO.type_desc
WHERE
D.referenced_database_name IS NULL AND
D.referenced_entity_name IS NULL AND
D.referenced_entity_type IS NULL
Теперь вопросы:
- На выходе отсутствуют некоторые зависимостей объектов. Что я отсутствует?
- Как подтвердить, что мои выводы верны?
- Я имею в виду, есть ли другой способ сделать это, поэтому я могу сравнить результаты и двойная проверка?
Спасибо заранее,
Раджа