terça-feira, 9 de julho de 2013

Tamanho das Tabelas

sp_spaceused <TABELA>
A sintaxe sp_spaceused <TABELA> exibe, respectivamente, o nome da tabela (name), número de linhas (rows), espaço reservado para a tabela (reserved), espaço usado pelos dados na tabela (data), espaço usado pelos indexes da tabela (index_size) e espaço sem uso na tabela (unused).
Se nenhuma tabela for especificada, serão exibidos dois resultados: - nome da base de dados (database_name), tamanho da base (database_size) e espaço não alocado (unallocated space). - espaço reservado (reserved), espaço usado por dados na base de dados (data), espaço usado por indexes na base de dados (index_size) e espaço sem uso na base (unused).

sp_helpdb <NOME_DA_BASE>

Você também pode usar a stored procedure sp_helpdb para obter informações sobre sua base de dados. A sintaxe sp_helpdb <NOME_DA_BASE> exibe, respectivamente:

- Nome da base de dados (name), tamanho (db_size), proprietário (owner), número de identificação da base (dbid), data de criação (created), opções da base (Status) e compatibilidade (compatibility_level - 80 = MS SQL Server 2000). - Nome lógico do arquivo de armazenamento (name), seu número de identificação (fileid), nome do arquivo (filename), seu filegroup, tamanho (size), tamanho máximo que poderá chegar (maxsize - espaço contratado), taxa de crescimento (growth) e para qual uso é designado o arquivo (usage - dados ou logs).
-IMPORTANTENo momento não é possível visualizar o espaço consumido das bases de dados SQL Server 2008 pelo painel de controle, de modo que pode conferir tal informação diretamente no banco, conforme uso do sp_helpdb.

sexta-feira, 5 de julho de 2013

Verificando a versão do Service Pack do MS SQL Server

  1. Abra a ferramenta SSMS do SQL Server;
  2. Conect na instância que deseja verificar a versão do seu MS SQL Server;
  3. Clique no botão New Query;
  4. Copie e cole o T-SQL abaixo:
  5. SELECT
    SERVERPROPERTY(‘productversion’) AS ‘Codigo_Versão’,
    SERVERPROPERTY(‘productlevel’) AS ‘Service_Pack’,
    SERVERPROPERTY(‘edition’) AS ‘Edição’
  6. Execute a query e verifique os resultados
Versões testadas: MS SQL SERVER 2000, MS SQL SERVER 2005 e MS SQL Server 2008.

sexta-feira, 28 de junho de 2013

Fim do Suporte Extendido do SQL Server 2000

Uma das coisas que sempre me perguntam é sobre o suporte que a Microsoft dá aos seus produtos.
A Microsoft oferece um mínimo de 10 anos de suporte aos seus produtos (5 anos mainstream + 5 anos de suporte extendido), ou por 2 anos após o lançamento da próxima versão do produto, incluindo service packs e correção de bugs (leia mais aqui).
Neste ano, aqueles que ainda utilizam o SQL Server 2000, devem tomar sérias decisões sobre seu produto para evitar ficarem sem suporte, ou no máximo com o acesso ao Knowledge Base. O suporte extendido do SQL 2000 se encerrará em 09/04/2013.
Opções disponíveis:
1) Devem fazer seus planos para adquirir e migrar para o SQL Server 2008 R2 ou a versão mais atual (Recomendado)
2) Adquirir o Custom Support Agreement (CSA)
3) Continuar utilizando o SQL Server 2000 (por sua conta e risco), com acesso apenas ao Knowledge Base
Veja neste documento mais informações sobre os benefícios da migração para a versão mais atual do SQL Server.

Mensagem de Erro ao acessar o SQL Server 2012 usando o SSMS 2008 R2

Se você estiver utilizando o SQL Server Management Studio 2008 R2 para acessar uma base de dados SQL Server 2012, você receberá mensagens de erro semelhantes à essas abaixo:
   – Ao clicar com o botão direito sobre uma tabela, opção Design, ou ao clicar em Database DiagramsNew Database Diagram, você receberá a seguinte mensagem de erro:
    The backend version is not supported to design database diagrams or tables. (MS Visual Database Tools)
ErroDesign
   – Ao clicar com o botão direito sobre uma tabela, opção Edit Top 200 Rows, você receberá a seguinte mensagem de erro:
   Invalid prefix or suffix characters. (MS Visual Database Tools)
    Existem duas opções para solucionar este problema:
   1 – Resposta Rápida: Atualize o seu SSMS para a versão 2012. Resposta Longa: O SSMS só tem compatibilidade com as versões anteriores, não com as versões superiores. Desta forma, ainda que ele consiga acessar o SQL 2012, ele possui algumas mudanças que não são suportadas e desta forma, principalmente as janelas de design não irão funcionar. Isso significa dizer que o SSMS 2012 acessa sem problemas um SQL Server 2008 mas o contrário não é totalmente compatível. Você não tem o SSMS 2012 para instalar? Nenhum problema, baixe a versão Express deste link que é compatível e possui a maioria das funcionalidades do SSMS completo.
   2 – Clique em New Query e escreva a sua query manualmente…

sexta-feira, 7 de junho de 2013

Backup Compression

Permite que os dados sejam armazenados de forma mais efetiva e reduz os requisitos de armazenamento dos seus dados. A Compressão de Dados também fornece melhorias significativas em desempenho para grandes cargas de trabalho de entrada e saída (I/O), como o data warehousing.

Vamos ao exemplo:

1) Criar uma tabela e polular.

A) Criando banco de dados
    
    create database BD

B) Utilizando o banco de dados BD
    
    use BD

C) Criando uma tabela

    create tabe BACKUP (
    id int identity (1,1) primary key,
    descricao varchar (255)
    )

D) Inserindo 200 registros na tabela BACKUP

    insert into BACKUP values ('Backup com compressão')
    go 200


2) Backup normal

 backup database BD to disk =    'c:\SQLSERVER2008R2\BACKUP\BackupNormal.bak'

Espaço utilizado: 2.862KB


3) Backup com compressão 

backup database BD to disk = 'c:\SQLSERVER2008R2\BACKUP\BackupNormal.bak' with compression

Espaço utilizado: 282KB








quarta-feira, 5 de junho de 2013

Backup no MySQL

Existem inúmeras maneiras de se fazer backup no MySQL. Creio que o modo mais utilizado seja o backup feito pelo comando 'mysqldump', que permite uma combinação enorme de parâmetros.
Em todos os comandos abaixo, substitua as palavras 'usuario', 'senha' e 'arquivo_saida'.
  1. backup de todos os bancos existentes com conteúdo e estrutura (-A equivale a --all-databases):
      $ mysqldump -u usuario --password=senha --all-databases > arquivo_saida   OU
      $ mysqldump -u usuario --password=senha -A > arquivo_saida
    
  2. backup só das estruturas de todos os bancos (-d : sem os conteúdos)
      $ mysqldump -u usuario --password=senha -A -d > arquivo_saida
    
  3. backup só dos dados de todos os bancos (-c: usa comandos 'insert'; -t: não escreve comandos 'create table'; -e: gera comandos mais compactos e mais rápidos de 'insert')
      $ mysqldump -u usuario --password=senha -c  -t  -e -A > arquivo_saida
    
Caso você queira especificar o nome de um banco de dados (ou seja, você não quer fazer de todos os bancos existentes) substitua o parâmetro '-A' citado nos exemplos anteriores por:
—databases DB1 DB2 .... , onde DB1 DB2 ... são os nomes dos bancos de dados
Exemplo:
  $ mysqldump -u usuario --password=senha -c -t -e --databases DB1 DB2
Caso você queira fazer backup de apenas algumas tabelas de um banco específico:
  $ mysqldump -u usuario --password=senha [opções] DB1 [nome das tabelas]
onde DB1 é o nome do banco que você quer.

Erro postgres - dead but pid file exists

Seguem os passos necessários para subir o banco quando um processo estiver travando o banco:
  
  • [root@postgresql-9_1 data]# /etc/init.d/postgresql-9.1 status à dead but pid file exists;
  • ps axu | grep postg à Se for encontrado algum processo temos que matá-lo;
  • Ir ao diretório /var/run e remover o arquivo postmaster.pid, caso exista;
  • service postgresql-9.1 start.

quarta-feira, 29 de maio de 2013

Comandos básicos do Sql Server 2008 - (Select - Update - Delete - Insert)

COMANDO SELECT 

Exemplo: 
Especificação:
           tbContato  :  Nome da sua tabela
           IdContato, Contato,Email,Fone,Obs :  São os campos da tbContato

Comando:

SELECT TOP 10 IdContato, Contato, Email, Fone, Obs FROM tbContato

----------------------------------------------------------------------------------

COMANDO UPDATE 

Exemplo:
Especificação:
           tabelaEmpresa  =  Nome da sua tabela
                CampoCNPJ =  Campo da tabela "tabelaEmpresa"      '124258000112630' =  Conteudo novo do campo         IdTabelaEmpresa = Id do registro que sera alterado

update tabelaEmpresa set CampoCNPJ =  '124258000112630'  where IdTabelaEmpresa = 1

--------------------------------------------------------------------------------

COMANDO DELETE

Exemplo: 
Especificação:
           tbContato  : Nome da sua tabela
           IdContato  :  Campos da tbContato

Comando:

DELETE tbContato where idContato = 1

Obs:. Deleta o registro, cujo idContato for igual a 1..
Para deletar todos registros da tabela, digite (
delete tbContato)

----------------------------------------------------------------------------------

COMANDO INSERT
Exemplo:
Especificação:
           tbContato  :  Nome da sua tabela
           IdContato, Contato,Email,Fone,Obs :  São os campos da tbContato

Comando:

INSERT INTO tbContato 

(
Contato
Email
Fone
Obs
)
Values('Fulano de Tal','fulano@email.com.br','2345-6789','Fulano de Tal')

SQL Server 2012 File Table

Hoje vamos falar sobre uma nova feature presente no SQL Server 2012 chamada File Table.
Deixando de uma forma mais clara, o File Table nada mais é do que uma técnica nova para armazenamento de arquivos não estruturados diretamente no file system, quem trabalha com Sharepoint já conhece algo parecido com isso, a vantagem dessa nova funcionalidade é que podemos indexar documentos para acesso no file system assim como no SharePoint além é claro de uma serie de outros métodos que podem ser trabalhados.
Vamos conhecer como habilitar e trabalhar com File Table?
Passo 1: Criação de uma database e habilitação do File Table e Filestream. Isso que você esta vendo o File Table necessita do Filestream para funcionar. Como de costume não vou me atentar em mostrar o filestream e nem como configurar, mas mostrarei diretamente como funciona o File Table.
Via Interface Gráfica
Via T-SQL
CREATE DATABASE [FileTableDatabase] ON  PRIMARY
( NAME = N’FileTableDatabase’, FILENAME = N’E:\Program Files\Bases\FileTableDatabase.mdf’ , SIZE = 3072KB , FILEGROWTH = 1024KB ),
FILEGROUP [FileTable_FG] CONTAINS FILESTREAM
( NAME = N’FileTableFile’, FILENAME = N’E:\Program Files\Bases\FileTableFile’ )
LOG ON
( NAME = N’FileTableDatabase_log’, FILENAME = N’E:\Program Files\Bases\FileTableDatabase_log.ldf’ , SIZE = 2048KB , FILEGROWTH = 10%)
GO
ALTER DATABASE FileTableDatabase SET FILESTREAM(NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = ‘FileTable’)
GO
Passo 2: Criação da tabela que sera do tipo File Table. Vale lembrar que a opção de criação da tabela do tipo File Table não esta disponível via Interface Grafica.
Via T-SQL
USE FileTableDatabase
GO
CREATE TABLE FileTableTest AS FileTable
WITH
(FileTable_Directory = ‘FileTable’,
FileTable_Collate_Filename = database_default)
As tabelas do tipo FileTable dentro de uma pasta chamada FileTables que fica dentro da pasta Tables na estrutura da base de dados.
 Após a criação da tabela File Table é criada uma unidade de rede compartilhada no servidor do SQL Server, para sabermos onde essa pasta esta configurada basta clicarmos com o direito na tabela e selecionar a opção Explore FileTable Directory.
Passo 3: Uma das coisas que eu achei mais interessante é a forma de inserção de dados em uma File Table. Como relatamos acima uma file table armazena os dados no file system do Windows e então para realizar a inserção de dados basta no diretório do file table colocamos os arquivos desejados. Como podemos verificar na imagem abaixo, foi criada uma unidade compartilhada onde não possuímos nenhum arquivo.
Realizamos uma consulta na tabela e nada é retornado.
Vamos inserir agora alguns arquivos na unidade.
Vamos realizar uma nova consulta.
select * from FileTableTest
Como podemos analisar a tabela armazena os metadados dos arquivos que colocamos na unidade compartilhada como: nome do arquivo, extensão, se é diretorio, se é arquivo, ultima vez escrito, ultima vez lido entre outras propriedades.

quarta-feira, 1 de maio de 2013

Consumo de CPU por base


Pra quem gerencia instâncias com mais de uma base, fica fácil evidenciar o consumo de CPU com o script abaixo:
WITH DB_CPU_Stats
AS
(SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID]
FROM sys.dm_exec_plan_attributes(qs.plan_handle)
WHERE attribute = N'dbid') AS F_DB
GROUP BY DatabaseID)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
DatabaseName, [CPU_Time_Ms],
CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
WHERE DatabaseID > 4 -- system databases
AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num OPTION (RECOMPILE);
Resultado:

Alterar a porta padrão - SQLServer 2008R2


Abra o SQL Server Configuration Manager
Clique em Iniciar | Todos os programas | Microsoft SQL 2008 R2 | Configuration Tools | SQL Server Configuration Manager
Desative o protocolo Shared Memory
Clique com o botão direito em SQL Server Network Configuration | Protocols for MSSQLSERVER | Shared Memory e clique em disabled.

Altere a porta de conexão do SQL Server
Clique em SQL Server Network Configuration | Protocols for MSSQLSERVER | TCP/IP e abra a caixa propriedades.
Na guia IP Address, utilize a barra de rolagem para encontrar IPALL.
Mude a porta de 1433 para 14333 e aplique.

Reinicie a instância
Clique com o direito em SQL Server Services | SQL Server (MSSQLSERVER) | Restart

Pare o SQL Server Agent
Na mesma janela onde reiniciou a instância, pare o serviço do SQL Server Agent.

Somente você deve estar online


Altere a base para single user
Abra o SQL Server Management Studio. Para se conectar, utilize o nome do servidor, uma vírgula e o número atual da porta.

Clique em New Query (Ctrl+N) e execute a instrução abaixo:
ALTER DATABASE NomeBase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Verifique se somente sua sessão está aberta para a base a ser migrada:
SELECT spid, status, loginame as 'user', hostname, db_name(dbid) as 'database', cmd 
FROM master..sysprocesses 
WHERE db_name(dbid) = 'NomedaBase'  -- coloque o nome da base migrada aqui
O resultado deve ser em branco, a não ser que alguma sessão ainda esteja aberta ou você mesmo esteja no escopo da base.

O ideal é o servidor estar isolado, sem interfaces de rede ativas e você logado na console, de frente pra máquina. Vai que alguém acessa o servidor por remote desktop porque não consegue se conectar, percebe que a porta foi alterada e "arruma". Falo isso em casos onde os servidores ficam isolados em CPDs ou em Data Centers.