Sistema BTRFS
O BTRFS ou better file system, e um sistema de arquivos que e disponibilizado a partir da versao 6.3 do Oracle Linux. Foi desenvolvido pela Oracle para que possamos ter mais uma opcao de um file system confiavel e de alta disponibilidade.
O BTRFS entre outras coisas podemos fazer o RAID 0, RAID 1 e o RAID 10. Obviamente, se gasta discos para a redundancia via software. O Interessante e que se voce precisar efetuar um clone do file system ou um backup pode ser feito a quente, e de quebra – copia remota para outra maquina.
BTRFS utiliza para gravacao um procedimento que se chama COPY ON WRITE que em miudos significa que ele somente grava mesmo nas operacoes de alteracao. Isso e interessante porque assim consegue fazer a replicacao sem comprometer a integridade.
Make Aliases on sqlplus
- alias sysdba=‘select status, instance_name from v$instance; | sqlplus / as sysdba’
- alias sysoper=‘sqlplus / as sysoper’
- alias rman=‘rman target / ‘
Change the face for SQLPLUS – Automatically display SID and connected User in Sql*Plus
Show the name of instance on startup of sqlplus
set termout off
define gname=idle
column global_name new_value gname
select lower(user)||’@’ ||substr(global_name,1,decode(dot,0,length(global_name),dot-1)) global_name from (select global_name, instr(global_name,’.’) dot from global_name);
set sqlprompt ‘&gname>’
set termout on
Put this code on file “glogin.sql” in your $ORACLE_HOME/sqlplus/admin
before
SQL>show user
USER is “SYS”
SQL>
After
sys@ORCL>show user
USER is “SYS”
sys@ORCL>
Automatically startup the database when Oracle Linux Starts
As a root user, we’ll change last field of this line from “N” to “Y” to let dbstart utility start this database when it runs
This is the source of our dbora file:
ORA_OWNER=oracle
’start’) #If the system is starting, then …
su – $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl start” #Start the listener
su – $ORA_OWNER -c “$ORACLE_HOME/bin/dbstart #Start the database
;;
su -$ORA_OWNER -c $ORACLE_HOME/bin/dbshut
su -$ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl stop”
;;
esac
chmod 750 dbora
# ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora
# ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/K01dbora
# ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora
The first line creates symbolic link of our script in rc3.d directory. At startup, Linux runs /etc/rc.d/rc script at the current level (normally 3 or 5). rc3.d indicates 3rd runlevel, “K” indicates OS’s shutdown (on servers shutdown, Linux calls the scripts in /etc/rc.d/rc3/K* in order)
The second line creates another symbolic link of our script, to be run at startup of our OS, indicating “S99″ and the name of our script
Another two lines creates symoblic links for 5th runlevel.
SQL>SELECT status FROM v$instance;
In some releases, even when we create a new service, it doesn’t work. When we issue dbstart command manually from OS, we’re getting an error:
cat: /var/opt/oracle/oratab: No such file or directory
If the directory /var/opt/oracle exists during the Oracle installation the dbhome script will have the parameter ORATAB set to “/var/opt/oracle/oratab” instead of “/etc/oratab”. The normal DBCA process during a default installation will still add the instance entry to /etc/oratab.
1. You can either copy the original oratab file to this directory :
cp /etc/oratab /var/opt/oracle/
t change it to /etc/oratab
Problemas instalação windows – senha enteprise manager
Ao fazer operações no enteprise manager – da erro de senha do usuario windows mas ele está correto.
Para corrigir isso temos que fazer o post install do windows:
http://download.oracle.com/docs/cd/B19306_01/install.102/b14316/postcfg.htm#BABFAEIG
4.3.12 Setting Credentials for the Job System to Work with Enterprise Manager
Windows systems require that you set the correct credentials for the Jobs system to work properly in Enterprise Manager. By default, the Management Agent service is installed as a LocalSystem user. When submitting jobs, such as stopping or starting the database, the user submitting the job must have the Log on as a batch job privilege enabled.
Perform the following steps to establish that privilege for any operating system user who needs to submit an Enterprise Manager job.
- Start the Local Security Policy tool:
- Windows 2000: From the Start menu, select Control Panel, Administrative Tools, then Local Security Policy.
- Windows 2003: From the Start menu, select Administrative Tools, then Local Security Policy.
- Windows XP: From the Start menu, select Control Panel, Administrative Tools, then Local Security Policy.
- Windows Vista: From the Start menu, select Programs, Administrative Tools, then Local Security Policy.
- Under the Security Settings list, expand the list to Local Policies.
- Under Local Policies, double-click User Rights Assignment.
- Under Policy, search for the Log on as a batch job policy.
If the Management Agent service is installed as any other user (that is, notLocalSystem), then, in addition to granting the Log on as a batch job privilege, you must grant the “Windows service” user the following three privileges:
- Act as part of the operating system
- Adjust memory quotas for a process (This setting is named Increase memory quotas on Windows 2000.)
- Replace a process level token
- With each policy, perform the following steps:
- Double-click the policy name.
- In the Properties dialog box, click Add User or Group.
- In the Select Users or Groups dialog box, enter the name of the user (for example,
jsmith,administrator, and so on.)
Note:On Windows Vista, the name of the dialog box is Select Users, Computers, or Groups.
- Click Check Names to check that you have entered the name correctly.
- Click OK.
- Click OK to exit the Properties dialog box, then exit Local Security Settings and Administrative Tools.
- Restart your computer.
If a user exists locally and at the domain level, Windows gives the local user precedence. To use the domain user, qualify the user name with the domain name. For example, to use the user joe in the ACCOUNTS domain specify the user name as ACCOUNTSjoe.
Repositorio YUM – Oracle – FREE
Se voce tiver os discos de instalacao pode copiar eles em uma pasta por exemplo /stage/
E deve adicionar essas informacoes criando um arquivo media.repo na pasta /etc/yum.repos.d assim o yum ira funcionar normalmente.
/etc/yum.repos.d
[root@srvoracle01 yum.repos.d]# pwd
/etc/yum.repos.d
[root@srvoracle01 yum.repos.d]# cat media.repo
[media]
name=Red Hat Enterprise Linux $releasever
baseurl=file:///stage/redhat/Server/
enabled=1
gpgcheck=0
Ou seguir os passos abaixo para fazer a configuracao do repositorio do YUM.
Getting Started
1. Download and Install Enterprise Linux
2.
Download and copy the appropriate yum configuration file in place, by running the
following commands as root:
Oracle Enterprise Linux 4, Update 6 or Newer
# cd /etc/yum.repos.d
# mv Oracle-Base.repo Oracle-Base.repo.disabled
# wget http://public-yum.oracle.com/public-yum-el4.repo
Oracle Enterprise Linux 5
# cd /etc/yum.repos.d
# wget http://public-yum.oracle.com/public-yum-el5.repo
Oracle VM 2
# cd /etc/yum.repos.d
# wget http://public-yum.oracle.com/public-yum-ovm2.repo
3.
Enable the appropriate repository by editing the yum configuration file
* Open the yum configuration file in a text editor
* Locate the section in the file for the repository you plan to update from,
e.g. [el4_u6_base]
* Change enabled=0 to enabled=1
4.
Begin using yum, for example:
yum list
yum install firefox
You may be prompted to confirm the import of the Oracle OSS Group GPG key.
(http://public-yum.oracle.com/)
Como uma consulta pode influenciar em performance
Otimizador – É o programa que está preparado internamentamente pelo oracle para diagnosticar qual será a melhor proposta para se recuperar a informação. Seria ele o responsável por gerar o plano (caminho) para se buscar os dados das tabelas e indices. O Oracle nas versões mais recentes ( a partir 9iR2 se não me engano) se utiliza-se de custo como padrão e não recomenda usar regra em suas consultas.
Custo – É a melhor estimativa do numero de I/Os que devem ser feitos para a execução de uma consulta.
Estimativas – São empregadas técnicas para se gerar o melhor plano e são usadas como base as estimativas. Os tipos são: seletividade, cardinalidade e custo;
A cardinalidade é derivada da seletividade e o custo depende da cardinalidade.
Se as estatisticas estão atualizadas, serão empregadas na geração dos planos, se caso não estejam serão usadas valores padrão de estatisticas usando se o parametro para isso: OPTIMIZER_DYNAMIC_SAMPLING.
Seletividade – É uma proporção estimada de um conjunto de linhas retorndas a partir de um predicado (filtro) ou uma combinação de predicados.
Fórmula: (numero de linhas que satisfazem o filtro/total de numero de linhas – baseado em histogramas)
Ex:
select last_name from employees where last_name =’JOHN’;
A fórmula pode ser melhor entendida assim:
a) O número de linhas que satisfazem o filtro para o predicado é 2.
b) O número de linhas que precisam ser lidas para satisfazer o retorno é 200 baseando se em nomes distintos que existem na coluna last_name.
A seletividade será: 2/200 = 0,01 – alta seletividade – utilizará indices.
Os valores sao entre 0.0 e 1.0, se diz uma alta seletividade: baixo numero de linhas, baixa seletividade: numero alto de linhas.
– Um indice não será usado porque temos uma baixa seletividade. É melhor percorrer a tabela ao inves de percorrer varias linhas no indice.
– Um indice pode ser usado porque temos uma alta seletividade. O numero de linhas pequeno a ser retornado é mais provavel se usar o indice para localizar rapidamente estas linhas na tabela quando esta quantidade de linhas nao exceder 3% a 4% do total de linhas da tabela.
O cálculo da seletividade se base em duas fontes:
a) Estatísticas – se caso nao exista usuará exemplos dinamicos.
b) Histogramas – Analisa a distribuição das linhas, como a quantidade de informações distintas em uma coluna (ideal para indices BTREE e quando varios valores distintos melhor para BITMAP).
Cardinalidade – Expectativa do número de linhas a serem retornadas de uma tabela para uma operação em particular. Analisa o número de linhas distinas, o número total de linhas da tabela e a seletividade. É usado para determinar junções, filtros, agrupamentos e custo de ordenação.
Fórmula – seletividade/número total de linhas baseadas no histograma
Fórmula: (numero de linhas que satisfazem o filtro/número total de linhas baseadas no histograma)/número total de linhas da tabela
Custo – É o melhor estimativa que existe para saber qual seria o número de I/Os que se devem ser feitos para satisfazer o retorno de uma consulta. Uma unidade de custo equivale a leitura de uma leitura para um bloco em forma randômica.
São feitos os seguintes calculos para se conseguir a estimativa correta:
a) Estimativa de Tempo de leitura de blocos de forma randômica.
b) Estimativa de Tempo de leitura de blocos em leitura em lote.
c) Estimativa de Tempo de uso de CPU pelo processo para leitura de uma unidade de custo.
Geração de planos
Para se gerar planos, o melhor é utilizar da seguinte forma:
a) Sqldeveloper – da própria oracle – gratuito.
b) Linha de comandos no sqlplus.
C:UsersAndre>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 – Production on Qua Nov 17 09:41:49 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – Production
With the Partitioning, OLAP and Data Mining options
SQL> alter user scott identified by tiger account unlock;
Usuário alterado.
SQL> EXPLAIN PLAN
2 SET STATEMENT_ID = ‘badsql1’
3 FOR
4 SELECT ename FROM emp;
Explicado.
SQL> SELECT cardinality “Rows”,
2 lpad(‘ ‘,level-1)||operation||’ ‘||
3 options||’ ‘||object_name “Plan”
4 FROM PLAN_TABLE
5 CONNECT BY prior id = parent_id
6 AND prior statement_id = statement_id
7 START WITH id = 0
8 AND statement_id = ‘badsql1’
9 ORDER BY id;
Rows
———-
Plan
——————————————————————————–
14
SELECT STATEMENT
14
TABLE ACCESS FULL EMP
http://download.oracle.com/docs/cd/B10500_01/server.920/a96533/ex_plan.htm
Alta seletividade – Index scan – Número de retorno de linhas pequeno. Uso aconselhado de índices na pesquisa onde as tabelas são maiores que 4% do valor do total de numero de linhas retornadas. Aconselhado em sistemas comerciais ou OLTP.
Baixa seletividade – Full table scan – Número de retorno de linhas alto. Aconselhado a busca direta dos dados sem a utilização de indices. É melhor percorrer toda a tabela ao invés de usar o índice para buscar muitas linhas. Baseado em sistemas de Data Warehouse ou Bussiness Inteligence. Pode se melhorar a leitura sequencial dos registros na tabela através do aumento no valor do paramêtro: DB_FILE_MULTIBLOCK_READ_COUNT e se aplica também:
- Tabelas pequenas
- Alto grau de paralelismo
- Nenhum indice atende ao filtro
- Nenhum filtro na consulta ou baixa seletividade
- Uso de hint – FULL (NOMETABELA)
Custo menor – Sempre que possivel analise o custo e veja as referencias para que se construa bases eficazes para a analise do otimizador.
Quando fazemos a consulta geralmente no plano, temos retornos do uso do índice e para interpreta-los:
Lembre-se INDICE BTREE significa indice balanceado.
INDEX UNIQUE SCAN – Os predicados são baseados em filtros onde existem indices de chaves unicas. É retornado um unico ROWID.
INDEX RANGE SCAN – São baseadas em consultas que necessitam varrer o índice para buscar os valores, geralmente são utilizadas quando combinamos predicados um filtro utilizando se do índice e outro em uma coluna que não está presente no índice.
INDEX FULL SCAN – Usado quando usamos no predicado o IS NOT NULL para filtrar a coluna indexada. Geralmente a consulta contém mais de dois predicados, sendo um baseado na coluna com o índice e outra não.
INDEX FAST FULL SCAN – Usado quando o otimizador irá buscar todos os dados da tabela, fazendo um full table scan isso desde que o predicado faça um filtro usando se a clausula IS NOT NULL em uma das colunas indexadas. É uma alternativa ao full table scan visto que forçamos a busca dos valores no índice na tentativa de fazer o retorno mais rapido das linhas. Para “forçar” o uso dessa técnica pode ser necessário adicionar o hint na consulta – INDEX_FFS.
INDEX SKIP SCAN – É a forma que o otimizador na leitura do indice, descarta aquele galho quando as informações do galho não satisfazem o filtro do predicado da consulta. Geralmente presente em consultas do tipo BETWEEN ou onde se encontram predicados usando colunas indexadas com os simbolos <, >, <=, >=.
INDEX JOIN SCAN – Faz um HASH JOIN, une vários indices (partes) para conseguir resolver a consulta, desde que estes indices apareçam nos predicados.
AND-EQUAL – Essá operação permite ao sistema fazer um merge entre indices combinando os diversos predicados que são usados. Em teoria poderia atingir até a cinco indices baseados em uma unica coluna e usar estes indices para fazer as buscas para os resultados. A ideia é encontrar os ROWIDs. Para forçar o uso dos vários indices, utilize o hint – AND_EQUAL.
- O retorno de número de registros é facilitado quando a coluna a ser contabilizada é NOT NULL.
- Indice IOT é ideal quando em sistemas que necessitam buscar os valores do registro e fazem a busca pela chave primária geralmente. A IOT armazena no indice as informacoes das colunas restantes. A diferença é que em tabelas do tipo head as buscas precisam ir ao indices e depois no segmento da tabela. Na IOT isso é feito diretamente no segmento do indice.
- Indices do tipo BITMAP são adequados para acelerar o retorno das funções de agregação. como soma, contar, max etc. O predicado IS NOT NULL pode ser beneficiado pelo indice bitmap, ja que este indice, diferente dos demais armazena valores nulos. Também indicados para colunas com grande número de valores distintos: Cores, Sexo, Cidades, Estados, Países etc.
- Indices compostos – podem ter suas seletividades baixas quando sozinhos, mas combinados a seletividade aumenta, reduzindo o numero de registros lidos
As operações que no plano retornam a resposta como BITMAP nao diz, necessariamente que o indice percorrido é bitmap. O otimizador pode transformar em alguns casos o indice Btree em Bitmap.
Tablespace TEMP crescendo…
Um problema acontecendo em ambientes linux 64 bits ocorreu comigo, em uma instalação e o cliente afirmou que nao fazia SELECTs no banco.
Verifiquei no arquivo de alerta que a TABLESPACE temporaria estava estourando com frequencia.
Oracle Server – Enterprise Edition – Version: 10.2.0.2 to 10.2.0.4
This problem can occur on any platform.
Este SELECT estava ocasionando o problema, para detectar seu ambiente tem o mesmo problema teste o select abaixo no seu ambiente como SYS.
SELECT end_time, status, session_key, session_recid, session_stamp,
command_id, start_time, time_taken_display, input_type,
output_device_type, input_bytes_display, output_bytes_display,
output_bytes_per_sec_display
FROM v$rman_backup_job_details
WHERE end_time = (SELECT MAX (end_time)
FROM v$rman_backup_job_details);
Solução:
exec dbms_stats.DELETE_TABLE_STATS(‘SYS’,’X$KCCRSR’);
exec dbms_stats.LOCK_TABLE_STATS(‘SYS’,’X$KCCRSR’);
Teste novamente a consulta.
Referencia:
POOR PERFORMANCE WHILE ACCESSING V$RMAN_BACKUP_JOB_DETAILS [ID 420200.1]
crcdisk.sys – Erro maldito.
No windows 7 ou vista o erro ocorre. É uma $!#@#$# literalmente. Nem instalando, dando boot para tentar reavivar nao havia como sempre dava um errinho diferente.
Assim o que fiz foi formatar a partição, formatar colocando o linux e afins. Nao vencido nas tentativas de reaver meu windows de volta – coitado do ubuntu ainda ta fraco – mas le NTFS … entao eu fiz o que:
Instalei o windows 95 em uma particao pequena
baixei o programa ASUS UPDATE para windows
http://dlsvr01.asus.com/pub/ASUS/mb/flash/Asusupdt60701.zip
E logo em seguida fiz o seguinte – baixei as atualizações de eprom do site da asus de acordo com minha placa mae.
Atualizei a BIOS e o problema foi embora.
Portanto se seu vista ou windows 7 sofre atualizacoes da micosoft corporation voce deve atualizar a BIOS antes de atualiza-lo.
Treinamento Workshop 2 – Comentários e dicas
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) FR OM 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 clona r 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.



