Имя: Пароль:
1C
 
Помогите усечь и сжать log MSSQL, перевод в Simple и шринк не дает результата
0 MKFreeUser
 
18.12.17
09:52
Помогите с проблемой, есть база на MSSQL, mdf - 12ГБ, LDF 55ГБ. Перевел базу в "простую" модель восстановления,сделал шринк, размер лога уменьшился на 1МБ.Повторил - лог не изменился.

База была создана, как восстановление из другой базы. Начальный размер файла mdf -12ГБ, начальный размер LOG -55ГБ.

log_reuse_wait
6
log_reuse_wait_desc
REPLICATION

DBCC OPENTRAN
Сведения о транзакциях для базы данных

Сведения о реплицированных транзакциях:
Самый старый номер LSN : (0:0:0)
Самый старый нераспределенный номер LSN : (63546:40212:1)
Выполнение DBCC завершено. Если DBCC выдает сообщения об ошибках, обратитесь к системному администратору.
1 ptiz
 
18.12.17
09:57
alter database mydb set recovery simple
go
DBCC SHRINKFILE ('mydb_log', 0);
go
alter database mydb set recovery full
go

отлично работает
2 MKFreeUser
 
18.12.17
10:00
Лог не уменьшился после этой процедуры
3 MKFreeUser
 
18.12.17
10:02
Не удалось сжать файл журнала 2 , так как все логические файлы журналов, расположенные в конце файла, находятся в использовании.

(строк обработано: 1)
Выполнение DBCC завершено. Если DBCC выдает сообщения об ошибках, обратитесь к системному администратору.
4 ptiz
 
18.12.17
10:14
(3) Странно. 1С с фоновыми заданиями не мешается в этой базе?
5 MKFreeUser
 
18.12.17
10:16
Фоновые отключены давно, база создана из рабочей базы. Я вычитал, что проблема может быть в этом log_reuse_wait_desc
REPLICATION, но я не знаю как это изменить, да и мне не ясно что это такое, у меня небольшой опыт администрирования на уровне MSSQL
6 Ёпрст
 
18.12.17
10:27
(0)
BACKUP LOG
+DBCC SHRINKFILE
спасут тебя.
7 MKFreeUser
 
18.12.17
10:29
MS SQL 2008 там нет такой команды
8 MKFreeUser
 
18.12.17
10:30
BACKUP LOG MyBase WITH TRUNCATE_ONLY
go

Сообщение 155, уровень 15, состояние 1, строка 24
TRUNCATE_ONLY не является известным параметром BACKUP.
9 timurhv
 
18.12.17
10:30
(7) Сделайте полную резервную копию и шринкуйте.
10 Провинциальный 1сник
 
18.12.17
10:33
Тупо в свойствах базы уменьшаете размер ldf и нажимаете Ок. Не надо никаких команд писать. Шринкнется само.
11 MKFreeUser
 
18.12.17
10:33
все простые действия я делал:
1) создать бэкап
2) перевести в simple
3) сделать шринк
4) повторить шринк

результат минимальный, ну не может лог быть больше в 4 раза самой базы после бэкапа
12 Ёпрст
 
18.12.17
10:34
(11) переводить в симпл не надо
13 Провинциальный 1сник
 
18.12.17
10:34
(12) Если не делать бэкап журнала транзакций - то смысла в фулл нет вообще никакого.
14 MKFreeUser
 
18.12.17
10:36
(10) пробовал тупо уменьшить размер лога - ошибок не выдает, но и результата нет

(12) в симпле однозначно должно было порезать базу - но тут почему-то не хочет. У меня еще с десяток баз, и в тех что я проверил - подобной проблемы не наблюдается - спокойно шринкуются
15 Ёпрст
 
18.12.17
10:36
(13) И ?
16 Ёпрст
 
18.12.17
10:37
(14) еще раз, не надо делать симпл.
Сделай бэкап лога и шринк.
17 Провинциальный 1сник
 
18.12.17
10:37
(14) То есть. Сделали симпл, нажали Ок. Открыли еще раз - уменьшили файл до 1 мегабайта - нажали Ок. И что?
18 Ёпрст
 
18.12.17
10:37
А так. делаешь план обслуживания, в задачу пихаешь бэкап лога и стрелочкой - инструкцию t-sql на шринк лога. Всё
19 MKFreeUser
 
18.12.17
10:40
какой план обслуживания - если вручную не шринкуется. Может есть какие команды, чтобы посмотреть возможные причины?
20 Ёпрст
 
18.12.17
10:42
(19) ну, если делаешь как в (8) то ясен пень
21 Ёпрст
 
18.12.17
10:43
Если лень читать бол, то достаточно создать план обслуживания и посмотреть там скрипт выполнения от бэкапа лога
22 MKFreeUser
 
18.12.17
11:43
0. BackUp полный при полном резервировании
1. exec sp_removedbreplication 'MyDB';
2. Шринк при полном резервирование (возможно лишнее действие)
3. Шринк при simple
помогло, спасибо
23 Провинциальный 1сник
 
18.12.17
12:55
(22) А, так у вас была репликация включена..
24 Seriy_Volk
 
18.12.17
13:26
(22) как то наступали на эти грабли, диагностируется вот так:

1. определяем степень использования лог файла
dbcc sqlperf(logspace)
2. видим, что лог используется почти целиком, выясняем причину, глядя на колонки log_reuse_wait и log_reuse_wait_desc запроса
select * from sys.databases where name='my_base'
3. в log_reuse_wait_desc стоит REPLICATION, хотя в базе репликации никогда не было. Т.е. сервер не будет очищать лог, пока не пройдет репликация, нужно принудительно ее очистить:
use master
exec sp_removedbreplication
@dbname = 'my_base'
go
4. проверяем еще раз select * from sys.databases where name='my_base'
25 Seriy_Volk
 
18.12.17
13:30
(24) забыл упомянуть, что инструкция найдена где то на просторах интернета и под ней было довольно много благодарных отзывов, так что ситуация не такая уж редкая.
26 MKFreeUser
 
18.12.17
13:36
а что значит "включена репликация", может кто пояснить?
Это не бэкапы по регламенту FULL и ЖТ, а что-то другое?
27 Мыш
 
18.12.17
13:50
(0) Бэкап лог в нулл, шринк лог. Повторить два раза. Профит.
28 Seriy_Volk
 
18.12.17
14:09
(26) включена репликация, значит сервер думает, что где то есть еще одна база, которую нужно поддерживать синхронизированной с текущей базой. Для этого, кроме всего прочего, используется журнал транзакций.
29 rphosts
 
18.12.17
15:34
(0)у мну правда фул мода, поэтому для упыпырища шринк:

USE [upp]
ALTER DATABASE [upp] SET RECOVERY SIMPLE
go
DBCC SHRINKFILE ([upp_log], 1);
ALTER DATABASE [upp] SET RECOVERY FULL
go

для простой моды достаточно будет:
USE [upp]
DBCC SHRINKFILE ([upp_log], 1);
30 Мыш
 
18.12.17
16:32
(29) Зачем до 1 Мб резать?
31 rphosts
 
18.12.17
16:48
(30) мне это приемлимо
32 alkorolev
 
25.12.17
17:35
(29) базу с UPP82 переименовали, изверги!
33 alkorolev
 
25.12.17
17:46
(0) полный бэкап сделайте. После этого всё отлично шринкуется
34 Мыш
 
25.12.17
17:47
(33) См. (27)
35 Tateossian
 
25.12.17
18:01
Можно еще детач-аттач сделать (но без лога) - тогда создастся новый лог.
36 Seriy_Volk
 
26.12.17
11:22
Редкий случай для любого форума - автор темы задал хорошо сформулированный, хотя и нетривиальный, вопрос. Затем сам нашел верное решение, не забыл его описать в 22, но продолжает получать бесполезные советы...
37 Tateossian
 
26.12.17
11:25
(36) Тривиальнейший вопрос, вы не правы.
38 Tateossian
 
26.12.17
11:28
(36) У меня коллега книжечка где-то валялась, «SQL сервер для самых маленьких», так там об этом неписано где-то в начале, как обслуживать СУБД с помощью конструкторов. Там еще текст можно сгенерить и картиночки двигать.
39 Seriy_Volk
 
26.12.17
11:42
(38) у меня статистики маловато, но ни разу не встречал кого то, кто включал бы на MS SQL в регулярный план обслуживания скрипт, убирающий ошибочную репликацию для БД. А без этого все советы в теме бесполезны.
2 + 2 = 3.9999999999999999999999999999999...