Neste post, vou comentar sobre algumas procedures estendidas (extended procedures) do SQL Server e que são muito úteis. Até este post, não encontrei nenhuma documentação oficial da Microsoft sobre isso resolvi comentar sobre ela, além de demonstrar alguns exemplos.
Uma procedure estendida (XP) é um link para uma biblioteca dinâmica (DLL), programada utilizando a API SQL Server Open Data Services API e são utilizadas para estender as funcionalidades do SQL Server. Você pode utilizar das várias procedures que vem com o SQL Server ou criar as suas próprias procedures estendidas utilizando as linguagens de programação C ou C++.
Atualmente, não há um incentivo muito grande para a utilização dessas procedures, pois elas foram depreciadas e devem ser removidas em alguma versão futura do SQL Server. A alternativa mais viável para a substituição das XP Procedures é o uso de procedures SQL CLR.
Entretanto, não podia perder a oportunidade de comentar sobre essas SP’s, que sempre me auxiliaram em várias ocasiões e ainda vejo muitas rotinas as utilizando.
Para visualizar a lista de procedures estendidas presentes na sua instalação, basta executar o comando abaixo:
Transact-SQL
1
EXECmaster.dbo.sp_helpextendedproc
sp_MSgetversion
Visualizar informações
Essa procedure pode ser utilizada para retornar a versão corrente do SQL Server.
Exemplo de uso:
Transact-SQL
1
EXECmaster..sp_MSgetversion
Solução alternativa:
Transact-SQL
1
SELECT@@version
xp_dirtree
Visualizar informações
Essa procedure pode ser utilizada para listar todas as pastas e sub-pastas (recursivamente) a partir de um determinado diretório.
Exemplo de uso:
Transact-SQL
1
EXECmaster..xp_dirtree'C:\'
xp_subdirs
Visualizar informações
Essa procedure pode ser utilizada para retornar os diretórios (não recursivos) a partir de um diretório informado. Em comparação com a procedure xp_dirtree, ela retorna apenas as linhas onde a profundidade do nó (depth) = 1.
Exemplo de uso:
Transact-SQL
1
EXECmaster.dbo.xp_subdirs'C:\Users\'
xp_enum_oledb_providers
Visualizar informações
Essa procedure pode ser utilizada para retornar todos os provedores de OLE DB disponíveis. Ela retorna o nome do provedor, o parse name e a descrição do provedor.
Exemplo de uso:
Transact-SQL
1
EXECmaster..xp_enum_oledb_providers
xp_enumerrorlogs
Visualizar informações
Essa procedure pode ser utilizada para retornar todos os arquivos de log de erro e as datas de alteração.
Exemplo de uso:
Transact-SQL
1
EXECmaster.dbo.xp_enumerrorlogs
xp_readerrorlog
Visualizar informações
Essa procedure pode ser utilizada para ler o arquivo de log de erro do SQL Server. Como parâmetro opcional, você pode informar o # do arquivo. Caso não seja informado, irá mostrar o log atual.
Lista de parâmetros:
1º parâmetro: Número do arquivo de log que você deseja visualizar (0 = Current, 1 = Archive #1, 2 = Archive #2)
2º parâmetro: Tipo do arquivo de log (1 ou NULL para log de erro, 2 para log do SQL Agent)
3º parâmetro: A string que você gostaria de buscar
4º parâmetro: Uma outra string para refinar o resultado já filtrado
5º parâmetro: Data inicial do log
6º parâmetro: Data final do log
7º parâmetro: Ordenação dos resultados (‘asc’ = ascendente, ‘desc’ = descendente)
Essa procedure pode ser utilizada para gravar mensagens de eventos no log do sistema operacional.
Exemplo de uso:
Transact-SQL
1
EXECmaster..xp_logevent50001,'Teste de mensagem no Event Viewer','INFORMATIONAL'-- INFORMATIONAL, WARNING, ERROR
xp_enumgroups
Visualizar informações
Essa procedure pode ser utilizada para retornar todos os grupos da máquina e suas descrições.
Exemplo de uso:
Transact-SQL
1
EXECmaster..xp_enumgroups
xp_fileexist
Visualizar informações
Essa procedure pode ser utilizada para retornar todos os grupos da máquina e suas descrições.
Exemplo de uso:
Transact-SQL
1
EXECmaster.dbo.xp_fileexist'C:\Teste.html'
xp_create_subdir
Visualizar informações
Essa procedure pode ser utilizada para criar diretórios no seu servidor SQL Server.
Exemplo de uso:
Transact-SQL
1
EXECmaster.dbo.xp_create_subdir'C:\Dirceu\Teste'
xp_delete_file
Visualizar informações
Essa procedure pode ser utilizada para apagar arquivos de backup ou report. Apesar do nome parecer que ela pode apagar qualquer arquivo, ela é restrita para apenas arquivos de backup (BAK) e relatórios (RPT).
Exemplo de uso:
Transact-SQL
1
2
3
4
5
6
EXECmaster.dbo.xp_delete_file
0,-- (0 = Arquivo de backup, 1 = Arquivo de report)
'C:\Backups\',-- diretório (terminando com "\")
'bak',-- extensão do arquivo (sem o ".")
'2015-08-31',-- data de corte para deletar
1-- flag para subdiretórios (1 = incluir sub-diretórios, 0 = não incluir)
xp_fixeddrives
Visualizar informações
Essa procedure pode ser utilizada para listar todas as unidades de disco físico ou drives mapeados, informando o espaço livre.
Exemplo de uso:
Transact-SQL
1
EXECmaster.dbo.xp_fixeddrives
xp_availablemedia
Visualizar informações
Essa procedure pode ser utilizada para listar todas as unidades de backup conectadas ao servidor. Caso não tenha nenhuma unidade, a SP irá retornar todos as unidades de disco.
Exemplo de uso:
Transact-SQL
1
EXECmaster.dbo.xp_availablemedia
xp_getnetname
Visualizar informações
Essa procedure pode ser utilizada para retornar o nome WINS da máquina onde sua sessão está conectada.
Exemplo de uso:
Transact-SQL
1
EXECmaster..xp_getnetname
xp_regdeletekey
Visualizar informações
Essa procedure pode ser utilizada para remover uma chave no Registro do Windows da instalação do SQL Server. Muito cuidado ao utilizar essa procedure, pois pode danificar a instalação do Windows nesse servidor.
Exemplo de uso:
Transact-SQL
1
2
3
EXECmaster.dbo.xp_regdeletekey
@rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Teste_Dirceu'
xp_regdeletevalue
Visualizar informações
Essa procedure pode ser utilizada para remover um valor específico de uma chave no Registro do Windows da instalação do SQL Server. Muito cuidado ao utilizar essa procedure, pois pode danificar a instalação do Windows nesse servidor.
Exemplo de uso:
Transact-SQL
1
2
3
4
EXECmaster.dbo.xp_regdeletevalue
@rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Teste_Dirceu',
@value_name='Oracle Database'
xp_regread
Visualizar informações
Essa procedure pode ser utilizada para consultar um valor específico de uma chave no Registro do Windows da instalação do SQL Server.
Exemplo de uso:
Transact-SQL
1
2
3
4
5
6
7
8
9
DECLARE@RetornoVARCHAR(4000)
EXECmaster..xp_regread
@rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Teste_Dirceu',
@value_name='Campeão Carioca 2015',
@value=@RetornoOUTPUT
SELECT@Retorno
xp_regwrite
Visualizar informações
Essa procedure pode ser utilizada para gravar um valor específico de uma chave no Registro do Windows da instalação do SQL Server. Muito cuidado ao utilizar essa procedure, pois pode danificar a instalação do Windows nesse servidor.
Exemplo de uso:
Transact-SQL
1
2
3
4
5
6
EXECmaster..xp_regwrite
@rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Teste_Dirceu',
@value_name='Flamengo na Copa do Brasil 2015',
@type='REG_SZ',
@value='Eliminado pelo Vasco'
xp_cmdshell
Visualizar informações
Permite executar qualquer comando do Prompt de comando (DOS) no servidor. Muito cuidado ao utilizar essa procedure, pois pode danificar a instalação do Windows nesse servidor.
Para utilizar esse comando, é necessário habilitar esse recurso, uma vez que se mal utilizado, pode danificar seriamente a sua instalação:
Transact-SQL
1
2
3
4
5
6
7
8
EXECsp_configure'show advanced options',1
GO
RECONFIGURE
GO
EXECsp_configure'xp_cmdshell',1-- 0 para desativar