Startup Procedures

Fala Galera,

Hoje, seguindo a linha do último artigo, que tratava dos parâmetros de inicialização do SQL Server, vamos falar um pouco sobre startup procedures.
As startup procedures são aquelas que são executadas sempre que a instância for iniciada.

Hands On

A procedure que é executada no startup não possui nenhum tipo de particularidade, no que tange sua sintaxe. Porém exige que duas alterações a nível de instância sejam realizadas.

Vamos ao passo a passo:

  1. Criar uma base de dados chamada “Auditoria” que nosso repositório para armazenamento dos dados retornados pela procedure.
    CREATE DATABASE AUDITORIA
    GO
    USE AUDITORIA
    GO
    
  2. Criar a tabela que atuará como repositório de dados
    CREATE TABLE TB_TRACK_LOGINS(
    SERVICENAME VARCHAR(50),
    STARTUP_TYPE_DESC VARCHAR(50),
    STATUS_DESC VARCHAR(50),
    PROCESS_ID INT,
    SERVICE_ACCOUNT VARCHAR(50),
    DATASTARTUP DATETIME2 DEFAULT(GETDATE())
    )
    
  3. Agora criaremos a procedure que será executada a cada startup da instância.
    Há uma obrigatoriedade neste ponto: A procedure PRECISA ser criada na base de dados Master.
    As informações coletadas serão obtidas através da DMV SYS.DM_SERVER_SERVICES e nos trará informações úteis sobre como a instância subiu e em qual horário.

    USE MASTER
    GO
    CREATE PROCEDURE DBO.USP_TRACK_LOGIN
    AS BEGIN
    INSERT INTO AUDITORIA.DBO.TB_TRACK_LOGINS (SERVICENAME, STARTUP_TYPE_DESC,STATUS_DESC,PROCESS_ID,SERVICE_ACCOUNT)
    SELECT SERVICENAME, STARTUP_TYPE_DESC,STATUS_DESC,PROCESS_ID,SERVICE_ACCOUNT
    FROM SYS.DM_SERVER_SERVICES
    END
    
  4.  Agora faremos a primeira alteração a nível de instância que eu havia comentado. Precisaremos “apontar” para o SQL Server qual a procedure deve ser executada no start da instância. Faremos isso usando system procedure SP_PROCOPTION

    USE MASTER
    GO
    EXEC SP_PROCOPTION @PROCNAME = 'MASTER.DBO.USP_TRACK_LOGIN', @OPTIONNAME = 'STARTUP', @OPTIONVALUE = 1
    
  5. A segunda alteração a nível de instância é a que deixar o ambiente pronto para logar as informações. Ele fará com que o SQL Server, ao iniciar a instância, procure pela procedure indicada no tópico 4:
    SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1
    RECONFIGURE WITH OVERRIDE
    GO
    SP_CONFIGURE 'SCAN FOR STARTUP PROCS',1
    RECONFIGURE WITH OVERRIDE
    GO
    

 

1,2,3 testando…

Para testar se nossa procedure está funcionando é muito simples; Basta reiniciar sua instância SQL. – não preciso dizer pra não fazer isso em prod, né 🙂

StartUp-StopInstancia

Agora vamos consultar nossa tabela de auditoria:

SELECT * FROM AUDITORIA.DBO.TB_TRACK_LOGINS

tudo certo

tudo certo por aqui.

E não tivesse dado? Digamos que se a tabela não existisse? o SQL Seria impedido de iniciar e eu teria que apelar para os startup parameters para iniciar no modo mínimo e remover a configuração na mão?
Nop! Ele apenas logará uma informação no errorlog e startar a instância normalmente:

XP_READERRORLOG

ObjetoinvalidoProcStartup

 

Bom, é isso. Espero que tenham gostado 🙂

That’s all folks

`Piroto

 

Anúncios

Sobre dhiegopiroto
Graduando em Sistemas de Informação, apaixonado por tecnologia, literatura e musica. Possui experiencia com desenvolvimento em T-SQL, XML, XSD e administração de bancos de dados SQL Server; Detém os titulos de MCP e MCTS SQL Server 2008.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Alex Souza

"Aprendendor a Aprender e Aprendendo a Ensinar (inclusive Máquinas)!"

Blog - Thiago Carlos de Alencar

Aprendendo SQL Server !

SQL Authority with Pinal Dave

SQL Server Performance Tuning Expert

Vitor Fava

SELECT (CrazyIdeas*2), (InsaneIdeas*100), MyExperience FROM MyBigHead WHERE InsaneLevel > 1000

Think Think SQL

DBCC DumpMemory 'TECH','ALL'

Gustavo Maia Aguiar

Artigos, dicas e algumas reflexões sobre o SQL Server

Kimberly L. Tripp

DBCC DumpMemory 'TECH','ALL'

Thiago Zavaschi R2

www.zavaschi.com

Blog do Luti

DBCC DumpMemory 'TECH','ALL'

Luan.Moreno a.k.a [SQL.Soul]

Lead Database Consultant at Pythian

Blog do Leka

let's make things better

%d blogueiros gostam disto: