Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
ASCRUSЯ знаю что такое секционированные представления. Мне интересует обоснование применения DDL внутри транзакций с возможностью отката, Вы же вроде это называете "фичей" ? И так. Имеем секционированное представление, где данные в базовые таблицы раскладываются по месяцам. В последний день месяца мне надо создать новую таблицу со всеми необходимыми аттрибутами и модифицировать представление. Вы прекрасно понимаете, что это будет ряд DDL инструкций. Так почему бы мне не включить эти инструкции в транзакцию? Ибо если (не дай бог) чей-то збойнет между созданием таблицы и изменением представления, то в принципе получится несоглассованость с тем, что хотелось получить. А потом, почему бы в джоб этот скриптик не загнать? ЗЫ. Я изначально не хотел, чтоб из этого топика выросла такая ругань, но меня вынуждают высказывания типа "проблема в бесмыслености" от тех, кто не иммет такой возможности. Раз звезды зажигают, значит это кому-то нужно. И возможности завертывания DDL в транзакцию можно найти практическое применение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:13 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
Лох Позорный pkarklinА мне надо просто создать табличку и малость альтернуть представление. А зачем в транзакции? Да еще в транзакции, где всякий DML используется? Если Вы про пример автора топика, то может быть практического смысла в этом и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:14 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
Лох ПозорныйА зачем в транзакции? Да еще в транзакции, где всякий DML используется? Мне ни разу не требовалось запускать скрипты с DDL-инструкциями по расписанию. Но вот возможность использовать DDL и DML инструкции в одной транзакции часто была необходима. В транзакции - для того чтобы если возникли непредвиденные проблемы откатить все изменения, а не разбираться что прошло а что нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:18 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
автор Вообще-то любой пользователь, имеющий соответствующие привилегии (а они прописаны в часто предоставляемых ролях CONNECT, RESOURCE) может делать в СВОЕЙ схеме все что угодно речь идет о боевом сервере к которому доступ дается из отдельной комнаты и толь с санкции CIO и естественно не по сети. автор И так. Имеем секционированное представление, где данные в базовые таблицы раскладываются по месяцам. В последний день месяца мне надо создать новую таблицу со всеми необходимыми аттрибутами и модифицировать представление. Вы прекрасно понимаете, что это будет ряд DDL инструкций. Так почему бы мне не включить эти инструкции в транзакцию? Ибо если (не дай бог) чей-то збойнет между созданием таблицы и изменением представления, то в принципе получится несоглассованость с тем, что хотелось получить. А потом, почему бы в джоб этот скриптик не загнать? не нужно слабость чего-то sql диалекта сваливать на здоровую голову, чтоб создать итоговые таблицы ddl никому не нужны. автор Но вот возможность использовать DDL и DML инструкции в одной транзакции часто была необходима. а можно в кратце описать что за задача и что за необходимость ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:30 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
andsmМне ни разу не требовалось запускать скрипты с DDL-инструкциями по расписанию. Но вот возможность использовать DDL и DML инструкции в одной транзакции часто была необходима. В транзакции - для того чтобы если возникли непредвиденные проблемы откатить все изменения, а не разбираться что прошло а что нет. Есть такая славная и удобная штука - исключения называются. Для того и созданы, чтобы обрабатывать ошибки. А транзакции вообще то не для того сделаны, чтобы DDL откатывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:40 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
Yo!не нужно слабость чего-то sql диалекта сваливать на здоровую голову, чтоб создать итоговые таблицы ddl никому не нужны. Еще раз. если Вы соблаговолите еще раз перечитать топик (и не только этот), то может быть увидите, что "с больной головы на здоровую" я не сваливал. а просто пытался объяснить, что возможность завернуть DDL инструкции в транзакцию не такая уж и бесполезная фича. А вот Ваши эмоции явно бьют через край. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:42 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
Yo!а можно в кратце описать что за задача и что за необходимость ? Создаю таблицу, в том же скрипте заполняю ее нужными данными, в том числе переносом из других таблиц. Меняю другие таблицы - например, дропаю там поле из которого на предыдущем шаге перенес данные в другое место. Повторяю этот процесс еще несколько раз, с другими таблицами. Представим что это делалось бы не транзакции, и где-то что-то упало. Что получится? Часть таблиц изменена, часть нет. Где-то данные перенесены, где-то нет. Новая версия программы работать не может, и старая версия тоже не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:44 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
если рассматривать структуру базы данных как проект, который подвержен частым изменениям (в процессе сопровождения, разработки) когда база выходит в тираж и у разных заказчиков разные версии, очевидно что согласование нужно делать скриптами, обрабатывать ошибки и т.д. В этом случае очень полезно иметь возможность откатить транзакцию с ДДЛ в случае неудачи, чтобы не зависнуть между "переходами" с одной версии на другую. Никто не утверждает, что без этого жить невозможно. Просто - дополнительная удобная фича. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:46 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
ASCRUSЕсть такая славная и удобная штука - исключения называются. Интересно, что проще: Код: plaintext 1. 2. 3. 4. 5. или Код: plaintext 1. 2. 3. 4. ASCRUSА транзакции вообще то не для того сделаны, чтобы DDL откатывать. Хм... по определению Транзакция - последовательность операций, выполняемых как единый логический блок, обладающий 4 свойствами ACID(Atomicity, Consistency, Isolation и Durability). и я не вижу никаких противоречий при включении в тот блок DDL инструкций. IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:51 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
ok, задачу придумали - обновление софта. но надеюсб мы договорились что за изсенения в боевом режиме нада вырывать яйца ? обновления делается скриптами - например пачсеты для оракла, они модифицируют словарь субд. сначало идут DDL потом DML. если вырубается DML посередине ... чтож выясняем почему тут вариантов особо нет проблема может быть только в инстансе или просто место кончилось. чиним запускаем снова где-то видим варнинге где-то нет, но ничего страшного от сбоя посередине не будет. этой технологии десятки лет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 15:54 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
Yo!сначало идут DDL потом DML Это часто неудобно. Часто нужно выполнить сначала DDL, затем DML, потом DDL и так несколько раз. Понятно что можно это переписать чтобы сначала был только DDL и лишь затем только DML, но это требует дополнительной работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 17:08 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
Из-за чего спор, непонятно. В административной работе, при установке каких либо обновлений, изменений схемы данных с сохранением (или модификацией) данных "умение" сервера обрабатываеть DDL внутри транзакции упрощает жизнь. На боевых серверах в штатных ситуациях не приходится делать таких извращений, по крайней мере мне. Но, имхо, наличие такой возможности - это неплохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 17:43 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
andsm Это часто неудобно. Часто нужно выполнить сначала DDL, затем DML, потом DDL и так несколько раз. Понятно что можно это переписать чтобы сначала был только DDL и лишь затем только DML, но это требует дополнительной работы. у меня не тиражная система поэтому чесно говоря в жизни не писал таких скриптов и мне сложно представить что это за неудобство ... но OEBS пока справляется с этими неудобствами :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 17:55 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
хм. не затерялось бы в глубинах флейма, но на всякий случай для PostgreSQL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2005, 18:57 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
2 Sad Spirit OK! принято!... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 10:12 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
gardenmanВозник вопрос, в каких базах данных кроме DB2 возможен DDL внутри транзакции? Для Oracle - понятно - всякий DDL вызовет коммит, который приведет к завершению транзакции. Sybase ASE - просто не позволяет DDL внутри транзакции. А как в остальных базах, ASA,MSSQL,POSTGRES и пр? для примера на DB2: BOL по ASE: ddl in tran Setting ddl in tran to true allows these commands to be used inside a user-defined transaction: • alter table (clauses other than partition and unpartition are allowed) • create default • create index • create procedure • create rule • create schema • create table • create trigger • create view • drop default • drop index • drop procedure • drop rule • drop table • drop trigger • drop view • grant • revoke P.S> Кстати кто юзает Реп. Сервер, тот знает что для реплики именно вызовов (не результатов работы) процедур, чего-то там создающие, без этой опции не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 21:00 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
Вы правда так проектируете БД или просто прикалываетесь ? Может поделитесь опытом, в каких ситуациях может понадобиться динамическое создание и изменения таблиц, индексов, и представлений ? Процедуры преобразования данных для их загрузки в хранилище данных. Ничего необычного. Просто, насколько я понимаю, все тут занимаются транзакционными системами, в которых, наверное, не очень желательно изменять на ходу структуру таблиц. При загрузке хранилища данных динамически создаётся большое количество временных и не очень временных таблиц, обеспечение целостности при этом тоже никто не отменял. Так что, такое свойство СУБД имеет достаточно оснований на существование. По поводу динамического пересоздания вьюх - та же тема. Хранилища данных. Допустим, Вам нужно загрузить в здоровенную таблицу данные. Процесс занимает, скажем, 20 минут. Вы хотите, чтобы в это время польователи имели возможность выполнять отчёты. Один из приёмов - создаётся новая таблица, по структуре аналогичная той, в которую льются данные. Поверх старой создаётся вьюха, к ней пользователи делают запросы пока данные заливаются в новую таблицу (все данные из старой плюс новая порция) как только данные залились в новую таблицу вьюха перекидывается на неё в этой же транзакции. Старая таблица удаляется. Получаем возможность выполнения запросов пока в таблицу льются данные. Соответственно, если данные не залились нормально, то и вьюху не надо пересоздавать чтобы целостность не нарушить. С индексами, наверное, не так всё, поскольку их наличие или отсутствие не влияет на целостность, а только на производительность. Хотя, не исключаю, что и для индексов можно найти пример. Что касается поддержки этого в СУБД Teradata, то операция DDL должна быть последней в транзакции: Teradata Database SQL Reference. Statement and Transaction ProcessingIf an explicit transaction contains a DDL statement, then it must be the last statement in the transaction. The system enforces the rule that a DDL (Data Definition Language) statement must be the last statement of a transaction. С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 23:52 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
авторПо поводу динамического пересоздания вьюх - та же тема. Хранилища данных. Допустим, Вам нужно загрузить в здоровенную таблицу данные. Процесс занимает, скажем, 20 минут. Вы хотите, чтобы в это время польователи имели возможность выполнять отчёты. сурово :) вот только в оракле опять же так не нужно извращатся чтоб получить консистентный отчет ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 00:18 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
2Yo Я думаю, что задача немного в другом. Не "обеспечить выполнение отчетов по вливаемым данным", а "обеспечить выполнение отчетов по старым данным, пока добавляются новые данные". По крайней мере такая ситуация представима. Кстати, у Константина на сайте есть переведенные советы Ральфа Кимбала, и там в частности обсуждается вопрос загрузки информации в хранилище. А оригинал здесь 2Константин Лисянский Константин, приведенной цитаты очевидно, что при наличии DDL выражения, оно должно быть последним. А если их несколько? Разрешена ли такая ситуация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 00:35 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
2AAron у версионного механизма писатели не мешают читателям, читатели не мешают писателям, поэтому получить читателю консистентный отчет ничто помешать не может, только затянуть конкуренция за cpu&i/o, но тут опять же тривиально решаем задачу приоритетами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 01:18 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
2 Yo я знаю, как работает версионный механизм. спасибо :) Речь была не об этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 09:52 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
2 Just Me Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 10:25 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
AAronЯ думаю, что задача немного в другом. Не "обеспечить выполнение отчетов по вливаемым данным", а "обеспечить выполнение отчетов по старым данным, пока добавляются новые данные". По крайней мере такая ситуация представима. Ну, не только представима, но и вполне реально встречалась в моей практике. AAronКонстантин, приведенной цитаты очевидно, что при наличии DDL выражения, оно должно быть последним. А если их несколько? Разрешена ли такая ситуация? Боюсь, что нет: Teradata Database SQL Reference. Data Definition StatementsRules for • A DDL statement cannot be combined with other statements as part of a multistatement request. • A DDL statement can only be included in an explicit transaction (one or more requests bracketed by BEGIN/END TRANSACTION statements) if it is one of the following: • the only statement in the transaction, or • structured as a single-statement request that appears as the last request in the transaction. • In ANSI session mode, a DDL statement can only be included in a transaction when it is the last single-statement request before the COMMIT statement. С уважением, Константин Лисянский http://lissianski.narod.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 11:06 |
|
||
|
DDL внутри транзакции
|
|||
|---|---|---|---|
|
#18+
Константин Лисянский Может поделитесь опытом, в каких ситуациях может понадобиться динамическое создание и изменения таблиц, индексов, и представлений ? Процедуры преобразования данных для их загрузки в хранилище данных. Хм. Честно говоря, пока что ощутил такую потребность только на уровне создания партиций. Если рассмотреть Ваш пример с загрузкой на ходу - это будет ALTER TABLE...EXCHANGE PARTITION. Но ключевой момент в этом случае - вряд ли есть причины "не коммитить" этот DDL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=32907529&tid=1553948]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 170ms |
| total: | 307ms |

| 0 / 0 |
