Можете ли вы определить, какая база данных помечает ошибку? Можете ли вы попробовать запустить свой скрипт в единственной базе данных, в которой возникла проблема, и посмотреть, является ли она последовательно той же самой базой данных, которая вызывает ошибку? Возможно, это специальная база данных, которую вы пропустили, которую нельзя таким образом сократить.
У меня есть похожая среда, содержащая временные базы данных, которые не предназначены для длительного хранения, и я использую следующий скрипт, который отлично работал для сотен баз данных:
CREATE procedure [dbo].[ShrinkLog]
@DB varchar(200)
as
declare @LogFile varchar(200)
declare @Sql varchar(500)
SELECT @LogFile = name
FROM sys.master_files
where type_desc = 'LOG'
and db_name(database_id) = @DB
set @Sql = '
Use [' + @DB + ']
DBCC SHRINKFILE([' + @LogFile + '], 1)
'
print(@sql)
exec(@sql)
Имейте также в виду, что вы не хотите запускать эту команду, если на вашем сервере также не достаточно места на жестком диске / в памяти.
С уважением,