sexta-feira, 21 de dezembro de 2012

Permissão para acesso remoto do MySQL

O Mysql por padrão ao ser instalado numa máquina, não está configurado para permitir acesso remoto, somente local, por parte do usuário, então para habilitar seu uso seja de qual for a máquina, faz-se os seguintes procedimentos:

Como root no terminal do linux digite:
nano /etc/mysql/my.cnf

Agora altere a seguinte linha..
bind-address = 127.0.0.1

..para..

bind-address = 0.0.0.0

Agora reinicie o serviço mysql com:
/etc/init.d/mysql restart

Entre no prompt do mysql com:

mysql --user=root --password=suasenha

Então digite o seguinte comando:
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'suasenha';

Esse comando é bem explicativo, ele garante (GRANT) todos (ALL) os privilégios de acesso a todos (*.*) os databases do banco, ao (TO) usuário (‘root’) em todas as máquinas (‘%’) usando a senha do usuário root (IDENTIFIED BY ‘suasenha’). Traduzindo em miúdos, você acessa tudo no banco com o usuário root em qualquer máquina remota.

Obs: Se quiser dar acesso somente a uma maquina específica troque ‘%’ pelo ip da máquina, por exemplo, dar acesso somente a máquina 192.168.0.2, ficaria assim o comando:
GRANT ALL ON *.* TO 'root'@'192.168.0.2' IDENTIFIED BY 'suasenha';

Obs2: Onde estiver escrito suasenha, troque pela senha do usuário root.

Agora pode testar conectar-se ao banco de outra máquina que você terá acesso

MySQL: Erro: "mysqld dead but subsys locked"

Para corrigir o erro relatado no título desta dica, basta seguir os passos: 

Ao iniciar o MySQL

# /etc/init.d/mysqld start 

Não ocorre nenhum erro, porém, quando checamos o status: 

# /etc/init.d/mysqld status 

Nos deparamos com seguinte erro: 
mysqld dead but subsys locked

Para resolvermos este problema, basta executar a linha a seguir: 

# chown -R mysql.mysql /var/run/mysqld 

Com este comando colocamos como dono dos arquivos o usuário "mysql", resolvendo assim nosso problema! 

MySQL - Gerenciamento de memória

Eu tenho trabalhado com o MySQL mas, nas versões para Ubuntu, Centos Debian e versões mais atuais, os nós e nódulos da memória (cache) sempre estão cheios, e o MySQL acaba consumindo muita memória RAM. 

Assim, sempre tive problemas em usar mais de uma base de dados. Em 24 horas, estava tendo que reiniciar o servidor umas 3 vezes, no mínimo, para o MySQL voltar a funcionar. 

Um exemplo que acontecia sempre: de 10 bases de dados, 6 estavam funcionando normalmente, mas 4 simplesmente paravam de gravar os dados. 

A solução: 

# crontab -e 

Adicione: 

# m h   dom mon dow    command
0 * * * * /root/./germem

E crie o script germem

#!/bin/bash
echo 3 > /proc/sys/vm/drop_caches

Obs.: Para o drop_caches, há opções de 1 a 3. Eu escolhi a 3, pois ela limpa os nós e nódulos da memória. 

Feito isso, faz exatamente 7 meses que não reinicio a máquina para o MySQL funcionar.

terça-feira, 18 de dezembro de 2012

Tabelas corrompidas no MySQL

O que fazer quando ocorre o erro "ERROR 145 (HY000): Table 'nome da tabela' is marked as crashed and should be repaired" ? 

Acessar o banco com problemas: 

mysql> use 'nome_do_banco'; 

Testar as tabelas até descobrir qual é a tabela ruim: 

mysql> check table 'nome_da_tabela'; 

Reparar a tabela ruim: 

mysql> repair table 'nome_da_tabela'; 

MySQL: Alterar diretório base de dados

Amigos do VOL, bom dia. Venho com uma dica de como alterar o caminho da base de dados do MySQL. Por exemplo: ter que colocar a base em outro diretório ou partição. 

Diretório padrão: /var/lib/mysql 

# vi /etc/my.cnf 

datadir = [novo_caminho] ex: /mnt/mysql 

Salvar alteração: :wq 

Não se esqueça de dar permissão para o novo diretório do MySQL. 

# chown -R mysql.mysql /mnt/mysql 

Executar o comando para criar nova base de dados: 

# mysql_install_db 

Pronto, agora é só iniciar o MySQL com o comando: 

# mysqld_safe & 

Bom, espero ter ajudado.

Erro 2002 (HY000) ao conectar ao MySQL

Depois de instalar o MySQL, tentei conectar e recebi a seguinte mensagem: 

# mysql -u root -p 

Password: 
Error 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

Para resolver o problema: 

Logue como root: 

# mysql_install_db
# chown -R mysql.mysql /var/lib/mysql
# mysqld_safe &
# mysqladmin -u root password NOVA_SENHA
# mysql -u root -p
 

Password: 
mysql > 

Pronto! Instalado e pronto para uso! 

Comandos úteis do MySQL

Criando uma senha de root para o MySQL

# mysqladmin -u root password '[nova senha]' 

Visualizando todas as bases de dados via linha de comando: 

# mysqlshow -u usuario -p[senha] 

Criando um usuário para acesso a uma determinada base: 

mysql> GRANT ALL ON base.tabela TO usuario@'%' IDENTIFIED BY 'SENHA'; 

Obs.: Pode-se utilizar o caracter asterisco para atribuir a permissão a todas as bases. 

Recuperando a senha de root do MySQL

Algumas vezes você precisa recuperar sua senha de root do MySQL que você esqueceu ou foi perdida por algum motivo. Os passos para criar outra são os seguintes: 

Páre normalmente o servidor MySQL: 

# /etc/init.d/mysqld stop 

Inicie o MySQL em modo seguro com o comando mysqld_safe e especifique para não ler as tabelas de permissões com todas as senhas do MySQL. Dependendo da versão, o comando pode ser safe_mysqld. 

# mysqld_safe --skip-grant-tables & 

Use o comando mysqladmin para mudar a senha. Neste caso, a senha será "swordfish". 

# mysqladmin -u root flush-privileges password "swordfish" 

Reinicie o MySQL normalmente. 

# /etc/init.d/mysqld restart 

O usuário root agora tem uma nova senha e você já pode voltar a administrar seu banco de dados.

Exportando dados do PostgreSQL para HTML

Para quem utiliza o console do PostgreSQL no Linux, existe uma dica bem interessante:

O comando "\H" altera a saída padrão das consultas para HTML. Logo, você recebe como saída um documento contendo os dados de sua consulta.

1. Edite um arquivo qualquer (sql.sql), contendo o seguinte conteúdo:
\H
SELECT * FROM nome_table;

2. Digite no shell: 

$ psql -f sql.sql nome_bd > /tmp/saida_em_html.html 

E o arquivo saida_em_html.html será criado contendo a consulta realizada em formato HTML, podendo também utilizar CSS neste arquivo, melhorando bastante seu aspecto visual. 

segunda-feira, 17 de dezembro de 2012

Alterar chave de instalação do SQL2008R2

Sempre que desejamos conhecer um novo software, instalamos a versão de demonstração ( trial ). Em determinado tempo essa versão de demonstração expira e o software é bloqueado ou tem suas funções limitadas.

No caso abaixo tenho uma versão do Microsoft SQL Server 2008 R2 Trial que foi bloqueada.
a1
Após comprar do produto, temos em mãos a chave de instalação ( Product Key ou Serial Number ) que libera novamente o software.

Como instalar a nova chave?
1. Execute novamente o setup.exe
2. No SQL Server Installation Center, selecione Maintenance, depois Edition Upgrade
a2
3. Clique Next duas vezes, então informe a nova chave
a3
4. Continue com Next e Install, aguarde alguns minutos até concluir.

sexta-feira, 14 de dezembro de 2012

Identity e Truncate


Esticando um pouco a prosa sobre IDENTITY, a dica do dia é a seguinte:
Quando precisar limpar uma tabela, excluindo todos seus registros, lembre-se:
TRUNCATE TABLE (apesar de ser extremamente mais rápido que o DELETE) pode lhe gerar problemas caso sua tabela tenha uma coluna com o IDENTITY, isto porque sempre que “truncamos” uma tabela, o IDENTITY da mesma é reiniciado; ou seja, ao fim da operação  o retorno do comando abaixo será 1:
1
select IDENT_CURRENT('suaTabela');
Se desejar retomar a sequencia anterior, utilize o comando abaixo logo após o TRUNCATE TABLE:
1
DBCC CHECKIDENT (<suaTabela>, RESEED, <X*>);
* onde, X representa o ID inicial da sua sequencia
Se sua opção for o DELETE não há necessidade em se preocupar com a sequência do IDENTITY. Esta será preservada.

terça-feira, 11 de dezembro de 2012

Verifica Tempo restante de Backup /restore

FUNCIONA NO SQLSEVER 2005, 2008 e 2008 R2

SELECT start_time,
       (total_elapsed_time/1000/60) AS MinutesRunning,
       percent_complete,
       command,
       b.name AS DatabaseName,
              -- MASTER will appear here because the database is not accesible yet.
       DATEADD(ms,estimated_completion_time,GETDATE()) AS StimatedCompletionTime,
      (estimated_completion_time/1000/60) AS MinutesToFinish
FROM  sys.dm_exec_requests a
          INNER JOIN sys.DATABASES b ON a.database_id = b.database_id
WHERE command LIKE '%restore%'
          OR command LIKE '%backup%'
          AND estimated_completion_time > 0

Uso de memória por Banco da Instância

DECLARE @total_buffer INT;

SELECT @total_buffer = cntr_value
   FROM sys.dm_os_performance_counters
   WHERE RTRIM([object_name]) LIKE '%Buffer Manager'
   AND counter_name = 'Total Pages';

;WITH src AS
(
   SELECT
       database_id, db_buffer_pages = COUNT_BIG(*)
       FROM sys.dm_os_buffer_descriptors
       --WHERE database_id BETWEEN 5 AND 32766
       GROUP BY database_id
)
SELECT
   [db_name] = CASE [database_id] WHEN 32767
       THEN 'Resource DB'
       ELSE DB_NAME([database_id]) END,
   db_buffer_pages,
   db_buffer_MB = db_buffer_pages / 128,
   db_buffer_percent = CONVERT(DECIMAL(6,3),
       db_buffer_pages * 100.0 / @total_buffer)
FROM src
ORDER BY db_buffer_MB DESC;
Go

Verificar qual a porta que o SQLSERVER esta utilizando

DECLARE @TcpPort VARCHAR(5)
        ,@RegKey VARCHAR(100)

IF @@SERVICENAME !='MSSQLSERVER'
    BEGIN
        SET @RegKey = 'SOFTWARE\Microsoft\Microsoft SQL Server\' + @@SERVICENAME + '\MSSQLServer\SuperSocketNetLib\Tcp'
    END
    ELSE
    BEGIN
        SET @RegKey = 'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER\SUPERSOCKETNETLIB\TCP'
    END

EXEC master..xp_regread
    @rootkey = 'HKEY_LOCAL_MACHINE'
    ,@key = @RegKey
    ,@value_name = 'TcpPort'
    ,@value = @TcpPort OUTPUT

SELECT @TcpPort AS PortNumber
        ,@@SERVERNAME AS ServerName
        ,@@SERVICENAME AS ServiceName

Tamanho de tabelas no SQL Server

SELECT OBJECT_NAME(ID) TABELA, CONVERT(DEC(15),SUM(RESERVED)) RESERVED
INTO #X
FROM SYSINDEXES
WHERE indid in (0, 1, 255)
GROUP BY ID

SELECT TABELA, LTRIM(STR(RESERVED * D.LOW / 1024., 15, 0)) + ' KB'
FROM #X, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
ORDER BY RESERVED DESC

Como descobrir/exibir as instâncias do SQL Server instaladas

Recentemente precisei descobrir o nome da instância do SQL Server que estava instalada no meu servidor, como já conhecia o utilitário de linha de comando do SQL Server (sqlcmd), executei no prompt de comando o seguinte: SQLCMD -L e obtive o resultado abaixo:

terça-feira, 4 de dezembro de 2012

Reset de senha no MySQL

Dica rápida para resetar a senha do MySQL

Digite no prompt: 

# mysqld_safe --skip-grant-tables & 

Agora que iniciou o MySQL, digite: 

# mysql 

Já logado no MySQL, digite: 

mysql> use mysql; 

Agora vamos resetar a senha: 

mysql> update user SET password=password('NOVA SENHA') WHERE user='root'; 

Agora saia do MySQL: 

mysql> quit 

Reinicie o serviço do MySQL e pronto.

Recuperando a senha SYS do Oracle

Essa dica é para aqueles que estão assumindo uma empresa que já trabalhava com Oracle e precisam fazer uma alteração no Banco de Dados com privilégios de usuário sys

Foi isso que me motivou a realizar esta pesquisa bem sucedida. 

Abaixo está a infinita lista de "DOIS" comandos. :) 

No prompt (tanto no servidor Linux quanto no servidor Windows)... 

Entre no Oracle da seguinte forma: 

sqlplus / as sysdba 

Digite a seguinte linha de comando dentro do Oracle para alterar a senha do user SYS: 

alter user sys identified by NOVASENHA; 

Oracle + SQLPlus: Como aumentar tablespace

Primeiramente certifique-se que já fez um backup do banco de dados. Qualquer "caca" que fizer poderá ser recuperada posteriormente. 

Vamos expor um programa que é nativo da Oracle. O mesmo é instalado juntamente com o Oracle: SQL*PLUS 

SQLPlus é um programa que fornece um ambiente interativo, em que comandos do SQL e comandos do SQL*PLUS são digitados diretamente ou através de um arquivo de comandos, para formatar resultados de pesquisa, para ajustar o ambiente, para editar e para armazenar comandos SQL. 

Logue-se ao sqlplus como sys: 

sqlplus sys/senha 

Entre com o comando a seguir: 

ALTER DATABASE DATAFILE '/diretório/onde/se/localiza/o/banco/de/dados/exemplo.DBF' RESIZE 23M 

Este comando vale para qualquer tablespace criada, porém tem que ser um comando para cada tablespace. 

Oracle - Criar usuário com privilégio de DBA

CREATE USER nome IDENTIFIED BY senha
GRANT DBA TO nome
 

Logo que comecei a usar o banco de dados Oracle uma dúvida que surgiu logo de início é como criar um usuário com privilégios de DBA. Para isto é necessário seguir dois passos. 

1º passo: Criar um usuário no banco de dados. 

Sintaxe: 

CREATE USER nome IDENTIFIED BY senha
  • nome - Consiste no nome que o seu usúario terá.
  • senha - Consiste na senha que o usuário utilizará para logar no sistema.

Exemplo: 

CREATE USER MAGUSCODE IDENTIFIED BY MAGUSCODE 

Neste exemplo será criado um usuário com o nome de MAGUSCODE com a senha de acesso MAGUSCODE. 

2º passo: Atribuir privilégio de DBA. 

Sintaxe: 

GRANT DBA TO nome
  • nome - Nome do usuário que será atribuído o privilégio de DBA.

Exemplo: 

GRANT DBA TO MAGUSCODE 

quarta-feira, 21 de novembro de 2012

Instalando PostgreSQL no Linux (CentOS)


Instalando MySQL no Linux (CentOS)



Dicas - SQLServer 2008R2



Alterando o Schema de uma tabela

O uso de schemas é uma boa prática para organizar a estrutura e as permissões de um banco de dados SQL Server.

Todos os objetos pertencentes a um Schema herdam suas permissões (desde que não existam permissões explícitas para cada objeto). Além disso, cada objeto pertence a um, e somente um, Schema.

Apesar do schema fazer parte da identificação de todo objeto, o simples renomeio de uma tabela  não possibilita associá-la a outro Schema.

Para realizar esta tarefa, deve-se utilizar a cláusula TRANSFER do comando ALTER SCHEMA.
Veja a sintaxe abaixo:

ALTER SCHEMA nome_do_schema TRANSFER outro_schema.nome_da_tabela; 

Note que o uso desta cláusula permite que a tabela nome_data_tabela seja "importada" para o Schema nome_do_schema.

No exemplo abaixo, 2 Schemas são criados (Marketing RecursosHumanos). Em seguida, cria-se a a tabela Funcionario no Schema Marketing. Suponhamos que esta seja uma associação equivocada, e que a tabela Funcionario deva pertencer ao Schema RecursosHumanos.

-- Criando Schema para a área de Marketing
CREATE SCHEMA Marketing
GO

-- Criando Schema para a área de RecursosHumanos
CREATE SCHEMA RecursosHumanos
GO

-- Criando tabela Funcionario no Schema Marketing
CREATE TABLE Marketing.Funcionario
(
id int identity(1,1) PRIMARY KEY,
nome VARCHAR(100)
)
GO

/* Alterando o Schema da tabela Funcionario. 
(DE: Marketing PARA: RecursosHumanos) */
ALTER SCHEMA RecursosHumanos TRANSFER Marketing.Funcionario
GO

Observações:
·      Tome cuidado ao alterar nomes ou schemas de objetos de um banco de dados. Tenha sempre em mente que este objeto pode ser referenciado por aplicações ou mesmo por outros objetos existente no banco de dados. Caso isso aconteça, estas referências serão inválidas.


quarta-feira, 7 de novembro de 2012

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. 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.

Para realizar tal tarefa, será necessário desmarcar uma opção no gerenciador. Depois de abrir o gerenciador do SQL Server 2008, cliquei no menu Tools e escolhi a opção Options.


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.


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.