| 
    
        
     
     | 
    
  | 
Помогите усечь и сжать 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 в регулярный план обслуживания скрипт, убирающий ошибочную репликацию для БД. А без этого все советы в теме бесполезны.     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |