quinta-feira, 18 de novembro de 2010

Database Snapshot - Tamanho Real

Como muitos já sabem o snapshot usa arquivos sparses, então o tamanho do arquivo que aparece no Windows não é o tamanho real, aquele é o tamanho do arquivo do banco de dados original. Então fiquei curioso para saber o tamanho real daquele database, depois de alguns dias pesquisando bastante sobre o assunto encontrei a DMV sys.dm_io_virtual_file_stats, pode-se passar como parâmetro para ela o ID do banco de dados.

Nesta DMV existe um campo size_on_disk_bytes que exibe em bytes o tamanho do arquivo no disco, fazendo alguns cáculos, chegamos no valor...

Executando a seguinte consulta no database snapshot:

select
database_id,
CAST((size_on_disk_bytes)/(1024.00*1024) AS NUMERIC(18,2)) AS Size_on_Disk_MB
from sys.dm_io_virtual_file_stats(DB_ID(), NULL)

Resultado:



Outra forma de vermos o tamanho real do banco snapshot é indo na propriedade do arquivo.




Abraços,
Rodrigo Figueiredo
figueiredo.rodrigo@hotmail.com

quarta-feira, 10 de novembro de 2010

SQL Server Denali ou SQL 11

Galera,

   Dos dias 8 a 11 de novembro está acontecendo o evento PASS Summit, este é simplesmente o maior e melhor evento de SQL Server do mundo!

Foi divulgado no PASS o novo SQL Server, o Microsoft® SQL Server® code-named 'Denali' - Community Technology Preview 1 (CTP1).

Segue link para baixar:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6a04f16f-f6be-4f92-9c92-f7e5677d91f9

Segue algumas novas funcionalidades do SQL 11:



  • Agora poderemos trabalhar dentro do Analysis Services com uma interface gráfica idêntica ao Excel, utilizando o VS 2010, para que tenhamos o mesmo poder que o poweruser tem quando fazendo as análises dele, mas para ser usado durante o desenvolvimento, e utilizando os recursos de processamento do servidor. Na demonstração foi apresentado uma Demo trabalhando com 2 bilhões de linhas, que foram carregadas depois para o PowerPivot, e durante a ordenação em memória dos dados foi atingida uma velocidade de 1 TRILHÃO de linhas por minuto.



  • Column Data Store, resumindo bastante é uma nova forma de armazenar os dados, utilizando o algoritmo VertiPaq, utilizado pelo PowerPivot, mas não estamos falando de B.I., estou falando de utilizar o algoritmo para compressão dos dados utilizado no PowerPivot, dentro do banco RELACIONAL, na demonstração pegamos os mesmos 2 bilhões de linhas de antes, fazemos algumas agregações para retornar “apenas” 18 milhões de linhas.. tudo em alguns segundos!



  • Projeto Crescent. Nova ferramenta para relatórios, via web, sensacional, em alguns segundos o usuário final cria relatórios/dashboards com animações, gráficos e tudo que um relatório gerencial profissional merece.



  • Integração entre soluções de HA (alta disponibilidade) e DR (recuperação de desastres). Aqui teremos muitas novidades, onde poderemos criar grupos de disponibilidade, configurar até 5 níveis de severidade para iniciar um failover, redirecionamento automático dos clientes, ponto central para gerenciamento do HA e DR, utilização dos sistemas stand-by como servidores de relatórios, jogando a carga de leitura para esses servidores. 



  • Vamos esperar mais novidades que com certeza aparecerão.

    Books Online: http://msdn.microsoft.com/en-us/library/ms130214(SQL.110).aspx

    Referência: http://blogs.solidq.com/fferreira/Home.aspx

    Abraços,
    Rodrigo Figueiredo
    figueiredo.rodrigo@hotmail.com

    quinta-feira, 4 de novembro de 2010

    Criptografia Transparente de Dados - Final

    Irei mostrar todos os testes que fiz ao desabilitar a TDE de um banco de dados.

    Estou utilizando o  SQL Server 2008 Developer Edition com SP2, build 10.0.4000.

    Vamos lá...

    -- Desabilitando a criptografia do banco de dados   
    ALTER DATABASE Criptografia
    SET ENCRYPTION OFF
    GO
    Após executar este comando e desabilitar a TDE vamos executar a consulta:

    SELECT DB_NAME(e.database_id) AS DatabaseName,
                e.encryption_state,
        CASE e.encryption_state
                    WHEN 0 THEN 'No database encryption key present, no encryption'
                    WHEN 1 THEN 'Unencrypted'
                    WHEN 2 THEN 'Encryption in progress'
                    WHEN 3 THEN 'Encrypted'
                    WHEN 4 THEN 'Key change in progress'
                    WHEN 5 THEN 'Decryption in progress'
        END AS encryption_state_desc,
       key_algorithm +'_'+ convert(nvarchar,key_length) [Algoritmo],
                c.name [Nome Certificado],
                set_date [Data Criptografia]
        FROM sys.dm_database_encryption_keys AS e
        LEFT JOIN master.sys.certificates AS c
        ON e.encryptor_thumbprint = c.thumbprint

    Teremos o seguinte o resultado:


    Vemos que a criptografia está desabilitada mas o banco de dados ainda está associado ao certificado, vamos então excluir então a chave de criptografia do banco:

    USE Criptografia
    GO
    DROP DATABASE ENCRYPTION KEY
    GO

    Executando a consulta novamente veremos que somente o banco tempdb sairá no resultado:


    Neste momento se reiniciarmos o serviço do SQL e executarmos a consulta não retornará nada.

    Vamos agora desatachar o banco e tentar restaurar em outra instância usando o mesmo SQL Server 2008 Developer Edition com SP2, build 10.0.4000 só que sem nenhuma chave de criptografia ou certificado, teoricamente era para funcionar já que desabilitamos a TDE do banco, mas vamos ver o resultado.

    --Desatachando o banco
    USE master
    GO   
    sp_detach_db 'Criptografia'
    GO

    e agora vamos tentar atachar na outra instância:

    EXEC sp_attach_db @dbname = 'Criptografia',
        @filename1 = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Criptografia.mdf',
        @filename2 = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Criptografia_Log.ldf'
    GO

    Teremos o seguinte retorno:

    Msg 33111, Level 16, State 3, Line 1
    Cannot find server certificate with thumbprint '0xAA16E63CE30B041330332FA87A4C37E82F8ABC33'.
    Msg 1813, Level 16, State 2, Line 1
    Could not open new database 'Criptografia'. CREATE DATABASE is aborted.


    Neste momento eu não acreditei que não seria possível tirar a criptografia do banco, então fiz um backup da banco e tentei restaurar, tive o seguinte retorno:

    Processed 256 pages for database 'Criptografia', file 'Criptografia' on file 1.
    Processed 1 pages for database 'Criptografia', file 'Criptografia_log' on file 1.
    Msg 33111, Level 16, State 3, Line 1
    Cannot find server certificate with thumbprint '0xAA16E63CE30B041330332FA87A4C37E82F8ABC33'.
    Msg 3013, Level 16, State 1, Line 1
    RESTORE DATABASE is terminating abnormally.


    Após alguns dias pesquisando vi que no CU10 do SQL Server 2008 SP1 esse bug (Microsoft assumiu) foi corrigido. Decidi então fazer o teste.
    Instalei o SQL Server 2008 SP1 com CU10, build 2799

    Fiz os mesmos testes utilizando o SQL Server 2008 SP1 com CU10, build 2799 e realmente conseguir atachar e/ou restaurar o banco após desabilitar a criptografia TDE. Segundo a Microsoft o erro ocorria porque o arquivo .ldf do banco ficava com referências do certificado.

    Agora como sabemos o SQL Server 2008 SP2 só inclui o CU1 até CU8, então aconselho que quando for usar TDE utilize o SQL Server 2008 SP1 com CU10 ou então espere mais um tempo até sair o SP3 (se sair, hehehe), agora a outra é opção é NUNCA perder o certificado, assim você pode levar o banco para qualquer servidor utilizando o certificado.

    Abraços,
    Rodrigo Figueiredo
    figueiredo.rodrigo@hotmail.com