Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
cRYSMAS Member Откуда: Сообщений: 7 |
Добрый день, есть скрипт сдертый с интернета на одной базе выполняется без проблем на другой выдает такую ошибку: Msg 1943, Level 16, State 1, Line 1 The index "IX_FK_LOCKSMITH_COUNTERSEAL_R" on table "COUNTERSEAL" cannot be reorganized because page level locking is disabled. USE [BD]; GO SET NOCOUNT ON; DECLARE @objectid int; DECLARE @indexid int; DECLARE @partitioncount bigint; DECLARE @schemaname nvarchar(130); DECLARE @objectname nvarchar(130); DECLARE @indexname nvarchar(130); DECLARE @partitionnum bigint; DECLARE @partitions bigint; DECLARE @frag float; DECLARE @command nvarchar(4000); DECLARE @dbid smallint; SET @dbid = DB_ID(); SELECT [object_id] AS objectid, index_id AS indexid, partition_number AS partitionnum, avg_fragmentation_in_percent AS frag, page_count INTO #work_to_do2 FROM sys.dm_db_index_physical_stats (@dbid, NULL, NULL , NULL, N'LIMITED') WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0 AND page_count > 25; DECLARE partitions CURSOR FOR SELECT objectid,indexid, partitionnum,frag FROM #work_to_do2; OPEN partitions; WHILE (1=1) BEGIN FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag; IF @@FETCH_STATUS < 0 BREAK; SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name) FROM sys.objects AS o JOIN sys.schemas AS s ON s.schema_id = o.schema_id WHERE o.object_id = @objectid; SELECT @indexname = QUOTENAME(name) FROM sys.indexes WHERE object_id = @objectid AND index_id = @indexid; SELECT @partitioncount = count (*) FROM sys.partitions WHERE object_id = @objectid AND index_id = @indexid; IF @frag < 30.0 SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE'; IF @frag >= 30.0 SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD'; IF @partitioncount > 1 SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10)); EXEC (@command); PRINT N'Выполнено: ' + @command; END; CLOSE partitions; DEALLOCATE partitions; DROP TABLE #work_to_do2; GO Если убиваю созданную таблицу временную work_to_do2 то при запуске скрипта сначала думает потом ошибка и все БД весит 110Гб. Другая БД около 150 на ней скрипт выполняется без ошибок. |
27 фев 17, 12:31 [20246813] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
cRYSMAS,
на индексе стоит (ALLOW_PAGE_LOCKS = OFF) |
||
27 фев 17, 12:35 [20246835] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ну пройдитесь еще по sys.indexes, если allow_page_locks = 0, никакого реорга. решайте сами, или оставить такой индекс в покое, или отребилдить |
27 фев 17, 12:51 [20246916] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ктати, зачем вообще мелкие индексы трогать? AND page_count > 25 25 страниц это 200Кб, чего там вообще ребилдить. поднимите границу |
27 фев 17, 13:01 [20246950] Ответить | Цитировать Сообщить модератору |
cRYSMAS Member Откуда: Сообщений: 7 |
на индексе стоит (ALLOW_PAGE_LOCKS = OFF) а что это означает? что означает данный флаг и для чего он нужен? |
27 фев 17, 16:32 [20247926] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
cRYSMAS,
как переводится так и означает/нужен. Гугл запрещён? |
||
27 фев 17, 16:34 [20247932] Ответить | Цитировать Сообщить модератору |
cRYSMAS Member Откуда: Сообщений: 7 |
можете подсказать: как дописать запрос что б если в таблице флаг ALLOW_PAGE_LOCKS = OFF менялся на ON и запрос выполнялся далее?? А то я уже 10 табл. изменяю индекс в ручную |
27 фев 17, 16:42 [20247958] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
cRYSMAS, 1. Если поставили, то не для того что бы вам жизнь портить 2. SELECT * FROM sys.indexes WHERE allow_page_locks = 0 проверяйте правьте |
27 фев 17, 16:44 [20247964] Ответить | Цитировать Сообщить модератору |
cRYSMAS Member Откуда: Сообщений: 7 |
согласен, но как мне индексы обновить дефрагментировать и т.д. статистику обновить ??? |
||
27 фев 17, 16:59 [20248054] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
кто вам это доверил :) REBULD вас спасёт.... |
||||
27 фев 17, 17:02 [20248069] Ответить | Цитировать Сообщить модератору |
cRYSMAS Member Откуда: Сообщений: 7 |
Это тестовая база, я вообще занимаюсь администрирование но с т-сиквелом немного тяжко... |
||||
1 мар 17, 12:35 [20253743] Ответить | Цитировать Сообщить модератору |
cRYSMAS Member Откуда: Сообщений: 7 |
SELECT * FROM sys.indexes WHERE allow_page_locks = 0 а вот на это не чего не происходит, сиквел 2012 версию показывать полностью? |
1 мар 17, 12:36 [20253745] Ответить | Цитировать Сообщить модератору |
cRYSMAS Member Откуда: Сообщений: 7 |
вот теперь такую ошибку вываливает Выполнено: ALTER INDEX [XPKDOCACTNOACCESS] ON [dbo].[DOCACTNOACCESS] REORGANIZE Msg 1943, Level 16, State 1, Line 1 The index "<Name of Missing Index, sysname,>" on table "CORRECT" cannot be reorganized because page level locking is disabled. а можно в скрипте указать если ошибка на cannot be reorganized because page level locking is disabled.пропускай и иди дальше? |
1 мар 17, 12:47 [20253804] Ответить | Цитировать Сообщить модератору |
MacaronicTragedy Member Откуда: Сообщений: 99 |
оберните команду в блок begin try alter index blabalaba end try begin catch -- тут можно указать, что делать в случае ошибки end catch |
1 мар 17, 13:03 [20253851] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |