Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


segunda-feira, 8 de fevereiro de 2010

Realizando o upgrade de uma base de dados 10g para o Oracle 11g Release 2 ...

Por Eduardo Legatti

Olá,

No artigo de dezembro de 2008 eu comentei um pouco sobre a aplicação de patches e de atualizações. Foi demonstrado também como atualizar o Oracle 10g release 2 (10.2.0.1) para a versão (10.2.0.4) fazendo uso do "Patch Set" e do "Critical Patch Update" disponíveis, na época, para o Oracle 10g na plataforma Linux. A demonstração ocorreu apenas na atualização do software, já que não existia um banco de dados criado.

Neste artigo, irei realizar o upgrade de um banco de dados Oracle 10g (10.2.0.4) para a mais recente versão do Oracle 11g (11.2.0). No caso, existe um banco de dados de teste criado previamente. Não é preciso nem dizer que é de fundamental importância a leitura do Oracle Database Upgrade Guide 11g Release 2 (11.2) disponível no site da Oracle através da página Oracle Database Upgrade.

No mais, o objetivo é realizar o upgrade do banco de dados abaixo para versão 11g R2:


[oracle@linux1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Seg Fev 8 10:53:16 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

SQL> select instance_name,version from v$instance;

INSTANCE_NAME    VERSION
---------------- -----------------
BD01             10.2.0.4.0

SQL> select file_name,tablespace_name from dba_data_files;

FILE_NAME                                     TABLESPACE_NAME
--------------------------------------------- ------------------
/u01/app/oracle/oradata/BD01/system01.dbf     SYSTEM
/u01/app/oracle/oradata/BD01/undotbs01.dbf    UNDOTBS1
/u01/app/oracle/oradata/BD01/sysaux01.dbf     SYSAUX
/u01/app/oracle/oradata/BD01/users01.dbf      USERS

SQL> select name from v$controlfile;

NAME
----------------------------------------------------------------
/u01/app/oracle/oradata/BD01/control01.ctl
/u01/app/oracle/oradata/BD01/control02.ctl
/u01/app/oracle/oradata/BD01/control03.ctl

SQL>> select group#,member from v$logfile;

    GROUP# MEMBER
---------- -----------------------------------------------------
         1 /u01/app/oracle/oradata/BD01/redo01.log
         2 /u01/app/oracle/oradata/BD01/redo02.log
         3 /u01/app/oracle/oradata/BD01/redo03.log


Após a instalação do software do Oracle 11g R2 em um novo Oracle Home, irei executar o "Pre-Upgrade Information Tool" conforme instruções do documento Database Upgrade Guide:



[oracle@linux1 rdbms]$ cd /u01/app/oracle/product/11.2.0/db_1/rdbms/admin/
[oracle@linux1 admin]$ cp -a utlu112i.sql /tmp
[oracle@linux1 admin]$ cd /tmp

[oracle@linux1 tmp]$ ls -l *.sql
-rw-r--r-- 1 oracle oinstall 185744 Jan 8 11:09 utlu112i.sql

[oracle@linux1 tmp]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Seg Fev 8 11:15:25 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> SPOOL upgrade_info.log
SQL> @utlu112i.sql
Oracle Database 11.2 Pre-Upgrade Information Tool  02-08-2010 11:09:56
.
**********************************************************************
Database:
**********************************************************************
--> name:          BD01
--> version:       10.2.0.4.0
--> compatible:    10.2.0.1.0
--> blocksize:     8192
--> platform:      Linux IA (32-bit)
--> timezone file: V4
.
**********************************************************************
Tablespaces: [make adjustments in the current environment]
**********************************************************************
--> SYSTEM tablespace is adequate for the upgrade.
.... minimum required size: 421 MB
.... AUTOEXTEND additional space required: 121 MB
--> UNDOTBS1 tablespace is adequate for the upgrade.
.... minimum required size: 370 MB
.... AUTOEXTEND additional space required: 170 MB
--> SYSAUX tablespace is adequate for the upgrade.
.... minimum required size: 214 MB
.... AUTOEXTEND additional space required: 94 MB
--> TEMP tablespace is adequate for the upgrade.
.... minimum required size: 61 MB
.... AUTOEXTEND additional space required: 41 MB
.
**********************************************************************
Flashback: OFF
**********************************************************************
**********************************************************************
Update Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
WARNING: --> "sga_target" needs to be increased to at least 336 MB
.
**********************************************************************
Renamed Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
-- No renamed parameters found. No changes are required.
.
********************************************************************************
Obsolete/Deprecated Parameters: [Update Oracle Database 11.2 init.ora or spfile]
********************************************************************************
--> background_dump_dest    11.1    DEPRECATED   replaced by "diagnostic_dest"
--> user_dump_dest          11.1    DEPRECATED   replaced by "diagnostic_dest"
--> core_dump_dest          11.1    DEPRECATED   replaced by "diagnostic_dest"
.
*****************************************************************************
Components: [The following database components will be upgraded or installed]
*****************************************************************************
--> Oracle Catalog Views         [upgrade]  VALID
--> Oracle Packages and Types    [upgrade]  VALID
--> Oracle Workspace Manager     [upgrade]  VALID
--> EM Repository                [upgrade]  VALID
.
**********************************************************************
Miscellaneous Warnings
**********************************************************************
WARNING: --> Database is using a timezone file older than version 11.
.... After the release migration, it is recommended that DBMS_DST package
.... be used to upgrade the 10.2.0.4.0 database timezone version
.... to the latest version which comes with the new release.
WARNING: --> Database contains schemas with stale optimizer statistics.
.... Refer to the Upgrade Guide for instructions to update
.... schema statistics prior to upgrading the database.
.... Component Schemas with stale statistics:
....   SYS
....   SYSMAN
WARNING: --> EM Database Control Repository exists in the database.
.... Direct downgrade of EM Database Control is not supported. Refer to the
.... Upgrade Guide for instructions to save the EM data prior to upgrade.
WARNING:--> recycle bin in use.
.... Your recycle bin turned on.
.... It is REQUIRED
.... that the recycle bin is empty prior to upgrading
.... your database.
.... The command:  PURGE DBA_RECYCLEBIN
.... must be executed immediately prior to executing your upgrade.
.

Procedimento PL/SQL concluído com sucesso.

SQL> SPOOL OFF

SQL> purge DBA_RECYCLEBIN;

Lixeira DBA expurgada.

SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

Procedimento PL/SQL concluído com sucesso.


Após a execução dos procedimentos acima, irei executar o Database Upgrade Assistant (DBUA) à partir da instalação do Oracle 11g:


[oracle@linux1 ~]$ cd /u01/app/oracle/product/11.2.0/db_1/bin/
[oracle@linux1 bin]$ ./dbua

Após realizado o upgrade, irei re-configurar o arquivo "profile" do usuário de sistema operacional "oracle", conforme demonstrado abaixo:


[oracle@linux1 ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

export TEMP=/tmp
export TMPDIR=/tmp
export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=BD01
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/ctx/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/ctx/lib:$ORACLE_HOME/lib
export NLS_LANG="BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1"
export NLS_DATE_FORMAT=DD/MM/YYYY

Após realizado o upgrade, me deparei com um problema ao executar o SQL*Plus da versão 11g R2:


[oracle@linux1 db_1]$ sqlplus
sqlplus: error while loading shared libraries:
/u01/app/oracle/product/11.2.0/db_1/lib/libclntsh.so.11.1:
cannot restore segment prot after reloc: Permission denied


Para a resolução do problema, foi necessário editar o arquivo /etc/sysconfig/selinux conforme demonstrado abaixo:


[oracle@linux1 db_1]$ su -
Senha: ******

[root@linux1 ~]# cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

Após o boot do sistema operacional ...
[oracle@linux1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Seg Fev 8 12:05:36 2010

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Conectado a uma instância inativa.

SQL> startup
Instância ORACLE iniciada.

Total System Global Area  351522816 bytes
Fixed Size                  1336484 bytes
Variable Size             163580764 bytes
Database Buffers          180355072 bytes
Redo Buffers                6250496 bytes
Banco de dados montado.
Banco de dados aberto.


SQL> show parameter spfile

NAME         TYPE        VALUE
------------ ----------- ------------------------------------------------------
spfile       string      /u01/app/oracle/product/11.2.0/db_1/dbs/spfileBD01.ora

SQL> select instance_name,version from v$instance;

INSTANCE_NAME    VERSION
---------------- -----------------
BD01             11.2.0.1.0

Podemos ver pelos resultados acima, que o banco de dados foi atualizado sem maiores problemas. Irei verificar se o arquivo de sistema operacional "/etc/oratab" possui a informação correta sobre o novo ORACLE_HOME (11g):


[oracle@linux1 ~]$ cat /etc/oratab
#
# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by the Database Configuration Assistant when creating
# a database.

# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:[N|Y]:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
BD01:/u01/app/oracle/product/11.2.0/db_1:N


Agora, realizarei a cópia do arquivo listener.ora presente no diretório do antigo ORACLE_HOME/network/admin (10g) para o novo ORACLE_HOME/network/admin (11g), de forma que seu conteúdo fique conforme demonstrado abaixo:


[oracle@linux1 admin]$ cat listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = BD01)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = BD01)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = linux1)(PORT = 1521))
  )


Para finalizar, irei remover o diretório de sistema operacional referente aos arquivos do antigo Oracle 10g, pois não precisarei mais dele:


[oracle@linux1 /]$ cd /u01/app/oracle/product/
[oracle@linux1 product]$ ls -l
total 16
drwxrwx--- 3 oracle oinstall 4096 Out 29 10:27 10.2.0
drwxr-xr-x 3 oracle oinstall 4096 Fev  8 10:03 11.2.0

[oracle@linux1 product]$ rm -rf 10.2.0

[oracle@linux1 product]$ ls -l
total 8
drwxr-xr-x 3 oracle oinstall 4096 Fev  8 10:03 11.2.0


Vale a pena salientar que essa demonstração foi somente um pequeno teste em uma base de "teste" (sem maiores detalhes). Qualquer que seja o ambiente de banco de dados, é altamente recomendável e de extrema importância a realização de testes de verificação para validação do upgrade em um ambiente de teste e homologação, antes de qualquer tentativa de realização de upgrade em uma base de dados de produção.

Observação:

Ao final da execução do DBUA, é apresentada uma mensagem informado que o upgrade do banco de dados foi concluído com sucesso, e que o banco de dados está pronto para uso.

Por fim, para usufruir de todas as inovações do Oracle 11g R2 relacionadas às estruturas de dados, compressão de dados, entre outros, será necessário setar o parâmetro de inicialização "compatible" para "11.2.0.0.0" conforme necessário:

"After upgrading to Oracle Database 11g Release 2 (11.2), you can set the COMPATIBLE initialization parameter to match the release number of the new release. Doing so enables you to use all features of the new release, but prevents you from downgrading to your previous release."

Para maiores informações sobre o parâmetro de inicialização "compatible" e as implicações na alteração do seu valor, consulte o Oracle Database Upgrade Guide 11g Release 2 (11.2).



6 comentários:

David Siqueira disse...

Olá Eduardo como vai?
Excelente essa sua abordagem sobre o DBUA esobre upgrades em Databases Oracle, gostei muito do artigo , muito técnico e didático, no manual do DBA 11g tem um cápitulo dedicado a este assunto também.

Parabéns!!!!

Eduardo Legatti disse...

Olá David,

Tudo bem? Obrigado pelo seu comentário. Na verdade, este artigo tinha outros detalhes mais técnicos que decidi na publicar por achar um tanto complicado. No mais, os manuais da própria Oracle já dizem tudo! ;-)

Abraços e até mais ...

Victor disse...

Eduardo, um prazer e como vai?

Eu me chamo Victor, sou DBA, e estou entrando na área de Oracle agora, tenho que realizar um upgrade de versão no ambiente de desenv e homolog da empresa onde o mesmo é de 11.2.3 para a versão 11.2.4. Pergunta: sentirei dificuldades ou seguinte este artigo consigo sair do outro lado? parabéns pelo post.

Eduardo Legatti disse...

Olá Victor,

No seu caso, vai ser realizado uma atualização de Patchset em uma mesma versão 11g (11.2.3 -> 11.2.4). Quando o upgrade é entre versões (10g -> 11g) pode ser mais trabalhoso, mas requer os mesmos cuidados. Ler o upgrade guide é fundamental, mas você pode verificar também em outros guias (blogs, sites).

Como você vai fazer uma atualização de Patchset, acho melhor você ler o artigo abaixo e também se possível, testar os procedimentos de upgrade em algum ambiente de teste.

http://eduardolegatti.blogspot.com.br/2008/12/atualizando-o-oracle-10g-10201-para.html


Abraços,

Legatti

Sérgio disse...

Olá Eduardo! Excelente artigo

Reparei que o produto foi instalado no diretório /u01/app/oracle/product/11.2.0. Já vi instalações que usam por exemplo/u01/app/oracle/product/11.2.0.3. Sabe se a ORACLE recomenda um padrão, como incluir ou não o patchset no diretório?

Abraços,
Sérgio

Eduardo Legatti disse...

Olá Sérgio,

Neste documento abaixo você pode ver que não é utilizado a versão do patchset

https://docs.oracle.com/cd/E24628_01/em.121/e37799/ch2_manage_oh.htm#OUICG134

Esse padrão é mais apropriado porque você pode fazer upgrades de patchset da mesma versão 11.2.0 do oracle sempre no mesmo oracle home. 11.2.0.1, 11.2.0.2, 11.2.0.3, 11.2.0.4, etc.

Abraços

Postagens populares