segunda-feira, 24 de dezembro de 2012

[ORACLE/MYSQL] Criando um dblink entre Oracle e MysQL:


Passo 1:
No servidor MySQL crie um usuário com os privilégios necessários de acesso ao database que será feito o dblink:

Exemplo:
mysql> grant all privileges on db_mysql.* to 'usuario'@'192.168.%' identified by 'senha';
Query OK, 0 rows affected (0.00 sec)

Passo 2:
Instale no servidor Oracle o Connector/ODBC.
Link para download http://www.mysql.com/downloads/connector/odbc/#downloads

[root@oraserver ~]# rpm -ivh mysql-connector-odbc-5.1.11-1.rhel5.x86_64.rpm

Passo 3:
Após instalado o Connector/ODBC, vamos configura-lo:

O arquivo /etc/odbcinst.ini contém os dados dos drivers:

[root@oraserver ~]# cat /etc/odbcinst.ini
[PostgreSQL]
Description             = ODBC for PostgreSQL
Driver          = /usr/lib/libodbcpsql.so
Setup           = /usr/lib/libodbcpsqlS.so
FileUsage               = 1

[MySQL ODBC 5.1 Driver]
Driver          = /usr/lib64/libmyodbc5.so
UsageCount              = 1

Adicione a seguinte entrada no arquivo /etc/odbc.ini:

[root@oraserver ~]# cat /etc/odbc.ini
[oracle_mysql]
Driver          = MySQL ODBC 5.1 Driver
DATABASE        = db_mysql
PWD             = senha
PORT            = 3306
SERVER          = 10.145.0.181
UID             = usuario
SOCKET          = /tmp/oracle/mysql.sock
CHARSET         = latin1

Dessa forma criamos um acesso com o nome de oracle_mysql, usando o driver 'MySQL ODBC 5.1 Driver' no database db_mysql.

Passo 4:
Testando o acesso:

[root@oraserver ~]# isql oracle_mysql
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
SQL> show tables;
+-----------------------------------------------------------------+
| Tables_in_db_mysql                                              |
+-----------------------------------------------------------------+
| tabela01                                                        |
| tabela02                                                        |
+-----------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL> select * from tabela02;
+-----------+-------------------
| campo1    | name          
+-----------+-------------------
| 1         | RAFAEL SILVA  
| 2         | MARIA JOSEFINA  
| 3         | JOSE GALDERIO  
+-----------+-------------------
SQLRowCount returns 3
3 rows fetched

Passo 5:
Deve ser criado um 'init' no servidor Oracle em $ORACLE_HOME/hs/admin/initmysqloracle.ora com as seguintes configurações:

[oracle@oraserver admin]$ cat initmysqloracle.ora
HS_FDS_CONNECT_INFO = oracle_mysql
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_SHAREABLE_NAME = /usr/lib64/libmyodbc5.so
HS_FDS_SQLLEN_INTERPRETATION = 32
HS_FDS_REPORT_REAL_AS_DOUBLE = TRUE
HS_FDS_FETCH_ROWS = 1
HS_FDS_RECOVERY_ACCOUNT = RECOVER
HS_FDS_RECOVERY_PWD = RECOVER
HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
HS_NLS_NCHAR=UCS2
set ODBCINI=/etc/odbc.ini
set SQL_MODE='ANSI_QUOTES'

Atenção aos parâmetros HS_LANGUAGE e HS_NLS_NCHAR para garantir que não haja problemas com o charset.

Link com mais detalhes sobre os parâmetros acima:
http://docs.oracle.com/cd/E18283_01/gateways.112/e12070/apd.htm#BABEFBHB

Passo 6:
Adicione ao listener uma entrada para o novo init fazendo acesso ao ODBC:

(SID_DESC =
       (PROGRAM = dg4odbc)
       (ORACLE_HOME = /u00/app/oracle/product/11.2.0)
       (SID_NAME = oracle_mysql)
       (ENVS = LD_LIBRARY_PATH=/usr/lib64:/u00/app/oracle/product/11.2.0/lib:/lib64:/usr/lib64)
    )
)


E faça um reload:

[oracle@oraserver admin]$ lsnrctl reload

Passo 7:
Adicione uma entrada no tnsnames.ora:

MYSQLORACLE =
  (DESCRIPTION =
    (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = mysqlserver)(PORT = 1521))
    )
    (CONNECT_DATA =
        (SID =  oracle_mysql))
        (HS = OK)
    )


Passo 8:
Crie o dblink:

SQL> create public database link mysql_orcl_db connect to "usuario" identified by "senha" using 'MYSQLORACLE';

Database link created.

Teste o acesso:

SQL> desc "tabela01"@mysql_orcl_db;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 campo1                                             NUMBER(10)
 campo2                                             CHAR(255)

SQL>select * from "tabela01"@mysql_orcl_db;
    campo1 campo2
---------- ------------------------------
         1 RAFAEL STOEVER
         2 JOSE GALDERIO
         3 MARIA DAS GRACAS

Considerações:
Lembrando que tudo que usar no MySQL em  minusculo, no Oracle deverá ser tratado como string em minusculo contendo as aspas.

Para o Oracle 11g deve ser usado o (PROGRAM = dg4odbc)
E para 10g 64bits não há suporte hsodbc conforme feito neste artigo, desta forma deve ser comprado o Oracle Gateway para conseguir efetuar o procedimento.
Fonte: DESUPPORTED: How to Setup Generic Connectivity – HSODBC – to MySQL (Doc ID 260981.1)

Adaptado de:
http://www.oraclehome.com.br/2011/10/14/oracle-linux-acessando-mysql-em-windows-heterogeno/

quinta-feira, 22 de novembro de 2012

[ORACLE] Removendo dumpfiles com ADRCI

O ADRCI está disponível na versão 11g do banco de dados Oracle, ele é uma  ferramenta via linha de comando e é utilizada para gerenciar dados de diagnóstico. Neste post vou mostrar como remover dumpfiles via ADRCI.

Execute o ADRCI:

[oracle@db-rac-1.adm.infra ~]$ adrci

ADRCI: Release 11.2.0.2.0 - Production on Thu Nov 22 21:1600:3600 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/u00/app/oracle"

Mostra as homes do ADR:

adrci> show homes
ADR Homes:
diag/tnslsnr/svr/listener
diag/rdbms/orcl/ORCL
diag/rdbms/teste/TESTE

Sete a home que você irá remover os dumpfiles:

adrci> set home diag/rdbms/orcl/ORCL

Remove os dumpfiles por tempo, sendo que o parâmetro 'age' conta a quantidade de minutos que você planeja manter de dumpfiles.

adrci> purge -age 600
Neste exemplo mantemos 600 minutos de dumpfiles nesta home.

Também é possível remover os dumpfiles por tipo:

adrci> purge -type TRACE
Neste exemplo estamos removendo todos os dumpfiles do tipo TRACE. Os tipos de dumpfiles são ALERT, INCIDENT, TRACE, CDUMP, HM.

É possível combinar os dois comandos acima, conforme o exemplo:

adrci> purge -age 600 -type TRACE
Dessa forma, os dumpfiles do tipo TRACE de até 600 minutos ficam armazenados, os demais dumpfiles do tipo TRACE são excluídos.

Você também pode excluir um incidente específico ou um range de incidentes:

adrci> purge -i 453
Exemplo de como excluir um incidente específico.

adrci> purge -i 987 1256
Exemplo de como excluir um range de incidentes.


quarta-feira, 21 de novembro de 2012

[MYSQL] CHARSET


Para ver qual o charset utilizado no database:
 mysql> show create database <nomedatabase>;

Alterar charset de um database:
mysql> ALTER DATABASE <nome_database> DEFAULT CHARACTER SET <charset> COLLATE <collate>;

Alterar charset de uma determinada tabela:
mysql> ALTER TABLE <nome_tabela> CONVERT TO CHARACTER SET <charset> COLLATE <collate>;

Ver charset de uma determinada tabela:
mysql> show create table <nome_tabela>;

quinta-feira, 11 de outubro de 2012

[MYSQL] Exportar dados em CSV

É muito simples exportar os dados de uma consulta no MySQL em CSV, veja o exemplo abaixo:


select s.name, description, t.name as 'service desk', t2.name as 'equipe executora' from request_services s
inner join teams t on t.id = responsible_team_id
order by s.name
INTO OUTFILE '/tmp/arquivo.csv'
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n';

Breve explicação sobre os comandos:

INTO OUTFILE: Cria o arquivo no diretório indicado.
FIELDS TERMINATED BY: Termina os campos da consulta com valor especificado.
LINES TERMINATED BY: Termina as linhas com o valor especificado, no exemplo o '\n' é utilizado para pular de linha.

segunda-feira, 17 de setembro de 2012

[ORACLE] Criando um catalogo de recuperação para RMAN


Passo 1:
Crie uma instância para o RMAN.

Passo 2:
Crie a tablespace que irá conter o catálogo:

create tablespace CLOG datafile 'C:\Oracle\RMAN\TBS\CLOG01.DBF' size 200M;

Crie um usuário para o RMAN:

create user userrman identified by userrman default tablespace CLOG temporary tablespace TEMP;

E conceda os privilégios necessários:

grant connect, resource, recovery_catalog_owner to userrman;

Passo 3:
Conecte-se ao RMAN:

C:\>rman
connect catalog userrman/userrman

Passo 4:
Crie o catalogo:

create catalog tablespace CLOG;

E saia do RMAN.

Passo 5:
Após a criação do catálogo, é necessário registrar a instância no catálogo de recuperação:

C:\>set ORACLE_SID=ORCL
C:\>rman target / catalog userrman/userrman@RMAN

RMAN>register database;
RMAN> exit

Pronto, agora você tem um catálogo de recuperação para o RMAN!

quinta-feira, 13 de setembro de 2012

[ORACLE] Perda de REDOLOGS


Antes de iniciar o procedimento, vai uma dica:
Sempre mantenha seus redologs multiplexados (recomenda-se dois membros para cada grupo), para evitar que o banco de dados pare, além de também evitar perda de dados, caso ocorra a perda de um grupo/membro de redolog em estado current.

Perda de somente um membro de um grupo de redolog:

Se os membros dos grupos de redolog estiverem multiplexados é muito simples corrigir este problema:

Como o banco de dados não para quando ocorre a perda de somente um membro de um grupo de redolog deve se prestar atenção nas mensagens logadas no log de alert e vindas do GRID CONTROL.

Exemplo de mensagem logada no log de alert:

Errors in file C:\APP\ORA\diag\rdbms\orcl\orcl\trace\orcl_lgwr_4560.trc:
ORA-00313: a abertura falhou para os membros do grupo 3 de log do thread 1
ORA-00312: thread 3 do log 1 on-line: 'C:\APP\ORA\ORADATA\ORCL\REDO03.LOG'
ORA-27041: n?o e possivel abrir arquivo
OSD-04002: não é possível abrir arquivo
O/S-Error: (OS 2) O sistema não pode encontrar o arquivo especificado.
Errors in file C:\APP\ORA\diag\rdbms\orcl\orcl\trace\orcl_lgwr_4560.trc:
ORA-00321: log 3 do thread 1; n?o e possivel atualizar o cabecalho do arquivo de log
ORA-00312: thread 3 do log 1 on-line: 'C:\APP\ORA\ORADATA\ORCL\REDO03.LOG'

Conecte-se a instância Oracle como usuário SYS:

C:\>sqlplus / as sysdba

E remova o membro de redolog perdido do dicionário de dados:

ALTER DATABASE
  DROP LOGFILE MEMBER 'C:\app\ORA\oradata\ORCL\REDO03.log';

Após isso, o criamos novamente:

ALTER DATABASE
  ADD LOGFILE MEMBER 'C:\app\ORA\oradata\ORCL\REDO03.log'
      TO GROUP 3;

Caso o membro de redolog perdido seja do grupo no estado current, deve-se forçar a troca de grupo de redolog, antes de se executar os passos acima:

SQL>alter system switch logfile;

Perda de todos os membros de um grupo de REDOLOG:

Caso você perca todos os membros de um grupo de redolog (que não esteja no estado CURRENT), conforme já informado, a instância irá parar.

Neste caso, inicie a instância em modo MOUNT;

SQL>startup mount;

E remova do dicionário de dados o grupo de redolog perdido:

ALTER DATABASE DROP LOGFILE GROUP 2;

Após isso, crie-o novamente:

ALTER DATABASE
  ADD LOGFILE GROUP 2 ('C:\APP\ORA\ORADATA\ORCL\REDO02.LOG', 'C:\APP\ORA\ORADATA\ORCL\REDO02_B.LOG')
      SIZE 50M;

E abra a instância:

SQL>alter database open;


Perda de todos os membros de um grupo de REDOLOG no estado CURRENT:

Neste caso, haverá a perda dos dados que estavam neste grupo de redolog, pois eles não foram para disco, nem para a área de archive (por estarem no estado CURRENT).

Inicie a instância no modo MOUNT:

SQL>startup mount;

Será necessária uma recuperação incompleta do banco de dados para conseguir abri-lo novamente. Conecte-se ao RMAN:

C:\>rman target /

E inicie a restauração:

RMAN> RESTORE DATABASE UNTIL TIME '08-09-2012:17:00:00';

*Sempre mantenha em dia seus backups, pois caso ocorra uma situação desta, podemos diminuir a quantidade de dados perdidos.

E depois a recuperação:

RMAN> RECOVER DATABASE UNTIL TIME '08-09-2012:17:00:00';

Repare que ocorrerá erros ao final da recuperação justamente pela perda do grupo de redolog, ignore estes erros e ao término da recuperação, inicie a instância utilizando a opção RESETLOGS:

SQL>alter database open resetlogs;









segunda-feira, 10 de setembro de 2012

[MYSQL] Mover InnoDB

Passo 1:
Pare o MySQL Server:

# /etc/init.d/mysqld stop

Passo 2:
Através de comandos do sistema operacional, mova o arquivo ibdata1 para outro diretório ou partição (/ibdata).

Passo 3:
Edite o arquivo my.cnf e adicione a seguinte linha:
innodb_data_home_dir=/ibdata

Passo 4:
Inicie o MySQL Server:

# /etc/init.d/mysqld start

sexta-feira, 7 de setembro de 2012

[ORACLE] Configurando FRA

A Flash Recover Area (FRA) é muito simples de ser configurada, mas antes, confirme se sua instância atende os requisitos abaixo:

  • A instância deve estar em modo archivelog;
  • Deve-se ter uma área para recuperação habilitada;
  • Se você usar RAC, a área de recuperação deve ser armazenada no sistema de arquivos do cluster ou no ASM.
Agora vamos aos passos para a configuração do FRA!
Passo 1:
Dê um shutdown limpo na instância:

SQL>shutdown immediate;

E inicie a instância em modo MOUNT:

SQL>startup mount;

Passo 2:
Altere o parâmetro DB_FLASHBACK_RETENTION_TARGET para o tempo de retenção que você deseja ter na área de recuperação. O valor padrão é 1440 minutos.

SQL>alter system set DB_FLASHBACK_RETENTION_TARGET=2880 scope=both;

Passo 3:
Indicamos o tamanho que nossa área de recuperação pode ter:

SQL>alter system set DB_RECOVERY_FILE_DEST_SIZE=4G scope=both;

Passo 4:
Neste passo definimos o diretório do sistema operacional utilizado pelo FRA, devemos antes criar o diretório no sistema operacional:

SQL>alter system set DB_RECOVERY_FILE_DEST='/u00/FRA' scope=both;

Passo 5:
Este passo é opcional, caso você queira trabalhar com o mecanismos de Flashback, você pode habilita-lo neste momento:

SQL> alter database flashback on;

Passo 6:
Abra o banco de dados:

SQL>alter database open;

terça-feira, 7 de agosto de 2012

[MYSQL] Criar e remover databases

Criar databases em um banco de dados MySQL é muito fácil, segue o comando a seguir:

mysqladmin -u root -p create <nome_database>

Ex:

mysqladmin -u root -p create db_production

Para remover databases é igualmente fácil:

mysqladmin -u root -p drop <nome_database>

Ex:

mysqladmin -u root -p drop db_production

quinta-feira, 2 de agosto de 2012

[ORACLE] Criando instância manualmente

Segue abaixo, exemplo de como criar uma intância Oracle manualmente:

Passo1:
Copie a estrutura de diretórios de uma instância já existente para utilizar na nova instância.

Passo 2:
Copie o arquivo init.ora de uma instância já existente e substitua o valor do parâmetro db_name pelo nome da instância que você irá criar.

Se estiver usando Windows, crie um serviço em services.msc para a instância.

oradim -new -sid TESTE

Passo 3:

Crie um arquivo de senhas:

orapwd file=C:\Oracle\product\10.2.0\db_1\database\pwdTESTE.ora password=oracle entries=10

Passo 4:
Inicie a instância em modo nomount:

set ORACLE_SID=TESTE
sqlplus / as sysdba
startup pfile=<caminho_novo_pfile> nomount;

Passo 5:
Crie o spfile da instância:
create spfile from pfile='<caminho_novo_pfile>';

Execute o comando abaixo:

create database TESTE
  logfile group 1 ('C:\oracle\product\10.2.0\oradata\TESTE\redo1.log') size 10M,
       group 2 ('C:\oracle\product\10.2.0\oradata\TESTE\redo2.log') size 10M,
       group 3 ('C:\oracle\product\10.2.0\oradata\TESTE\redo3.log') size 10M
  character set WE8ISO8859P15
  national character set utf8
  datafile 'C:\oracle\product\10.2.0\oradata\TESTE\system.dbf'
        size 50M
        autoextend on
        next 10M maxsize unlimited
        extent management local
  sysaux datafile 'C:\oracle\product\10.2.0\oradata\TESTE\sysaux.dbf'
        size 10M
        autoextend on
        next 10M maxsize unlimited
  undo tablespace undotbs1
        datafile 'C:\oracle\product\10.2.0\oradata\TESTE\undo.dbf'
        size 2G
  default temporary tablespace temp
       tempfile 'C:\oracle\product\10.2.0\oradata\TESTE\temp.dbf' size 2G;


Passo 6:
Rode estes dois scripts:

@C:\oracle\product\10.2.0\db_1\rdbms\admin\catalog.sql;
@C:\oracle\product\10.2.0\db_1\rdbms\admin\catproc.sql;



Passo 7:
Recarregue o listener:

lsnrctl reload

*Lembrando que no exemplo foi utilizado a estrutura padrão de diretórios de uma instalação Oracle em ambiente Windows, e está estrutura pode ser trocada de acordo com a necessidade apresentada.

segunda-feira, 14 de maio de 2012

[ORACLE] Ver tamanho do banco de dados

Para ver o tamanho do banco de dados, pode-se usar a seguinte consulta:

select sum(bytes) /1073741824  TAMANHO_GB from dba_segments;

quinta-feira, 3 de maio de 2012

[MySQL] Backup de banco de dados

Uma forma fácil de realizar o backup dos banco de dados MySQL é através do mysqldump.

Comando:
mysqldump -u <usuário> -p  --database <nome_database> > <arquivo_dump>

Exemplo:
mysqldump -u root -p --database DBMySQL > DBMySQL.sql

Podemos gerar este dump compactado, conforme exemplo abaixo:

mysqldump -u root -p --database DBMySQL | gzip -c > BDMySQL.sql.gz

Através do comando acima, o dump é gerado no diretório corrente, já compactado.

Também é possível fazer o backup somente de algumas tabelas do database, basta adicionar o parâmetro --tables e após ele escrever o nome das tabelas entre aspas simples.

Exemplo:
mysqldump -u root -p --database DBMySQL --tables 'table_1' 'table_2' 'table_3'  | gzip -c > BDMySQL.sql.gz

Importando um dump MySQL:

Se o dump estiver compactado:
gunzip < <dump_file> | mysql -uroot -p <nome_database>
Exemplo:
gunzip < DBMySQL.sql.gz | mysql -uroot -p DBMySQL

Senão estiver:
mysql -u root -p --database  <nome_database> <   <dump_file>
Exemplo:
mysql -u root -p --database DBMySQL <  DBMySQL.sql



segunda-feira, 23 de abril de 2012

[ORACLE] Monitorando uma sessão


Passo 1:
Com um usuário que tenha permissão para visualizar v$session, localize a sessão do usuário a ser monitorada:

select SID,SERIAL# from v$session where username='Nome_Usuario';

Passo 2:
Descoberto SID e Serial da sessão que você deseja monitorar, ative a monitoração com o commando abaixo:

exec SYS.DBMS_SYSTEM.SQL_TRACE_IN_SESSION(SID,SERIAL#,TRUE);

Se estiver usando 11g:

exec DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,TRUE);

A partir de agora, todos os comandos executados pelo usuário serão escritos num arquivo .trc no diretório especificado no parâmetro USER_DUMP_DEST.

Passo 3:
Após terminar o monitoramento, desative o monitoramento da sessão, é importante desativar o monitoramento, pois senão o arquivo .trc continuará a ser escrito, ocupando espaço livre em disco, até a sessão ser terminada.

exec SYS.DBMS_SYSTEM.SQL_TRACE_IN_SESSION(SID,SERIAL#,FALSE);

Se estiver usando 11g:

exec DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,FALSE);

domingo, 18 de março de 2012

[ORACLE] Gerar DDL de um objeto

Uma forma bem fácil de gerar um DDL de um objeto no Oracle:

select dbms_metadata.get_ddl('object_type','object_name') from dual;

segunda-feira, 5 de março de 2012

[LINUX] Comando NOHUP

Este é um comando que me quebrou vários galhos. Quantas vezes você já não precisou deixar rodando algum comando extremamente demorado num servidor remoto via ssh, porém, não poderia continuar conectado nele?

Para executar um comando em background e fazer com que ele continue executando após deslogar do servidor remoto, utlize o comando nohup:

# nohup ./comando &


A saída do comando é gravada no arquivo nohup.out que é criado no diretório onde foi executado o comando.

Fonte: http://www.vivaolinux.com.br/dica/O-comando-nohup

sábado, 4 de fevereiro de 2012

[LINUX] Comandos úteis: Manipulação de Grupos e Usuários

Esta seção mostra como criar e gerenciar usuários mortais – usuários que não possuem as mesmas prerrogativas do user root.

ADDUSER
Adiciona um usuário.

Este comando atualiza os arquivos /etc/passwd e /etc/group.

Exemplo:
# adduser oracle

# adduser –n –g grpteste \
          -G dba, disk, oinstall \
          -s /user/demo/teste \
          -c “Usuario teste” \
          -h /home/demo/teste \
          userteste

DELUSER
Exclui um usuário.

Este comando atualiza os arquivos /etc/passwd e /etc/group.

Exemplo:
$ deluser oracle

GROUPADD
Adiciona um grupo.

Este comando atualiza o arquivo /etc/group.

Exemplo:
# groupadd oracle
# groupadd –g 500 administ

O parâmetro –g força o cadastramento do grupo com um número pré-estabelecido. No nosso exemplo, parâmetro –g força que o grupo administ seja o número 500.

Se houver um grupo cadastrado anteriormente com o número que estamos tentando assinalar, o Linux retorna um erro
“groupadd: gid XXX is not unique” (onde XXX é o número do grupo).
  
GROUPDEL
Exclui um grupo.

Este comando atualiza o arquivo /etc/group.

Exemplo:
# groupdel oracle

PASSWD
Permite alterar a senha de um usuário.

Exemplo:
$ passwd

SU
Super-User – é utilizado para adquirir privilégio de super-usuário (por exemplo root)

Exemplo:
$ su – root
Password:

Para sair do modo super-usuário digite exit.

TTY
É utilizado para saber o número da console (terminal) em que o usuário está conectado.

Exemplo:
$ tty
/dev/pts/0

W, WHO, WHOAMI
É utilizado para identificar o usuário corrente

Exemplo:
$ w
14:05:10  up 139 days,  9:38,  2 users,  load average: 0.04, 0.55, 0.58
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
oracle   pts/0    jose.local  2:04pm  0.00s  0.02s  0.01s  w
root     pts/1    source.local 10:45am  3:02m  0.05s  0.05s  -bash

$ who
oracle   pts/0        May 23 14:04 (jose.local)
root     pts/1        May 23 10:45 (source.local)

$ whoami
oracle

ID
Verifica o ID do usuário e dos grupos que ele pertence.

Exemplo:
$ id uid=54321(oracle) gid=54321(oinstall) grupos=54321(oinstall),54322(dba),54323(oper)

domingo, 22 de janeiro de 2012

[LINUX] Comandos úteis: Tratamento de arquivos e diretórios - PARTE 2

linuLN
Cria um link para um arquivo ou para um diretório inteiro.
Sintaxe:
ln -s <arquivo/diretório fonte> <arquivo/diretório destino (link)>

Exemplo:
# ln -s /userdir/arq1.xxx /home/teste/user/link1.xxx

LS
Exibe o conteúdo de um diretório – não necessáriamente o diretório corrente (neste caso devemos informar o diretório o qual queremos obter informações).

Se não colocamos parâmetro algum, exibe o conteúdo do diretório corrente, sem listar os atributos dos arquivos ou dos diretórios.

Opções:
1.      O parâmetro –l indica que deverá listar os atributos dos arquivos/diretórios (modo detalhado).
2.      O parâmetro –a indica que deve listar também os arquivos ou diretórios ocultos.

Exemplos:
$ ls
exemplo.txt      teste.conf      teste2.txt      diretorio1

$ ls /etc/dir1/aaa.dir
expl1.txt      teste_qqq.conf    dir_Lxo

$ ls -a
exemplo.txt      teste.conf      teste2.txt      diretorio1
exemplo_hide1    tst_hd2.conf    tsthide2

$ ls –l
-rw-rw-rw-    1  usuario   usuario     4096   jul 10  09:30     exemplo.txt
-rw-rw-rw-    1  usuario   usuario     1024   feb 15  08:05     teste.conf
-rw-rw-rw-    1  usuario   usuario     1024   feb 15  08:05     teste2.txt
drwxrwxrwx    2  usuario   usuario     1024   feb 15  08:05     diretorio1

Os 10 caracteres da primeira coluna significam:
1° caracter – o tipo, sendo “d” é um diretório, “-“ um arquivo ou “l” um link.
2° ao 4° caracteres – as permissões do owner (r w x – read, write execute, respectivamente);
5° ao 7° caracteres – as permissões do grupo;
8° ao 10° caracteres – as permissões de um usuário qualquer (others).

Na segunda coluna temos o número de links que o arquivo ou o diretório possuem (normalmente temos 1 para arquivos e 2 para diretórios).
A terceira e quarta coluna indicam o Owner e o Group (respectivamente) do diretório/arquivo.

A quinta coluna é o tamanho do arquivo expressa em bytes.

A sexta coluna é a data/hora de criação ou da última atualização da entidade (arquivo/diretório).

A sétima coluna é o nome da entidade (arquivo / diretório ou link).

$ ls –l `find /etc –name “*.conf”`
-rw-r--r--    1 root     root        13337 Feb 24  2003 /etc/X11/gdm/gdm.conf
-rw-r--r--    1 root     root          289 Feb 24  2003 /etc/xinetd.conf
-rw-r--r--    1 root     root          361 Apr 27 09:59 /etc/yp.conf 

MV
Move arquivos para outros diretórios ou renomeiar arquivos.

OBS.: É possível mover um arquivo de pasta e renomeá-lo ao mesmo tempo.

Exemplo:
$ mv musica1 /user/mymusics/
$ mv musica1 musica1.old
$ mv musica1 /user/mymusics/musica2.txt

MKDIR
Cria um diretório.

Exemplo:
$ mkdir /user/mydirectory

PSCP
Este comando é um aplicativo do utilitário PUTTY, e tem como finalidade copiar arquivos entre estações na rede.

A sintaxe do comando é:
pscp <arquivo ou diretório fonte> <user destino>:<ip destino> | <arquivo ou diretório destino>

Exemplo:
$ pscp /sft/trab/*.* oracle:192.168.4.117 | /sft/oracle/9iR2

Também podemos utilizar o comando SCP do Linux (descrito adiante) para a mesma finalidade.

PWD
Lista o diretório corrente.

Exemplo:
$ pwd 
/user/publico/exemplos

RM
Remove arquivos

Exemplo:
$ rm teste2.txt

Há também a opção (que deve ser evitada ao máximo!), que é a utilização do comando rm com a opção fr pois força a exclusão de um arquivo/diretório com todo o seu conteúdo – com este comando não há a possibilidade de recuperação dos dados perdidos.

rm –fr <diretório>

Exemplo:
$ rm –fr abc.xyz-3.2.2-11.9.dir

RMDIR
Remove diretórios que estejam vazios.

Exemplo:
$ rmdir /user/emptydirectory

SCP
Copia arquivos entre estações da rede.

OBS: como requisito para utilização deste comando, as estações devem ter o SSH habilitado.

A sintaxe do comando é:
scp <fonte> <destino>

Onde <fonte> e <destino> obedecem o mesmo critério:
<user>@<endereço ip>:<diretório e arquivo>

Exemplo:
# scp /oracle/data/init.ora oracle@192.168.1.2:/dir_dest1/init.ora

TAIL
Lista as últimas 10 (por default) linhas do arquivo.
Sintaxe:
tail <arquivo>

Exemplo:
$ tail samba.conf

$ tail –3 lixo.txt
Lista as últimas 3 linha do arquivo lixo.txt

$ tail +3 lixo.txt
Lista o arquivo lixo.txt a partir da 3ª linha.

$ tail –f /userteste/log.txt
Lista as últimas 10 linhas do arquivo /userteste/log.txt e fica monitorando, listando novas entradas no final do arquivo.

TAR
Compactação de arquivo(s).
tar   x, v, z, c, f, j    (-x:descompacta, -v:verbose, -z:tipo de compactaçãp gzip, -c:compactar,  -f:ultimo parâmetro, nome do arquivo,  -j:tipo de compactação bzip)

Sintaxe:
tar [parâmetros] <nome do arquivo compactado> <nome do arquivo a compactar>

Exemplo:
# tar –cvzf /trab/teste/exemplo1.tar.gz /etc      -- compacta o diretório /etc
# tar –cvjf /trab/teste/exemplo2.tar.bz2 /etc     -- compacta o diretório /etc
# tar –xvzf /trab/teste/exemplo3.tar.gz –C /trab/teste/musicas/music1  -- descompacta

TOUCH
Cria um arquivo vazio.

Exemplo:
# touch exemplo1.txt

UMASK
É possível definir um set de permissões default para todos os arquivos ou diretórios que são criados por um usuário através do comando umask.

Este comando será incluído no arquivo .bash de logon do usuário .bashrc.

Exemplo:
$ vi .bashrc
...
umask –S u=rwx, g=rx, o=rx

MOUNT
Usado para montar volume no Linux.

Exemplo:

# mount /dev/sdd1 /media

O disco que encontrado através do comando fdisk, é montado (e agora pode ser acessado) em /media.
Para desmonstar o volume:

# umount /media

Para montar HDs externos, particionados em FAT32, utilizar o comando:

# mount -t vfat -o rw,uid=<usuario>,gid=<grupo> origem destino

Exemplo:

mount -t vfat -o rw,uid=54321,gid=54321 /dev/sdb1 /hd_ext/

sexta-feira, 13 de janeiro de 2012

[LINUX] Comandos úteis: Tratamento de arquivos e diretórios - PARTE 1

Por conta da quantidade de comandos, irei dividir em 2 partes os comandos referentes tratamento de arquivos e diretórios:


CAT
É o comando padrão para listar arquivos (Standard Output – STDOUT). Este comando aceita, também, a entrada de dados através do teclado redirecionando-os para o arquivo especificado utilizando o operador “>”. Também é utilizado para concatenar arquivos texto, conforme os exemplos abaixo.

Exemplos:
$ cat > frase1.txt
AAA BBB CCC DDD EEE
FFF GGG HHH III JJJ
<CTRL + d>

$ cat frase1.txt
AAA BBB CCC DDD EEE
FFF GGG HHH III JJJ

$ cat > frase2.txt
KKK LLL MMM NNN
OOO PPP QQQ RRR
SSS TTT UUU VVV
<CTRL + d>

$ cat frase1.txt frase2.txt
AAA BBB CCC DDD EEE
FFF GGG HHH III JJJ
KKK LLL MMM NNN
OOO PPP QQQ RRR
SSS TTT UUU VVV

$ cat -n frase1.txt
1 AAA BBB CCC DDD EEE
2 FFF GGG HHH III JJJ

Lista o arquivo frase1.txt, numerando as linhas do arquivo.

$ cat frase1.txt frase2.txt | less
$ cat frase1.txt frase2.txt | more

Lista o(s) arquivo(s) considerando uma mudança de página – pede para o operador teclar <ESPAÇO> para prosseguir a listagem.

CD
Muda o diretório corrente.

Exemplo:
$ cd ..
$ cd /etc/samba

CHMOD
Mudança das permissões de acesso à um arquivo ou diretório:
chmod [-R] ugoa+rwx <arquivo ou diretório>  -- Concede direitos (+)
chmod [-R] ugoa-rwx <arquivo ou diretório>  -- Revoga direitos (-)

Onde, <u> = USER, <g> = GRUPO, <o>=OWNER  e <a>=ALL
-R → Recursivo (quando utilizado em um diretório atualiza todos os arquivos e sub-diretórios do mesmo).

CHOWN
Troca o owner/grupo de um diretório ou arquivo.

A sintaxe do comando é:
chown <owner>:<group> <diretório/arquivo>

Exemplo:
$ chown nobody:nobody diretorio1
$ chown oracle:oracle arqtexto1.conf

A opção –R troca o owner de todas os diretórios dentro do diretório raiz

Exemplo:
$ chown –R oracle.oinstall /dsk1/

CP
Copiar arquivos.

A sintaxe do comando é:
cp <fonte> <destino>

Exemplo:
$ cp aaa.txt bbb.txt

DIFF
Compara dois arquivos e exibe as diferenças.

Exemplo:
$ diff user.arq1.xxx /userdir/teste/user.arq2.yyy

FIND
Procura por arquivos ou diretórios

Exemplo:
$ find /home/user –name “file_name.txt”
/home/user/direct/file_name.txt

$ find . –name “file_name2”
/home/user_aaa/direct/file_name2

$ find . –user mario
/home/user_aaa/direct/file_name5
/home/user_aaa/direct/file_name7

GREP
Procura dentro do arquivo.

Exemplo:
$ cat /user_trab/trab.xxx | grep juca

HEAD
Lista as 10 (por default) primeiras linhas do arquivo.
Sintaxe:
head <arquivo>

Exemplo:
$ head samba.conf

$ head –3 lixo.txt
Lista as 3 primeiras linhas do arquivo lixo.txt.

MORE
Exibe o conteúdo do arquivo.

Exemplo:
$ more /etc/hosts


LESS
Idem ao MORE – lista o conteúdo de um arquivo.