Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 что за ошибка такая  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
cRYSMAS,
автор
"COUNTERSEAL" cannot be reorganized because page level locking is disabled.

на индексе стоит (ALLOW_PAGE_LOCKS = OFF)
27 фев 17, 12:35    [20246835]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
o-o
Guest
ну пройдитесь еще по sys.indexes,
если allow_page_locks = 0,
никакого реорга.
решайте сами, или оставить такой индекс в покое, или отребилдить
27 фев 17, 12:51    [20246916]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
o-o
Guest
ктати, зачем вообще мелкие индексы трогать?
AND page_count > 25
25 страниц это 200Кб, чего там вообще ребилдить.
поднимите границу
27 фев 17, 13:01    [20246950]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
cRYSMAS
Member

Откуда:
Сообщений: 7
на индексе стоит (ALLOW_PAGE_LOCKS = OFF)

а что это означает?

что означает данный флаг и для чего он нужен?
27 фев 17, 16:32    [20247926]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
cRYSMAS,

автор
что означает данный флаг и для чего он нужен?

как переводится так и означает/нужен. Гугл запрещён?
27 фев 17, 16:34    [20247932]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
cRYSMAS
Member

Откуда:
Сообщений: 7
можете подсказать: как дописать запрос что б если в таблице флаг ALLOW_PAGE_LOCKS = OFF менялся на ON и запрос выполнялся далее??
А то я уже 10 табл. изменяю индекс в ручную
27 фев 17, 16:42    [20247958]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
cRYSMAS,

1. Если поставили, то не для того что бы вам жизнь портить
2. SELECT * FROM sys.indexes WHERE allow_page_locks = 0 проверяйте правьте
27 фев 17, 16:44    [20247964]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
cRYSMAS
Member

Откуда:
Сообщений: 7
TaPaK
cRYSMAS,

1. Если поставили, то не для того что бы вам жизнь портить
2. SELECT * FROM sys.indexes WHERE allow_page_locks = 0 проверяйте правьте


согласен, но как мне индексы обновить дефрагментировать и т.д. статистику обновить ???
27 фев 17, 16:59    [20248054]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
cRYSMAS
TaPaK
cRYSMAS,

1. Если поставили, то не для того что бы вам жизнь портить
2. SELECT * FROM sys.indexes WHERE allow_page_locks = 0 проверяйте правьте


согласен, но как мне индексы обновить дефрагментировать и т.д. статистику обновить ???

кто вам это доверил :) REBULD вас спасёт....
27 фев 17, 17:02    [20248069]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
cRYSMAS
Member

Откуда:
Сообщений: 7
TaPaK
cRYSMAS
пропущено...


согласен, но как мне индексы обновить дефрагментировать и т.д. статистику обновить ???

кто вам это доверил :) REBULD вас спасёт....


Это тестовая база, я вообще занимаюсь администрирование но с т-сиквелом немного тяжко...
1 мар 17, 12:35    [20253743]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
cRYSMAS
Member

Откуда:
Сообщений: 7
SELECT * FROM sys.indexes WHERE allow_page_locks = 0

а вот на это не чего не происходит, сиквел 2012 версию показывать полностью?
1 мар 17, 12:36    [20253745]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: что за ошибка такая  [new]
MacaronicTragedy
Member

Откуда:
Сообщений: 99
оберните команду в блок

begin try
alter index blabalaba
end try

begin catch
-- тут можно указать, что делать в случае ошибки
end catch
1 мар 17, 13:03    [20253851]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить