none
Проблема с автоочисткой данных ChangeTracking autocleanup RRS feed

  • Вопрос

  • Возникла проблема с автоматической очисткой данных в ChangeTracking. Какой бы период не ставил (1 час, 30 минут, 2 минуты, 5 часов и т.д.) данные все равно очищаются дня через 2, когда-то через полтора... С чем связано понять не могу. БД Sql Server 2012:

    Microsoft SQL Server Management Studio 11.0.3000.0
    Microsoft Analysis Services Client Tools 11.0.3000.0
    Microsoft Data Access Components (MDAC) 6.1.7601.17514
    Microsoft MSXML 3.0 4.0 5.0 6.0 
    Microsoft Internet Explorer 9.0.8112.16421
    Microsoft .NET Framework 4.0.30319.17929
    Operating System 6.1.7601

    Кто-нибудь сталкивался? с чем это может быть связано?

Все ответы

  • Ну - тут куча уточняющих моментов требуются: как именно выставляете этот самый "период"? как убеждаетесь в его НЕ соблюдении? как вообще сконфигурен CT в ваших конкретных условиях? и т.д.

    www.sqlCMD.ru - all around MS SQL Server

  • Период выставлял и в ManagementTool-е и скриптом. В его НЕ соблюдении убеждаюсь так, что, например, выставил 1 час. Я так понимаю он хранит данные 1 час, затем вызывается процедура очищения данных (вроде раз в 30 минут) и данные чистятся. На деле при проверке через каждые 2 часа данные были живы в течении двух дней. Сервер всегда работал. В смысле как сконфигурен СТ? просто включен и все. :)
  • Да нет, вы не поняли... Вот вы пишите:

    >>и скриптом

    Так давайте его сюда!

    >>при проверке

    Проверке как? Скриптом? И его сюда!

    Т.е. моя первая идея состоит в том, что ошибка просто где-то в вашем коде. Вот когда мы убедимся, что весь T-SQL безупречен - тогда начнем "рыть глубже".


    www.sqlCMD.ru - all around MS SQL Server

    7 июня 2013 г. 15:30
  • Скрипт, сгенерированный через database project выглядит так:

            ALTER DATABASE [$(DatabaseName)] SET CHANGE_TRACKING = ON(AUTO_CLEANUP = ON, CHANGE_RETENTION = 35 MINUTES) 
                WITH ROLLBACK IMMEDIATE;

    затем на таблице:

    ALTER TABLE [dbo].[$(TableName)] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON);

    Запрос на получение изменений выглядит так:

    select change.* from CHANGETABLE(CHANGES [dbo].[$(TableName)], 0) as change

    , 0 - самая начальная версия.

    Далее я изменяю данные в [dbo].[$(TableName)] (любой update), у меня выборка по изменениям показывает, что я что-то изменил. Через сутки все равно показывает, хотя выше в запросе на БД видно, что хранить данные всего 35 минут.

    23 июня 2013 г. 8:37
  • Так а вы в курсе, что указанные вами 35 мин.=минимальный (а вовсе не точный!) срок хранения инфы? Официально говоря:

    CHANGE_RETENTION. Указывает минимальный срок хранения данных... и т.д.

    По истечению данного периода движок у себя в "голове" всего лишь делает пометку (простыми словами): "ресурс [выделенный под хранение той самой инфы] свободен". Т.е. как будет нужда данный ресурс можно пере-использовать, причем ключевая фраза подчеркнута. Нету алгоритма безусловно удаляющего инфу по истечению периода из параметра CHANGE_RETENTION.


    www.sqlCMD.ru - all around MS SQL Server

    24 июня 2013 г. 10:54