Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
Знаю, вопрос не новый, но вот никак не найду на него ответа. Необходимо обновить все данные в базе и для этого приходиться скриптовать, ронять и затем заново создавать - занятие более чем интелектуальное Подскажите какие флаги надо использовать чтобы избежать вышеописанной процедуры. Заранее благодарен, Александр ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2002, 16:22 |
|
||
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
Отключение триггеров: см синтакс ALTER TABLE , OBJECTPROPERTY \nALTER TABLE table ... ...| {ENABLE | DISABLE} TRIGGER {ALL | trigger_name[,...n]} Отключение ограничений: см синтакс ALTER TABLE , DROP INDEX, CREATE INDEX \nALTER TABLE table ... | DROP { [CONSTRAINT] constraint_name | COLUMN column Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2002, 16:44 |
|
||
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
Во-во, именно этого "геморроя" и хочется избежать - в базе более 7000 (!) таблиц, половина из которых жестко ссылается друг на друга (некоторые аж в три этажа). Ведь должно же это как-то отключаться проще. Александр ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2002, 17:04 |
|
||
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
Ух ты... 7000 таблиц. Можно узнать откуда такая база? Насколько я знаю, если в базе более 100 таблиц (view не в счет), то она становиться неуправляемой. Правда вопрос спорный. И насчет ответа. Прийдется все-таки курсор делать, бегающий по всем таблицам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2002, 18:08 |
|
||
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
Все триггера можно отключить командой sp_MSforeachtable @command1="ALTER TABLE ? DISABLE TRIGGER ALL" , а включить sp_MSforeachtable @command1="ALTER TABLE ? ENABLE TRIGGER ALL" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2002, 18:57 |
|
||
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
Насколько я знаю, если в базе более 100 таблиц (view не в счет), то она становиться неуправляемой ---------------------------- SergCat: Это Вы SAP'у расскажите - у них в R/3 больше 11000 таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2002, 19:30 |
|
||
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
Ну погорячился. Прошу прощения. IMHO по наличию большого количества таблиц не стоит судить о "крутости" базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2002, 19:55 |
|
||
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
--Предлагаю воспользоваться процедурами ВКЛЮЧЕНИЯ/ОТКЛЮЧЕНИЯ триггеров, внешних ключей --и ограничений на значения. Если есть вопросы - dalw@cis-kiev.com if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_DisEnCc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[SP_DisEnCc] GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_DisEnFk]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[SP_DisEnFk] GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_DisEnTr]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[SP_DisEnTr] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROCEDURE SP_DisEnCc -- Запрещение, разрешение и показ ограничения(ий) на значение(я). @TypOp char(1)='H', -- ТИП ДЕЙСТВИЯ: -- 'D' - запрещение (disable) -- 'E' - разрешение (enable) -- не 'DE' - показ (select) @NamCc sysname=NULL -- Имя ограничения; */NULL - все AS set nocount on -- Ошибки: 1 - неверный параметр if @TypOp is NULL select @TypOp='H' -- 2 - несуществующий об'ект select @NamCc=ltrim(rtrim(@NamCc)) -- 3 - нет данных if isnull(@NamCc,'*') = '*' select @NamCc=NULL -- 4 - операция не выполнена declare @TabName sysname, @CcName sysname, @St int, @Xx smallint if @TypOp not in ('D','E') begin -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ < ПОКАЗ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ select a.name [CheckConstraint],isnull(dbo.f_SubObjDesc(b.name,'table',a.name, 'constraint'),dbo.ff_CCDesc(a.name)) [Description], case when ObjectProperty(a.id,'CnstIsDisabled') = 0 then 'Enabled' else 'Disabled' end [Status] from sysobjects a, sysobjects b where a.parent_obj = b.id and a.xtype = 'C' and b.xtype = 'U' and b.status >= 0 and a.name = isnull(@NamCc,a.name) order by b.name return 0 end -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ < ЗАПРЕЩЕНИЕ/РАЗРЕШЕНИЕ > @@@@@@@@@@@@@@@@@ declare cur_Sel__Cc_DE cursor local for select a.name,b.name, ObjectProperty(a.id,'CnstIsDisabled') from sysobjects a, sysobjects b where a.parent_obj = b.id and a.xtype = 'C' and b.xtype = 'U' and b.status >= 0 and a.name = isnull(@NamCc,a.name) if @@ERROR != 0 return 4 open cur_Sel__Cc_DE if @@ERROR != 0 return 4 fetch next from cur_Sel__Cc_DE into @CcName,@TabName,@St if @@ERROR != 0 return 4 while @@FETCH_STATUS != -1 begin if @@FETCH_STATUS != -2 begin if @TypOp = 'D' begin -- Запрет if @St = 0 exec('alter table '+@TabName+' nocheck constraint '+@CcName) end else if @St = 1 exec('alter table '+@TabName+' check constraint '+@CcName) end if @@ERROR != 0 return 4 fetch next from cur_Sel__Cc_DE into @CcName,@TabName,@St if @@ERROR != 0 return 4 end close cur_Sel__Cc_DE deallocate cur_Sel__Cc_DE return 0 -- ============================================================================ return 0 -- #### (c) "PolySystem" 11.02.02 ########################################## GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROCEDURE SP_DisEnFk -- Запрещение, разрешение и показ состояния внешнего(их) ключа(ей). @TypOp char(1)='H', -- ТИП ДЕЙСТВИЯ: -- 'D' - запрещение (disable) -- 'E' - разрешение (enable) -- не 'DE' - показ (select) @NamFk sysname=NULL -- Имя ключа; */NULL - все AS set nocount on -- Ошибки: 1 - неверный параметр if @TypOp is NULL select @TypOp='H' -- 2 - несуществующий об'ект select @NamFk=ltrim(rtrim(@NamFk)) -- 3 - нет данных if isnull(@NamFk,'*') = '*' select @NamFk=NULL -- 4 - операция не выполнена declare @TabName sysname, @FkName sysname, @St int, @TypCn char(1) if @TypOp not in ('D','E') begin -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ < ПОКАЗ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ select a.name [ForeignKey],isnull(dbo.f_SubObjDesc(b.name,'table',a.name, 'constraint'),dbo.ff_FkDesc(a.name)) [Description], case when ObjectProperty(a.id,'CnstIsDisabled') = 0 then 'Enabled' else 'Disabled' end [Status] from sysobjects a, sysobjects b where a.parent_obj = b.id and a.xtype = 'F' and b.xtype = 'U' and b.status >= 0 and a.name = isnull(@NamFk,a.name) order by b.name return 0 end -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ < ЗАПРЕЩЕНИЕ/РАЗРЕШЕНИЕ > @@@@@@@@@@@@@@@@@ declare cur_Sel__Fk_DE cursor local for select a.name,b.name,ObjectProperty(a.id,'CnstIsDisabled') from sysobjects a, sysobjects b where a.parent_obj = b.id and a.xtype = 'F' and b.xtype = 'U' and b.status >= 0 and a.name = isnull(@NamFk,a.name) if @@ERROR != 0 return 4 open cur_Sel__Fk_DE if @@ERROR != 0 return 4 fetch next from cur_Sel__Fk_DE into @FkName,@TabName,@St if @@ERROR != 0 return 4 while @@FETCH_STATUS != -1 begin if @@FETCH_STATUS != -2 begin if @TypOp = 'D' begin -- Запрет if @St = 0 exec('alter table '+@TabName+' nocheck constraint '+@FkName) end else if @St = 1 exec('alter table '+@TabName+' check constraint '+@FkName) end if @@ERROR != 0 return 4 fetch next from cur_Sel__Fk_DE into @FkName,@TabName,@St if @@ERROR != 0 return 4 end close cur_Sel__Fk_DE deallocate cur_Sel__Fk_DE return 0 -- ============================================================================ return 0 -- #### (c) "PolySystem" 11.02.02 ########################################## GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROCEDURE SP_DisEnTr -- Запрещение, разрешение и показ состояния триггера(ов). @TypOp char(1)='H', -- ТИП ДЕЙСТВИЯ: -- 'D' - запрещение (disable) -- 'E' - разрешение (enable) -- не 'DE' - показ (select) @NamTr sysname=NULL -- Имя триггера; */NULL - все AS set nocount on -- Ошибки: 1 - неверный параметр if @TypOp is NULL select @TypOp='H' -- 2 - несуществующий об'ект select @NamTR=ltrim(rtrim(@NamTr)) -- 3 - нет данных if isnull(@NamTr,'*') = '*' select @NamTr=NULL -- 4 - операция не выполнена declare @TabName sysname, @TrName sysname, @St int if @TypOp not in ('D','E') begin -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ < ПОКАЗ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ select a.name [Trigger],isnull(dbo.f_SubObjDesc(b.name,'table',a.name, 'trigger'),'') [Description],case when ObjectProperty(a.id, 'ExecIsTriggerDisabled') = 0 then 'Enabled' else 'Disabled' end [Status] from sysobjects a, sysobjects b where a.parent_obj = b.id and a.xtype = 'TR' and b.xtype = 'U' and b.status >= 0 and a.name = isnull(@NamTr,a.name) order by b.name return 0 end -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@ < ЗАПРЕЩЕНИЕ/РАЗРЕШЕНИЕ > @@@@@@@@@@@@@@@@@ declare cur_Sel__Tr_DE cursor local for select a.name,b.name, ObjectProperty(a.id,'ExecIsTriggerDisabled') from sysobjects a, sysobjects b where a.parent_obj = b.id and a.xtype = 'TR' and b.xtype = 'U' and b.status >= 0 and a.name = isnull(@NamTr,a.name) if @@ERROR != 0 return 4 open cur_Sel__Tr_DE if @@ERROR != 0 return 4 fetch next from cur_Sel__Tr_DE into @TrName,@TabName,@St if @@ERROR != 0 return 4 while @@FETCH_STATUS != -1 begin if @@FETCH_STATUS != -2 begin if @TypOp = 'D' begin -- Запрет if @St = 0 exec('alter table '+@TabName+' disable trigger '+ @TrName) end else if @St = 1 exec('alter table '+@TabName+' enable trigger '+ @TrName) end if @@ERROR != 0 return 4 fetch next from cur_Sel__Tr_DE into @TrName,@TabName,@St if @@ERROR != 0 return 4 end close cur_Sel__Tr_DE deallocate cur_Sel__Tr_DE -- ============================================================================ return 0 -- #### (c) "PolySystem" 08.02.02 ########################################## GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2002, 08:15 |
|
||
|
флаги отключения тригеров и ссылочных ограничений
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо за помощь. Попробую код - выглядит он на первый взгляд совсем неплохо. База совсем не крутая, скорее это неповоротливый тупой монстр, доставшийся мне по наследству. Время отклика такое (за счет бесчисленных проверок внутри базы) что рабочий день пользователя умещается в "десять кликов" Вот и приходится латать ее малыми порциями, что делает ее еще более тупым нагромождением.... Кстати у начальства есть планы заменить все это SAP R/3. Уж и не знаю, что лучше. С уважением, Александр ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2002, 09:02 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32023441&tid=1823834]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 471ms |

| 0 / 0 |
