quarta-feira, 25 de maio de 2016

UPGRADE 11G single instance para 12C no LINUX

Tradução do procedimento do vídeo da oracledbagirl em
https://www.youtube.com/watch?v=Y92IVOpqC7s
Melhoria Pessoal do processo e atualização do procedimento.
0.00 - exportar o display antes de tudo e testar o xclock no xming
executar com permissão de root
xauth list | while read x ; do sudo -u oracle xauth add $x ; done

0.01 - Baixar os binários no site da Oracle

===================================================================
Pre-req tasks
===================================================================

1. Checar se o Oracle Label Security e Oracle Database Vault não estão instalados , devem estar setados como falso

SQL> select * from v$option where parameter in ('Oracle Label Security', 'Oracle Database Vault');

PARAMETER
----------------------------------------------------------------
VALUE
----------------------------------------------------------------
Oracle Label Security
FALSE

Oracle Database Vault
FALSE


1.1 Checar se há tabelas referenciando as opções do Oracle Label Security
select tablespace_name, status from dba_tablespaces;  - no tables relating to reference options



2. Dropar o usuário de auditoria (AUDSYS)
drop user audsys cascade;
drop role audit_viewer;
drop role audit_admin;

======================================================================================

3. Criar o ambiente, instalar o profile com os binários do 12.1.0.2 binaries e  obter os scripts de pre-upgrade  preupgrd.sql e utluppkg.sql
======================================================================================
3.0   Criar o ambiente
3.1 Criar o diretório que irá receber os binários (/12.1.0.2/db_1)
cd $ORACLE_HOME
pwd
/u01/app/oracle/product/11.2.0.4_new/db_1
cd ..
cd ..
pwd
/u01/app/oracle/product
mkdir -p 12.1.0.2/db_1
HOSTNAME[oracle] /u01/app/oracle/product/12.1.0.2 $ cd db_1
HOSTNAME[oracle] /u01/app/oracle/product/12.1.0.2/db_1 $ pwd
/u01/app/oracle/product/12.1.0.2/db_1
HOSTNAME[oracle] /u01/app/oracle/product/12.1.0.2/db_1 $

3.2   Copiar o bash_profile para criar o do 12c
cd home/oracle
cp .bash_profile .profile.12c

3.3   Editar o profile do 12c para refletir o novo ORACLE_HOME
vi .profile.12c

DE
ORACLE_HOME=/u01/app/oracle/product/11.2.0.4_new/db_1

PARA
ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1

3.3 - EXECUTAR O PROFILE 12C PARA INSTALAR OS BINÁRIOS NO PROFILE DO 12C (ATENTAR, NÃO EXECUTAR PELO PROFILE ANTIGO DO 11)
. .profile.12c
HOSTNAME[oracle] ~ $ . .profile.12c
HOSTNAME[oracle] ~ $ cd $ORACLE_HOME
HOSTNAME[oracle] /u01/app/oracle/product/12.1.0.2/db_1 $

======================================================================================
Instalar os binários do ORACLE 12C
======================================================================================

3.5 - Instalar os binários do ORACLE 12C no diretório criado:
/home/oracle
unzip linuxamd64_12102_database_1of2.zip
unzip linuxamd64_12102_database_2of2.zip

irá criar a pasta database, entrar nela e rodar o instalador
cd database
HOSTNAME[oracle] ~/database $ pwd
/home/oracle/database
HOSTNAME[oracle] ~/database $ ls
install  response  rpm  runInstaller  sshsetup  stage  welcome.html
HOSTNAME[oracle] ~/database $
3.5.1 Rodar o instalador dos binários do oracle database
./runInstaller

3.5.2 VERIFICAR SE ESTÁ NO DIRETÓRIO CORRETO DE INSTALAÇÃO.
install database software only
ENTERPRISE EDICTION
NA PÁGINA DE PRIVILÉGIOS DE USERS E GRUPOS DE SISTEMA, ALTERAR TUDO PARA ORACLE, O OSOPER (segundo item)PODE DEIXAR EM BRANCO
executar o root.sh como root conforme as instruções da instalação, atentar se o diretório do ORACLE_HOME está refletindo a configuração do 12c. Yes para instalar

3.5.3 - Copiar os scripts de pré upgrade (diretório irá aparecer somente após a instalação para o /tmp
cd /home/oracle
. .profile.12c
cd $ORACLE_HOME/rdbms/admin
cp @preupgrd.sql /tmp/.
cp utluppkg.sql /tmp/.


======================================================================================
4. Últimas tarefas no ambiente 11G
======================================================================================

4.0   Voltar para o profile do 11g para executar os scripts, para checar o que é necessário setar no pré upgrade
cd /home/oracle
. .bash_profile

4.1 ir para o diretório /tmp e executar o preupgrd.sql (14.57 no video)
cd /tmp
sqlplus ‘/as sysdba’
@preupgrd.sql

4.2. Verificar o que é necessário mudar no pre upgrade, na log que foi gerada, seguir as orientações do mesmo (remover olap, enterprise manager, etc)
cd $ORACLE_BASE/cfgtoollogs
cd testedb
cd preupgrade/
view preupgrade.log

4.3 Mudar todas as coisas que ele está dizendo a  para mudar, tomar notas
4.4 Mudar os processos para 300 no spfile caso necessitar
ALTER SYSTEM SET PROCESSES=300 SCOPE=SPFILE;
4.5 Parar o dbconsole e remover, copiando o arquivo novo do 12c
copiar rdbms/admin/emremove.sql do novo ORACLE_HOME para o antigo ORACLE_HOME DO 11g
. .profile.12c
cd $ORACLE_HOME/rdbms/admin
cp emremove.sql /tmp/.

4.3- PARAR O DBCONSOLE (enterprise manager) pelo profile do 11g
. .bash_profile
cd $ORACLE/HOME/bin
emctl stop dbconsole

4.5 - Executar o emremove.sql no 11G para remover o enterprise manager
cd /tmp
sqlplus / as sysdba
SET ECHO ON;
SET SERVEROUTPUT ON;
@emremove.sql;

4.6 Remover o olap do 11g
ORACLE_HOME/olap/admin/catnoamd.sql

4.7   Executar as estatísticas do dicionário de dados
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

4.8 Fazer o purge na recyclebin
select * from dba_recyclebin;
PURGE RECYCLEBIN;

>>> verificar -- executar somente se recomendado  -----execute dbms_preup.purge_recyclebin_fixup;

5. Executar o script preupgrade_fixups 
cd $ORACLE_BASE/cfgtoollogs/testedb/preupgrade
@preupgrade_fixups.sql  == Se houver erro, verificar e fixar conforme as instruções do arquivo preupgrade.log

6. Checar objetos inválidos antes – Esta lista irá ignorar os objetos inválidos pré-existentes antes upgrade que não são válidos.
@$ORACLE_HOME/rdbms/admin/utluiobj

6.1. Executar o script preupgrade novamente para checar se ainda continuam os erros no arquivo preupgrade.log
cd $ORACLE_BASE/cfgtoollogs/testedb/preupgrade
sqlplus / as sysdba
@preupgrd.sql
exit
view preupgrade.log

7. OPCIONAL ----Certificar que há espaço suficiente para os archivelogs – Opcional fazer um backup do rman
alter system set db_recovery_file_dest_size=30g;

8. Backup before upgrade - Optional
make sure no archive mode with archive log list


===================================================================
9. Começando o upgrade
===================================================================

9.1 Baixar o banco 11g
shutdowm immediate;
9.2 Startar em modo mount , configurar o banco para archivelog, fazer o backup do controlfile e dos archivelogs
startup mount;
alter database archivelog;
alter database open;
9.2.1 No Sistema operacional executar o rman para fazer o backup do controlfile e dos archivelogs
rman target /
show all;
configure controlfile autobackup on;
backup database plus archivelog

===================================================================
10. Completando Database Upgrade
===================================================================

10.1 Entrar no banco 11g e baixar
. .bash_profile
sqlplus / as sysdba
shutdown immediate;
exit;

10.2 Verificar o  listener, fazer backup do listener antes e Baixar, caso necessário pode ter que parar como usuário do grid
lsnrctl status - checar o arquivo (conforme a saída abaixo)
Listener Parameter File   /u01/app/grid/product/11.2.0.4_new/grid_infra_1/network/admin/listener.ora
lsnrctl stop listener
No upgrade que testei para este procedimento não baixei o listener, deixei o dbua executar todo o processo.

10.3 Procurar o executável do dbua do 12c para fazer o upgrade do banco
cd /u01/app/oracle/product/12.1.0.2/db_1/bin
./dbua

10.2 Selecionar Upgrade Oracle Database
checar as opções de validação
Nas opções do upgrade, deixar marcado a opção de compilar os objetos inválidos
Deixar a opção do enterprise manager conforme o padrão
NÃO MOVER OS DATAFILES COMO PARTE DO UPGRADE
Atualizar o listener, mantendo a configuração da conexão antiga.
Desmarcar a opção do backup do rman e informar que irá usar a própria estratégia de backup


Checar se o upgrade estará conforme o que foi programado, nas informações da interface gráfica da instalação, conforme o exemplo abaixo:

Estando tudo ok, clicar em finish para o oracle fazer o upgrade. Todos os shutdowns necessários e atualizações do catálogo o dbua irá fazer automaticamente. Pode-se também acompanhar o log para visualizar full time todo o processo.




===================================================================
11. VALIDAÇÃO
===================================================================

11.1 Entrar no profile do 12c
. .profile.12c

11.1 VERIFICAR O ORATAB
cat /etc/oratab |grep <sid>    - ensure 12c has been added to oratab

11.3 VERIFICAR NO BANCO E PEGAR AS EVIDÊNCIAS:
EFETUAR O SHUTDOWN
sqlplus / as sysdba
STARTUP;
exit;

11.4 EXECUTAR TAREFA PÓS UPGRADE
cd $ORACLE_BASE/cfgtoollogs/testedb
sqlplus / as sysdba
@postugrade_fixups.sql;

11.5 VERIFICAR AS RECOMENDAÇÕES PRÉ UPGRADE, POR EXEMPLO pode solicitar fixar as estatísticas
EXECUTE DBMS.STATS.GATHER_FIXED_OBJECTS_STATS;

12. PEGAR AS EVIDÊNCIAS:
select substr(comp_id,1,15) comp_id, substr(comp_name,1,30) comp_name, substr(version,1,10) version, status from dba_registry; 

  -certificar que está com 12c


terça-feira, 24 de maio de 2016

TABLESPACE SYSAUX crescendo excepcionalmente

1 - TABELA com 50GB na sysaux
Motivo - Armazena informações de snapshots do awr (automatic workload repository), que são relativos a relatórios automáticos relacionados a estatísticas do oracle.
Bug relatado no Metalink: 
Table/Index (partition) Growth Is Far More Than Expected (Doc ID 729149.1)
Devido a snapshots antigos, é necessário remover os mesmos, efetuar a limpeza da tabela e fazer o shrink da tabela.

Procedimento:

1.1 ver as configurações das estatísticas da instância:
col statistics_name for a40
SELECT STATISTICS_NAME, SESSION_STATUS, SYSTEM_STATUS, ACTIVATION_LEVEL
FROM v$statistics_level  ORDER BY 3 ;


2 - identificando a tabela:
== verificando o tamanho ==
set lines 200
col SEGMENT_NAME format a60
col 
select * from (select 
owner,segment_name||'~'||partition_name segment_name,bytes/(1024*1024) size_m
from dba_segments where tablespace_name = 'SYSAUX' 
ORDER BY BLOCKS desc )
where rownum < 3;


OWNER                SEGMENT_NAME                                                     SIZE_M
-------------------- ------------------------------------------------------------ ----------
SYS                  WRH$_LATCH_CHILDREN~WRH$_LATCH__1599336177_38253                  25567
SYS                  WRH$_LATCH_CHILDREN_PK~WRH$_LATCH__1599336177_38253               20695


3 - Range dos snapshots:
SQL> select min(snap_id), max(snap_id), snap_level from dba_hist_snapshot group by snap_level;

MIN(SNAP_ID) MAX(SNAP_ID) SNAP_LEVEL
------------ ------------ ----------
       40138        40347          2

4 - procedimento de limpeza:
4.1 - remoção dos snapshots:

SQL> execute dbms_workload_repository.drop_snapshot_range(40138, 40340);


4.2 - Para reduzir o tamanho dos blocos, reorganizando a tabela e liberar espaço, executar a seguinte procedure, cujo conteúdo faz a reorganização das linhas e assim que terminar, faz o shrink das tabelas do que armazenam as informações do AWR:

declare
v_sql1 varchar2(2000);
v_sql2 varchar2(2000);
begin
for rec in (select TABLE_NAME from dba_tables where TABLE_NAME like 'WRH$%') loop
v_sql1 := 'alter table ' || rec.TABLE_NAME || ' enable row movement ' ;
execute immediate v_sql1;
v_sql2 := 'alter table ' || rec.TABLE_NAME || ' shrink space cascade' ;
execute immediate v_sql2;
end loop;
end ;
/


Obs: pode ser feito também manualmente, porém não há previsão de tempo e por isso pode ser executado em nohup , basta criar um script.


Fontes:
http://colbran.co.za/wordpress/2010/10/01/sysman-tablespace-grows-excessively/
Metalink: Table/Index (partition) Growth Is Far More Than Expected (Doc ID 729149.1)

restore total de banco