powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / DDL внутри транзакции
52 сообщений из 52, показаны все 3 страниц
DDL внутри транзакции
    #32900965
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возник вопрос, в каких базах данных кроме DB2 возможен DDL внутри транзакции? Для Oracle - понятно - всякий DDL вызовет коммит, который приведет к завершению транзакции. Sybase ASE - просто не позволяет DDL внутри транзакции. А как в остальных базах, ASA,MSSQL,POSTGRES и пр? для примера на DB2:

Код: 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.
26.
27.
28.
29.
30.
connect to test

   Database Connection Information

 Database server        = DB2/NT  8 . 2 . 0 
 SQL authorization ID   = DB2ADMIN
 Local database alias   = TEST


create table ddltest ( id int)
DB20000I  The SQL command completed successfully.

insert into ddltest values( 1 )
DB20000I  The SQL command completed successfully.

select * from ddltest

ID         
-----------
           1 

   1  record(s) selected.


rollback
DB20000I  The SQL command completed successfully.

select * from ddltest
SQL0204N  "DB2ADMIN.DDLTEST" is an undefined name.  SQLSTATE= 42704 


и так при создании любого объекта - хранимых процедур, индексов, триггеров, врем. таблиц.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32900981
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для MS SQL:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
USE pubs
GO
SET XACT_ABORT ON
BEGIN TRAN
GO
CREATE TABLE TestTable(col1 int NOT NULL)
GO

INSERT INTO TestTable VALUES( 1 )

SELECT * FROM TestTable

ROLLBACK TRAN

SELECT * FROM TestTable

и результат:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
( 1  row(s) affected)

col1        
----------- 
 1 

( 1  row(s) affected)

Server: Msg  208 , Level  16 , State  1 , Line  1 
Invalid object name 'TestTable'.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901010
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ASA любая DDL обозначается, как AUTO COMMIT, поэтому на момент ее выполнения будет завершена текущая транзакция оператором COMMIT и после ее выполнения выполнен опять же COMMIT. В данном приведенном примере после ROLLBACK будет возвращен пустой набор данных с таблицы ddltest.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901039
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
в оракле если уж так нужно DDL выполняют в автономных транзакциях, т.е. выполнить не прерывая транзакции проблемы нет, проблема в бесмыслености - во первых очень дорого, а во вторых всех юзеров в очередь не поставишь.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901043
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo!в оракле если уж так нужно DDL выполняют в автономных транзакциях, т.е. выполнить не прерывая транзакции проблемы нет, проблема в бесмыслености - во первых очень дорого, а во вторых всех юзеров в очередь не поставишь.
OK! Запомним, дома попробуем...)
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901050
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я честно говоря даже не представляю себе, зачем в рабочем порядке, да еще и внутри транзакции выполнять DDL. IMHO это должен делать проектировщик БД или администратор, которые представляют себе, зачем это делают.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901056
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто прямо сейчас на глазах возникла ситуация в ASE, когда вызвали хранимку внутри транзакции, а она как на грех - создает временную таблицу - и полный отлуп. :((
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901141
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Минуточку, времянки это совсем другое дело и в той же ASA создание локальной времянки никоим образом не влияет на транзакцию, блокировки в БД и прочее. Вроде как речь шла про DDL над постоянными, а не временными обьектами БД ?
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901175
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри на mysql сайте feature comparisons
вот тут , выдели какие интересно базы и там параметр rollback metadata
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901249
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХренПосмотри на mysql сайте feature comparisons
вот тут , выдели какие интересно базы и там параметр rollback metadata

Мда... вот посмотрят люди такие ссылки, и примут неверное решение...
Инфа явно устаревшая.


2 ASCRUS

Да, речь идет как о постоянных объектах, так и о временных.
В DB2 абсолютно без разницы - можно в одной транзакции понасоздавать кучу объектов влить в них инфу а потом бухнуть коммит или роллбак или откатиться к savepoint и т.д.

А с автономными транзакциями в Оракл поразбираюсь на выходных, возможен ли такой же вариант. Боюсь что не прокатит.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901264
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSIMHO это должен делать проектировщик БД или администратор, которые представляют себе, зачем это делают.

а если это именно проектировщик БД или администратор написал такой скрипт, на создание пары таблиц и изменении пары вью?! И этот скрипт должен выполняться по определенному графику и должен или выполниться целиком или никак? Вы не допускаете такой возможности?

ЗЫ. Вот мне интересно, почему тут у некоторых участников, если их любимая СУБД не поддерживает какой-то фичи, то эта фича автоматически превращается в "бесполезную".
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901302
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
2pkarklin

такие администраторы/разрваботчики живут слишком мало и по понятным причинам не воспроизводят потомства, чтоб кто-то успевал озаботится такими проблемами :)
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901333
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo!2pkarklin

такие администраторы/разрваботчики живут слишком мало и по понятным причинам не воспроизводят потомства, чтоб кто-то успевал озаботится такими проблемами :)

А поумнее что-нибудь и в тему топика слабо?! ;)
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901388
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin ASCRUSIMHO это должен делать проектировщик БД или администратор, которые представляют себе, зачем это делают.

а если это именно проектировщик БД или администратор написал такой скрипт, на создание пары таблиц и изменении пары вью?! И этот скрипт должен выполняться по определенному графику и должен или выполниться целиком или никак? Вы не допускаете такой возможности?

ЗЫ. Вот мне интересно, почему тут у некоторых участников, если их любимая СУБД не поддерживает какой-то фичи, то эта фича автоматически превращается в "бесполезную".
Изменять структуру БД по расписанию графика или через клиентское приложение ? Ну, ну - Вам надо серьезно посмотреть в сторону ООСУБД, говорят там это прекрасно работает без проблем. А в остальном полностью присоединяюсь к высказываниям предыдущего сообщения "Yo!".
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901416
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS pkarklin ASCRUSIMHO это должен делать проектировщик БД или администратор, которые представляют себе, зачем это делают.

а если это именно проектировщик БД или администратор написал такой скрипт, на создание пары таблиц и изменении пары вью?! И этот скрипт должен выполняться по определенному графику и должен или выполниться целиком или никак? Вы не допускаете такой возможности?

ЗЫ. Вот мне интересно, почему тут у некоторых участников, если их любимая СУБД не поддерживает какой-то фичи, то эта фича автоматически превращается в "бесполезную".
Изменять структуру БД по расписанию графика или через клиентское приложение ? Ну, ну - Вам надо серьезно посмотреть в сторону ООСУБД, говорят там это прекрасно работает без проблем. А в остальном полностью присоединяюсь к высказываниям предыдущего сообщения "Yo!".

Интересно слушать Ваши высказывания, однако. И как всегда - одни эмоции, а аргументации никакой.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901450
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
>Интересно слушать Ваши высказывания, однако. И как всегда - одни эмоции, а аргументации никакой.

вы действительно не понимаете ? тогда вам стоит задуматся о сохранности ваших яиц :)
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901480
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinИнтересно слушать Ваши высказывания, однако. И как всегда - одни эмоции, а аргументации никакой.
Интересно - и какую же аргументацию я должен Вам отписать ... пособие о том, что такое РСУБД и как правильно проектировать БД и почему нельзя использовать DDL по ходу работы боевой базы ? Вы правда так проектируете БД или просто прикалываетесь ? Может поделитесь опытом, в каких ситуациях может понадобиться динамическое создание и изменения таблиц, индексов, и представлений ? Я конечно понимаю, что полноценных EVENT-ов в MSSQL нет и динамический SQL нужно использовать осторожно и вдумчиво, но чтобы то, чего не хватает в MSSQL на DDL разруливать ... вот никак не въеду, надо править в консерватории что то наверное, осталось только выяснить в чьей :)
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901481
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo!>Интересно слушать Ваши высказывания, однако. И как всегда - одни эмоции, а аргументации никакой.

вы действительно не понимаете ? тогда вам стоит задуматся о сохранности ваших яиц :)

Ну так объясните, мне тупому, не заботящемуся о сохранности своих яиц, каким образом выполнения инструкции DDL в транзакции может повлиять на систему. Не забывая, что права на эти инструкции принадлежат очень узкому кругу лиц (если в контексте сиквела, то это члены серверной роли sysadmin и члены ролей бд db_owner и ddl_admin) и простых смертных в эти роли не включают. Тоже самое касается и джобов, автоматизирующих административные задачи. И специально для ASCRUS. позвольте Вас спросить, Вы, как администратор Вашего сервера разве не из клиентского приложения инструкции DDL на сервер отправляете? Ведь утилиты, типа QA в SQL Server - это всего-навсего - клиентские приложения.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901485
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Граждане программисты! относитесь с уважение друг к другу!
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901488
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSМожет поделитесь опытом, в каких ситуациях может понадобиться динамическое создание и изменения таблиц, индексов, и представлений ?

Секционированные представления.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901540
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
вообщето это вопрос на уровне детского сада.
1. оптимайзер промышленых субд опираются на статистику.
2. как вы представляете дропанье/создавание пусть и по расписанию таблиц с милионами запией ? в этот момент что происходит с юзерами их просят уйти ?
3. кто такое а главное как будет супортить ?
4. репликация.
5. кластер - mssql например не умеет ddl на ноды передавать.
6. в доках по ораклу четко написано что изменение схемы боего сервера имеет права вносить только админ в экстренном случае заполняя немеряное кол-во бумажек чтоб объяснить такое святотатство.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901553
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin ASCRUSМожет поделитесь опытом, в каких ситуациях может понадобиться динамическое создание и изменения таблиц, индексов, и представлений ?

Секционированные представления.
Я знаю что такое секционированные представления. Мне интересует обоснование применения DDL внутри транзакций с возможностью отката, Вы же вроде это называете "фичей" ?
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901573
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo!1. оптимайзер промышленых субд опираются на статистику.

Вот спасибо, просвятили, а то я и не знал.

Yo!]2. как вы представляете дропанье/создавание пусть и по расписанию таблиц с милионами запией ? в этот момент что происходит с юзерами их просят уйти ?

А где вы прочитали, что я что-то собирался дропать таблицу с миллионом записей??? Что-то Вы сами начинаете Выдумывать ткие примеры использования DDL, которые действительно ни один нормальный админ не допустит. А мне надо просто создать табличку и малость альтернуть представление. Юзерам тут никто не мешает работать никоим образом.

Yo!3. кто такое а главное как будет супортить ?

Какое-такое?! И в чем тогда по Вашему занимается саппорт? И, простите, у Вас никогда не было ситуации, когда приходилось накатывать DDL скрипты на базу?

Yo!4. репликация.
5. кластер - mssql например не умеет ddl на ноды передавать.

Опять Вы пытаетесь создать ситуацию, в которой админом было бы принято другое решение! Как это коррелируется с моим примером про двет таблички? там про репликацию и кластер не говрилось!

Yo!6. в доках по ораклу четко написано что изменение схемы боего сервера имеет права вносить только админ в экстренном случае заполняя немеряное кол-во бумажек чтоб объяснить такое святотатство.

Понятно, что дворнику Пупкину этого не доверят. Но у меня как раз экстренный случай и бумажки я все подписал. Да и не надо переигрывать, на счет святотатства в плане изменения схемы боего сервера.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901582
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinА мне надо просто создать табличку и малость альтернуть представление.
А зачем в транзакции? Да еще в транзакции, где всякий DML используется?
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901594
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хотел вмешиваться в вашу дискуссию, но обратила внимание фраза

6. в доках по ораклу четко написано что изменение схемы боего сервера имеет права вносить только админ в экстренном случае заполняя немеряное кол-во бумажек чтоб объяснить такое святотатство.

Вообще-то любой пользователь, имеющий соответствующие привилегии (а они прописаны в часто предоставляемых ролях CONNECT, RESOURCE) может делать в СВОЕЙ схеме все что угодно
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901608
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЯ знаю что такое секционированные представления. Мне интересует обоснование применения DDL внутри транзакций с возможностью отката, Вы же вроде это называете "фичей" ?

И так. Имеем секционированное представление, где данные в базовые таблицы раскладываются по месяцам. В последний день месяца мне надо создать новую таблицу со всеми необходимыми аттрибутами и модифицировать представление. Вы прекрасно понимаете, что это будет ряд DDL инструкций. Так почему бы мне не включить эти инструкции в транзакцию? Ибо если (не дай бог) чей-то збойнет между созданием таблицы и изменением представления, то в принципе получится несоглассованость с тем, что хотелось получить. А потом, почему бы в джоб этот скриптик не загнать?

ЗЫ. Я изначально не хотел, чтоб из этого топика выросла такая ругань, но меня вынуждают высказывания типа "проблема в бесмыслености" от тех, кто не иммет такой возможности. Раз звезды зажигают, значит это кому-то нужно. И возможности завертывания DDL в транзакцию можно найти практическое применение.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901611
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный pkarklinА мне надо просто создать табличку и малость альтернуть представление.
А зачем в транзакции? Да еще в транзакции, где всякий DML используется?

Если Вы про пример автора топика, то может быть практического смысла в этом и нет.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901631
andsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох ПозорныйА зачем в транзакции? Да еще в транзакции, где всякий DML используется?
Мне ни разу не требовалось запускать скрипты с DDL-инструкциями по расписанию. Но вот возможность использовать DDL и DML инструкции в одной транзакции часто была необходима. В транзакции - для того чтобы если возникли непредвиденные проблемы откатить все изменения, а не разбираться что прошло а что нет.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901669
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
автор
Вообще-то любой пользователь, имеющий соответствующие привилегии (а они прописаны в часто предоставляемых ролях CONNECT, RESOURCE) может делать в СВОЕЙ схеме все что угодно


речь идет о боевом сервере к которому доступ дается из отдельной комнаты и толь с санкции CIO и естественно не по сети.

автор
И так. Имеем секционированное представление, где данные в базовые таблицы раскладываются по месяцам. В последний день месяца мне надо создать новую таблицу со всеми необходимыми аттрибутами и модифицировать представление. Вы прекрасно понимаете, что это будет ряд DDL инструкций. Так почему бы мне не включить эти инструкции в транзакцию? Ибо если (не дай бог) чей-то збойнет между созданием таблицы и изменением представления, то в принципе получится несоглассованость с тем, что хотелось получить. А потом, почему бы в джоб этот скриптик не загнать?


не нужно слабость чего-то sql диалекта сваливать на здоровую голову, чтоб создать итоговые таблицы ddl никому не нужны.

автор
Но вот возможность использовать DDL и DML инструкции в одной транзакции часто была необходима.


а можно в кратце описать что за задача и что за необходимость ?
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901704
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andsmМне ни разу не требовалось запускать скрипты с DDL-инструкциями по расписанию. Но вот возможность использовать DDL и DML инструкции в одной транзакции часто была необходима. В транзакции - для того чтобы если возникли непредвиденные проблемы откатить все изменения, а не разбираться что прошло а что нет.
Есть такая славная и удобная штука - исключения называются. Для того и созданы, чтобы обрабатывать ошибки. А транзакции вообще то не для того сделаны, чтобы DDL откатывать.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901720
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo!не нужно слабость чего-то sql диалекта сваливать на здоровую голову, чтоб создать итоговые таблицы ddl никому не нужны.

Еще раз. если Вы соблаговолите еще раз перечитать топик (и не только этот), то может быть увидите, что "с больной головы на здоровую" я не сваливал. а просто пытался объяснить, что возможность завернуть DDL инструкции в транзакцию не такая уж и бесполезная фича. А вот Ваши эмоции явно бьют через край.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901729
andsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo!а можно в кратце описать что за задача и что за необходимость ?
Создаю таблицу, в том же скрипте заполняю ее нужными данными, в том числе переносом из других таблиц. Меняю другие таблицы - например, дропаю там поле из которого на предыдущем шаге перенес данные в другое место. Повторяю этот процесс еще несколько раз, с другими таблицами.
Представим что это делалось бы не транзакции, и где-то что-то упало. Что получится? Часть таблиц изменена, часть нет. Где-то данные перенесены, где-то нет. Новая версия программы работать не может, и старая версия тоже не работает.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901735
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если рассматривать структуру базы данных как проект, который подвержен частым изменениям (в процессе сопровождения, разработки) когда база выходит в тираж и у разных заказчиков разные версии, очевидно что согласование нужно делать скриптами, обрабатывать ошибки и т.д. В этом случае очень полезно иметь возможность откатить транзакцию с ДДЛ в случае неудачи, чтобы не зависнуть между "переходами" с одной версии на другую. Никто не утверждает, что без этого жить невозможно. Просто - дополнительная удобная фича.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901748
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЕсть такая славная и удобная штука - исключения называются.

Интересно, что проще:

Код: plaintext
1.
2.
3.
4.
5.
try
  CREATE TABLE ...
  ALTER VIEW..
catch
  DROP TABLE
end

или

Код: plaintext
1.
2.
3.
4.
SET XACT_ABORT ON
BEGIN TRAN
  CREATE TABLE ...
  ALTER VIEW..
COMMIT TRAN 


ASCRUSА транзакции вообще то не для того сделаны, чтобы DDL откатывать.

Хм... по определению Транзакция - последовательность операций, выполняемых как единый логический блок, обладающий 4 свойствами ACID(Atomicity, Consistency, Isolation и Durability). и я не вижу никаких противоречий при включении в тот блок DDL инструкций. IMHO.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901759
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
ok, задачу придумали - обновление софта. но надеюсб мы договорились что за изсенения в боевом режиме нада вырывать яйца ?

обновления делается скриптами - например пачсеты для оракла, они модифицируют словарь субд. сначало идут DDL потом DML. если вырубается DML посередине ... чтож выясняем почему тут вариантов особо нет проблема может быть только в инстансе или просто место кончилось. чиним запускаем снова где-то видим варнинге где-то нет, но ничего страшного от сбоя посередине не будет. этой технологии десятки лет.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32901975
andsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo!сначало идут DDL потом DML
Это часто неудобно. Часто нужно выполнить сначала DDL, затем DML, потом DDL и так несколько раз. Понятно что можно это переписать чтобы сначала был только DDL и лишь затем только DML, но это требует дополнительной работы.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32902064
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из-за чего спор, непонятно.

В административной работе, при установке каких либо обновлений, изменений схемы данных с сохранением (или модификацией) данных "умение" сервера обрабатываеть DDL внутри транзакции упрощает жизнь.

На боевых серверах в штатных ситуациях не приходится делать таких извращений, по крайней мере мне.

Но, имхо, наличие такой возможности - это неплохо.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32902094
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
andsm
Это часто неудобно. Часто нужно выполнить сначала DDL, затем DML, потом DDL и так несколько раз. Понятно что можно это переписать чтобы сначала был только DDL и лишь затем только DML, но это требует дополнительной работы.

у меня не тиражная система поэтому чесно говоря в жизни не писал таких скриптов и мне сложно представить что это за неудобство ... но OEBS пока справляется с этими неудобствами :)
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32902203
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм. не затерялось бы в глубинах флейма, но на всякий случай для 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.
Добро пожаловать в psql  7 . 4 . 5  - Интерактивный Терминал PostgreSQL.

Наберите:  \copyright для условий распространения
           \h для подсказки по SQL командам
           \? для подсказки по внутренним slash-командам (\команда)
           \g или ";" для завершения и выполнения запроса
           \q для выхода

test=# begin;
BEGIN
test=# create table ddltest(id integer);
CREATE TABLE
test=# insert into ddltest values ( 1 );
INSERT  151159   1 
test=# select * from ddltest;
 id
----
   1 
( 1  запись)

test=# rollback;
ROLLBACK
test=# select * from ddltest;
ERROR:  relation "ddltest" does not exist
test=#
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32903474
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sad Spirit OK! принято!...
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907014
just_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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> Кстати кто юзает Реп. Сервер, тот знает что для реплики именно вызовов (не результатов работы) процедур, чего-то там создающие, без этой опции не обойтись.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907161
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы правда так проектируете БД или просто прикалываетесь ? Может поделитесь опытом, в каких ситуациях может понадобиться динамическое создание и изменения таблиц, индексов, и представлений ?

Процедуры преобразования данных для их загрузки в хранилище данных.
Ничего необычного. Просто, насколько я понимаю, все тут занимаются транзакционными системами, в которых, наверное, не очень желательно изменять на ходу структуру таблиц. При загрузке хранилища данных динамически создаётся большое количество временных и не очень временных таблиц, обеспечение целостности при этом тоже никто не отменял. Так что, такое свойство СУБД имеет достаточно оснований на существование.

По поводу динамического пересоздания вьюх - та же тема. Хранилища данных. Допустим, Вам нужно загрузить в здоровенную таблицу данные. Процесс занимает, скажем, 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
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907177
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
авторПо поводу динамического пересоздания вьюх - та же тема. Хранилища данных. Допустим, Вам нужно загрузить в здоровенную таблицу данные. Процесс занимает, скажем, 20 минут. Вы хотите, чтобы в это время польователи имели возможность выполнять отчёты.

сурово :) вот только в оракле опять же так не нужно извращатся чтоб получить консистентный отчет ...
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907187
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Yo
Я думаю, что задача немного в другом. Не "обеспечить выполнение отчетов по вливаемым данным", а "обеспечить выполнение отчетов по старым данным, пока добавляются новые данные". По крайней мере такая ситуация представима. Кстати, у Константина на сайте есть переведенные советы Ральфа Кимбала, и там в частности обсуждается вопрос загрузки информации в хранилище. А оригинал здесь

2Константин Лисянский
Константин, приведенной цитаты очевидно, что при наличии DDL выражения, оно должно быть последним. А если их несколько? Разрешена ли такая ситуация?
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907200
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
2AAron

у версионного механизма писатели не мешают читателям, читатели не мешают писателям, поэтому получить читателю консистентный отчет ничто помешать не может, только затянуть конкуренция за cpu&i/o, но тут опять же тривиально решаем задачу приоритетами.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907450
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yo
я знаю, как работает версионный механизм. спасибо :) Речь была не об этом.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907529
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Just Me
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
use data
go

select @@version
go

begin tran 
go

create table test (id int)
go

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Adaptive Server Enterprise/ 12 . 5 . 0 . 3 /EBF  10980  ESD# 1 /P/Linux Intel/Linux  2 . 4 . 18 - 18 . 7 .xsmp i686/rel12503/ 1919 / 32 -bit/OPT/Mon Mar  24   20 : 49 : 12   2003      
( 1  row affected)

Server Message:  Number   2762 , Severity   16 
Server 'osago', Line  1 :
The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'data' database. 
                                                                                                           
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907651
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907669
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин Лисянский Может поделитесь опытом, в каких ситуациях может понадобиться динамическое создание и изменения таблиц, индексов, и представлений ?
Процедуры преобразования данных для их загрузки в хранилище данных.
Хм. Честно говоря, пока что ощутил такую потребность только на уровне создания партиций. Если рассмотреть Ваш пример с загрузкой на ходу - это будет ALTER TABLE...EXCHANGE PARTITION. Но ключевой момент в этом случае - вряд ли есть причины "не коммитить" этот DDL.
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907674
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял, принципе в Teradata ситуация такая же как в Оракле. DDL наверно неявно завершает транзакцию коммитом?
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907699
just_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gardenman2 Just Me
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
use data
go

select @@version
go

begin tran 
go

create table test (id int)
go

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Adaptive Server Enterprise/ 12 . 5 . 0 . 3 /EBF  10980  ESD# 1 /P/Linux Intel/Linux  2 . 4 . 18 - 18 . 7 .xsmp i686/rel12503/ 1919 / 32 -bit/OPT/Mon Mar  24   20 : 49 : 12   2003      
( 1  row affected)

Server Message:  Number   2762 , Severity   16 
Server 'osago', Line  1 :
The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'data' database. 
                                                                                                           



use master
go
sp_dboption test1,"ddl in tran",true
go
checkpoint
go
use test1
go
begin tran
create table test_ddl (id int)
insert into test_ddl values(1)
select * from test_ddl
rollback
select * from test_ddl
go


use master
go
sp_dboption db_name,"ddl in tran",true
go
checkpoint
go
use db_name
go
begin tran
create table test_ddl (id int)
insert into test_ddl values(1)
select * from test_ddl
rollback
select * from test_ddl
go

Результат:
1

Line 6:
Object 'test_ddl' cannot be found.

P.S. Я уже не говорю про доку, неужели прочитать хотя бы то, что написано здесь нельзя?
...
Рейтинг: 0 / 0
DDL внутри транзакции
    #32907764
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)) Ок!
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / DDL внутри транзакции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]