Mostrando postagens com marcador Oracle. Mostrar todas as postagens
Mostrando postagens com marcador Oracle. Mostrar todas as postagens

terça-feira, 22 de novembro de 2011

Instalação o Oracle 11g R2 usando o pacote Oracle-Validated no Oracle Enterprise Linux


Demonstrarei nesse post a instalação do Oracle 11G R2 usando o pacote oracle-validated.
Esse pacote é instalado através do repositório do yum resolvendo as dependências necessárias para instalação, ficando apenas para o DBA ajustar os demais parametros do SO necessários para o banco de dados funcionar.

Cenário:
SO:Oracle Enterprise Linux 5.4
BD: Oracle 11G R2
Versão: Enterprise


1 - Configurar o Repositorio
[root@oralinux ~]# cd /etc/yum.repos.d/
[root@oralinux ~]# wget http://public-yum.oracle.com/public-yum-el5.repo

2 - Instalar o Oracle Validate
[root@oralinux ~]# yum install oracle-validated
Loaded plugins: security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package oracle-validated.i386 0:1.0.0-18.el5 set to be updated
--> Processing Dependency: kernel-headers for package: oracle-validated
--> Processing Dependency: gdb for package: oracle-validated
--> Processing Dependency: gcc-c++ for package: oracle-validated
--> Processing Dependency: gcc for package: oracle-validated
--> Processing Dependency: unixODBC-devel for package: oracle-validated
--> Processing Dependency: compat-db for package: oracle-validated
--> Processing Dependency: elfutils-libelf-devel for package: oracle-validated
--> Processing Dependency: libstdc++-devel for package: oracle-validated
--> Processing Dependency: libXp for package: oracle-validated
--> Processing Dependency: glibc-devel for package: oracle-validated
--> Processing Dependency: glibc-headers for package: oracle-validated
--> Processing Dependency: sysstat for package: oracle-validated
--> Processing Dependency: unixODBC for package: oracle-validated
--> Processing Dependency: libaio-devel for package: oracle-validated
--> Processing Dependency: compat-gcc-34-c++ for package: oracle-validated
--> Processing Dependency: compat-gcc-34 for package: oracle-validated
--> Running transaction check
---> Package compat-db.i386 0:4.2.52-5.1 set to be updated
---> Package compat-gcc-34.i386 0:3.4.6-4 set to be updated
---> Package compat-gcc-34-c++.i386 0:3.4.6-4 set to be updated
---> Package elfutils-libelf-devel.i386 0:0.137-3.el5 set to be updated
--> Processing Dependency: elfutils-libelf-devel-static-i386 = 0.137-3.el5 for package: elfutils-libelf-devel
---> Package gcc.i386 0:4.1.2-46.el5 set to be updated
--> Processing Dependency: libgomp >= 4.1.2-46.el5 for package: gcc
---> Package gcc-c++.i386 0:4.1.2-46.el5 set to be updated
---> Package gdb.i386 0:6.8-37.el5 set to be updated
---> Package glibc-devel.i386 0:2.5-42 set to be updated
---> Package glibc-headers.i386 0:2.5-42 set to be updated
---> Package kernel-headers.i386 0:2.6.18-164.el5 set to be updated
---> Package libXp.i386 0:1.0.0-8.1.el5 set to be updated
---> Package libaio-devel.i386 0:0.3.106-3.2 set to be updated
---> Package libstdc++-devel.i386 0:4.1.2-46.el5 set to be updated
---> Package sysstat.i386 0:7.0.2-3.el5 set to be updated
---> Package unixODBC.i386 0:2.2.11-7.1 set to be updated
---> Package unixODBC-devel.i386 0:2.2.11-7.1 set to be updated
--> Running transaction check
---> Package elfutils-libelf-devel-static.i386 0:0.137-3.el5 set to be updated
---> Package libgomp.i386 0:4.4.0-6.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=================================================================================================================================================================================
 Package                                                 Arch                            Version                                    Repository                              Size
=================================================================================================================================================================================
Installing:
 oracle-validated                                        i386                            1.0.0-18.el5                               el5_u4_base                             15 k
Installing for dependencies:
 compat-db                                               i386                            4.2.52-5.1                                 el5_u4_base                            1.7 M
 compat-gcc-34                                           i386                            3.4.6-4                                    el5_u4_base                            4.1 M
 compat-gcc-34-c++                                       i386                            3.4.6-4                                    el5_u4_base                             11 M
 elfutils-libelf-devel                                   i386                            0.137-3.el5                                el5_u4_base                             24 k
 elfutils-libelf-devel-static                            i386                            0.137-3.el5                                el5_u4_base                             66 k
 gcc                                                     i386                            4.1.2-46.el5                               el5_u4_base                            5.2 M
 gcc-c++                                                 i386                            4.1.2-46.el5                               el5_u4_base                            3.4 M
 gdb                                                     i386                            6.8-37.el5                                 el5_u4_base                            3.4 M
 glibc-devel                                             i386                            2.5-42                                     el5_u4_base                            2.0 M
 glibc-headers                                           i386                            2.5-42                                     el5_u4_base                            614 k
 kernel-headers                                          i386                            2.6.18-164.el5                             el5_u4_base                            1.0 M
 libXp                                                   i386                            1.0.0-8.1.el5                              el5_u4_base                             22 k
 libaio-devel                                            i386                            0.3.106-3.2                                el5_u4_base                             11 k
 libgomp                                                 i386                            4.4.0-6.el5                                el5_u4_base                             70 k
 libstdc++-devel                                         i386                            4.1.2-46.el5                               el5_u4_base                            2.9 M
 sysstat                                                 i386                            7.0.2-3.el5                                el5_u4_base                            170 k
 unixODBC                                                i386                            2.2.11-7.1                                 el5_u4_base                            830 k
 unixODBC-devel                                          i386                            2.2.11-7.1                                 el5_u4_base                            743 k

Transaction Summary
=================================================================================================================================================================================
Install     19 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 37 M
Is this ok [y/N]: y
Downloading Packages:
(1/19): libaio-devel-0.3.106-3.2.i386.rpm                                                                                                                 |  11 kB     00:00
(2/19): oracle-validated-1.0.0-18.el5.i386.rpm                                                                                                            |  15 kB     00:00
(3/19): libXp-1.0.0-8.1.el5.i386.rpm                                                                                                                      |  22 kB     00:00
(4/19): elfutils-libelf-devel-0.137-3.el5.i386.rpm                                                                                                        |  24 kB     00:00
(5/19): elfutils-libelf-devel-static-0.137-3.el5.i386.rpm                                                                                                 |  66 kB     00:00
(6/19): libgomp-4.4.0-6.el5.i386.rpm                                                                                                                      |  70 kB     00:00
(7/19): sysstat-7.0.2-3.el5.i386.rpm                                                                                                                      | 170 kB     00:01
(8/19): glibc-headers-2.5-42.i386.rpm                                                                                                                     | 614 kB     00:01
(9/19): unixODBC-devel-2.2.11-7.1.i386.rpm                                                                                                                | 743 kB     00:02
(10/19): unixODBC-2.2.11-7.1.i386.rpm                                                                                                                     | 830 kB     00:02
(11/19): kernel-headers-2.6.18-164.el5.i386.rpm                                                                                                           | 1.0 MB     00:03
(12/19): compat-db-4.2.52-5.1.i386.rpm                                                                                                                    | 1.7 MB     00:05
(13/19): glibc-devel-2.5-42.i386.rpm                                                                                                                      | 2.0 MB     00:05
(14/19): libstdc++-devel-4.1.2-46.el5.i386.rpm                                                                                                            | 2.9 MB     00:07
(15/19): gcc-c++-4.1.2-46.el5.i386.rpm                                                                                                                    | 3.4 MB     00:14
(16/19): gdb-6.8-37.el5.i386.rpm                                                                                                                          | 3.4 MB     00:12
(17/19): compat-gcc-34-3.4.6-4.i386.rpm                                                                                                                   | 4.1 MB     00:12
(18/19): gcc-4.1.2-46.el5.i386.rpm                                                                                                                        | 5.2 MB     00:14
(19/19): compat-gcc-34-c++-3.4.6-4.i386.rpm                                                                                                               |  11 MB     00:26
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                            319 kB/s |  37 MB     01:59
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : kernel-headers                                                                                                                                           1/19
  Installing     : glibc-headers                                                                                                                                            2/19
  Installing     : glibc-devel                                                                                                                                              3/19
  Installing     : libstdc++-devel                                                                                                                                          4/19
  Installing     : compat-gcc-34                                                                                                                                            5/19
  Installing     : unixODBC                                                                                                                                                 6/19
  Installing     : compat-gcc-34-c++                                                                                                                                        7/19
  Installing     : libXp                                                                                                                                                    8/19
  Installing     : compat-db                                                                                                                                                9/19
  Installing     : sysstat                                                                                                                                                 10/19
  Installing     : libgomp                                                                                                                                                 11/19
  Installing     : gcc                                                                                                                                                     12/19
  Installing     : gcc-c++                                                                                                                                                 13/19
  Installing     : gdb                                                                                                                                                     14/19
  Installing     : unixODBC-devel                                                                                                                                          15/19
  Installing     : libaio-devel                                                                                                                                            16/19
  Installing     : elfutils-libelf-devel                                                                                                                                   17/19
  Installing     : elfutils-libelf-devel-static                                                                                                                            18/19
  Installing     : oracle-validated                                                                                                                                        19/19

Installed:
  oracle-validated.i386 0:1.0.0-18.el5

Dependency Installed:
  compat-db.i386 0:4.2.52-5.1                         compat-gcc-34.i386 0:3.4.6-4         compat-gcc-34-c++.i386 0:3.4.6-4         elfutils-libelf-devel.i386 0:0.137-3.el5
  elfutils-libelf-devel-static.i386 0:0.137-3.el5     gcc.i386 0:4.1.2-46.el5              gcc-c++.i386 0:4.1.2-46.el5              gdb.i386 0:6.8-37.el5
  glibc-devel.i386 0:2.5-42                           glibc-headers.i386 0:2.5-42          kernel-headers.i386 0:2.6.18-164.el5     libXp.i386 0:1.0.0-8.1.el5
  libaio-devel.i386 0:0.3.106-3.2                     libgomp.i386 0:4.4.0-6.el5           libstdc++-devel.i386 0:4.1.2-46.el5      sysstat.i386 0:7.0.2-3.el5
  unixODBC.i386 0:2.2.11-7.1                          unixODBC-devel.i386 0:2.2.11-7.1

Complete!
[root@oralinux ~]#

3 - Configurar os parametros do kernel
vim /etc/sysctl.conf

fs.suid_dumpable = 1
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=4194304
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586


4 - Adicionar as seguintes linhas no arquivo

vim /etc/security/limits.conf
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  4096
oracle              hard    nofile  65536
oracle              soft    stack   10240

5 - Criar usuarios e Grupos
groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin
useradd -g oinstall -G dba,oper,asmadmin oracle
passwd oracle

6 - Criar a estrutura de instalação e setar as permissões para os usários
mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01


7 - Definir variáveis no arquivo .bash_profile
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

#ORACLE_HOSTNAME=ol5-112.localdomain; export ORACLE_HOSTNAME
ORACLE_UNQNAME=DB11G; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=DB11G; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
~
8 - Descompactar os arquivos baixados no site da Oracle.com

[oracle@oralinux u01]$ ls -lah
total 4,3G
drwxrwxr-x  7 oracle oinstall 4,0K Nov 22 10:36 .
drwxr-xr-x 25 root   root     4,0K Nov 22 10:11 ..
-rwxrwxr-x  1 oracle oinstall 950M Nov 21 16:51 218_linux_11gR2_database_2of2.zip
-rwxrwxr-x  1 oracle oinstall 1,2G Nov 21 16:56 219_linux_11gR2_database_1of2.zip

unzip 219_linux_11gR2_database_1of2.zip
unzip 218_linux_11gR2_database_2of2.zip

9 - Acessar o diretório onde descompactou os arquivos
[oracle@oralinux u01]$ cd /u01/database/
[oracle@oralinux database]$ ls -lah
total 48K
drwxrwxr-x  8 oracle oinstall 4,0K Ago 18  2009 .
drwxrwxr-x  7 oracle oinstall 4,0K Nov 22 10:36 ..
drwxrwxr-x 12 oracle oinstall 4,0K Ago 17  2009 doc
drwxrwxr-x  4 oracle oinstall 4,0K Ago 14  2009 install
drwxrwxr-x  2 oracle oinstall 4,0K Ago 14  2009 response
drwxrwxr-x  2 oracle oinstall 4,0K Ago 14  2009 rpm
-rwxrwxr-x  1 oracle oinstall 4,3K Ago 14  2009 runInstaller
drwxrwxr-x  2 oracle oinstall 4,0K Ago 14  2009 sshsetup
drwxrwxr-x 14 oracle oinstall 4,0K Ago 14  2009 stage
-rwxrwxr-x  1 oracle oinstall 5,3K Ago 17  2009 welcome.html

10 - Com o usuário oracle executar o arquivo runInstaller

[oracle@oralinux database]$ ./runInstaller




Observem que não teremos que passar pelo processo de instalar biblioteca a biblioteca e suas dependências, agilizando a instalação;
A instalação foi concluída com sucesso em aproximadamente uns 20 minutos considerando que o Oracle Enterprise Linux 5 já estava instalado;

Referencias:




terça-feira, 25 de outubro de 2011

Aplicando um Patch no Oracle 10g R2

Olá pessoal.

Nesse post iremos mostrar como aplicar um patch de correção numa base em Single Instance.Uma tarefa simples que não requer muita configuração.Porém é necessário salientar que os patchs mesmo sendo simples de se aplicar, é necessário atentar para quais correções ele irá fazer, e se é necessário efetuar rollback em algum outro patch aplicado.
A aplicação de patchs são necessárias quando é preciso corrigir algum bug, de SQL, PL-SQL,Funções, Códigos internos,binários etc.

Vamos ao que interessa:

Cenário:
SO: Oracle Enterprise Linux
BD : Oracle 10g R2 32 bits
PATCH: 4516865_LINUX.ZIP


1 - Descompactar o arquivo de patch:
[oracle@oralinux patchs]$ unzip p4516865_10201_LINUX.zip
Archive:  p4516865_10201_LINUX.zip
   creating: 4516865/
   creating: 4516865/files/
   creating: 4516865/files/install/
  inflating: 4516865/files/install/changePerm.sh
  inflating: 4516865/files/install/restrict.lst
   creating: 4516865/etc/
   creating: 4516865/etc/config/
  inflating: 4516865/etc/config/inventory
  inflating: 4516865/etc/config/actions
   creating: 4516865/etc/xml/
  inflating: 4516865/etc/xml/GenericActions.xml
  inflating: 4516865/etc/xml/ShiphomeDirectoryStructure.xml
  inflating: 4516865/README.txt
[oracle@oralinux patchs]$


2 - Uma recomendação mais que necessária é ler o arquivo README, pois nele irá descrever os passos necessários para aplicação do Patch:
Segue alguns dados.....
#------------------------------------------------- ------------------------
Patch # Provisório para erros Base: 4516865, 4747264, 4908101 e 5039292.
#------------------------------------------------- ------------------------
#
# DATA: seg 17 outubro 2005 00:49:20
# -------------------------------
# Patch Plataforma de: Linux x86
# # Versão do produto: 10.2.0.1
Produto # Patched: RDBMS
#
# Erros corrigidos por este patch:
# -------------------------
# 4516865: permissões erradas após a instalação, OH E DIRETÓRIOS SUBSEQUENTE
# 4747264: permissões erradas após a instalação CLIENTE DE 10gR2 (10.2.0.1)
# 4908101: NÃO DBA usuários não podem acessar $ OH / NETWORK / ADMIN & $ OH / LDAP - 4516865 APLICADA
# 5039292: RELAX permissão em $ OH / LDAP / ADMIN TAMBÉM
#
#
# Nota: Se você já aplicou o patch para o bug 4516865 certifique-se de
# Executa os comandos a seguir, antes de "reaplicação" este patch:
# ------------------------------------------------- --------------------------
#
# 1. cd $ ORACLE_HOME / install
# 2. chmod 755 changePerm.sh
# 3. chmod 644 restrict.lst
#

3 - Iniciar o Programa Opatch nas pasta de binários do Oracle no diretório $ORACLE_HOME/Opatch :
[oracle@oralinux db_1]$ ./OPatch/opatch apply -local /u01/patchs/4516865/
Invoking OPatch 10.2.0.1.0


versão do Installer temporário Oracle 10.2.0.1.0
Copyright (c) 2005, Oracle Corporation. Todos os direitos reservados..




Oracle Home       : /u01/app/oracle/product/10.2.0/db_1
Inventário Central: /u01/app/oracle/oraInventory
   de           : /u01/app/oracle/product/10.2.0/db_1/oraInst.loc
Versão de OPatch    : 10.2.0.1.0
Versão de OUI       : 10.2.0.1.0
Localização de OUI      : /u01/app/oracle/product/10.2.0/db_1/oui
Localização do arquivo de log: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch-2011_Oct_05_05-41-50-BRT_Wed.log


ApplySession aplicando o patch temporário '4516865' para OH '/u01/app/oracle/product/10.2.0/db_1'


Você selecionou a opção -local; portanto, o OPatch só aplicará o patch ao sistema local.


Fazendo backup de arquivos e inventário (não para rollback automático) do Oracle Home
Fazendo backup de arquivos afetados pelo patch "4516865" para restauração. Isso pode demorar um pouco...
Fazendo backup de arquivos afetados pelo patch "4516865" para rollback. Isso pode demorar um pouco...


Patch de componente oracle.rdbms.rsf, 10.2.0.1.0...
Copiando o arquivo para "/u01/app/oracle/product/10.2.0/db_1/install/changePerm.sh"
Copiando o arquivo para "/u01/app/oracle/product/10.2.0/db_1/install/restrict.lst"
ApplySession adicionando o patch temporário '4516865' ao inventário


OPatch succeeded.
[oracle@oralinux db_1]$


4 - Listando os patchs aplicados:
[oracle@oralinux db_1]$ ./OPatch/opatch lsinventory
Invoking OPatch 10.2.0.1.0


versão do Installer temporário Oracle 10.2.0.1.0
Copyright (c) 2005, Oracle Corporation. Todos os direitos reservados..




Oracle Home       : /u01/app/oracle/product/10.2.0/db_1
Inventário Central: /u01/app/oracle/oraInventory
   de           : /u01/app/oracle/product/10.2.0/db_1/oraInst.loc
Versão de OPatch    : 10.2.0.1.0
Versão de OUI       : 10.2.0.1.0
Localização de OUI      : /u01/app/oracle/product/10.2.0/db_1/oui
Localização do arquivo de log: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch-2011_Oct_20_01-12-00-BRT_Thu.log


Lsinventory Output file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory-2011_Oct_20_01-12-00-BRT_Thu.txt


--------------------------------------------------------------------------------
Produtos Instalados em Nível Superior (1):


Oracle Database 10g                                                  10.2.0.1.0
Há 1 produtos instalados neste Oracle Home.




Patches temporários (1) :


Patch  4516865      : applied on Wed Oct 19 21:25:40 BRT 2011
   Created on 14 Feb 2006, 00:22:00 hrs US/Pacific
   Bugs fixed:
     5039292, 4747264, 4908101, 4516865




--------------------------------------------------------------------------------


OPatch succeeded.

6 - Através do help podemos encontrar demais opções.

Até o próximo galera!
Emerson Martins
DBA.

Referencias:
Linux Recipes for Oracle DBA
www.oracle.com




















quarta-feira, 27 de julho de 2011

Uso do SAVEPOINT no Oracle 11g



Olá pessoal!
Continuando a  nossa série de posts sobre a Prova de Certificação IZO-047 - Oracle SQL Expert iremos abordar mais um assunto.O uso do SAVEPOINT.

SAVEPOINTO Savepoint é uma declaração que faz parte do TCL(Transational Control Language) que suporta os comando ROLLBACK COMMIT.Ele estabelece demarcações de pontos dentro de uma transação, a fim de capacitar qualquer COMMIT seguinte ou ROLLBACK para subdividir os pontos em que os dados podem ser salvos ou a transação desfeita.


Não entrarei em detalhes sobre COMMIT e ROLLBACK porém essas transações sem o uso do SAVEPOINT, é tudo ou nada, não existe meio termo.Se for um bloco com varias instruções a serem executadas, a série inteira pode ser salva ou desfeita em grande grupos.
Vejamos um exemplo com dados reais.
SQL> select codigo,nome,tipo from fornecedor where codigo <=10;
    CODIGO NOME                                                          TIPO
---------- ------------------------------------------------------- ----------
         1 E A M TRANSPORTES E LOGISTICA LTDA                               2
         2 A G CALCADOS E COMPONENTES LTDA                                  1
         3 A P GALVANI                                                      1
         4 ABRASIVOS VINCI LTDA                                             2
         5 ACESSORIOS MINEIRAO LTDA.                                        8
         6 ACESSORIOS PALMARES LTDA                                         8
         7 ACOTUPY -IND.METALURGICAS LTDA.                                  1
        10 AMANCO BRASIL LTDA (PRODUTOS)                                    1


8 rows selected.
SQL> commit;
SQL> update fornecedor set tipo = 10 where codigo<=10;
8 rows updated.
SQL> savepoint sp_1;
Savepoint created.


Vejamos que posteriormente ao select na tabela fiz um UPDATE atualizando o campo tipo=10.E por fim o savepoint sp_1.Definimos o nome do como sp_1, mas nada importaria que fosse qualquer um outro nome.
Outro exemplo:
SQL> update fornecedor set tipo = 25 where codigo<=25;
22 rows updated.
SQL> savepoint sp_25;
Savepoint created.
SQL> update fornecedor set tipo =35 where codigo<=25;
22 rows updated.
SQL> savepoint sp_35;
Savepoint created.
SQL> update fornecedor set tipo =45 where codigo<=25;
22 rows updated.
SQL> rollback to sp_35;
Rollback complete.
SQL>  select codigo,nome,tipo from fornecedor where codigo<=25;
    CODIGO NOME                                                          TIPO
---------- ------------------------------------------------------- ----------
         1 E A M TRANSPORTES E LOGISTICA LTDA                              35
         2 A G CALCADOS E COMPONENTES LTDA                                 35
         3 A P GALVANI                                                     35
         4 ABRASIVOS VINCI LTDA                                            35
         5 ACESSORIOS MINEIRAO LTDA.                                       35
         6 ACESSORIOS PALMARES LTDA                                        35
         7 ACOTUPY -IND.METALURGICAS LTDA.                                 35
        10 AMANCO BRASIL LTDA (PRODUTOS)                                   35
        11 AKZO NOBEL LTDA (TINTAS YPIRANGA)                               35
        12 ALAGOAS DIESEL S/A                                              35
        13 ALAMO PRENSADOS DO BRASIL S.A.                                  35
        14 ALBA QUIMICA IND. E COM. LTDA                                   35
        15 ALCAN ALUMINIO DO BRASIL S/A.                                   35
        16 ALMAK INDUSTRIA E COMERCIO LTDA                                 35
        17 ALULEV ESCADA LTDA.                                             35
        18 ALUMA ALUMINIO COM.E REP.DE M.LTDA                              35
        20 AMBROSIO E JUNIOR " MOBI "                                      35
        21 AMIR-AGRO MADEIREIRA IND. RO LTDA                               35
        22 AMORIM SERGIPE TRANSPORTES LTDA                                 35
        23 ANCOL ANJOS ENGENHARIA IND COM LTDA                             35
        24 ANDREAZZA MADEIRAS S/A                                          35
        25 ANGELL-INDUSTRIA E COMERCIO LTDA                                35
22 rows selected.
SQL> commit;


Nesse outro caso, utilizei outras marcações, mais específicamente três, sp_25,sp_35 e sp_45 e por fim dei um rollback abortando abaixo do savepoint sp_35.Uma coisa a se notar é que ao efetuar o rollback da sp_35, é como se nada que foi escrito posteriormente.
As regras de utilização SAVEPOINT incluem o seguinte:


1 - Todas as declarações SAVEPOINT deve incluir um nome.
2 - Você não deve duplicar nomes SAVEPOINT dentro de uma única transação e lembre-se que uma transação é uma série de uma ou mais declarações SQL que termina com um evento de compromisso. Se você duplicar um nome, sei que você vai não receber um erro de sintaxe ou de execução. Em vez disso, o SAVEPOINT novo simplesmente substituir o SAVEPOINT anterior, efetivamente apagá-lo.
3 - Uma vez um evento de confirmação ocorre ou ainda um evento explícito ou implícito cometer todos os pontos de salvamento existentes são apagados da memória. Quaisquer referências a eles por declarações futuras TCL irá produzir um código de erro.


SQL> savepoint sp_35;
Savepoint created.
SQL> update fornecedor set tipo =45 where codigo<=25;
22 rows updated.
SQL> savepoint to sp_5;
Rollback complete.
SQL>commit;
SQL>  rollback to sp_25;

 rollback to sp_25
*
ERROR at line 1:
ORA-01086: savepoint 'SP_25' never established in this session or is invalid

No exemplo anterior, a instrução ROLLBACK na sp_25 é errado duas razões. Um, é logicamente irrelevante, uma vez que não há nada para reverter o COMMIT com tudo salvo permanentemente.
O SAVEPOINT é particularmente útil na gestão de uma grande série de transações em que a validação incremental deve ser exigido, no qual cada indivíduo validação requer uma série complexa de instruções DML que pode falhar, mas pode ser programaticamente corrigidos e validados antes de passar para o próximo incremento.

É isso ai pessoal, espero que tenham gostado.

Até a próxima.

Emerson Martins
DBA Jr