cannot be reorganized because page level locking is disabled

  • Hello,

    Iam using below script for reindexing weekly in SQL Server 2005 EE 64 bit

    /* Originally created by Microsoft */

    /* Error corrected by Pinal Dave (http://www.SQLAuthority.com) */

    -- Specify your Database Name

    USE database

    GO

    -- Declare variables

    SET NOCOUNT ON

    DECLARE @tablename VARCHAR(128)

    DECLARE @execstr VARCHAR(255)

    DECLARE @objectid INT

    DECLARE @indexid INT

    DECLARE @frag decimal

    DECLARE @maxfrag decimal

    -- Decide on the maximum fragmentation to allow for.

    SELECT @maxfrag = 30.0

    -- Declare a cursor.

    DECLARE tables CURSOR FOR

    SELECT CAST(TABLE_SCHEMA AS VARCHAR(100))

    +'.'+CAST(TABLE_NAME AS VARCHAR(100))

    AS Table_Name

    FROM INFORMATION_SCHEMA.TABLES

    WHERE TABLE_TYPE = 'BASE TABLE'

    -- Create the table.

    CREATE TABLE #fraglist (

    ObjectName CHAR(255),

    ObjectId INT,

    IndexName CHAR(255),

    IndexId INT,

    Lvl INT,

    CountPages INT,

    CountRows INT,

    MinRecSize INT,

    MaxRecSize INT,

    AvgRecSize INT,

    ForRecCount INT,

    Extents INT,

    ExtentSwitches INT,

    AvgFreeBytes INT,

    AvgPageDensity INT,

    ScanDensity decimal,

    BestCount INT,

    ActualCount INT,

    LogicalFrag decimal,

    ExtentFrag decimal)

    -- Open the cursor.

    OPEN tables

    -- Loop through all the tables in the database.

    FETCH NEXT

    FROM tables

    INTO @tablename

    WHILE @@FETCH_STATUS = 0

    BEGIN

    -- Do the showcontig of all indexes of the table

    INSERT INTO #fraglist

    EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''')

    WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')

    FETCH NEXT

    FROM tables

    INTO @tablename

    END

    -- Close and deallocate the cursor.

    CLOSE tables

    DEALLOCATE tables

    -- Declare the cursor for the list of indexes to be defragged.

    DECLARE indexes CURSOR FOR

    SELECT ObjectName, ObjectId, IndexId, LogicalFrag

    FROM #fraglist

    WHERE LogicalFrag >= @maxfrag

    AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0

    -- Open the cursor.

    OPEN indexes

    -- Loop through the indexes.

    FETCH NEXT

    FROM indexes

    INTO @tablename, @objectid, @indexid, @frag

    WHILE @@FETCH_STATUS = 0

    BEGIN

    PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',

    ' + RTRIM(@indexid) + ') - fragmentation currently '

    + RTRIM(CONVERT(VARCHAR(15),@frag)) + '%'

    SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',

    ' + RTRIM(@indexid) + ')'

    EXEC (@execstr)

    FETCH NEXT

    FROM indexes

    INTO @tablename, @objectid, @indexid, @frag

    END

    -- Close and deallocate the cursor.

    CLOSE indexes

    DEALLOCATE indexes

    -- Delete the temporary table.

    DROP TABLE #fraglist

    GO

    For one instance Iam getting the following errors:Executing DBCC INDEXDEFRAG (0, Instances,

    1) - fragmentation currently 83%

    Msg 2552, Level 16, State 2, Line 1

    The index "CIX_Instances" (partition 1) on table "Instances" cannot be reorganized because page level locking is disabled.

    DBCC execution completed. If DBCC printed error messages, contact your system administrator.

    Executing DBCC INDEXDEFRAG (0, Instances,

    2) - fragmentation currently 83%

    Msg 2552, Level 16, State 2, Line 1

    The index "IX_Instances_Process" (partition 1) on table "Instances" cannot be reorganized because page level locking is disabled.

    DBCC execution completed. If DBCC printed error messages, contact your system administrator.

    Could you plz add the script to enable page level locking before running this script and disable page level locking after the script ran.

    It would be a great help for me

    Thanks in advance

  • You need to recreate the index.

    Please see the thread at http://www.sqlservercentral.com/Forums/Topic301624-146-1.aspx which describes a similar issue.



    Shamless self promotion - read my blog http://sirsql.net

  • Run ALTER INDEX command with SET (ALLOW_PAGE_LOCK = ON)

Viewing 3 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic. Login to reply