![]() |
|
![]() ![]() ![]() |
|
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Какое-то противоречие И еще если у меня транзакция в открыта режиме ReadCommited, то тогда получается что Commited и CommitedRetaining одно, а если в режиме snapshot, то тогда Commited и CommitedRetaining не много разные вещи, правильно ли понял? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
TObject |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
не видит изменения других транзакций, кроме своих, пока не переоткроется НД. |
||||
|
|||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
никакого противоречия нет.
Мусор появляется не только от одной транзакции. Допустим стартанули 2 транзакции. 1. прочитала, потом добавила/обновила/удалила записи потом Commit. 2. прочитала, потом добавила/обновила/удалила записи потом CommitRetaining. Так вот мусор от первой транзакции соберется, а от 2 нет.
Так вот для клиента(при CommitRetaining) НД не закрывается и показывается весь текущий локальный кеш для записей. Новые данные поступят только после переоткрытия, сл-но если нужны правильные(новые) данные, то делать CommitRetaining + DataSet.Open нет никакого смысла, лучше CommiT + DataSet.Open. И это логично, т.е. CommitRetaining подтверждает другим транзакциям, что данные изменились. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
TObject |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
To Deniz: В предидущем посте Вы действительно написали не совсем понятно, может думали иначе.
|
||||
|
|||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
а какие изменения можно увидеть на клиенте, не переоткрыв НД? Это же как отчет, напечатал смотришь, второй раз напечатал, смотришь новые данные.
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
TObject |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
Я понимаю. Просто затупил на счет написаного в статье. Уже дошло. ![]() |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
А почему от второй не убирается мусор, ведь же CommitRetaining как бы содерджит в себе Commit, т.е. данные одназначно закомичены и откатить их нельзя, зачем тогда сервер сохраняет мусор (промежуточные изменения)? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
да, интересная тема.
это особенно интересно... и как бы его вычистить безболезненно)) |
|||
|
||||
TObject |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 13.3.2008 Репутация: 1 Всего: 1 |
Как уже было выше сказано транзакция которая подтерждена по CommitRetaining остается активной, а соответсвенно является "заинетесованной" в тех записях с которыми она работает, поэтому другие транзакции не могут чистить "мусор" пока она не завершится по Commit.
Ну во-первых в сборке "мусора" участвует каждая транзакция, в том числе и read-only. Во-вторых backup БД делает уборку "мусора". В-третьих параметр sweep interval задает значение при достижении которого произойдет sweep. |
||||
|
|||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
TObject, спасибо
|
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
делать COMMIT, а мусор сам соберется со временем, если только sweep interval > 0, если 0 мусор вообще собираться не будет
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Что значит "заинетесованной", не совсем понятно? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |