Rebuild all indexes in a Database

前端 未结 6 2071
误落风尘
误落风尘 2021-01-30 01:41

I have a very large SQL Server 2008 R2 database (1.5TB) and will be copying some data from column to column within the same table. I\'ve been told that the schema has a large nu

6条回答
  •  無奈伤痛
    2021-01-30 02:10

    DECLARE @Database NVARCHAR(255)   
    DECLARE @Table NVARCHAR(255)  
    DECLARE @cmd NVARCHAR(1000)  
    
    DECLARE DatabaseCursor CURSOR READ_ONLY FOR  
    SELECT name FROM master.sys.databases   
    WHERE name NOT IN ('master','msdb','tempdb','model','distribution')  -- databases to exclude
    --WHERE name IN ('DB1', 'DB2') -- use this to select specific databases and comment out line above
    AND state = 0 -- database is online
    AND is_in_standby = 0 -- database is not read only for log shipping
    ORDER BY 1  
    
    OPEN DatabaseCursor  
    
    FETCH NEXT FROM DatabaseCursor INTO @Database  
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
    
       SET @cmd = 'DECLARE TableCursor CURSOR READ_ONLY FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' +  
       table_name + '']'' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES WHERE table_type = ''BASE TABLE'''   
    
       -- create table cursor  
       EXEC (@cmd)  
       OPEN TableCursor   
    
       FETCH NEXT FROM TableCursor INTO @Table   
       WHILE @@FETCH_STATUS = 0   
       BEGIN
          BEGIN TRY   
             SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD' 
             --PRINT @cmd -- uncomment if you want to see commands
             EXEC (@cmd) 
          END TRY
          BEGIN CATCH
             PRINT '---'
             PRINT @cmd
             PRINT ERROR_MESSAGE() 
             PRINT '---'
          END CATCH
    
          FETCH NEXT FROM TableCursor INTO @Table   
       END   
    
       CLOSE TableCursor   
       DEALLOCATE TableCursor  
    
       FETCH NEXT FROM DatabaseCursor INTO @Database  
    END  
    CLOSE DatabaseCursor   
    DEALLOCATE DatabaseCursor
    

提交回复
热议问题