terça-feira, 18 de dezembro de 2012

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: