No ultimo treinamento, um aluno me enviou alguns dos comentários que fiz sobre os exercícios e dicas que repassei e que fui executando enquanto os slides eram repassados. Assim, como são dicas valiosas e super interessantes - decidi compartilhar. Creditos do Aluno Ronan Eustaquio. Aqui está a semana toda do treinamento, somente os comentários e dicas.
#### Primeiro dia de Curso (08/02/2010) #### Aluno: Ronan Eustáquio de Brito Prof.: André Casa de Software S/A --------------------------- -- RMAN -- dbid -> assinatura do banco crosscheck -> verifica o status do backup ou copia no disco ou fita; -> Verificar se o modo de arquivamento está ativado. SQL> select archiver from v$instance; ou SQL> archive log list; -> Mostrar data neste formato. [oracle@aluno04 ~]$ export NLS_DATE_FORMAT=DDMMYYYY_HH24MI RMAN> show all; ---- # Listar todos data files que requerem backup # Assume que os mais recentes backups estão sendo usados durante o restore. # Mostra 4 opções (incremental, dias, redundancia e janela de recuperação) RMAN> report need backup; ---- Alterar o banco para modo de archive log. ---- RMAN> sql 'shutdown immeditate'; RMAN> sql 'startup mount'; RMAN> sql 'alter database archivelog'; RMAN> sql 'alter database open'; # Para alterar o banco para modo de archive log é necessário realizar até este passo. RMAN> sql 'alter system switch logfile'; RMAN> list archivelog all; RMAN> backup tablespace users; RMAN> list backupset; RMAN> delete backupset 2; RMAN> backup as copy datafile 5 format '/u01/example.dbf'; # usando TAG's RMAN> backup tablespace users TAG='BACKUPTBUSERS'; RMAN> delete backupset TAG='BACKUPTBUSERS'; RMAN> backup archivelog all delete all input; # para remover os logs arquivados no arquivo de redo. # Para fazer backup completo do banco, inclusive os arquivos de controle. RMAN> backup database plus archivelog; ----- Fazendo recuperação ---- RMAN> backup tablespace users; # faz backup da tablespace users; RMAN> sql 'alter tablespace users offline immediate'; # para não ser usada. RMAN> restore tablespace users; # Restaura a tablespace. RMAN> recover tablespace users; # Aplica os devidos archivers. RMAN> sql 'alter tablespace users online'; ---- Deletar backup obsoleto ---- RMAN> list backup of tablespace users; # listar backups já feitos. RMAN> host; [oracle@aluno04 ~]$ rm[oracle@aluno04 ~]$ exit RMAN> crosscheck backupset; # visualiza os backups já feitos. RMAN> delete expired backupset; # deletar backups expirados. ---- Pratica 3 Usando recovery manager ---- # Exercício 6 RMAN> list backup of database; RMAN> backup as copy datafile 1 format '/u01/system01.copy'; RMAN> backup as copy datafile 4 format '/u01/example01.dbf'; # Exercício 7 RMAN> crosscheck backupset; # Exercício 8 RMAN> report need backup; # Exercício 9 RMAN> configure exclude for tablespace staging clear; ---- Exemplo para Recriar índice. ---- SQL> create tablespace indices; SQL> create table cliente (codigo number, nome varchar2(50)); SQL> create index cliente_idx on cliente(nome) tablespace indices; SQL> insert into cliente values (1, 'luiz'); SQL> commit; SQL> select index_name, status from dba_indexes where index_name = 'CLIENTE_IDX'; SQL> drop tablespace indices including contents and datafiles; SQL> select index_name, status from dba_indexes where index_name = 'CLIENTE_IDX'; SQL> create tablespace indices; SQL> create index cliente_idx on cliente(nome) tablespace indices; SQL> alter table cliente move tablespace users; SQL> select index_name, status from dba_indexes where index_name = 'CLIENTE_IDX'; SQL> alter index cliente_idx rebuild tablespace indices; ---- Recriando o arquivo de senha para autenticação. ---- [oracle@aluno04 ~]$ orapwd file=orapworcl.ora password=oracle entries=5 # este arquivo deve ficar na pasta $ORACLE_HOME/dbs # Obs.: Não esquecer de setar o parâmetro REMOTE_LOGIN_PASSWORDFILE para EXCLUSIVE; # Para verificar como está setado execute o comando: SQL> show parameter remote_login_passwordfile ################################################################################# #### Segundo dia de Curso (09/02/2010) #### Recuperação completa: Onde não há perda de dados. Recuperação incompleta: Por exemplo, recuperar informação de 1 hora atrás. Ponto de restauração: Ponto criado para fazer um recover até aquele momento. Utilizado quando não se tem certeza do que está fazendo, por exemplo. Ex.: SQL> CREATE RESTORE POINT before_load; RMAN> RECOVER DATABASE UNTIL RESTORE POINT before_load; # Fazer backup full do banco RMAN> backup full database plus archivelog delete all input tag=BACKUPFULL; ---- Exercício 5: Recuperação de banco de dados. ---- Dica: Para mudar o formato da data. SQL> alter session set nls_date_format='DD/MM/YYYY HH24:MI'; Exercício 1: [oracle@aluno04 labs]$ sqlplus hr/hr @lab_05_01.sql Exercício 2: SQL> select * from job_history; Exercício 3: SQL> shutdown immediate; SQL> startup mount [oracle@aluno06 labs]$ export NLS_DATE_FORMAT="DD/MM/YYYY HH24:MI" [oracle@aluno06 labs]$ export NLS_LANG="BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1" RMAN> list backupset; # Observe que a partir deste momento o relatório de backup está sendo apresentado em portugues. RMAN> RUN { SET UNTIL TIME = '09/02/2010 14:02'; RESTORE DATABASE; RECOVER DATABASE; sql 'ALTER DATABASE OPEN RESETLOGS'; } ---- Capitulo 5: Flashback ---- ---- Simular situação de recuperação utilizando flashback ---- sqlplus hr/hr SQL> create table dados(codigo number, nome varchar2(100)); SQL> insert into dados values (1, 'xxxxx'); SQL> commit; SQL> show recyclebin; # Observe que aqui não tem nada na lixeira, uma vez que este usuário não "deletou" nada. SQL> drop table dados; # Dropando a tabela; SQL> show recyclebin; # Mostrar dados que estão na lixeira. Note que a tabela dropada está lá. ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ ------------------- DADOS BIN$fy2774dMAnvgQKjAEAxxMw==$0 TABLE 2010-02-09:14:51:50 SQL> flashback table dados to before drop; # Comando utilizado para recuperar dados que está na lixeira (flashback) SQL> select * from dados; # Neste ponto a tabela dados já foi restaurada; ---- Configurando o flashback ---- SQL> conn / as sysdba SQL> shutdown immediate SQL> startup mount exclusive # exclusive para impedir que outros dba's conectem no banco. SQL> alter system set db_flashback_retention_target=2880 scope=both; SQL> alter database flashback on; SQL> alter database open; ---- Pontos de restauração garantidos ---- Um ponto de restauração garantido assegura que você possa executar um comando FLASHBACK DATABASE para um SCN em qualquer momento. ---- Exercício 6: Flashback ---- SQL> create restore point before_load guarantee flashback database # Criar um ponto de restauração por medidas de segurança. SQL> select CURRENT_SCN from V$DATABASE; CURRENT_SCN ----------- 521807 SQL> SELECT SUM(SALARY) FROM HR.EMPLOYEES; SUM(SALARY) ----------- 679050 SQL> SELECT COUNT(*) FROM HR.JOB_HISTORY; COUNT(*) ---------- 15 ---- Agora temos as informações a serem comparadas. ---- [oracle@aluno06 labs]$ sqlplus hr/hr @lab_06_04.sql # execução do script do exercício [oracle@aluno06 labs]$ sqlplus / as sysdba SQL> SELECT SUM(SALARY) FROM HR.EMPLOYEES; SQL> shutdown immediate; SQL> startup mount; RMAN> flashback database to scn=521807; # o número SCN é o mesmo que executamos no select acima. RMAN> alter database open resetlogs; ---- Capitulo 7: Lidando com banco de dados danificados. ---- -- DBVerify SQL> select name from v$datafile NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/undotbs01.dbf /u01/app/oracle/oradata/orcl/sysaux01.dbf /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/oradata/orcl/example01.dbf [oracle@aluno06 labs]$ dbv file=/u01/app/oracle/oradata/orcl/system01.dbf blocksize=8192 # Executando o dbv para verificar o datafile, em caso de corrupção. -- EXP [oracle@aluno06 labs]$ exp hr/hr file=dadoshr.dmp # Todo esquema do usuário hr foi exportado para o arquivo dadoshr.dmp ---- Laboratorio 7: ---- Exercício 1: SQL> select file_id, block_id from dba_extents where segment_name = 'DEPARTMENTS'; ou SQL> select SEGMENT_NAME, TABLESPACE_NAME, HEADER_FILE, HEADER_BLOCK # Este comando não mostrou o bloco correto. SQL> from DBA_SEGMENTS SQL> WHERE SEGMENT_NAME = 'DEPARTMENTS'; id do arquivo: 5 id do bloco: 49 [oracle@aluno06 labs]$ sh lab_07_02.sh /u01/app/oracle/oradata/orcl/example01.dbf 49 8192 [oracle@aluno06 labs]$ sqlplus / as sysdba SQL> select * from hr.departments; Em caso de não retornar erro, é necessário limpar o buffer_cache; Com o usuário system execute o comando abaixo. SQL> alter system flush buffer_cache; SQL> select * from hr.departments; ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 5, block # 51) ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf' Neste caso vamos recuperar usando o dbv (DB Verify) no arquivo de dados corrompido e informando o tamanho do bloco. [oracle@aluno06 labs]$ dbv file=/u01/app/oracle/oradata/orcl/example01.dbf blocksize=8192 Obs.: os blocos corrompidos foram logados no log de alert. Mas a saída do comando dbv também mostra os blocos corrompidos. Que no meu caso foram os blocos 49,50,51 e 52 SQL> show parameter background_dump_dest /u01/app/oracle/admin/orcl/bdump [oracle@aluno06 labs]$ vi /u01/app/oracle/admin/orcl/bdump/alert_orcl.log Logo em seguida, dentro do RMAN execute o comando de recuperação. RMAN> blockrecover datafile 5 block 49,50,51,52; Por fim, execute um select dentro da tabela hr.departments para verificar sua integridade. SQL> select * from hr.departments; Capitulo 8: Monitoramento e Gerenciamento de memória SQL> show parameter db_block_size SQL> show parameter db_cache_size SQL> show parameter db_keep_cache_size SQL> alter table hr.departments storage (buffer_pool keep); # este comando não terá validade a menos que defina o parâmetro db_keep_cache_size, pois este é configurado manualmente pelo DBA. SQL> alter system set db_keep_cache_size=50M scope=both; SGA_MAX_SIZE é o tamanho máximo que se pode definir para sga. Portanto, SGA_TARGET tem sempre que ser igual ou menor que ela. alter system set sga_target=500M; # Definindo o tamanho do SGA_TARGET manualmente. Comportamento de Parâmetros Auto-ajustáveis da SGA SQL> select sum(bytes)/1024/1024 size_mb 2 from v$sgastat where pool = 'shared pool'; SQL> select component, current_size/1024/1024 size_mb 2 from v$sga_dynamic_components; ---- Laboratorio 8: ---- SQL> shutdown immediate SQL> startup pfile='/home/oracle/labs/init_sgalab.ora'; SQL> @/home/oracle/labs/lab_08_02.sql SQL> conn / as sysdba SQL> @/home/oracle/labs/lab_08_04.sql # Este script deve ser executado várias vezes para se ver o comportamento do banco de dados ao longo do tempo. SQL> shutdown immediate SQL> startup ################################################################################# #### Terceiro dia de Curso (10/02/2010) #### V$EVENT_NAME -> Eventos de espera Oracle. Sql Access Advisor SQL> select * from hr.employees, dba_objects 2 union all 3 select * from hr.employees, dba_objects 4 where employee_id in (100,101) 5 order by 5,7,8; Para monitorar a execução dessa SQL Advisor centro -> Advisor de ajuste SQL -> Principal Atividade ################################################################################# #### Quarto dia de Curso (11/02/2010) #### ---- ASM ---- [oracle@aluno06 labs]$ dbca # Vamos criar o ASM - Gerenciamento de Armazenamento Automático. Para isso, é necessário rodar o script "localconfig". [root@aluno06 ~]# /u01/app/oracle/product/10.2.0/db_1/bin/localconfig add Posteriormente, continue no assitente do dbca. Na ultima etapa deste assistente, passo 2 de 2, onde aparecem os grupos de discos disponíveis, clique em criar novo para criar um novo disc group. Na linha de comando, execute o comando abaixo [oracle@aluno06 labs]$ pgrep -lf pmon 5432 ora_pmon_orcl 8792 asm_pmon_+ASM Isso quer dizer que o ASM está no ar. Carregue a variável de ambiente ORACLE_SID para verificar o ASM [oracle@aluno06 labs]$ export ORACLE_SID=+ASM [oracle@aluno06 labs]$ sqlplus / as sysdba SQL> select instance_name, status from v$instance; INSTANCE_NAME STATUS ---------------- ------------ +ASM STARTED Na tela do Create Disk Group, em Disc Group Name coloque DGROUP1, adicione os 4 primeiros discos e clique em ok. Depois finalize o assistente. ---- Laboratorio 12: ---- [oracle@aluno06 labs]$ export ORACLE_SID=+ASM [oracle@aluno06 labs]$ sqlplus / as sysdba SQL> !ps -ef |grep ASM # Para listar os processos no so a partir do sqlplus. SQL> select name, state,type total_mb, free_mb from v$asm_diskgroup; [oracle@aluno06 labs]$ export ORACLE_SID=orcl [oracle@aluno06 labs]$ sqlplus / as sysdba SQL> create tablespace tbsasm DATAFILE '+DGROUP1' SIZE 200M; SQL> drop tablespace tbsasm including contents and datafiles; SQL> create tablespace tbsasmmig DATAFILE 'asmmig1.dbf' SIZE 10M; SQL> create table t2(c number) tablespace tbsasmmig; SQL> insert into t2 values(1); SQL> commit; SQL> host rman target / nocatalog; RMAN> sql "alter tablespace tbsasmmig offline"; RMAN> backup as copy tablespace tbsasmmig format '+DGROUP1'; RMAN> switch tablespace tbsasmmig to copy; RMAN> sql "alter tablespace tbsasmmig online"; RMAN> exit SQL> column file_name format a48 SQL> select tablespace_name, file_name from dba_data_files; SQL> select * from t2; SQL> drop tablespace tbsasmmig including contents and datafiles; SQL> host rm $ORACLE_HOME/dbs/asmmig1.dbf ################################################################################# #### Quinto dia de Curso (12/02/2010) #### ---- Capitulo 15: OWM Oracle Wallet Manager ---- owm # Ferramenta para criar certificados digitais. ---- Clonar um banco de dados ---- Os passos abaixo servem como orientação para clonar um banco de dados. Uma das utilizações para isto, por exemplo, é quando se tem um banco de produção e você quer criar um banco de homologação identico ao de produção. [oracle@aluno06 u01]$ mkdir -p /u01/bdo/{adump,bdump,cdump,udump} [oracle@aluno06 bdo]$ sqlplus / as sysdba SQL> startup mount # Obs.: O banco original não pode estar aberto. Caso esteja, atrapalha todo o processo. SQL> create pfile='/u01/bdo/init.ora' from spfile; SQL> show parameter background_dump_dest; SQL> host rm /u01/app/oracle/admin/orcl/udump/* # Este comando serve para remover tudo quanto é lixeira existente neste diretório para que não atrapalhe o procedimento. SQL> alter database backup controlfile to trace; # Este comando vai criar o arquivo orcl_ora_8778.trc que servirá de exemplo para o nosso script. SQL> select status from v$instance; [oracle@aluno06 bdo]$ vi /u01/app/oracle/admin/orcl/udump/orcl_ora_8778.trc # Alterar este arquivo e deixá-lo como está abaixo. Lembre-se que você deve trocar o caminho do orcl para o novo bdo. STARTUP NOMOUNT pfile='/u01/bdo/init.ora'; CREATE CONTROLFILE SET DATABASE "BDO" RESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/bdo/redo01.log' SIZE 50M, GROUP 2 '/u01/bdo/redo02.log' SIZE 50M, GROUP 3 '/u01/bdo/redo03.log' SIZE 50M -- STANDBY LOGFILE DATAFILE '/u01/bdo/system01.dbf', '/u01/bdo/undotbs01.dbf', '/u01/bdo/sysaux01.dbf', '/u01/bdo/users01.dbf', '/u01/bdo/example01.dbf' CHARACTER SET AL32UTF8; alter database open resetlogs; ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/bdo/temp01.dbf'; :w /u01/bdo/control.sql :q [oracle@aluno06 bdo]$ vi /u01/bdo/init.ora # Neste passo deve-se trocar todo o caminho do orcl para o bdo assim como foi feito no arquivo acima. *.audit_file_dest='/u01/bdo/adump' *.background_dump_dest='/u01/bdo/bdump' *.compatible='10.2.0.1.0' *.control_files='/u01/bdo/control01.ctl','/u01/bdo/control02.ctl','/u01/bdo/control03.ctl' *.core_dump_dest='/u01/bdo/cdump' *.db_block_size=8192 *.db_cache_size=251658240 *.db_create_file_dest='/u01/bdo' *.db_domain='oracle.com' *.db_file_multiblock_read_count=16 *.db_flashback_retention_target=2880 *.db_keep_cache_size=54525952 *.db_name='bdo' *.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' *.db_recovery_file_dest_size=2147483648 *.dispatchers='(PROTOCOL=TCP) (SERVICE=bdoXDB)' *.java_pool_size=4194304 *.job_queue_processes=10 *.large_pool_size=4194304 *.open_cursors=300 *.pga_aggregate_target=200278016 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.resource_manager_plan='SYSTEM_PLAN' *.sga_target=578813952 *.shared_pool_size=201326592 *.streams_pool_size=0 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1' *.user_dump_dest='/u01/bdo/udump' [oracle@aluno06 orcl]$ cp /u01/app/oracle/oradata/orcl/* /u01/bdo/ # aqui você deverá copiar toda a estrutura do banco atual para o novo. [oracle@aluno06 bdo]$ sqlplus / as sysdba SQL> alter database open; # inicie o banco atual para se ter certeza do que está fazendo. [oracle@aluno06 bdo]$ export ORACLE_SID=bdo # agora vamos para o passo do novo banco. [oracle@aluno06 bdo]$ rm *.ctl # remover os arquivos de controle, pois o comando dentro do script irá criá-los. Caso tenha algum arquivo .ctl, o comando não funcionará e retornará erro. [oracle@aluno06 bdo]$ sqlplus / as sysdba Connected to an idle instance. SQL> @control.sql SQL> exit [oracle@aluno06 bdo]$ emca -repos recreate # Aqui você deve passar as informações do banco como, sid do banco, porta, senhas, etc. [oracle@aluno06 bdo]$ emca -config bd # No passo acima, vai dar erro uma vez que o caminho acima não existe. Isso será resolvido com este passo para que reconfigure todo o banco. Será necessário passar toda a informação conforme descrito no passo acima.
Comentários