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.

segunda-feira, 22 de abril de 2013

Tabelas Temporárias no SQL Server


Hoje vamos falar de tabelas temporarias no SQL Server, é um assunto bem simples, mais gera muitas dúvidas, principalmente entre desenvolvedores, bom vamos lá, primeiramente vamos conceituar as diferenças entre as tabelas temporárias.
  • Toda tabela temporaria começa com #;
  • Elas estão disponiveis durante a conexão do usuário, ao se desconectar elas são automaticamente excluídas;
  • São armazenadas no TempDB, na pasta de Tabelas Temporarias;
  • Existem dois tipos de tabelas temporárias;
  • Tabelas que estão disponível somente na consulta atual. Quando criamos esta tabela é indicado por uma # no inicio do nome da tabela. Ex. #Teste;
  • Tabelas que estão dísponivel para todas as consultas dentro da sessão do usuário. É inidcado por cerquilhas duplas no inicio do nome da tabela (##). Ex. ##Teste.
Vamos a criação das tabelas de exemplo: Abra o SQL Server Management Studio, logue no seu Banco de Dados, escolha um banco de sua preferência e inicie uma nova consulta. Digite os comandos abaixo:
create table ##teste
(id int identity(1,1),
nome varchar(10))
insert into ##teste (nome) values (‘João’)
insert into ##teste (nome) values (‘Lucas’)
insert into ##teste (nome) values (‘Mateus’)
insert into ##teste (nome) values (‘Isaque’)
insert into ##teste (nome) values (‘Marcio’)
insert into ##teste (nome) values (‘Fernando’)
insert into ##teste (nome) values (‘Carlos’)
insert into ##teste (nome) values (‘Pedro’)
insert into ##teste (nome) values (‘Manuel’)
insert into ##teste (nome) values (‘Joaquim’)
Select id,nome from ##Teste
Clique em F5 ou execute a consulta, o resultado da consulta retornará os dados inseridos acima. Abra uma nova janela de consulta pode ser até com um banco de dados diferente. Escreva esta parte da consulta e a execute.
Select id,nome from ##Teste
Você ainda verá um resultado idêntico a primeira consulta. Isto acontece por que usamos duas cerquilhas no inicio do nome da tabela, que faz com que a tabela temporária em toda nossa sessão independente da consulta em si. Agora vamos criar uma outra tabela temporária,mais com apenas uma cerquilha, vamos a ação
create table #teste
(id int identity(1,1),
nome varchar(10))
insert into #teste (nome) values (‘João’)
insert into #teste (nome) values (‘Lucas’)
insert into #teste (nome) values (‘Mateus’)
insert into #teste (nome) values (‘Isaque’)
insert into #teste (nome) values (‘Marcio’)
insert into #teste (nome) values (‘Fernando’)
insert into #teste (nome) values (‘Carlos’)
insert into #teste (nome) values (‘Pedro’)
insert into #teste (nome) values (‘Manuel’)
insert into #teste (nome) values (‘Joaquim’)
select * from #teste
Rodando esta consulta perceberemos que será mostrado os dados que foram inseridos. Agora vamos abrir uma nova janela de consulta identico ao que fizemos anteriormente e rodaremos somente a parte da consulta que contem a instrução Select.
select * from #teste
A consulta não será efetuada retornando a mensagem de erro:
Msg 208, Level 16, State 0, Line 1
Invalid object name ‘#teste’.
Isto ocorre pois a nossa tabela com uma cerquilha esta disponível apenas para a consulta na qual ela foi criad

sexta-feira, 19 de abril de 2013

SQL Server DateDiff

Unidade
Consulta

SECOND          SELECT DATEDIFF(SECOND,'2011-09-23 17:15:30','2011-09-23 17:16:23')
MINUTE SELECT DATEDIFF(MINUTE,'2011-09-23 18:03:23','2011-09-23 17:15:30')
HOUR SELECT DATEDIFF(HH,'2011-09-23 18:03:23','2011-09-23 20:15:30')
WEEK SELECT DATEDIFF(WK,'09/23/2011 15:00:00','12/11/2011 14:00:00')
DAY SELECT DATEDIFF(DD,'09/23/2011 15:00:00','08/02/2011 14:00:00')
DAYOFYEAR SELECT DATEDIFF(DY,'01/01/2011 15:00:00','08/02/2011 14:00:00')
MONTH SELECT DATEDIFF(MM,'11/02/2011 15:00:00','01/01/2011 14:00:00')
QUARTER SELECT DATEDIFF(QQ,'01/02/2011 15:00:00','08/01/2011 14:00:00')
YEAR SELECT DATEDIFF(YY,'01/02/2011 15:00:00','01/01/2016 14:00:00')