Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
vv40in
Member

Откуда:
Сообщений: 122
в процедуре вызываю создание файл-группы
ALTER  PROCEDURE [dbo].[p_create_billing_tableX]
@tablename as sysname
AS
begin TRANSACTION
....
	exec [p_create_file_group] @tablename, @groupext output
....
COMMIT TRANSACTION

ALTER   PROCEDURE [dbo].[p_create_file_group]
	@tablename as sysname,
	@groupext as sysname output
AS
begin 
...
	set @stmt= 'IF NOT EXISTS(SELECT 1 FROM sysfilegroups WHERE groupname='''+@fname+''')ALTER DATABASE ' + db_name() + ' ADD FILEGROUP ' + @fname
	--print '@stmt:'+@stmt
-- вывод print-а отдельно работает! : IF NOT EXISTS(SELECT 1 FROM sysfilegroups WHERE groupname='Index_CP_2011_06_03_04_00_00')ALTER DATABASE sms_v40 ADD FILEGROUP Index_CP_2011_06_03_04_00_00
	EXEC (@stmt)
---здесь вылазит ошибка 'ALTER DATABASE statement not allowed within multi-statement transaction'
....
end
при этом отдельно процедура p_create_file_group работает (как работает и вывод print-a).
она не работает только при вызове из p_create_billing_tableX.

помогите!
14 сен 11, 12:56    [11274830]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Так написано же английским по белому, что нельзя в транзакции ALTER DATABASE делать.
14 сен 11, 12:58    [11274845]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
vv40in
Member

Откуда:
Сообщений: 122
Гавриленко Сергей Алексеевич
Так написано же английским по белому, что нельзя в транзакции ALTER DATABASE делать.
блин, а что же делать? мне ж надо как-то застраховаться при создании групп (чтоб кто-то другой не начал их создавать)
14 сен 11, 13:05    [11274899]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
vv40in
Гавриленко Сергей Алексеевич
Так написано же английским по белому, что нельзя в транзакции ALTER DATABASE делать.
блин, а что же делать? мне ж надо как-то застраховаться при создании групп (чтоб кто-то другой не начал их создавать)
А у вас все подряд что ли группы делают? O_o
14 сен 11, 13:07    [11274910]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
vv40in, а у вас в произвольные моменты времени неизвестно кто на рабочей базе может создавать файлгруппы?
14 сен 11, 13:07    [11274918]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
mike909
Member

Откуда:
Сообщений: 662
vv40in,

sp_getapplock @LockOwner='Session' -- ?
SINGLE_USER -- ?
14 сен 11, 13:14    [11274962]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
vv40in
Member

Откуда:
Сообщений: 122
Гавриленко Сергей Алексеевич
vv40in
пропущено...
блин, а что же делать? мне ж надо как-то застраховаться при создании групп (чтоб кто-то другой не начал их создавать)
А у вас все подряд что ли группы делают? O_o
ну, в этом случае - да ... типа того :) ... параллельно работают назапись таблиц большое кол-во потоков, которые могут практически одновременно захотеть создать новую группу.
Группу(т.е. фактически новый/е файл/ы бд) решили создавать чтобы не шринкать бд при удалении устаревших данных. Просто взял , да удалил весь файл с этими данными. А то на шринк времени ОЧ много уходит. Или есть какие-то готовые решения?
14 сен 11, 13:14    [11274964]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
vv40in
Гавриленко Сергей Алексеевич
пропущено...
А у вас все подряд что ли группы делают? O_o
ну, в этом случае - да ... типа того :) ... параллельно работают назапись таблиц большое кол-во потоков, которые могут практически одновременно захотеть создать новую группу.
Группу(т.е. фактически новый/е файл/ы бд) решили создавать чтобы не шринкать бд при удалении устаревших данных. Просто взял , да удалил весь файл с этими данными. А то на шринк времени ОЧ много уходит. Или есть какие-то готовые решения?
Зачем шринкать?
14 сен 11, 13:18    [11274997]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
vv40in,

А партицирование Вам не подойдет?
14 сен 11, 13:22    [11275040]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
mike909
Member

Откуда:
Сообщений: 662
Кудряшка
vv40in,

А партицирование Вам не подойдет?

Судя по задаче - "нужно удалять старые данные" => подойдет => окно секционирования => та-же задача добавления/удаления файловых групп
14 сен 11, 13:33    [11275174]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
vv40in
Member

Откуда:
Сообщений: 122
Гавриленко Сергей Алексеевич
Зачем шринкать?
иногда файлы бд разрастаются настолько, что начинает ощющаться нехватка места для других... и ползователи начинают страшно ругаться..
14 сен 11, 13:41    [11275252]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
vv40in
Member

Откуда:
Сообщений: 122
mike909
Кудряшка
vv40in,

А партицирование Вам не подойдет?

Судя по задаче - "нужно удалять старые данные" => подойдет => окно секционирования => та-же задача добавления/удаления файловых групп
ого. что-то оч.сложное для чайника
14 сен 11, 13:46    [11275307]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
vv40in
Гавриленко Сергей Алексеевич
Зачем шринкать?
иногда файлы бд разрастаются настолько, что начинает ощющаться нехватка места для других... и ползователи начинают страшно ругаться..
Ну так делайте их нужного размера без auto growth, и не разрастутся.
14 сен 11, 13:47    [11275322]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
mike909
Кудряшка
vv40in,

А партицирование Вам не подойдет?

Судя по задаче - "нужно удалять старые данные" => подойдет => окно секционирования => та-же задача добавления/удаления файловых групп


чей-то?
секции можно в одной файловой группе держать и даже в одном файле.
14 сен 11, 14:46    [11275843]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
vv40in
mike909
пропущено...

Судя по задаче - "нужно удалять старые данные" => подойдет => окно секционирования => та-же задача добавления/удаления файловых групп
ого. что-то оч.сложное для чайника


Проще почитать о секционировании, чем морочить голову с созданием файловых групп. Уж поверьте...
14 сен 11, 14:53    [11275907]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
vv40in
Member

Откуда:
Сообщений: 122
Кудряшка
vv40in
пропущено...
ого. что-то оч.сложное для чайника


Проще почитать о секционировании, чем морочить голову с созданием файловых групп. Уж поверьте...
спасибо
14 сен 11, 15:20    [11276101]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
mike909
Member

Откуда:
Сообщений: 662
Кудряшка
mike909
пропущено...

Судя по задаче - "нужно удалять старые данные" => подойдет => окно секционирования => та-же задача добавления/удаления файловых групп


чей-то?
секции можно в одной файловой группе держать и даже в одном файле.

Конечно можно, сам так кое где делаю ...
Вот только это все равно не освободит ТС от задачи синхронизации работы "машины Фон Нэймана" по split/merge операциям.
Да и от слежения за размером файлов - никуда не дется ...
14 сен 11, 15:31    [11276210]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
mike909
Кудряшка
пропущено...


чей-то?
секции можно в одной файловой группе держать и даже в одном файле.

Конечно можно, сам так кое где делаю ...
Вот только это все равно не освободит ТС от задачи синхронизации работы "машины Фон Нэймана" по split/merge операциям.
Да и от слежения за размером файлов - никуда не дется ...


Ну уж извините... решения, такого чтобы вообще ничего не делать, я не знаю
14 сен 11, 16:14    [11276701]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
iljy
Member

Откуда:
Сообщений: 8711
mike909
Кудряшка
пропущено...


чей-то?
секции можно в одной файловой группе держать и даже в одном файле.

Конечно можно, сам так кое где делаю ...
Вот только это все равно не освободит ТС от задачи синхронизации работы "машины Фон Нэймана" по split/merge операциям.
Да и от слежения за размером файлов - никуда не дется ...

Ну по крайней мере ALTER TABLE можно в транзакции выполнять. Хотя конечно такие вещи надо с помощью заданий делать.
14 сен 11, 16:18    [11276747]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
iljy
mike909
пропущено...

Конечно можно, сам так кое где делаю ...
Вот только это все равно не освободит ТС от задачи синхронизации работы "машины Фон Нэймана" по split/merge операциям.
Да и от слежения за размером файлов - никуда не дется ...

Ну по крайней мере ALTER TABLE можно в транзакции выполнять. Хотя конечно такие вещи надо с помощью заданий делать.


не ALTER TABLE, а
ALTER PARTITION SCHEME ... NEXT USED
и
ALTER PARTITION FUNCTION ... SPLIT/MERGE
;)

Я кстати далеко не уверена, что если кто-то производит вставку в таблицу вышеуказанные операции не повиснут с WAIT.
Потому что ALTER PARTITION FUNCTION будет пытаться наложить Sch-M блокировку на все таблицы партицированные этой функцией.

Т.о. ИМХО, "на лету и в транзакциях" создавать и заполнять партиции будет проблематично.
15 сен 11, 05:34    [11278673]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
mike909
Member

Откуда:
Сообщений: 662
Кудряшка
iljy
пропущено...

Ну по крайней мере ALTER TABLE можно в транзакции выполнять. Хотя конечно такие вещи надо с помощью заданий делать.


не ALTER TABLE, а
ALTER PARTITION SCHEME ... NEXT USED

чей-то?
А данные покусать ?
Кудряшка
и
ALTER PARTITION FUNCTION ... SPLIT/MERGE
;)

Правильная последовательность такая:
1) ALTER PARTITION SCHEME ... NEXT USED
2) ALTER PARTITION FUNCTION ... SPLIT
3) ALTER TABLE ... SWITCH ...
4) ALTER PARTITION FUNCTION ... MERGE
Кудряшка
Я кстати далеко не уверена, что если кто-то производит вставку в таблицу вышеуказанные операции не повиснут с WAIT.
Потому что ALTER PARTITION FUNCTION будет пытаться наложить Sch-M блокировку на все таблицы партицированные этой функцией.

Т.о. ИМХО, "на лету и в транзакциях" создавать и заполнять партиции будет проблематично.

Повиснут, повиснут .... отвисятся и сделают свое черное дело ....
Я в свое время реализовал нечто подобное, не смотря на огромный ком всплывшх проблем - так, чисто по приколу...
И даже все это около дву-трех месяцев успешно работало ...
Но после всплытия очередной проблемы, я плюнул и последовал советам - сделал все через job.

PS. Кстати, пункты 1-2 некоторые, как бы это по мягче, "разработчики" делают заранее, из расчета сдали проект заказчику, вот и славненько, пусть он дальше сам ....
15 сен 11, 08:00    [11278755]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
mike909
Повиснут, повиснут .... отвисятся и сделают свое черное дело ....


Ну... как бы много пользователей, по факту, свое черное дело одновременно делать не смогут.
Если это не критично, то вполне себе решение.
15 сен 11, 09:20    [11278975]     Ответить | Цитировать Сообщить модератору
 Re: ошибка ALTER DATABASE statement not allowed within multi-statement transaction  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
mike909
Кудряшка
пропущено...
не ALTER TABLE, а
ALTER PARTITION SCHEME ... NEXT USED

чей-то?
А данные покусать ?


Посыпала голову пеплом.
15 сен 11, 09:27    [11278996]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить