SQL: try … catch rollback

DECLARE @ErrorMessage NVARCHAR(4000)
    ,@ErrorSeverity INT
    ,@ErrorState INT

BEGIN TRY
    BEGIN TRAN

    -- INSERT
    -- UPDATE
    -- DELETE

    COMMIT TRAN
END TRY

BEGIN CATCH
    IF (@@TRANCOUNT > 0)
    BEGIN
        ROLLBACK TRAN
    END

    SELECT @ErrorMessage = ERROR_MESSAGE()
        ,@ErrorSeverity = ERROR_SEVERITY()
        ,@ErrorState = ERROR_STATE()

    -- Use RAISERROR inside the CATCH block to return error
    -- information about the original error that caused
    -- execution to jump to the CATCH block.
    RAISERROR (
            @ErrorMessage
            ,@ErrorSeverity
            ,@ErrorState
            )
END CATCH

Como listar tabelas e Stored Procedures não utilizadas

Tabelas

USE banco
GO

SELECT t.[name] AS 'Table'
    ,SUM(i.user_seeks + i.user_scans + i.user_lookups) AS 'Total accesses'
    ,SUM(i.user_seeks) AS 'Seeks'
    ,SUM(i.user_scans) AS 'Scans'
    ,SUM(i.user_lookups) AS 'Lookups'
FROM sys.dm_db_index_usage_stats i
RIGHT JOIN sys.tables t
    ON (t.object_id = i.object_id)
GROUP BY i.object_id
    ,t.[name]
ORDER BY [Total accesses]

Stored Procedures

Note que a view dm_exec_procedure_stats retorna somente as procedures que estão em cache. Portanto, procedures que foram executadas recentemente mas saíram do cache podem aparecer como não executadas. Indico analisar várias vezes antes de apagar.

USE banco
GO

SELECT sc.[name]
    ,p.[name]
    ,st.last_execution_time
FROM sys.procedures AS p
JOIN sys.schemas AS sc
    ON p.[schema_id] = sc.[schema_id]
LEFT JOIN sys.dm_exec_procedure_stats AS st
    ON p.[object_id] = st.[object_id]
ORDER BY st.last_execution_time
    ,p.[name]

http://stackoverflow.com/questions/290773/identifying-unused-objects-in-microsoft-sql-server-2005
http://stackoverflow.com/questions/10421439/tsql-query-to-find-un-used-stored-procedures

Java – SQLServerException: Connection reset by peer

Hoje encontrei problemas ao conectar no SQL Server, sem motivos aparentes. Testei a conexão no SQL Server Management Studio e funcionou normalmente.

Depurando a aplicação encontrei as seguintes exceções:

  • com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error
  • java.security.NoSuchAlgorithmException: Could not create cipher AES/256
  • java.security.InvalidKeyException: Illegal key size
  • O driver não pôde estabelecer uma conexão segura com o SQL Server usando a criptografia SSL

Para corrigir o problema, baixe o Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files. Copie os arquivos local_policy.jar e US_export_policy.jar para a pasta jre\lib\security. No meu caso, são duas:

  • C:\Program Files\Java\jdk1.7.0_17\jre\lib\security
  • C:\Program Files (x86)\Java\jre7\lib\security

Fonte: http://stackoverflow.com/questions/6900542/java-security-invalidkeyexception-illegal-key-size