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')

quarta-feira, 17 de abril de 2013

Comando para mostrar os campos da tabela

No Query Analyzer utilize: sp_help <TABELA>
Para views, procedures e triggers: sp_helptext <NOME>
Para visualizar os objetos do BD: sp_help

terça-feira, 16 de abril de 2013

COMO DUPLICAR UMA TABELA NO SQL SERVER

Para duplicar a estrutura e os dados de uma tabela no SQL Server, basta utilizar o operador INTO em um Select, por exemplo:

SELECT * INTO NOTASCOPIA   FROM NOTAS

Será criada uma tabela NOTASCOPIA com os dados da tabela NOTAS e com os mesmos campos e definições.

sexta-feira, 12 de abril de 2013

Dica Importante SQL Server 2008 Management Studio

Por padrão o SQL Server 2008 Management Studio vem configurado para não ter a mudança de uma tabela usando o modo “designer” sem que apague-a e re-crie novamente; sinceramente não sei porque, mas existe. O que acontece é o seguinte:

Se eu peguei uma tabela no meu banco de dados na internet, e ao tentar acrescentar um campo 
de auto-incremento ou chave primária ele deixa. No momento de salvar a tabela, o gerenciador 
mostra um alerta falando que não consegue salvar o que foi mudado na tabela. Conversando com
um amigo “expert” em banco de dados, ele me falou que precisa ser desmarcada uma opção no 
gerenciador. Depois de abrir o gerenciador do SQL Server 2008, cliquei no

menu Tools e escolhi a opção Options.
Referência: 2


Uma nova tela se abre e existem várias opções específicas. Acesse a opção chamada Designers
e ao lado direito deve ser desmarcado o item Prevent saving changes that require table 
re-creation.

Referência: 3

Depois de desmarcar esta opção, é necessário fechar o gerenciador totalmente. Depois de abrir
o gerenciador a funcionalidade de edição vai funcionar perfeitamente. Sem que necessite apagar a
tabela e criá-la novamente.