Я пытался использовать этот мастер, и файлы данных и журналов были для меня одинакового размера.Мне интересно, была ли сокращена исходная база данных с момента копирования (это могло быть сделано фоновым заданием, планом обслуживания или другим пользователем), или если вы используете какие-либо продукты сжатия (в SQL или в Windows).Также, если вы можете определить, какие объекты занимают больше места, это может пролить свет на вещи.Обратите внимание на два прокомментированных места, в которых вам придется жестко задавать имя старой и новой базы данных.
DECLARE
@old_db SYSNAME = N'old_db_name',
@new_db SYSNAME = N'new_db_name';
WITH [old] AS
(
SELECT
t = OBJECT_SCHEMA_NAME([object_id], DB_ID(@old_db))
+ '.' + OBJECT_NAME([object_id], DB_ID(@old_db)),
r = row_count,
s = used_page_count
FROM old_db_name.sys.dm_db_partition_stats -- change this line!
WHERE index_id IN (0,1)
AND OBJECT_SCHEMA_NAME([object_id], DB_ID(@old_db)) <> 'sys'
),
[new] AS
(
SELECT
t = OBJECT_SCHEMA_NAME([object_id], DB_ID(@new_db))
+ '.' + OBJECT_NAME([object_id], DB_ID(@new_db)),
r = row_count,
s = used_page_count
FROM new_db_name.sys.dm_db_partition_stats -- change this line!
WHERE index_id IN (0,1)
AND OBJECT_SCHEMA_NAME([object_id], DB_ID(@new_db)) <> 'sys'
)
SELECT
[old].t, [new].t,
[old_rc] = SUM([old].r), [old_kb] = SUM([old].s*8),
[new_rc] = SUM([new].r), [new_kb] = SUM([new].s*8),
spot = CASE WHEN COALESCE(SUM([old].r), -1) <> COALESCE(SUM([new].r), -1)
OR COALESCE(SUM([old].s*8), -1) <> COALESCE(SUM([new].s*8), -1) THEN
' <----------' ELSE '' END
FROM
[old] FULL OUTER JOIN [new]
ON [old].t = [new].t
GROUP BY [old].t, [new].t
ORDER BY [old].t, [new].t;