RESOURCE DATABASE

Galera, bom dia!

Hoje irei falar sobre a quinta base de dados de sistema do SQL SERVER, é isso mesmo! A partir do SQL 2005 a Microsoft introduziu uma quinta base de dados de sistema conhecida como Resource Database, seu nome real é mssqlsystemresource. Esta é uma base de dados que fica escondida aos usuários.

Porque a Microsoft introduziu esta base de dados?

A Resource Database é uma base read-only e oculta aos usuários como já falei acima, fisicamente ela contém todos objetos de sistema do SQL SERVER. Logicamente, todos objetos estão na sysschemas existente em cada base de dados. A Resource Database não contem dados de usuário ou metadados.
O ID desta base é sempre 32767, o principal propósito desta base é tornar os updates mais rápidos e fáceis. Desde que todos objetos residem na Resource Database, durante um update nós podemos apenas sobrescrever os seus arquivos com arquivos novos que isto já ira atualizar todos objetos de sistema existentes. Nas versões antigas do SQL todos objetos de sistema precisavam ser excluídos e recriados durante o upgrade e a instalação poderia vir a falhar caso um desses objetos apresentasse problemas. Por default, no SQL 2008 você irá encontrar os arquivos da Resource Database no diretório <drive>:\Program Files\Microsoft SQL Server\MSSQL1.<instance_name>\Binn\, já no SQL 2005 os arquivos se encontram em <drive>:\ Program Files\Microsoft SQL Server\MSSQL1\Data, são dois arquivos, um chamado mssqlsystemresource.mdf e o outro mssqlsystemresource.ldf.

É possível extrair um backup desta base de dados?

Por esta ser uma base escondida não é possível extrair seu backup via T-SQL, o que se pode fazer é parar os serviços do SQL SERVER, copiar seus arquivos para outro local e então iniciar os serviços do SQL novamente.

É possível verificar o que existe internamente na Resource Database?

Da mesma forma que não é possível a extração de um backup via T-SQL, um acesso ao conteúdo desta base via T-SQL também é inviável. Para checar o conteúdo da base podemos nos utilizar de um dos dois métodos abaixo:

1. Attach dos arquivos da base.
2. Rodando o SQL Server em single user mode.

METODO 1: Atachando os arquivos

1. Para o serviço do SQL SERVER.
2. Copie os arquivos da Resource Database para outro local.
3. Suba os serviços do SQL SERVER.
4. Realize o attach dos arquivos como se fosse uma base de usuário.

sp_attach_db 'ResourceDB_test','c:\TEST\mssqlsystemresource.mdf','c:\TEST\mssqlsystemresource.ldf'

Pronto! Você estará hábil a verificar seu conteúdo.

METODO 2: Rodando o SQL em single user mode.

1. Inicie o SQL em single user mode colocando o –m em seus parâmetros de inicialização no configuration manager.
2. Conecte-se ao SQL via cmd, você ainda não será capaz de ver a base porém poderá dar um “USE” na mesma que ira funcionar:
2.1 sqlcmd -S .\MSSQL2012A –E
2.2 USE mssqlsystemresource
2.3 go

No modo comum, só podemos obter duas informações da Resource Database, sua versão e data da última atualização que ela sofreu.

Capturando a versão:

SELECT SERVERPROPERTY('ResourceVersion')

Verificando última atualização:

SELECT SERVERPROPERTY('ResourceLastUpdateDateTime')

Espero que tenham gostado do post até a próxima!

André CR

Nenhum comentário:

Postar um comentário