sexta-feira, 22 de maio de 2015

Instalação do MySQL no CentOS [MySQL];

O objetivo desse post é descrever a tarefa de instalação do MySQL em um ambiente Linux CENTOS 6 ou 7 (Testado em 2 versões).

1.) Procedimentos para a Instalação

Conectado com Usuário root

-- Para preparar o ambiente, antes deve executar os comandos

# yum update
# yum install Perl
# yum install -y perl-Data-Dumper

-- Será necessário criar um grupo para o MySQL e adicionar um usuário que vai servir apenas para fins administrativos, sem direitos de login.

# groupadd mysql
# useradd -r -g mysql mysql

-- Copiar o binário do MySQL (*.tar.gz) e Colar no diretório /usr/local do servidor Linux CENTOS – Utilizar o WINSCP
 
# cd /usr/local
# tar zxvf mysql-advanced-5.6.24-linux-glibc2.5-x86_64.tar.gz
# ln -s mysql-advanced-5.6.24-linux-glibc2.5-x86_64 mysql

# cd mysql
# chown -R mysql .
# chgrp -R mysql .


-- Instalando o Banco MySQL

# scripts/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql data


-- Para manter uma cópia dos arquivos abaixo

# cp support-files/my-default.cnf /etc/my.cnf
# bin/mysqld_safe --user=mysql &
# cp support-files/mysql.server /etc/init.d/mysql


2.) Configuração e Teste do Servidor

-- Editar o arquivo my.cnf localizado no diretório /etc/

# vi /etc/my.cnf

-- Adicionar os parâmetros abaixo e salvar - :wq!

[mysqld]
datadir=/var/lib/mysql/
socket=/tmp/mysql.sock
port=3306
user=mysql

[mysql.server]
basedir=/usr/local/mysql

-- Testar a inicialização do MySQL

# /etc/init.d/mysql start
-- > Mensagem de sucesso Starting MySQL.. SUCCESS!

-- Criando o arquivo mysql.sh no diretório /etc/profile.d/

# touch /etc/profile.d/mysql.sh
# vi /etc/profile.d/mysql.sh

-- Adicionar dentro do arquivo o caminho abaixo e salvar - :wq!

 PATH=${PATH}:/usr/local/mysql/bin

-- Será necessário reiniciar o Servidor para as alterações funcionarem

# reboot

-- Após reboot, Conectar novamente com o usuário root e executar:

# /etc/init.d/mysql start
# mysql
# exit

3.) Alterando a Senha do Usuário root MySQL

# /usr/local/mysql/bin/mysqladmin -u root password'Senha123'

-- Acessando o MySQL com o usuário root

# mysql -u root -pSenha123


Abs, Bruno Duarte.

terça-feira, 28 de abril de 2015

Procedure que gera INSERT de uma Tabela [SQL Server];

Encontrei uma procedure na WEB muito legal, que gera os INSERTS dos dados de uma tabela.

Executei em uma instância SQL Server 2008 - Só consegui testar nesta versão.

CREATE PROC InsertGenerator
(@tableName varchar(100)) as

DECLARE cursCol CURSOR FAST_FORWARD FOR 
SELECT column_name,data_type FROM information_schema.columns WHERE table_name = @tableName
OPEN cursCol
DECLARE @string nvarchar(3000) 
DECLARE @stringData nvarchar(3000) 
DECLARE @dataType nvarchar(1000) 
SET @string='INSERT '+@tableName+'('
SET @stringData=''

DECLARE @colName nvarchar(50)

FETCH NEXT FROM cursCol INTO @colName,@dataType

IF @@fetch_status<>0
 begin
 print 'Table '+@tableName+' not found, processing skipped.'
 close curscol
 deallocate curscol
 return
END

WHILE @@FETCH_STATUS=0
BEGIN
IF @dataType in ('varchar','char','nchar','nvarchar')
BEGIN
 SET @stringData=@stringData+''''+'''+isnull('''''+'''''+'+@colName+'+'''''+''''',''NULL'')+'',''+'
END
ELSE
if @dataType in ('text','ntext') 
BEGIN
 SET @stringData=@stringData+'''''''''+isnull(cast('+@colName+' as varchar(2000)),'''')+'''''',''+'
END
ELSE
IF @dataType = 'money' 
BEGIN
 SET @stringData=@stringData+'''convert(money,''''''+isnull(cast('+@colName+' as varchar(200)),''0.0000'')+''''''),''+'
END
ELSE 
IF @dataType='datetime'
BEGIN
 SET @stringData=@stringData+'''convert(datetime,'+'''+isnull('''''+'''''+convert(varchar(200),'+@colName+',121)+'''''+''''',''NULL'')+'',121),''+'
 END
ELSE 
IF @dataType='image' 
BEGIN
 SET @stringData=@stringData+'''''''''+isnull(cast(convert(varbinary,'+@colName+') as varchar(6)),''0'')+'''''',''+'
END
ELSE 
BEGIN
 SET @stringData=@stringData+''''+'''+isnull('''''+'''''+convert(varchar(200),'+@colName+')+'''''+''''',''NULL'')+'',''+'
END

SET @string=@string+@colName+','

FETCH NEXT FROM cursCol INTO @colName,@dataType
END
DECLARE @Query nvarchar(4000)

SET @query ='SELECT '''+substring(@string,0,len(@string)) + ') VALUES(''+ ' + substring(@stringData,0,len(@stringData)-2)+'''+'')'' FROM '+@tableName
exec sp_executesql @query

CLOSE cursCol
DEALLOCATE cursCol


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Após criar, a chamada da Procedure será assim:
EXEC InsertGenerator 'TABELA' --Nome da tabela o qual deseja gerar os INSERTS

Resultado

sexta-feira, 27 de fevereiro de 2015

Como retornar todas as linhas de um Select em apenas uma [Oracle e SQL Server];

Aqui vai uma dica muito legal de como retornar todas as linhas de um SELECT em apenas uma só!

Com certeza em algum momento, vocês ainda irão precisar disso.

Bom.. Vamos lá!

--ORACLE - Função WM_CONCAT ou LISTAGG

select wm_concat(COLUNA) from TABELA
where rownum <= 5;

SELECT LISTAGG(COLUNA, ',') WITHIN GROUP (ORDER BY COLUNA) APELIDO
FROM TABELA where rownum <= 5;



--SQL Server - Função STUFF (Para retirar a primeira vírgula) e utilizando FOR XML PATH('')

SELECT top 1
     STUFF( 
       (  
           select ',' + COLUNA
           from TABELA
           FOR XML PATH('')
       ),1,1,''
    )AS A
from TABELA

Abs,
Bruno Duarte.

quinta-feira, 5 de fevereiro de 2015

Apagar todos os Objetos de um schema/usuário [Oracle];

Quando precisamos "Limpar" um schema/usuário no Oracle, utilizamos o comando:

DROP USER schema CASCADE;

O problema disso é ter o trabalho de recriar o usuário e conceder todas as permissões (Grants) novamente.

Porém...
Podemos utilizar este Script que apaga (DROP) todos os objetos do schema, facilitando assim muito o nosso trabalho.


-- ORACLE 11g
BEGIN
   for rec1 in (select decode(object_type, 'TABLE', 'A', '')||OBJECT_TYPE AS ORDEM_TYPE, object_type, object_name from user_objects where object_type not in ('PACKAGE BODY','INDEX','TRIGGER', 'LOB', 'JOB') order by 1) loop
     EXECUTE IMMEDIATE 'drop ' || rec1.object_type || ' ' || rec1.object_name || case rec1.object_type when 'TABLE' then ' cascade constraints' when 'TYPE' then ' FORCE' else '' end;
   end loop;
      
   for rec in (select job_creator, job_name from user_SCHEDULER_JOBS) loop
       DBMS_SCHEDULER.DROP_JOB(JOB_NAME => '"'||rec.job_creator||'"."'||rec.job_name||'"', defer=>false, force=>false);
   end loop;

   for rec in (select job from user_JOBS) loop
       DBMS_JOB.REMOVE(job => rec.job);
   end loop;

exception when others then
   raise_application_error(-20001,'An error was encountered - ' || SQLCODE || ' -ERROR- ' || SQLERRM);
END;
/
--Limpa a Lixeira a nível de Usuário
PURGE RECYCLEBIN;
/


-- ORACLE 10g
BEGIN
   for rec1 in (select decode(object_type, 'TABLE', 'A', '')||OBJECT_TYPE AS ORDEM_TYPE, object_type, object_name from user_objects where object_type not in ('PACKAGE BODY','INDEX','TRIGGER', 'LOB', 'JOB') order by 1) loop
     EXECUTE IMMEDIATE 'drop ' || rec1.object_type || ' ' || rec1.object_name || case rec1.object_type when 'TABLE' then ' cascade constraints' when 'TYPE' then ' FORCE' else '' end;
   end loop;
      
   for rec in (select job_creator, job_name from user_SCHEDULER_JOBS) loop
       DBMS_SCHEDULER.DROP_JOB(JOB_NAME => '"'||rec.job_creator||'"."'||rec.job_name||'"', force=>false);
   end loop;

   for rec in (select job from user_JOBS) loop
       DBMS_JOB.REMOVE(job => rec.job);
   end loop;

exception when others then
   raise_application_error(-20001,'An error was encountered - ' || SQLCODE || ' -ERROR- ' || SQLERRM);
END;
/
--Limpa a Lixeira a nível de Usuário
PURGE RECYCLEBIN;
/

Abs, Bruno Duarte.