Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SHRINKFILE  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 895
Hello world!
Есть старая архивная база.
Попытался сжать лог
USE [TRADE]
GO
DBCC SHRINKFILE (N'TRADE_log' , 0)
GO


DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
8 2 377784 128 377784 128

Но он остался прежнего размера.
Подскажите как побороть?

К сообщению приложен файл. Размер - 19Kb
23 май 17, 17:15    [20505137]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Yagrus2,
Какая модель восстановления? И да на форуме куча тем по данной тематики погуглите.
23 май 17, 17:18    [20505148]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
человек_ниоткуда
Guest
Yagrus2

Подскажите как побороть?

Дождаться пока VLF на конце файла освободятся. :)
Вот кино:
Вот чтиво: https://www.mssqltips.com/sqlservertip/1225/how-to-determine-sql-server-database-transaction-log-usage/
23 май 17, 17:20    [20505161]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Если FULL то бекап лога в помощь. Если SIMPLE, то CHECKPOINT и шринк.
Если не помогает, то скорее всего на базе вы FULL бекап не делали никогда и база в псевдо-SIMPLE
23 май 17, 17:21    [20505165]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 895
gds, Full

К сообщению приложен файл. Размер - 30Kb
23 май 17, 17:40    [20505256]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
человек_ниоткуда
Guest
Yagrus2,

В General (Last database log backup) что?
23 май 17, 17:53    [20505343]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 895
человек_ниоткуда
Yagrus2,

В General (Last database log backup) что?
None

К сообщению приложен файл. Размер - 28Kb
23 май 17, 18:03    [20505393]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36987
Yagrus2
None

А вы с какой целью в таком случае используете полную можель восстановления?
23 май 17, 18:04    [20505396]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
человек_ниоткуда
Guest
Гавриленко Сергей Алексеевич
Yagrus2
None

А вы с какой целью в таком случае используете полную можель восстановления?

Я так понимаю, это была модель восстановления базы model (imho это default) и базу просто создали без раздумий.

Yagrus2:
Лезь обратно в Option.
Поменяй Recovery Model на "Simple".
Нажми "OK". И лучше сделай это в нерабочее время. Или отключи весь народ от базы.
Потом делай Shrink.
23 май 17, 18:18    [20505428]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 895
Гавриленко Сергей Алексеевич
Yagrus2
None

А вы с какой целью в таком случае используете полную можель восстановления?

Я впервые сталкиваюсь с такими настройками.
Подскажите, какая связь между мими?
23 май 17, 18:22    [20505456]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 895
человек_ниоткуда
Yagrus2

Подскажите как побороть?

Дождаться пока VLF на конце файла освободятся. :)
Вот кино:
Вот чтиво: https://www.mssqltips.com/sqlservertip/1225/how-to-determine-sql-server-database-transaction-log-usage/

Спасибо, курю.
23 май 17, 18:23    [20505459]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 895
человек_ниоткуда
Я так понимаю, это была модель восстановления базы model (imho это default) и базу просто создали без раздумий.

Yagrus2:
Лезь обратно в Option. Поменяй Recovery Model на "Simple".
Нажми "OK". И лучше сделай это в нерабочее время. Или отключи весь народ от базы.
Потом делай Shrink.

Рецепт помог.
Правильно ли я понимаю в Last database log backup, указывается дата последнего лог бекапа?
И в моем случае он никогда не делался (Last database log backup = None).
Например, создали базу(с Full моделью восстановления), а потом заполнили ее и забыли.

AlanDenton
Если FULL то бекап лога в помощь. Если SIMPLE, то CHECKPOINT и шринк.
Если не помогает, то скорее всего на базе вы FULL бекап не делали никогда и база в псевдо-SIMPLE


И база получается псевдо-Simple?
24 май 17, 10:28    [20506738]     Ответить | Цитировать Сообщить модератору
 Re: SHRINKFILE  [new]
человек_ниоткуда
Guest
Yagrus2
Рецепт помог.

Ты, надеюсь, правильно понимаешь, что это рецепт только для данной конкретной ситуации (дан, чтоб тебе мосх не парить). Почитай про модель восстановления ms sql баз. В инете есть статья майкросовтовская с картинками.

Yagrus2
Правильно ли я понимаю в Last database log backup, указывается дата последнего лог бекапа?
И в моем случае он никогда не делался (Last database log backup = None).

Да. Более того, эта информация берётся из msdb - там есть таблицы с логами всех бекапов и ресторов на сервере.
Я сделал себе такой скриптик, чтоб лог смотреть:
USE msdb;

DECLARE @db_name SYSNAME = N'msdb'; -- имя базы
DECLARE @period_depth_hh INT = 24; -- период за который смотреть. в часах от сегодняшнего дня

SELECT
	bs.database_name
,	start_at = DATENAME(dw, bs.backup_start_date) + ' ' + CONVERT(VARCHAR, bs.backup_start_date, 13)
,	duration = RIGHT('0' + CAST(DATEDIFF(DAY, bs.backup_start_date, bs.backup_finish_date) AS VARCHAR(11)), 2) + ' ' + CONVERT(VARCHAR, DATEADD(SECOND, DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date)%(24*60*60), CAST('00:00:00' AS TIME(3))), 14)
,	device_name = bmf.physical_device_name
,	type_desc = 
		CASE 
 			WHEN bs.type='D' THEN 'FULL'
 			WHEN bs.type='I' THEN 'DIFF'
 			WHEN bs.type='L' THEN 'TLOG'
 			WHEN bs.type='F' THEN 'FG.FULL'
 			WHEN bs.type='G' THEN 'FG.DIFF'
 			WHEN bs.type='P' THEN 'PARTIAL'
 			WHEN bs.type='Q' THEN 'PARTIAL.DIFF'
		END
,	bs.is_copy_only
,	backup_size = RIGHT(N'000' + CAST((CAST(bs.backup_size/1024 AS BIGINT) / 1024 / 1024 ) AS NVARCHAR(4)), 4) + N':' + RIGHT(N'000' + CAST((CAST(bs.backup_size/1024 AS BIGINT) / 1024 ) % 1024 AS NVARCHAR(4)), 4) + N':' + RIGHT(N'000' + CAST((CAST(bs.backup_size/1024 AS BIGINT)) % 1024 AS NVARCHAR(4)), 4)
,	bs.backup_set_id
,	bs.media_set_id
FROM
	dbo.backupset bs
INNER JOIN 
	dbo.backupmediafamily bmf
ON	bs.media_set_id = bmf.media_set_id
AND	EXISTS
	(	SELECT	*
	 	FROM	dbo.backupfile _bf
	 	WHERE	bs.backup_set_id = _bf.backup_set_id
--			AND bs.type = 'D'
--		    AND _bf.physical_name NOT LIKE '%ldf'
	)
AND	bs.database_name = @db_name
AND	bs.backup_start_date >= DATEADD(hh, -@period_depth_hh, GETDATE())
ORDER BY backup_finish_date DESC


Yagrus2
Правильно ли я понимаю в Last database log backup, указывается дата последнего лог бекапа?
И в моем случае он никогда не делался (Last database log backup = None).
Например, создали базу(с Full моделью восстановления), а потом заполнили ее и забыли.

Именно так я и предположил, т.к. это самое вероятное. Ну или вы обидели предыдущего админа и он поменял "recovery model", чтоб вам диск загадить. :)

Поменяй "recovery model" на всех серверах в базе model точно также. Это база шаблон для всех новых баз, и если в ней поменяешь, то никто новой базы с таким косяком не создаст (ну если только специально).
24 май 17, 14:21    [20508022]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить