Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Собственно, само упоминание XSQLVAR должно отпугнуть от ответов тех, кто про него не знает. :-) А вопрос такой. Допустим, есть IBX, FIBPlus, FireDAC, или любые другие компоненты прямого доступа (это важно), которые сами по себе предоставляют доступ к XSQLDA и XSQLVAR. Мне надо из TDBGrid, например из события Код: pascal 1. 2. получить доступ к XSQLVAR конкретного столбца. Собственно, на первый взгляд столбец (поле) выколупнуть вроде как все просто - Column.Field Но тут мы получаем TField, и значит надо или делать приведение типов (но не очень ясно, куда), или ... Я пока зарылся в код IBX, пытаюсь найти, теряется XSQLVAR/XSQLDA при фетче записей в TField и буфер датасета, или нет. Если теряется, то это пипец. Если прямо совсем конкретно, то мне нужен доступ к XSQLVAR.sqlind. Как его получить у IBSQL, - понятно. Как это получить у датасета - х.з. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:07 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Оно? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:13 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Hello, Kdv! You wrote on 11 февраля 2015 г. 12:12:22: Kdv> Как его получить у IBSQL, - понятно. Как это получить у датасета - х.з. у датасета есть 4 штуки "внутренних" TIBSQL. я не в курсе видны ли они снаружи в современных версиях компонентов. если нет, то для доступа к ним породи наследника и кастуй к нему свой датасет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:13 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, wadman увы, все это не то. То, что внутри там IBSQL и параметры это XSQLVAR, все замечательно. Проблема в том, что у IBSQL буфера нет. А мне надо понять, сохраняются XSQLVAR в буфере датасета, или нет. Похоже, что нет. Собственно, IBCustomDataSet.pas TFiedData - данные столбца. TRecordData - строка со столбцами TFieldData и ... никаких XSQLVAR... p.s. TIBCustomDataSet.Current вроде бы то что надо, но увы - он указывает только на последнюю фетченную запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:20 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvПохоже, что нет. Скорее всего так. Это-ж расход памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:22 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvЕсли прямо совсем конкретно, то мне нужен доступ к XSQLVAR.sqlind. TField.IsNull не хватит?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:22 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovTField.IsNull не хватит?.. не-а. Embarcadero запихнуло флаги для Change Views в SQLIND. Там битами выставляется признак столбца - изменен, insert, update, delete. Я хотел его вытащить в DBGrid, чтобы показать, какие столбцы изменены при update, какие строки вставлены, удалены, и т.п. Похоже, не судьба. В данном случае единственный вариант - заполнять StringGrid (или типа того) из IBSQL. Здесь все прекрасно можно показать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:27 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Hello, Kdv! You wrote on 11 февраля 2015 г. 12:34:04: Kdv> Embarcadero запихнуло флаги для Change Views в SQLIND. пидарасы, сэр! (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:33 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Hello, Kdv! You wrote on 11 февраля 2015 г. 12:34:50: Kdv> В данном случае единственный вариант - заполнять StringGrid > (или типа того) из IBSQL. Здесь все прекрасно можно показать. можно клонировать и модифицировать датасет из исходников, породив нужную тебе функциональность внутри. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:35 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийпидарасы, сэр! (с) с другой стороны, без изменения API, больше почти некуда. :-) Мимопроходящийможно клонировать и модифицировать датасет из исходников, породив нужную тебе функциональность внутри. вполне можно. Но на данном этапе я просто исследую эту фичу, и все связанные с ней подводные камни. Так что для меня в текущей ситуации трагедии нет. Возможно, ее не будет и для тех, кто будет мастрячить на базе этой фичи репликацию, или что-то вроде. Так что всем спасибо. А с компоненто-писателями я еще спишусь, может они что со своей стороны посоветуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:53 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvEmbarcadero запихнуло флаги для Change Views в SQLIND. Это что? Это как??? kdvВ данном случае единственный вариант - заполнять StringGrid (или типа того) из IBSQL. Здесь все прекрасно можно показать. Теперь ты понимаешь почему я не использую все эти обёртки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 12:56 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЭто что? Это как??? это новая фича у InterBase XE7. т.н. "подписки на изменения", или ChangeViews . В общем выглядит так. Создаешь подписку, перечисляешь таблицы, и те изменения, которые хочешь видеть (ins/upd/del). Пока подписка не активирована, видишь обычные данные. Как только активируешь подписку - видишь только те изменения, которые были сделаны с момента последнего commit в твоей подписке. То есть, я вчера сделал апдейт таблицы, сегодня insert, все давно закомичено. А в тестовой подписке (которую я всегда отменяю по rollback, чтобы не задолбаться с постоянными изменениями таблиц), уже второй день вижу изменения - вчера только upd, а сегодня и update, и insert. p.s. как это сделано физически, пока не знаю. Вижу только в IBAnalyst, что у этой таблицы только 1 версия, при двух видимых изменениях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:27 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, сделал еще один апдейт - короче, каким-то образом версии, которые нужны для просмотра в подписке, не удаляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:31 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdv, мне кажется это за счёт журналирования транзакций. Наверняка если его отключить, то такая возможность перестанет быть доступной. Если это делать без журнала, то БД весьма скоро распухнет до неприличных размеров. Кстати сведения об изменениях там остаётся навсегда или некоторые сведения можно удалить чтобы они перестали быть доступными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:35 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, а! все ясно. у них есть rdb$subscribers, и там для подписчика указана последняя rdb$check_out_transaction_id, метка времени, и многое другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:36 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЭто что? Это как??? sqlind меньше нуля (-1 в частности) это признак нулла, а больше нуля - битмап флагов изменения при наличии подписки. "А тут рыбу заворачивали" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:40 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисКстати сведения об изменениях там остаётся навсегда журнала транзакций нет, просто блокируется сборка версий как мусора для тех изменений, которые нужно отслеживать. изменения (версии) подчищаются после того, как в активной подписке сделать commit. То есть, чтобы начать отслеживать изменения нужно сделать set subscription x ... active; rollback; в принципе, до rollback можно выдать и inactive, это ничего не поменяет, изменения начнут отслеживаться. Внутри транзакции по active/inactive можно переключать, что видишь - либо актуальные данные, либо только изменения. Чтобы прекратить отслеживание, делаешь set subscription x ... active; commit; То есть, считается что перед commit ты "забрал" все изменения. Вся эта фигня работает только в snapshot-транзакциях. Если кому интересно - будет вебинар с Эмбаркадеро на эту тему 19 марта. 18 февраля будет вебинар по другим фичам ХЕ7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:44 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Hello, Dimitr! You wrote on 11 февраля 2015 г. 13:43:34: DimitrDimitry Sibiryakov> Это что? Это как??? > sqlind меньше нуля (-1 в частности) это признак нулла, а больше нуля - > битмап флагов изменения при наличии подписки. "А тут рыбу заворачивали" (с) не иначе как индусов понабрали на аутсорсинг... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:44 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
dimitrsqlind меньше нуля (-1 в частности) это признак нулла, а больше нуля именно (в т.ч. про рыбу) http://docwiki.embarcadero.com/InterBase/XE7/en/Change_Views_API_Support ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:44 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvВся эта фигня работает только в snapshot-транзакциях. ибо по сути подписка это и есть снапшот, она просто блокирует сборку мусора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 13:46 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Hello, Kdv! You wrote on 11 февраля 2015 г. 14:05:07: Kdv> именно (в т.ч. про рыбу) > http://docwiki.embarcadero.com/InterBase/XE7/en/Change_Views_API_Support чё-то мне это напомнило INT 2Fh (Multiplex Interrupt) в MS DOS. дежа-вю Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 14:05 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvверсии, которые нужны для просмотра в подписке, не удаляются. Беглым взглядом я что-то не вижу как можно достать старые значения полей, только флаги изменений. Что я пропустил? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 14:08 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, ничего не пропустил, старые значения полей действительно вытащить нельзя, и последовательность изменений тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 14:12 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
То есть по итогам у них фактически получилось CDC на отметках времени. Интересно, они проблему гонок параллельных транзакций решили или забили на неё?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 14:21 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, дык они же ещё репликацию не сделали, но планы у них такие есть. Вроде бы в теории эта фича для этого и должна использоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 14:34 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисВроде бы в теории эта фича для этого и должна использоваться. Сценарий: 1) Т1 стартует 2) Т2 стартует, производит изменения, завершается 3) Т3 стартует, активирует подписку, вычитывает изменения, завершается 4) Т1 раздупляется и тоже производит изменения, завершается 5) Т4 стартует, активирует подписку, вычитывает изменения, завершается Из всего, что я знаю о репликации, вытекают три "съедобные" возможности: 1) Т3 увидит изменения Т2, а Т4 увидит только изменения Т1 2) Т3 не увидит изменений Т2 3) Т3 увидит изменения Т2, а Т4 увидит изменения Т1 И Т2 Все остальные возможности отправляют репликацию лесом. Возможность 1 это маленькое чудо и я не представляю как его совершить. Если им это удалось - мысленно им аплодирую. PS: О том, что можно забыть об изменяемых PK, говорить излишне. PPS: Какой план даёт чтение изменений я стараюсь не думать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 14:49 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov3) Т3 увидит изменения Т2, а Т4 увидит изменения Т1 И Т2 все вроде штатно. Т4 увидит изменения Т1 И Т2 потому что Т1 и Т2 завершились до старта Т4. Или я чего то не понял? Почему Т3 не должна увидеть изменений Т2, или Т4 не должна увидеть изменений Т2? Я бы еще понял вопрос, что будет с изменениями, которые были сделаны и закоммичены во время работы Т3 и Т4. Но и тут есть ответ - при commit подписки сохраняются изменения, сделанные с момента старта транзакции, которая получала подписку. Dimitry SibiryakovPPS: Какой план даёт чтение изменений я стараюсь не думать. х.з., не проверял. наверное, ты хотел спросить, какой результат будет при чтении изменений с where? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 15:04 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvТ4 не должна увидеть изменений Т2? Потому что их уже вычитала Т3 и закоммитилась. Это, насколько я понял, должно подвинуть планку "увиденных" изменений и исключить их из просмотра последующими транзакциями. kdvнаверное, ты хотел спросить, какой результат будет при чтении изменений с where? :-) Нет, именно без WHERE. Представь таблицу в 100500 записей из которых изменилась всего одна. Full scan на каждое чтение изменений это смерть. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 15:28 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПотому что их уже вычитала Т3 и закоммитилась. а, понял. Тогда подписка Т4 увидит только изменения Т1, потому что действительно, изменения в Т2 уже вычитаны подпиской в Т3. То есть, твой пункт 1. авторПредставь таблицу в 100500 записей из которых изменилась всего одна. Full scan на каждое чтение изменений это смерть. дык. тут иначе не выйдет. это ж версии, а где они есть - х.з., поэтому надо читать всю таблицу (если нужны изменения ко всей таблице). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 15:37 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvТогда подписка Т4 увидит только изменения Т1, потому что действительно, изменения в Т2 уже вычитаны подпиской в Т3. То есть, твой пункт 1. Уверен? Если это действительно так, то меня очень интересовал бы способ которым они такого эффекта достигают. Покамест у меня для этого только одна идея и та довольно дикая... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 16:22 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovспособ которым они такого эффекта достигают. эээ, ну ведь известны номера транзакций, и т.д. тут еще вот в чем фокус. чтобы подписка вообще "началась", ее нужно активировать. Поэтому, собственно, в твоем сценарии, если подписка N, упоминаемая в Т3, ни разу до этого не активировалась, то никаких изменений она не увидит. Потому что она началась только в Т3. Извиняюсь, если ввел в заблуждение. изменения отслеживаются только с момента первой активации подписки Так что ответ на твой сценарий (и если в Т3 и Т4 подписка от одного и того же пользователя), это - Т3 не увидит изменений Т2, поскольку они были совершены до момента активации подписки - Т4 увидит изменения Т1, потому что они были произведены с момента начала Т3 (в которой подписка была активирована). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 17:32 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvэээ, ну ведь известны номера транзакций, и т.д. Да. И в том-то и фишка, что одного номера транзакции для этого недостаточно. kdvв твоем сценарии, если подписка N, упоминаемая в Т3, ни разу до этого не активировалась, то никаких изменений она не увидит. Естественно, предполагается, что этот сценарий осуществляется в середине рабочего потока (который workflow, а не stream) и подписка давно уже активировалась, а теперь раз в Х секунд приходит репликатор чтобы вычитать изменения с последнего прихода и перенести их в БД-приёмник. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 17:48 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, ну тогда подписка в Т3 увидит изменения в Т2. А подписка в Т4 увидит изменения с момента начала транзакции Т3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 20:46 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЕстественно, предполагается, что этот сценарий осуществляется в середине рабочего потока (который workflow, а не stream) и подписка давно уже активировалась, а теперь раз в Х секунд приходит репликатор чтобы вычитать изменения с последнего прихода и перенести их в БД-приёмник. Так по идее же репликаторов может быть несколько (?), поэтому T4 должна видеть то что поменялось с последнего commut-а T4 и T3 точно так-же ( вариант 3 ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 00:35 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81Так по идее же репликаторов может быть несколько И для каждого создаётся своя индивидуальная подписка. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 11:57 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, В ХЕ7 не так. Подписка - это что-то типа view, в котором прописано какие таблицы надо отслеживать, какие столбцы, и какие действия. пользователю выдаются права на конкретную подписку Далее пользователь может активировать подписку, причем обязательно указывая некое имя (типа "устройство"), откуда он получает изменения по этой подписке. Так что у одного юзера может быть несколько подписок - на мобиле, в офисе, дома и т.п. Что касается видимости, то - юзер получает изменения, произошедшие с момента активации подписки. Получает он их в транзакции snapshot. commit в этой транзакции сигнализирует о том, что юзер получил все изменения, которые произошли ДО СТАРТА этой snapshot-транзакции. А чтобы активировать подписку и сидеть ждать изменений, нужно сделать subscription active тут можно даже inactive сделать rollback то есть, активация-деактивация подписки вместе с commit/rollback определяет, что будет дальше с этой подпиской - активна или нет, получаем изменения или смотрим реальные данные. Выключается подписка только по inactive+commit; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 12:50 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvто есть, активация-деактивация подписки вместе с commit/rollback определяет, что будет дальше с этой подпиской - активна или нет, получаем изменения или смотрим реальные данные. Выключается подписка только по inactive+commit; А разве смотрим сами изменения а не факт их наличия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 12:57 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvДалее пользователь может активировать подписку, причем обязательно указывая некое имя (типа "устройство"), откуда он получает изменения по этой подписке. То есть изменения, полученные для одного устройства будут уже не видны для этого же устройства, но для других устройств они будут всё ещё видны? Ну пусть так, разница не большая. Главное чтобы изменения помечались как "увиденные" независимо. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 13:01 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТо есть изменения, полученные для одного устройства будут уже не видны для этого же устройства, но для других устройств они будут всё ещё видны? идентификатором подписчика является Имя_пользователя[+имя_устройства]. Код: sql 1. указание at - необязательное. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 19:04 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdv.... вот думал думал над этой конструкцией сегодня и так и не понял. с какого момента начинается логирование наличия изменений? Со старта транзакции в которой : set SUBSCRIPTION <subscription_name> AT <destination> ACTIVE COMMIT; вроде как невозможно, т.к. журнала нет и придётся привентивно все изменения с момента старта любой транзакии помнить если с момента commit; то выходит что нужно для начала логгирования гарантировать что не будет пропущено нужных изменений, т.к. фактически set ... active делать в монопольном режиме. Или я чего-то недопонял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 19:15 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Я так и думал, что они кусок TIP-а в блоб загоняют... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 19:15 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81вроде как невозможно, т.к. журнала нет В качестве журнала в данном случае используется TIP. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 19:24 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81с какого момента начинается логирование наличия изменений? Со старта транзакции в которой : set SUBSCRIPTION <subscription_name> AT <destination> ACTIVE COMMIT; вроде как невозможно, т.к. журнала нет и придётся привентивно все изменения с момента старта любой транзакии помнить ыыыы... set subscription active включает отслеживание изменений, которые были с момента старта транзакции, в которой было вот это active. при этом commit сигнализирует о том, что изменения, которые были до старта этой транзакции, уже получены. Чтобы отслеживать изменения дальше, и после завершения транзакции, надо сделать rollback. active rollback я выше об этом писал 2 раза. в rdb$subscribers запоминаются параметры транзакции, с которой нужно отслеживать изменения. Они меняются на текущую транзакцию по commit. чтобы их не менять, т.е. оставить стартом исходную транзакцию с первым active, нужно сделать rollback. далее, active/inactive меняют вывод операторов. После inactive выводятся все существующие данные. после active - только измененные с момента начала отслеживания подписки. Еще более популярно. 1. коннект 2. стартуем снапшот 3. получаем обычные данные 4. set subs active 5. получаем изменения, с момента первого active/rollback или последнего active/commit теперь, допустим, делаем 6. rollback (подписка остается активной, даже если сделать inactive, т.к. изменения мы не получили) 7. disconnect 8. connect 9. старт транзакции 10. тут мы получаем ОБЫЧНЫЕ данные. Потому что сервер в этот момент не имеет понятия, что мы - это мы, и у нас активна подписка. Вернее, он может догадаться, что мы - это мы, но это ему не нужно. 11. set subs active 12. ура, видим те же изменения, что получали в пункте 5. 13. нам надоели изменения, делаем inactive 14.1. теперь, если тут сделать rollback, то все можно повторить с пункта 7, и мы в пункте 12 увидим те же изменения 14.2. если тут сделать commit, подписка прекратит отслеживать изменения. если же не было пункта 13, то подписка останется активной, но в следующий раз мы будем видеть только те изменения, которые произошли с момента пункта 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 19:49 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЯ так и думал, что они кусок TIP-а в блоб загоняют... там и tip, и еще туча сохраненных маркеров, причем, часть из них вроде как на будущее, или я пока не понял, зачем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 19:50 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdv1. коннект 2. стартуем снапшот 3. получаем обычные данные 4. set subs active 5. получаем изменения, с момента первого active/rollback или последнего active/commit ... про rollback понятно, вылетело. А вот кое-чего что-то не понимаю, а как определяется что запись удалена (она же физически отсутсвует)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 00:00 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81а как определяется что запись удалена (она же физически отсутсвует)? удаление записи в версионнике - это создание новой версии. Версия просто содержит признак удаления, а не измененные столбцы, как при update. В snapshot ты же видишь удаленные другими транзакциями записи во время этого снапшота? Потому что продолжают существовать удаленная "версия/запись" и версия с признаком удаления. Я ведь писал, что активация подписки замораживает сборку мусора. А модифицированный движок сервера дает возможность увидеть не только что было модифицировано или добавлено, но и что было удалено. То есть, активная подписка превращается в нечто вроде долгоживущего снапшота, со всеми вытекающими последствиями в виде накопления версий, правда, только для тех объектов и действий, которые указаны в подписке, а не для всех таблиц БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 01:36 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81, проще всего пример с insert. Если активация подписки произошла в транзакции 1000, значит для вытаскивания изменений с момента активации такой подписки достаточно выбрать все версии, у которых transaction id >=1000. Для update - то же самое. Для delete - ищем версии с delete stub >=1000, показываем предыдущую версию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 01:40 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvNikolayV81, проще всего пример с insert. Если активация подписки произошла в транзакции 1000, значит для вытаскивания изменений с момента активации такой подписки достаточно выбрать все версии, у которых transaction id >=1000. Для update - то же самое. Для delete - ищем версии с delete stub >=1000, показываем предыдущую версию. Так. если нет журнала то где он версию то хранит, надо будет перечитать, что-то не чисто тут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 10:30 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81если нет журнала то где он версию то хранит кто где версию хранит? ты это, совсем про версионность не в курсе, или путаешь что? версии и так исходно хранятся на диске и представляют собой пресловутый журнал. Зачем их еще где-то хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 10:53 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvNikolayV81если нет журнала то где он версию то хранит кто где версию хранит? ты это, совсем про версионность не в курсе, или путаешь что? версии и так исходно хранятся на диске и представляют собой пресловутый журнал. Зачем их еще где-то хранить? Но нет гарантии что не затёрты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 10:56 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81kdvпропущено... кто где версию хранит? ты это, совсем про версионность не в курсе, или путаешь что? версии и так исходно хранятся на диске и представляют собой пресловутый журнал. Зачем их еще где-то хранить? Но нет гарантии что не затёрты т.е. выходит при наличии хоть одной активной подписки, блоки с версиями болще чем её версия и 1 который меньше никогда не высвобождаются я так понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 11:00 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81Но нет гарантии что не затёрты ты подзабыл версионность. если с утра стартануть (просто стартануть, и все) транзакцию snapshot, и продержать ее до вечера, то к вечеру ни одна созданная версия, никакая, не будет "затерта". Change views - это имитация долгоживущих снапшотов, с определенными изменениями движка. 17249727 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 11:02 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
NikolayV81выходит при наличии хоть одной активной подписки, блоки с версиями болье чем её версия теперь учитывай, что подписка задается на явное перечисление таблиц, и на явные действия. Так что при активной подписке все остальные версии в данном случае хранить нет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 11:07 |
|
||
|
Из грида добраться до XSQLVAR
|
|||
|---|---|---|---|
|
#18+
kdvNikolayV81выходит при наличии хоть одной активной подписки, блоки с версиями болье чем её версия теперь учитывай, что подписка задается на явное перечисление таблиц, и на явные действия. Так что при активной подписке все остальные версии в данном случае хранить нет смысла. Прочитал полностью документацию про подписки, всё встало на свои места, мне почему-то поначалу показалось что они что-то другое реализовали. p.s. Про то как работают snapshot-ы не забыл. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 14:22 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563033]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
169ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 555ms |

| 0 / 0 |
