none
Usar o DBCC CHECKDB ou DBCC CHECKTABLE RRS feed

  • Pergunta

  • Bom dia, estou com um problema que quando tento executar um DELETE aparece a seguinte mensagem:

    Mensagem 407, Nível 16, Estado 1, Linha 2
    Erro interno. Ocorreu um erro na rotina da cadeia de caracteres no arquivo e:\sql10_katmai_t\sql\ntdbms\storeng\dfs\startup\dstream.cpp, linha 792 com HRESULT 0x8007007a.
    Mensagem 8646, Nível 21, Estado 1, Linha 2
    Não é possível encontrar entrada de índice na ID de índice 1, da tabela 1812201506, no banco de dados 'aurora'. O índice indicado está corrompido e existe um problema com o atual plano de atualização. Execute DBCC CHECKDB ou DBCC CHECKTABLE. Se o problema persistir, contate o suporte do produto.
    Mensagem 0, Nível 20, Estado 0, Linha 0
    Erro grave no comando atual. Os resultados, se houver algum, deverão ser descartados.

    O meu maior problema é que para executar o DBCC CHECKDB eu preciso colocar o banco como Single User e isso faz com que os sistemas parem de funcionar! Eu coloquei o DBCC CHECKDB para executar nos dias 24 e 25 que não houve expediente, o problema é que as 6:00 da manhã do dia 26 o processo ainda não tinha terminado e eu tive que interrompe-lo!
    O Banco ficou executando o comando por 2 dias e 10 horas e não terminou!

    Alguém tem alguma ideia do que posso fazer para resolver esse problema?

    sábado, 28 de dezembro de 2019 12:29

Respostas

  • Vinicius,

    Por acaso você esta utilizando o SQL Server 2008 ou 2008 R2?

    Pegando como base este caminho que a mensagem esta apresentando:
    e:\sql10_katmai_t\sql\ntdbms\storeng\dfs\startup\dstream.cpp

    Estamos se referindo a falha do arquivo dstream.cpp (linguagem C++), este erro esta sendo apresentado dentro do SQL Server Management Studio ou Azure Data Studio?

    Outro detalhe, caso 1812201506 venha ser uma tabela, uma forma mais antiga mas ainda funcional de se obter a estrutura da tabela é através do uso da system stored procedure sp_help.

    Veja o exemplo:

    sp_help '1812201506'
    Go

    Uma outra maneira de tentarmos validar a estrutura do seu banco de dados, indenpendente de qual seja a tabela, seria através do uso da visão de sistema sys.tables em conjunto com DMV sys.dm_db_partition_stats, ativando a diretiva de sistema Set Statistics IO para analisarmos e obtermos os resultados relacionados ao Input/Output dispendido pelo disco rígido de acordo com os processamentos feitos pelo SQL Server para acessar as tabelas e consultar suas estruturas.

    Veja o exemplo:

    Use NomedoSeuBancodeDados
    Go
    
    Set NoCount On
    Set Statistisc IO On
    Go
    
    Select SCHEMA_NAME(t.schema_id) AS 'Schema',
           t.name As 'Tabela,
           SUM(ps.row_count) As 'Registros'
    From sys.tables t Inner Join sys.dm_db_partition_stats ps
                       On ps.object_id = t.object_id
    WHERE index_id < 2
    GROUP BY t.name, t.schema_id
    ORDER BY t.schema_id, t.name ASC
    Go

    Verifique quais os retornos apresentados após o processo destes exemplos.

    Aqui esta a referência que eu utilizei: https://basitaalishan.com/tag/sys-partitions/

    Alias, eu momento algum eu fiz referência que o código era meu, inclusive tenho o mesmo na minha galeria de códigos, muitos dos participantes aqui dos fóruns se esquecem que os MVPs tem canais específicos para trocas de códigos, scripts e exemplos, e boa parte do que esta na internet mesmo sendo extraído da documentação oficial é de domínio público.

    Em adicional, partes deste mesmo exemplo, podem ser obtidas acessando: https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-partition-stats-transact-sql?view=sql-server-ver15

    Mas uma vez obrigado José Diz, eu não conhecia a outra referência que você acrescentou: https://www.sqlservercentral.com/blogs/different-approaches-of-counting-number-of-rows-in-a-table.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    sábado, 28 de dezembro de 2019 14:17
    Moderador
  • Deleted
    quinta-feira, 2 de janeiro de 2020 13:07
  • Vinicius,

    Segue um outro exemplo que você poderá utilizar para obter informações sobre os seus índices:

    SELECT COUNT(*) AS cached_pages_count, 
                 COUNT(*)/128.0000 MB,
                  name AS BaseTableName, 
    			  IndexName,
                  IndexTypeDesc
    FROM sys.dm_os_buffer_descriptors AS bd
    	INNER JOIN	(
    				SELECT s_obj.name, 
    				             s_obj.index_id,
    				             s_obj.allocation_unit_id, 
    							 s_obj.OBJECT_ID,
    				             i.name IndexName, 
    							 i.type_desc IndexTypeDesc
    				FROM
    					(SELECT OBJECT_NAME(OBJECT_ID) AS name,	
    					              index_id,
    						          allocation_unit_id, 
    								  OBJECT_ID
    					 FROM sys.allocation_units AS au INNER JOIN sys.partitions AS p 
    					                                                        ON au.container_id = p.hobt_id	
    																			AND (au.TYPE = 1 OR au.TYPE = 3)
    					 UNION ALL
    					 SELECT OBJECT_NAME(OBJECT_ID) AS name,
    						          index_id, 
    								  allocation_unit_id, 
    								  OBJECT_ID
    					 FROM sys.allocation_units AS au INNER JOIN sys.partitions AS p 
    					                                                        ON au.container_id = p.partition_id
    																			AND au.TYPE = 2
    					) AS s_obj LEFT JOIN sys.indexes i 
    					                  ON i.index_id = s_obj.index_id
    			    	                  AND i.OBJECT_ID = s_obj.OBJECT_ID 
    			    ) AS obj ON bd.allocation_unit_id = obj.allocation_unit_id
    WHERE database_id = DB_ID() 
    and name not like 'sys%' 
    and IndexName <> 'null'
    GROUP BY name, index_id, IndexName, IndexTypeDesc
    ORDER BY cached_pages_count DESC;

    Este outro exemplo apresenta informações sobre possíveis índices Clustered que podem estar apresentando falhas:

    SELECT  OBJECT_NAME(s.[object_id]) AS [Table Name] ,
            i.name AS [Index Name] ,
            i.index_id ,
            user_updates AS [Total Writes] ,
            user_seeks + user_scans + user_lookups AS [Total Reads] ,
            user_updates - ( user_seeks + user_scans + user_lookups )
                AS [Difference]
    FROM    sys.dm_db_index_usage_stats AS s WITH ( NOLOCK )
            INNER JOIN sys.indexes AS i WITH ( NOLOCK )
                ON s.[object_id] = i.[object_id]
                AND i.index_id = s.index_id
    WHERE   OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1
            AND s.database_id = DB_ID()
            AND user_updates > ( user_seeks + user_scans + user_lookups )
            AND i.index_id = 1
    ORDER BY [Difference] DESC ,
            [Total Writes] DESC ,
            [Total Reads] ASC ;

    Este apresenta informações sobre possíveis índices NonClustered que podem estar apresentando falhas:

    SELECT  OBJECT_NAME(s.[object_id]) AS [Table Name] ,
            i.name AS [Index Name] ,
            i.index_id ,
            user_updates AS [Total Writes] ,
            user_seeks + user_scans + user_lookups AS [Total Reads] ,
            user_updates - ( user_seeks + user_scans + user_lookups )
                AS [Difference]
    FROM    sys.dm_db_index_usage_stats AS s WITH ( NOLOCK )
            INNER JOIN sys.indexes AS i WITH ( NOLOCK )
                ON s.[object_id] = i.[object_id]
                AND i.index_id = s.index_id
    WHERE   OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1
            AND s.database_id = DB_ID()
            AND user_updates > ( user_seeks + user_scans + user_lookups )
            AND i.index_id > 1
    ORDER BY [Difference] DESC ,
            [Total Writes] DESC ,
            [Total Reads] ASC ;

    Os exemplos aqui compartilhados foram extraídos do Started Pack, conjunto de scripts existentes a partir do SQL Server 2008: https://www.onlineprogrammingbooks.com/free-ebook-sql-server-dmv-starter-pack/

    Por fim este último que poderá ser útil você utilizar, o mesmo lhe ajuda acompanhar o processo de criação ou até mesmo desfragmentação de um índices:

    --Acompanhar a criação ou desfragmentação do índice
    SELECT node_id,physical_operator_name, SUM(row_count) row_count, 
      SUM(estimate_row_count) AS estimate_row_count, 
      CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  percent_completed
    FROM sys.dm_exec_query_profiles   
    WHERE session_id= (colocar o SPID da conexão que quer monitorar)
    GROUP BY node_id,physical_operator_name  
    ORDER BY node_id;
    O exemplo acima foi obtido com base na documentação oficial da DMV sys.dm_exec_query_profiles


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    quinta-feira, 2 de janeiro de 2020 15:25
    Moderador
  • Deleted
    domingo, 5 de janeiro de 2020 04:21

Todas as Respostas

  • Deleted
    sábado, 28 de dezembro de 2019 12:41
  • Deleted
    sábado, 28 de dezembro de 2019 12:59
  • Vinicius,

    Por acaso você esta utilizando o SQL Server 2008 ou 2008 R2?

    Pegando como base este caminho que a mensagem esta apresentando:
    e:\sql10_katmai_t\sql\ntdbms\storeng\dfs\startup\dstream.cpp

    Estamos se referindo a falha do arquivo dstream.cpp (linguagem C++), este erro esta sendo apresentado dentro do SQL Server Management Studio ou Azure Data Studio?

    Outro detalhe, caso 1812201506 venha ser uma tabela, uma forma mais antiga mas ainda funcional de se obter a estrutura da tabela é através do uso da system stored procedure sp_help.

    Veja o exemplo:

    sp_help '1812201506'
    Go

    Uma outra maneira de tentarmos validar a estrutura do seu banco de dados, indenpendente de qual seja a tabela, seria através do uso da visão de sistema sys.tables em conjunto com DMV sys.dm_db_partition_stats, ativando a diretiva de sistema Set Statistics IO para analisarmos e obtermos os resultados relacionados ao Input/Output dispendido pelo disco rígido de acordo com os processamentos feitos pelo SQL Server para acessar as tabelas e consultar suas estruturas.

    Veja o exemplo:

    Use NomedoSeuBancodeDados
    Go
    
    Set NoCount On
    Set Statistisc IO On
    Go
    
    Select SCHEMA_NAME(t.schema_id) AS 'Schema',
           t.name As 'Tabela,
           SUM(ps.row_count) As 'Registros'
    From sys.tables t Inner Join sys.dm_db_partition_stats ps
                       On ps.object_id = t.object_id
    WHERE index_id < 2
    GROUP BY t.name, t.schema_id
    ORDER BY t.schema_id, t.name ASC
    Go

    Verifique quais os retornos apresentados após o processo destes exemplos.

    Aqui esta a referência que eu utilizei: https://basitaalishan.com/tag/sys-partitions/

    Alias, eu momento algum eu fiz referência que o código era meu, inclusive tenho o mesmo na minha galeria de códigos, muitos dos participantes aqui dos fóruns se esquecem que os MVPs tem canais específicos para trocas de códigos, scripts e exemplos, e boa parte do que esta na internet mesmo sendo extraído da documentação oficial é de domínio público.

    Em adicional, partes deste mesmo exemplo, podem ser obtidas acessando: https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-partition-stats-transact-sql?view=sql-server-ver15

    Mas uma vez obrigado José Diz, eu não conhecia a outra referência que você acrescentou: https://www.sqlservercentral.com/blogs/different-approaches-of-counting-number-of-rows-in-a-table.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    sábado, 28 de dezembro de 2019 14:17
    Moderador
  • Não é possível encontrar entrada de índice na ID de índice 1, da tabela 1812201506, no banco de dados 'aurora'. O índice indicado está corrompido

    O banco de dados é o AURORA mas qual é a tabela? Acho que "1812201506" não se refere ao nome da tabela mas sim ao número do objeto. Para avaliar esta possibilidade, execute o seguinte código SQL:

    -- código #2 v2
    USE AURORA;

    SELECT name as [nome tabela]
      from sys.tables
      where object_id = 1812201506;
     
    SELECT T.name as [nome tabela], I.index_id as [entrada],
           I.name as [nome índice], I.type_desc as [tipo de índice]
      from sys.tables as T
           inner join sys.indexes as I on I.object_id = T.object_id
      where T.object_id = 1812201506;
     

    Se não obtiver resposta nos comandos anteriores, rode o seguinte código SQL:

    -- código #3
    SELECT * 
      from sys.objects
      where object_id = 1812201506;

     

    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.




    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Bom dia, desculpe a demora para responder, 

    Vamo as respostas:

    PRINT @@version
    Microsoft SQL Server 2008 (SP4) - 10.0.6000.29 (X64) 
    Sep  3 2014 04:11:34 
    Copyright (c) 1988-2008 Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 14393: ) (VM)

    ------------------------------------------------------------------------------------------------------------------

    Se a mensagem de erro estiver correta, a corrupção está em índice; se for índice non clustered, é mais simples de resolver. Algum índice foi criado com a opção ONLINE ativada? O problema é, teoricamente, simples de ser resolvido: basta apagar o índice e então recriá-lo com a opção ONLINE desativada. Só que para isso é necessário que a tabela fique bloqueada enquanto o índice é criado.

    Os índices são criados por um programa de terceiro, não sei se a opção ONLINE estava ativada! Mas eu não consigo apagar o registro, quando executo o DELETE ele retorna o erro da primeira postagem, existe uma forma de eu apagar o índice antes de apagar a linha de registro?
    -------

    O banco de dados é o AURORA mas qual é a tabela? Acho que "1812201506" não se refere ao nome da tabela mas sim ao número do objeto. Para avaliar esta possibilidade, execute o seguinte código SQL:

    Isso, o banco de dados é o Aurora, a tabela se chama "
    dicomimages" não sei a que referencia se faz esse "1812201506" que aparece na msg!

    --

    SELECT T.name as [nome tabela], I.index_id as [entrada],
           I.name as [nome índice], I.type_desc as [tipo de índice]
      from sys.tables as T
           inner join sys.indexes as I on I.object_id = T.object_id
      where T.object_id = 1812201506;


    Resultado

    nome tabela entrada nome índice                                  tipo de índice
    dicomimages 1         PK__dicomima__CE28694F6DEC4894  CLUSTERED
    dicomimages 2          images_lnk                                  NONCLUSTERED

    --

    SELECT * 
      from sys.objects
      where object_id = 1812201506;

    Resultado

    name object_id principal_id schema_id parent_object_id type type_desc create_date modify_date is_ms_shipped is_published is_schema_published
    dicomimages 1812201506 NULL 1 0 U USER_TABLE 2012-10-09 10:44:16.207 2019-12-01 01:07:55.130 0 0 0

    quinta-feira, 2 de janeiro de 2020 12:16
  • Deleted
    quinta-feira, 2 de janeiro de 2020 13:07
  • Deleted
    quinta-feira, 2 de janeiro de 2020 13:29
  • Vinicius,

    Segue um outro exemplo que você poderá utilizar para obter informações sobre os seus índices:

    SELECT COUNT(*) AS cached_pages_count, 
                 COUNT(*)/128.0000 MB,
                  name AS BaseTableName, 
    			  IndexName,
                  IndexTypeDesc
    FROM sys.dm_os_buffer_descriptors AS bd
    	INNER JOIN	(
    				SELECT s_obj.name, 
    				             s_obj.index_id,
    				             s_obj.allocation_unit_id, 
    							 s_obj.OBJECT_ID,
    				             i.name IndexName, 
    							 i.type_desc IndexTypeDesc
    				FROM
    					(SELECT OBJECT_NAME(OBJECT_ID) AS name,	
    					              index_id,
    						          allocation_unit_id, 
    								  OBJECT_ID
    					 FROM sys.allocation_units AS au INNER JOIN sys.partitions AS p 
    					                                                        ON au.container_id = p.hobt_id	
    																			AND (au.TYPE = 1 OR au.TYPE = 3)
    					 UNION ALL
    					 SELECT OBJECT_NAME(OBJECT_ID) AS name,
    						          index_id, 
    								  allocation_unit_id, 
    								  OBJECT_ID
    					 FROM sys.allocation_units AS au INNER JOIN sys.partitions AS p 
    					                                                        ON au.container_id = p.partition_id
    																			AND au.TYPE = 2
    					) AS s_obj LEFT JOIN sys.indexes i 
    					                  ON i.index_id = s_obj.index_id
    			    	                  AND i.OBJECT_ID = s_obj.OBJECT_ID 
    			    ) AS obj ON bd.allocation_unit_id = obj.allocation_unit_id
    WHERE database_id = DB_ID() 
    and name not like 'sys%' 
    and IndexName <> 'null'
    GROUP BY name, index_id, IndexName, IndexTypeDesc
    ORDER BY cached_pages_count DESC;

    Este outro exemplo apresenta informações sobre possíveis índices Clustered que podem estar apresentando falhas:

    SELECT  OBJECT_NAME(s.[object_id]) AS [Table Name] ,
            i.name AS [Index Name] ,
            i.index_id ,
            user_updates AS [Total Writes] ,
            user_seeks + user_scans + user_lookups AS [Total Reads] ,
            user_updates - ( user_seeks + user_scans + user_lookups )
                AS [Difference]
    FROM    sys.dm_db_index_usage_stats AS s WITH ( NOLOCK )
            INNER JOIN sys.indexes AS i WITH ( NOLOCK )
                ON s.[object_id] = i.[object_id]
                AND i.index_id = s.index_id
    WHERE   OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1
            AND s.database_id = DB_ID()
            AND user_updates > ( user_seeks + user_scans + user_lookups )
            AND i.index_id = 1
    ORDER BY [Difference] DESC ,
            [Total Writes] DESC ,
            [Total Reads] ASC ;

    Este apresenta informações sobre possíveis índices NonClustered que podem estar apresentando falhas:

    SELECT  OBJECT_NAME(s.[object_id]) AS [Table Name] ,
            i.name AS [Index Name] ,
            i.index_id ,
            user_updates AS [Total Writes] ,
            user_seeks + user_scans + user_lookups AS [Total Reads] ,
            user_updates - ( user_seeks + user_scans + user_lookups )
                AS [Difference]
    FROM    sys.dm_db_index_usage_stats AS s WITH ( NOLOCK )
            INNER JOIN sys.indexes AS i WITH ( NOLOCK )
                ON s.[object_id] = i.[object_id]
                AND i.index_id = s.index_id
    WHERE   OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1
            AND s.database_id = DB_ID()
            AND user_updates > ( user_seeks + user_scans + user_lookups )
            AND i.index_id > 1
    ORDER BY [Difference] DESC ,
            [Total Writes] DESC ,
            [Total Reads] ASC ;

    Os exemplos aqui compartilhados foram extraídos do Started Pack, conjunto de scripts existentes a partir do SQL Server 2008: https://www.onlineprogrammingbooks.com/free-ebook-sql-server-dmv-starter-pack/

    Por fim este último que poderá ser útil você utilizar, o mesmo lhe ajuda acompanhar o processo de criação ou até mesmo desfragmentação de um índices:

    --Acompanhar a criação ou desfragmentação do índice
    SELECT node_id,physical_operator_name, SUM(row_count) row_count, 
      SUM(estimate_row_count) AS estimate_row_count, 
      CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  percent_completed
    FROM sys.dm_exec_query_profiles   
    WHERE session_id= (colocar o SPID da conexão que quer monitorar)
    GROUP BY node_id,physical_operator_name  
    ORDER BY node_id;
    O exemplo acima foi obtido com base na documentação oficial da DMV sys.dm_exec_query_profiles


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    quinta-feira, 2 de janeiro de 2020 15:25
    Moderador
  • Os índices são criados por um programa de terceiro,

    Complementando minha resposta anterior,  eis um programa que obtém informações sobre os índices:

    -- código #4 
    -- Fonte: https://stackoverflow.com/users/1080354/gotqn
    -- OBTÉM ÍNDICES EXISTENTES PARA A TABELA
    
    
    -- informe o nome do banco de dados
    USE AURORA;
    
    -- informe o nome das tabelas a obter informações
    declare @Filtro_tabelas TABLE (Nome_Tabela varchar(30));
    INSERT into @Filtro_tabelas values 
      ('dicomimages');
    
    --
    SELECT TBL.[name] as [Nome da tabela],
           schema_name (TBL.schema_id) as [Nome do esquema],
           INX.[name] as [Nome do índice],
           lower (INX.[type_desc]) as [Tipo de índice],
           DS1.[IndexColumnsNames] as [Colunas do índice],
           DS2.[IncludedColumnsNames] as [Colunas incluídas]
    FROM [sys].[indexes] INX
    INNER JOIN [sys].[tables] TBL
        ON INX.[object_id] = TBL.[object_id]
    CROSS APPLY 
    (
        SELECT STUFF
        (
            (
                SELECT ' [' + CLS.[name] + ']'
                FROM [sys].[index_columns] INXCLS
                INNER JOIN [sys].[columns] CLS 
                    ON INXCLS.[object_id] = CLS.[object_id] 
                    AND INXCLS.[column_id] = CLS.[column_id]
                WHERE INX.[object_id] = INXCLS.[object_id] 
                    AND INX.[index_id] = INXCLS.[index_id]
                    AND INXCLS.[is_included_column] = 0
                FOR XML PATH('')
            )
            ,1
            ,1
            ,''
        ) 
    ) DS1 ([IndexColumnsNames])
    CROSS APPLY 
    (
        SELECT STUFF
        (
            (
                SELECT ' [' + CLS.[name] + ']'
                FROM [sys].[index_columns] INXCLS
                INNER JOIN [sys].[columns] CLS 
                    ON INXCLS.[object_id] = CLS.[object_id] 
                    AND INXCLS.[column_id] = CLS.[column_id]
                WHERE INX.[object_id] = INXCLS.[object_id] 
                    AND INX.[index_id] = INXCLS.[index_id]
                    AND INXCLS.[is_included_column] = 1
                FOR XML PATH('')
            )
            ,1
            ,1
            ,''
        ) 
    ) DS2 ([IncludedColumnsNames])
    where TBL.[name] <> 'sysdiagrams'
          and TBL.[name] in (SELECT Nome_Tabela from @Filtro_tabelas)
    order by TBL.[name],INX.[name]; 




    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.


    Esse Script retorna esse resultado:

    dicomimages dbo images_lnk nonclustered [seriesinst] NULL
    dicomimages dbo PK__dicomima__CE28694F6DEC4894 clustered [sopinstanc] NULL

    São os dois indicies usados pela tabela dicomimages!

    sábado, 4 de janeiro de 2020 13:53

  • Vinícius,

    Por gentileza, você poderia postar o resultado no formato de tabela? Copie e cole no Excel, depois do Excel Copie o Cole diretamente aqui nos fóruns.

    Ou então salve o arquivo em algum drive e nos compartilhe, desta forma que foi retornado fica complicado entender.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    sábado, 4 de janeiro de 2020 13:58
    Moderador
  • Vinicius,

    Ok, no post que eu publiquei existem 4 scripts, acredito que o primeiro se refira justamente ao uso da sys.dm_os_buffer_descriptors, o que vai nos permitir identificar o que neste momento o seu SQL Server esta deixando em buffer cache, ou seja, em área de memória residente em disco.

    O segundo script se for pela ordem que eu publiquei se refere a relação de índices clustered que podem estar apresentando falhas.

    Você executou seguindo a sequência que eu postei?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sábado, 4 de janeiro de 2020 14:08
    Moderador
  • Script:

    -- código #4 
    -- Fonte: https://stackoverflow.com/users/1080354/gotqn
    -- OBTÉM ÍNDICES EXISTENTES PARA A TABELA


    -- informe o nome do banco de dados
    USE AURORA;

    -- informe o nome das tabelas a obter informações
    declare @Filtro_tabelas TABLE (Nome_Tabela varchar(30));
    INSERT into @Filtro_tabelas values 
      ('dicomimages');

    --
    SELECT TBL.[name] as [Nome da tabela],
           schema_name (TBL.schema_id) as [Nome do esquema],
           INX.[name] as [Nome do índice],
           lower (INX.[type_desc]) as [Tipo de índice],
           DS1.[IndexColumnsNames] as [Colunas do índice],
           DS2.[IncludedColumnsNames] as [Colunas incluídas]
    FROM [sys].[indexes] INX
    INNER JOIN [sys].[tables] TBL
        ON INX.[object_id] = TBL.[object_id]
    CROSS APPLY 
    (
        SELECT STUFF
        (
            (
                SELECT ' [' + CLS.[name] + ']'
                FROM [sys].[index_columns] INXCLS
                INNER JOIN [sys].[columns] CLS 
                    ON INXCLS.[object_id] = CLS.[object_id] 
                    AND INXCLS.[column_id] = CLS.[column_id]
                WHERE INX.[object_id] = INXCLS.[object_id] 
                    AND INX.[index_id] = INXCLS.[index_id]
                    AND INXCLS.[is_included_column] = 0
                FOR XML PATH('')
            )
            ,1
            ,1
            ,''
        ) 
    ) DS1 ([IndexColumnsNames])
    CROSS APPLY 
    (
        SELECT STUFF
        (
            (
                SELECT ' [' + CLS.[name] + ']'
                FROM [sys].[index_columns] INXCLS
                INNER JOIN [sys].[columns] CLS 
                    ON INXCLS.[object_id] = CLS.[object_id] 
                    AND INXCLS.[column_id] = CLS.[column_id]
                WHERE INX.[object_id] = INXCLS.[object_id] 
                    AND INX.[index_id] = INXCLS.[index_id]
                    AND INXCLS.[is_included_column] = 1
                FOR XML PATH('')
            )
            ,1
            ,1
            ,''
        ) 
    ) DS2 ([IncludedColumnsNames])
    where TBL.[name] <> 'sysdiagrams'
          and TBL.[name] in (SELECT Nome_Tabela from @Filtro_tabelas)
    order by TBL.[name],INX.[name]; 

    ---

    Resultado:

    dicomimages dbo images_lnk nonclustered [seriesinst] NULL
    dicomimages dbo PK__dicomima__CE28694F6DEC4894 clustered [sopinstanc] NULL


    sábado, 4 de janeiro de 2020 14:26
  • Script:

    SELECT COUNT(*) AS cached_pages_count, 
                 COUNT(*)/128.0000 MB,
                  name AS BaseTableName, 
    			  IndexName,
                  IndexTypeDesc
    FROM sys.dm_os_buffer_descriptors AS bd
    	INNER JOIN	(
    				SELECT s_obj.name, 
    				             s_obj.index_id,
    				             s_obj.allocation_unit_id, 
    							 s_obj.OBJECT_ID,
    				             i.name IndexName, 
    							 i.type_desc IndexTypeDesc
    				FROM
    					(SELECT OBJECT_NAME(OBJECT_ID) AS name,	
    					              index_id,
    						          allocation_unit_id, 
    								  OBJECT_ID
    					 FROM sys.allocation_units AS au INNER JOIN sys.partitions AS p 
    					                                                        ON au.container_id = p.hobt_id	
    																			AND (au.TYPE = 1 OR au.TYPE = 3)
    					 UNION ALL
    					 SELECT OBJECT_NAME(OBJECT_ID) AS name,
    						          index_id, 
    								  allocation_unit_id, 
    								  OBJECT_ID
    					 FROM sys.allocation_units AS au INNER JOIN sys.partitions AS p 
    					                                                        ON au.container_id = p.partition_id
    																			AND au.TYPE = 2
    					) AS s_obj LEFT JOIN sys.indexes i 
    					                  ON i.index_id = s_obj.index_id
    			    	                  AND i.OBJECT_ID = s_obj.OBJECT_ID 
    			    ) AS obj ON bd.allocation_unit_id = obj.allocation_unit_id
    WHERE database_id = DB_ID() 
    and name not like 'sys%' 
    and IndexName <> 'null'
    GROUP BY name, index_id, IndexName, IndexTypeDesc
    ORDER BY cached_pages_count DESC;

    Resultado:

    35893 28.041.406.250 dicomimages PK__dicomima__CE28694F6DEC4894 CLUSTERED
    32946 25.739.062.500 dicomseries PK__dicomser__01A28A43440B1D61 CLUSTERED
    26981 21.078.906.250 worklistintegration PK__worklist__3E1BFD227A8729A3 CLUSTERED
    25646 20.035.937.500 dicomstudies PK__dicomstu__E0CE76834BAC3F29 CLUSTERED
    14920 11.656.250.000 dicomimages images_lnk NONCLUSTERED
    12647 9.880.468.750 worklist PK__worklist__45DF0E1679FD19BE CLUSTERED
    6090 4.757.812.500 dicomstudies idx_patientid NONCLUSTERED
    3988 3.115.625.000 dicomstudies idx_dicomstudies_institutio NONCLUSTERED
    3727 2.911.718.750 report PK__report__685DC2CB025D5595 CLUSTERED
    3607 2.817.968.750 dicomstudies idx_stationnam NONCLUSTERED
    3501 2.735.156.250 dicomstudies idx_nmaccessionnumber NONCLUSTERED
    3456 2.700.000.000 dicomstudies idx_studydate NONCLUSTERED
    2947 2.302.343.750 reporttext PK__reportte__01F941A021D600EE CLUSTERED
    2886 2.254.687.500 migrationlog PK__migratio__8AF1F1473EDC53F0 CLUSTERED
    1844 1.440.625.000 worklistpatient PK__worklist__BC868E6E0F183235 CLUSTERED
    1598 1.248.437.500 worklistintegration worklistintegration_accnumber NONCLUSTERED
    1515 1.183.593.750 INTEG_REPORT_CLICKVITA PK__INTEG_RE__C8A4484A149C0161 CLUSTERED
    1478 1.154.687.500 dicomseries series_lnk NONCLUSTERED
    1386 1.082.812.500 dicomstudies idx_nmstudydescr NONCLUSTERED
    947 739.843.750 dicomstudies idx_nmpatientname NONCLUSTERED
    795 621.093.750 activitycontrol PK__activity__509425D13493CFA7 CLUSTERED
    754 589.062.500 dicomstudies idx_accessionn NONCLUSTERED
    714 557.812.500 INTEG_IAN_CLICKVITA PK__INTEG_IA__E010B67C186C9245 CLUSTERED
    506 395.312.500 dicomstudies idx_dicomstudies_reqdepartment NONCLUSTERED
    476 371.875.000 dicompatients PK__dicompat__069AC231403A8C7D CLUSTERED
    442 345.312.500 report IDX_CO_STUDYINSTA NONCLUSTERED
    432 337.500.000 worklist idx_co_patientid NONCLUSTERED
    379 296.093.750 dicomstudies idx_nmreferphysi NONCLUSTERED
    262 204.687.500 reportlog idx_reportlog_nureport NONCLUSTERED
    247 192.968.750 indexedreport PK__indexedr__D9E0EC607C055DC1 CLUSTERED
    242 189.062.500 reporttext IDX_CO_REPORT_TXT NONCLUSTERED
    221 172.656.250 statusseries PK__statusse__013EF58653C2623D CLUSTERED
    194 151.562.500 procedurerequester idx_proc_req_co_doctor_requester NONCLUSTERED
    156 121.875.000 reportlog PK__reportlo__8F4AFD4608162EEB CLUSTERED
    138 107.812.500 dicomstudies idx_nmstationname NONCLUSTERED
    138 107.812.500 reporttext IDX_CO_REPORTAUDIO_TXT NONCLUSTERED
    130 101.562.500 indexedreport UQ__indexedr__FF1E57B07EE1CA6C NONCLUSTERED
    109 0.85156250 report IDX_CO_REPORTTEXT NONCLUSTERED
    108 0.84375000 procedurerequester idx_proc_req_no_studyinsta NONCLUSTERED
    104 0.81250000 exportresult exportresult_pk CLUSTERED
    102 0.79687500 statusstudy UQ__statusst__EF5D66FE160F4887 NONCLUSTERED
    95 0.74218750 dicomstudies idx_dicomstudies_insuranceplan NONCLUSTERED
    93 0.72656250 dicomstudies idx_nmstudydate NONCLUSTERED
    91 0.71093750 dicomstudies idx_nmcustomsearchfield NONCLUSTERED
    90 0.70312500 dicomstudies idx_processed NONCLUSTERED
    74 0.57812500 exportstudies PK__exportst__F37BB4047B264821 CLUSTERED
    65 0.50781250 procedurerequester PK__procedur__41D705E310E07F16 CLUSTERED
    54 0.42187500 statusstudy PK__statusst__46C12E221332DBDC CLUSTERED
    53 0.41406250 viewerpreferences pk_viewerpreferences CLUSTERED
    49 0.38281250 worklistmap idx_co_accessnumberdst NONCLUSTERED
    41 0.32031250 doctor PK__doctor__958C9DD6778AC167 CLUSTERED
    41 0.32031250 worklistmap PK__worklist__8FDEAEFF7DCDAAA2 CLUSTERED
    35 0.27343750 worklistmap idx_co_accessnumbersrc NONCLUSTERED
    34 0.26562500 worklist idx_nu_stepstartdate NONCLUSTERED
    25 0.19531250 worklist idx_no_modalityris NONCLUSTERED
    20 0.15625000 applicationclient PK__applicat__3950D8932BFE89A6 CLUSTERED
    17 0.13281250 seriesremovelog PK__seriesre__53456A0C536D5C82 CLUSTERED
    12 0.09375000 procedurerequester idx_proc_req_accessionnumber NONCLUSTERED
    11 0.08593750 procedurerequester idx_no_accessionnumber NONCLUSTERED
    11 0.08593750 procedurerequester idx_proc_req_co_doctor_performer NONCLUSTERED
    10 0.07812500 doctor idx_doctor_fk_systemuser NONCLUSTERED
    7 0.05468750 applicationclientdefault PK__applicat__430981F52FCF1A8A CLUSTERED
    5 0.03906250 layout PK__layout__7557C0E33A379A64 CLUSTERED
    4 0.03125000 worklistdevice PK__worklist__3AF02B526E8B6712 CLUSTERED
    3 0.02343750 editstudyoperationlog pk_editstudyoperationlog CLUSTERED
    3 0.02343750 worklist idx_no_accessionnumber NONCLUSTERED
    3 0.02343750 hangingprotocol pk_hangingprotocol CLUSTERED
    2 0.01562500 editstudytrace pk_editstudytrace CLUSTERED
    1 0.00781250 dicomclient PK__dicomcli__AD831F8668487DD7 CLUSTERED
    1 0.00781250 doctordefaults PK__doctorde__CE637EFE23F3538A CLUSTERED
    1 0.00781250 dicomservicerejected PK__dicomser__BA7E4E9850FB042B CLUSTERED
    1 0.00781250 gatewaysearchnode PK__gateways__A19A56FA47A6A41B CLUSTERED
    1 0.00781250 windowsdefaults PK__windowsd__EBDBD5A24277DAAA CLUSTERED
    1 0.00781250 sequencegenerator PK__sequence__978548DA0B91BA14 CLUSTERED
    1 0.00781250 filmformats PK__filmform__849856D146486B8E CLUSTERED
    1 0.00781250 recordplain PK__recordpl__0B63544201F34141 CLUSTERED
    1 0.00781250 migrationschedule PK__migratio__E56CFBA13552E9B6 CLUSTERED
    1 0.00781250 applicationdescriptor PK__applicat__CE5D620274CE504D CLUSTERED
    1 0.00781250 printheader pk_printheader CLUSTERED
    1 0.00781250 printsystem PK__printsys__68C418582DB1C7EE CLUSTERED
    1 0.00781250 recordplainserie PK__recordpl__743931890B7CAB7B CLUSTERED
    1 0.00781250 uf PK__uf__52E849600F624AF8 CLUSTERED
    1 0.00781250 searchnode PK__searchno__A19A56FA43D61337 CLUSTERED
    1 0.00781250 sopclass PK__sopclass__F86320154959E263 CLUSTERED
    1 0.00781250 reportprinttemplate PK__reportpr__193116DB10AB74EC CLUSTERED
    1 0.00781250 requestingservice requestingservice_pk CLUSTERED
    1 0.00781250 dicomservers PK__dicomser__B0B1807A42ACE4D4 CLUSTERED
    1 0.00781250 custommodality PK__custommo__D47FAD281DB06A4F CLUSTERED
    1 0.00781250 printers PK__printers__4269EABA24285DB4 CLUSTERED
    1 0.00781250 backupsystem PK__backupsy__EB4922B14301EA8F CLUSTERED
    1 0.00781250 transfersyntax PK__transfer__487E30D560A75C0F CLUSTERED
    1 0.00781250 printerror PK__printerr__EA8276CC2057CCD0 CLUSTERED
    1 0.00781250 searchnode_searchnode PK__searchno__3EDCE33E5F7E2DAC CLUSTERED
    1 0.00781250 modality PK__modality__29B29BB205D8E0BE CLUSTERED
    1 0.00781250 pacssearchnode PK__pacssear__A19A56FA51300E55 CLUSTERED
    1 0.00781250 recordsystems PK__recordsy__EB4922B1681373AD CLUSTERED
    1 0.00781250 migrationschedulefilter PK__migratio__F4B674533A179ED3 CLUSTERED
    1 0.00781250 dicomservice PK__dicomser__7FD511E06EF57B66 CLUSTERED
    1 0.00781250 service PK__service__462A7F86405A880E CLUSTERED
    1 0.00781250 devicestore PK__devicest__19B17A9D19DFD96B CLUSTERED
    1 0.00781250 recordsystemsfilter PK__recordsy__FA93AD436DCC4D03 CLUSTERED
    1 0.00781250 worklistdevicemodalityris PK__worklist__F28EF7AB762C88DA CLUSTERED
    1 0.00781250 recorditemdownload PK__recordit__CC38260E7775B2CE CLUSTERED
    1 0.00781250 printsystemprinters PK__printsys__4CDD7891318258D2 CLUSTERED
    1 0.00781250 seriesremoveconfig PK__seriesre__32BEC93E4EA8A765 CLUSTERED
    1 0.00781250 auroraversioninfo auroraversioninfo_pk CLUSTERED
    1 0.00781250 defaultvalue PK__defaultv__9E35596B2180FB33 CLUSTERED
    1 0.00781250 worklistcharacterreplacement PK__worklist__0F8A110E056ECC6A CLUSTERED

    sábado, 4 de janeiro de 2020 14:27
  • Vinicius,

    Estranho, pois eu havia postado este scripts em posts distintos, sim o primeiro este condição deveria ser AND i.index_id = 1.

    Mas tranquilo, para obter informações sobre os índices Clustered execute o código abaixo:

    -- Exemplo 1 --

    SELECT OBJECT_NAME(s.[object_id]) AS [Table Name] , i.name AS [Index Name] , i.index_id , user_updates AS [Total Writes] , user_seeks + user_scans + user_lookups AS [Total Reads] , user_updates - ( user_seeks + user_scans + user_lookups ) AS [Difference] FROM sys.dm_db_index_usage_stats AS s WITH ( NOLOCK ) INNER JOIN sys.indexes AS i WITH ( NOLOCK ) ON s.[object_id] = i.[object_id] AND i.index_id = s.index_id WHERE OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1 AND s.database_id = DB_ID() AND user_updates > ( user_seeks + user_scans + user_lookups ) AND i.index_id = 1 -- Clustered ORDER BY [Difference] DESC , [Total Writes] DESC , [Total Reads] ASC ;


    Para os NonClustered execute o outro:

    -- Exemplo 2 --

    SELECT OBJECT_NAME(s.[object_id]) AS [Table Name] , i.name AS [Index Name] , i.index_id , user_updates AS [Total Writes] , user_seeks + user_scans + user_lookups AS [Total Reads] , user_updates - ( user_seeks + user_scans + user_lookups ) AS [Difference] FROM sys.dm_db_index_usage_stats AS s WITH ( NOLOCK ) INNER JOIN sys.indexes AS i WITH ( NOLOCK ) ON s.[object_id] = i.[object_id] AND i.index_id = s.index_id WHERE OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1 AND s.database_id = DB_ID() AND user_updates > ( user_seeks + user_scans + user_lookups ) AND i.index_id > 1 -- NonClustered ORDER BY [Difference] DESC , [Total Writes] DESC , [Total Reads] ASC ;

    Vou excluir os posts anteriores afim de organizar melhor este postagem.

    Peço que retorne o resultado novamente.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sábado, 4 de janeiro de 2020 19:01
    Moderador
  • Vinicius,

    Uma outra abordagem mais simples que pode ser implementada dependendo do volume de dados da tabela dbo.dicomimages seria realizar a criação de uma outra tabela similar a ela, com a mesma estrutura de colunas, chaves primárias, constraints e índices.

    Posteriormente realizar o processo de cópia de dados entre as tabelas, ao final excluir a atual e renomear a nova com nome da antiga.

    Mas é claro, este procedimento pode ser mais simples na sua construção, por outro lado mais custoso em relação ao processamento de I/O, pois estaremos lendo e escrevendo ao mesmo tempo.

    O processo de criação de novos índices em uma tabela já existente dependendo do volume é algo para se considerar, eu particularmente gostei da sugestão do argumentador anterior, gostaria somente de mais uma vez propor o uso do Recovery Model Bulk_Logged ou Simple para diminuir o máximo possível a escrita e uso do Transaction Log.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sábado, 4 de janeiro de 2020 23:07
    Moderador
  • Deleted
    domingo, 5 de janeiro de 2020 04:21
  • Vinicius,

    Uma outra abordagem mais simples que pode ser implementada dependendo do volume de dados da tabela dbo.dicomimages seria realizar a criação de uma outra tabela similar a ela, com a mesma estrutura de colunas, chaves primárias, constraints e índices.

    Posteriormente realizar o processo de cópia de dados entre as tabelas, ao final excluir a atual e renomear a nova com nome da antiga.

    Mas é claro, este procedimento pode ser mais simples na sua construção, por outro lado mais custoso em relação ao processamento de I/O, pois estaremos lendo e escrevendo ao mesmo tempo.

    O processo de criação de novos índices em uma tabela já existente dependendo do volume é algo para se considerar, eu particularmente gostei da sugestão do argumentador anterior, gostaria somente de mais uma vez propor o uso do Recovery Model Bulk_Logged ou Simple para diminuir o máximo possível a escrita e uso do Transaction Log.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Qual o comando para fazer a copia de uma tabela para outra?
    Posso tentar fazer esse processo em uma base de teste que eu tenho!

    terça-feira, 7 de janeiro de 2020 14:30
  • ---

    Vinicius, no início deste tópico você comentou que rodou o CHECKDB mas que demorou tanto que teve que cancelá-lo. Como aparentemente o problema está restrito à tabela dicomimages, talvez você possa rodar o CHECKTABLE:

    -- código #7
    DBCC CHECKTABLE ('dbo.dicomimages', REPAIR_REBUILD) with ALL_ERRORMSGS;
     


    Eu executei o seguinte Script:

    Use aurora_copia
    GO
    ALTER DATABASE aurora_copia SET SINGLE_USER
    GO
    DBCC CHECKTABLE (dicomimages, REPAIR_REBUILD)  with ALL_ERRORMSGS;
    GO
    DBCC CHECKTABLE (dicomimages, REPAIR_ALLOW_DATA_LOSS) with ALL_ERRORMSGS;
    GO
    DBCC CHECKTABLE (dicomseries, REPAIR_REBUILD) with ALL_ERRORMSGS;
    GO
    DBCC CHECKTABLE (dicomseries, REPAIR_ALLOW_DATA_LOSS) with ALL_ERRORMSGS;
    GO
    ALTER DATABASE aurora_copia SET MULTI_USER
    GO
    
    
    Esse Script eu fiz em uma base de teste, ele demorou mas quando finalizou o processo aparentemente o problema foi resolvido! O problema é que na base de produção demorou mais tempo que eu tenho disponível!

    Foi um total de 60horas processando! Vou tentar executar cada etapa isolada para ver o tempo que demora!
    Mas tenho receio de que ao parar o processo no meio do CHECKTABLE isso possa piorar mais a situação!

    ----


    -- código #6
    SELECT T.[name] as [T name], I.[name] as [I name],
           I.index_id, I.is_unique, I.has_filter
      from sys.indexes as I
           join sys.tables as T on I.object_id = T.object_id
      where T.[name] = 'dicomimages'
            and I.[name] = 'images_lnk';


    Resultado:


    T name I name index_id is_unique has_filter
    dicomimages images_lnk 2 0 0

    ----

    -- código #5 v2

    -- (1) apaga índice images_lnk DROP INDEX dbo.images_lnk on dicomimages; -- (2) apaga chave primária ALTER TABLE dbo.dicomimages DROP CONSTRAINT PK__dicomima__CE28694F6DEC4894;

    -- (3) validação somente da tabela (agora sem índices)
    DBCC CHECKTABLE ('dbo.dicomimages') with ALL_ERRORMSGS;
    -- (4) recria chave primária ALTER TABLE dbo.dicomimages ADD CONSTRAINT PK_dicomina PRIMARY KEY CLUSTERED (sopinstanc); -- (5) recria índice images_lnk CREATE nonclustered INDEX images_lnk on dbo.dicomimages (seriesinst);

    Vou executar na base de teste,
    -----

    terça-feira, 7 de janeiro de 2020 14:41
  • Deleted
    terça-feira, 7 de janeiro de 2020 15:24
  • Vinícius,

    Você pode fazer basicamente de duas formas:

    -- Utilizando Select...Into --
    Select Coluna1, Coluna2, Coluna3.....
    Into NovaTabelaDicomSeries
    From Dicomseries
    Go
    
     

    Utilizando o Select...Into você cria uma nova tabela com a mesma estrutura da utilizada na cláusula From, mas sem a existência dos índices e constraints.

    A outra forma já com a duas tabelas criadas seria através do Insert....Select, o qual o comando Insert realiza a captura do resultado que seria retornado em tela pelo comando Select e inseri diretamente na tabela.

    Veja abaixo:

    -- Utlizando o Insert...Select --
    Insert Into NovoTabelaDicomSeries (Coluna1, Coluna2, Coluna3......)
    Select Coluna1, Coluna2, Coluna3.....
    From Dicomseries
    Go

    Estas são algumas das possibilidades mas simples, o tempo de processamento demando para a execução destes exemplos vai depender em muito do volume de dados que você estará trabalhando.

    O exemplo de Insert...Select, pode ser uma alternativa mais aplicavél para você ir realizando aos poucos, ou seja, você poderá adicionar uma cláusula Where e demais condições para estabelecer filtros de dados que serão coletados pelo Select, os quais vão sendo inseridos mediante a sua necessidade.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 7 de janeiro de 2020 18:07
    Moderador
  • Bom dia, desculpe a demora para responder!

    Segue o print do código que executei no banco de dados teste!

    O Script ficou rodando durante 7 dias e ainda assim eu tive que cancelar ele!

    segunda-feira, 20 de janeiro de 2020 15:10
  • Adicione o ROLLBACK IMMEDIATE e teste novamente.

    Conexões penduradas devem estar te impedindo de dar o SINGLE USER.

    "ALTER DATABASE aurora_copia SET SINGLE_USER WITH ROLLBACK IMMEDIATE"


    segunda-feira, 20 de janeiro de 2020 17:33
  • Bom dia, desculpe a demora para responder!

    Segue o print do código que executei no banco de dados teste!

    O Script ficou rodando durante 7 dias e ainda assim eu tive que cancelar ele!

    Vinícius,

    O SQL Server Management Studio chegou a listar alguma mensagem na guia de mensagens?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 20 de janeiro de 2020 18:34
    Moderador
  • Coloquei para rodar, assim que terminar aviso aqui!

    O que o WITH ROLLBACK IMMEDIATE faz?

    segunda-feira, 24 de fevereiro de 2020 18:45
  • Na guia de mensagens eu não cliquei! Vou clicar na próxima tentativa!
    segunda-feira, 24 de fevereiro de 2020 18:46
  • Coloquei para rodar, assim que terminar aviso aqui!

    O que o WITH ROLLBACK IMMEDIATE faz?

    Efetua rollback forçado das transações se necessário, permitindo que você entre em modo single user sem ter esperar.
    terça-feira, 25 de fevereiro de 2020 01:17