quinta-feira, 23 de março de 2017

Oracle Linux 12cR2 Preinstall

O pacote de preinstall da versão 12cR2 já está liberado no Oracle Public Yum Server para o OL 6 e 7.

Fique atento que o nome do pacote mudou!

Para as versões anteriores:

  • oracle-rdbms-server-11gR2-preinstall
  • oracle-rdbms-server-12cR1-preinstall


Para a 12cR2:
  • oracle-database-server-12cR2-preinstall

[root@db3 ~]# cd /etc/yum.repos.d
[root@db3 yum.repos.d]# wget http://public-yum.oracle.com/public-yum-ol6.repo
--2017-03-23 14:12:05--  http://public-yum.oracle.com/public-yum-ol6.repo
Resolving public-yum.oracle.com... 177.155.140.8, 177.155.140.10
Connecting to public-yum.oracle.com|177.155.140.8|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7301 (7.1K) [text/plain]
Saving to: “public-yum-ol6.repo.1”

100%[=============================================================================================================================>] 7,301       --.-K/s   in 0.05s

2017-03-23 14:12:06 (143 KB/s) - “public-yum-ol6.repo.1” saved [7301/7301]

[root@db3 yum.repos.d]# yum install oracle-database-server-12cR2-preinstall
Loaded plugins: refresh-packagekit, security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package oracle-database-server-12cR2-preinstall.x86_64 0:1.0-1.el6 will be installed
--> Processing Dependency: compat-libcap1 for package: oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64
--> Processing Dependency: ksh for package: oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64
--> Processing Dependency: libaio-devel for package: oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64
--> Processing Dependency: xorg-x11-utils for package: oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64
--> Processing Dependency: glibc-devel for package: oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64
--> Processing Dependency: compat-libstdc++-33 for package: oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64
--> Processing Dependency: libstdc++-devel for package: oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64
--> Running transaction check
---> Package compat-libcap1.x86_64 0:1.10-1 will be installed
---> Package compat-libstdc++-33.x86_64 0:3.2.3-69.el6 will be installed
---> Package glibc-devel.x86_64 0:2.12-1.192.el6 will be installed
--> Processing Dependency: glibc = 2.12-1.192.el6 for package: glibc-devel-2.12-1.192.el6.x86_64
--> Processing Dependency: glibc-headers = 2.12-1.192.el6 for package: glibc-devel-2.12-1.192.el6.x86_64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.12-1.192.el6.x86_64
---> Package ksh.x86_64 0:20120801-33.el6 will be installed
---> Package libaio-devel.x86_64 0:0.3.107-10.el6 will be installed
---> Package libstdc++-devel.x86_64 0:4.4.7-17.el6 will be installed
--> Processing Dependency: libstdc++(x86-64) = 4.4.7-17.el6 for package: libstdc++-devel-4.4.7-17.el6.x86_64
---> Package xorg-x11-utils.x86_64 0:7.5-14.el6 will be installed
--> Processing Dependency: libdmx.so.1()(64bit) for package: xorg-x11-utils-7.5-14.el6.x86_64
--> Processing Dependency: libXxf86dga.so.1()(64bit) for package: xorg-x11-utils-7.5-14.el6.x86_64
--> Running transaction check
---> Package glibc.x86_64 0:2.12-1.107.el6 will be updated
--> Processing Dependency: glibc = 2.12-1.107.el6 for package: glibc-common-2.12-1.107.el6.x86_64
---> Package glibc.x86_64 0:2.12-1.192.el6 will be an update
---> Package glibc-headers.x86_64 0:2.12-1.192.el6 will be installed
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.12-1.192.el6.x86_64
--> Processing Dependency: kernel-headers for package: glibc-headers-2.12-1.192.el6.x86_64
---> Package libXxf86dga.x86_64 0:1.1.4-2.1.el6 will be installed
--> Processing Dependency: libX11 >= 1.5.99.902 for package: libXxf86dga-1.1.4-2.1.el6.x86_64
---> Package libdmx.x86_64 0:1.1.3-3.el6 will be installed
---> Package libstdc++.x86_64 0:4.4.7-3.el6 will be updated
---> Package libstdc++.x86_64 0:4.4.7-17.el6 will be an update
--> Running transaction check
---> Package glibc-common.x86_64 0:2.12-1.107.el6 will be updated
---> Package glibc-common.x86_64 0:2.12-1.192.el6 will be an update
--> Processing Dependency: tzdata >= 2015g-4 for package: glibc-common-2.12-1.192.el6.x86_64
---> Package kernel-headers.x86_64 0:2.6.32-642.15.1.el6 will be installed
---> Package libX11.x86_64 0:1.5.0-4.el6 will be updated
---> Package libX11.x86_64 0:1.6.3-2.el6 will be an update
--> Processing Dependency: libX11-common = 1.6.3-2.el6 for package: libX11-1.6.3-2.el6.x86_64
--> Running transaction check
---> Package libX11-common.noarch 0:1.5.0-4.el6 will be updated
---> Package libX11-common.noarch 0:1.6.3-2.el6 will be an update
---> Package tzdata.noarch 0:2012j-1.el6 will be updated
---> Package tzdata.noarch 0:2017a-1.el6 will be an update
--> Processing Conflict: libX11-1.6.3-2.el6.x86_64 conflicts libxcb < 1.9.1-3
--> Restarting Dependency Resolution with new changes.
--> Running transaction check
---> Package libxcb.x86_64 0:1.8.1-1.el6 will be updated
---> Package libxcb.x86_64 0:1.11-2.el6 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================================================================
 Package                                                     Arch                       Version                                   Repository                      Size
=======================================================================================================================================================================
Installing:
 oracle-database-server-12cR2-preinstall                     x86_64                     1.0-1.el6                                 ol6_latest                      18 k
Updating:
 libxcb                                                      x86_64                     1.11-2.el6                                ol6_latest                     142 k
Installing for dependencies:
 compat-libcap1                                              x86_64                     1.10-1                                    ol6_latest                      17 k
 compat-libstdc++-33                                         x86_64                     3.2.3-69.el6                              ol6_latest                     183 k
 glibc-devel                                                 x86_64                     2.12-1.192.el6                            ol6_latest                     988 k
 glibc-headers                                               x86_64                     2.12-1.192.el6                            ol6_latest                     617 k
 kernel-headers                                              x86_64                     2.6.32-642.15.1.el6                       ol6_latest                     4.4 M
 ksh                                                         x86_64                     20120801-33.el6                           ol6_latest                     760 k
 libXxf86dga                                                 x86_64                     1.1.4-2.1.el6                             ol6_latest                      17 k
 libaio-devel                                                x86_64                     0.3.107-10.el6                            ol6_latest                      13 k
 libdmx                                                      x86_64                     1.1.3-3.el6                               ol6_latest                      14 k
 libstdc++-devel                                             x86_64                     4.4.7-17.el6                              ol6_latest                     1.6 M
 xorg-x11-utils                                              x86_64                     7.5-14.el6                                ol6_latest                     100 k
Updating for dependencies:
 glibc                                                       x86_64                     2.12-1.192.el6                            ol6_latest                     3.8 M
 glibc-common                                                x86_64                     2.12-1.192.el6                            ol6_latest                      14 M
 libX11                                                      x86_64                     1.6.3-2.el6                               ol6_latest                     586 k
 libX11-common                                               noarch                     1.6.3-2.el6                               ol6_latest                     169 k
 libstdc++                                                   x86_64                     4.4.7-17.el6                              ol6_latest                     295 k
 tzdata                                                      noarch                     2017a-1.el6                               ol6_latest                     454 k

Transaction Summary
=======================================================================================================================================================================
Install      12 Package(s)
Upgrade       7 Package(s)

Total download size: 28 M
Is this ok [y/N]: y
Downloading Packages:
(1/19): compat-libcap1-1.10-1.x86_64.rpm                                                                                                        |  17 kB     00:00
(2/19): compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm                                                                                             | 183 kB     00:01
(3/19): glibc-2.12-1.192.el6.x86_64.rpm                                                                                                         | 3.8 MB     00:24
(4/19): glibc-common-2.12-1.192.el6.x86_64.rpm                                                                                                  |  14 MB     01:35
(5/19): glibc-devel-2.12-1.192.el6.x86_64.rpm                                                                                                   | 988 kB     00:06
(6/19): glibc-headers-2.12-1.192.el6.x86_64.rpm                                                                                                 | 617 kB     00:02
(7/19): kernel-headers-2.6.32-642.15.1.el6.x86_64.rpm                                                                                           | 4.4 MB     00:27
(8/19): ksh-20120801-33.el6.x86_64.rpm                                                                                                          | 760 kB     00:06
(9/19): libX11-1.6.3-2.el6.x86_64.rpm                                                                                                           | 586 kB     00:02
(10/19): libX11-common-1.6.3-2.el6.noarch.rpm                                                                                                   | 169 kB     00:00
(11/19): libXxf86dga-1.1.4-2.1.el6.x86_64.rpm                                                                                                   |  17 kB     00:00
(12/19): libaio-devel-0.3.107-10.el6.x86_64.rpm                                                                                                 |  13 kB     00:00
(13/19): libdmx-1.1.3-3.el6.x86_64.rpm                                                                                                          |  14 kB     00:00
(14/19): libstdc++-4.4.7-17.el6.x86_64.rpm                                                                                                      | 295 kB     00:02
(15/19): libstdc++-devel-4.4.7-17.el6.x86_64.rpm                                                                                                | 1.6 MB     00:10
(16/19): libxcb-1.11-2.el6.x86_64.rpm                                                                                                           | 142 kB     00:00
(17/19): oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64.rpm                                                                           |  18 kB     00:00
(18/19): tzdata-2017a-1.el6.noarch.rpm                                                                                                          | 454 kB     00:02
(19/19): xorg-x11-utils-7.5-14.el6.x86_64.rpm                                                                                                   | 100 kB     00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                  153 kB/s |  28 MB     03:09
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Retrieving key from http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6
Importing GPG key 0xEC551F03:
 Userid: "Oracle OSS group (Open Source Software group) "
 From  : http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating   : libX11-common-1.6.3-2.el6.noarch                                                                                                                   1/26
  Installing : libaio-devel-0.3.107-10.el6.x86_64                                                                                                                 2/26
  Installing : kernel-headers-2.6.32-642.15.1.el6.x86_64                                                                                                          3/26
  Updating   : tzdata-2017a-1.el6.noarch                                                                                                                          4/26
  Updating   : glibc-2.12-1.192.el6.x86_64                                                                                                                        5/26
  Updating   : glibc-common-2.12-1.192.el6.x86_64                                                                                                                 6/26
  Updating   : libstdc++-4.4.7-17.el6.x86_64                                                                                                                      7/26
  Updating   : libxcb-1.11-2.el6.x86_64                                                                                                                           8/26
  Updating   : libX11-1.6.3-2.el6.x86_64                                                                                                                          9/26
  Installing : libXxf86dga-1.1.4-2.1.el6.x86_64                                                                                                                  10/26
  Installing : libdmx-1.1.3-3.el6.x86_64                                                                                                                         11/26
  Installing : xorg-x11-utils-7.5-14.el6.x86_64                                                                                                                  12/26
  Installing : libstdc++-devel-4.4.7-17.el6.x86_64                                                                                                               13/26
  Installing : compat-libcap1-1.10-1.x86_64                                                                                                                      14/26
  Installing : ksh-20120801-33.el6.x86_64                                                                                                                        15/26
  Installing : compat-libstdc++-33-3.2.3-69.el6.x86_64                                                                                                           16/26
  Installing : glibc-headers-2.12-1.192.el6.x86_64                                                                                                               17/26
  Installing : glibc-devel-2.12-1.192.el6.x86_64                                                                                                                 18/26
  Installing : oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64                                                                                          19/26
  Cleanup    : libX11-1.5.0-4.el6.x86_64                                                                                                                         20/26
  Cleanup    : libxcb-1.8.1-1.el6.x86_64                                                                                                                         21/26
  Cleanup    : libstdc++-4.4.7-3.el6.x86_64                                                                                                                      22/26
  Cleanup    : libX11-common-1.5.0-4.el6.noarch                                                                                                                  23/26
  Cleanup    : glibc-common-2.12-1.107.el6.x86_64                                                                                                                24/26
  Cleanup    : glibc-2.12-1.107.el6.x86_64                                                                                                                       25/26
  Cleanup    : tzdata-2012j-1.el6.noarch                                                                                                                         26/26
  Verifying  : tzdata-2017a-1.el6.noarch                                                                                                                          1/26
  Verifying  : kernel-headers-2.6.32-642.15.1.el6.x86_64                                                                                                          2/26
  Verifying  : libaio-devel-0.3.107-10.el6.x86_64                                                                                                                 3/26
  Verifying  : glibc-2.12-1.192.el6.x86_64                                                                                                                        4/26
  Verifying  : libstdc++-4.4.7-17.el6.x86_64                                                                                                                      5/26
  Verifying  : compat-libcap1-1.10-1.x86_64                                                                                                                       6/26
  Verifying  : ksh-20120801-33.el6.x86_64                                                                                                                         7/26
  Verifying  : compat-libstdc++-33-3.2.3-69.el6.x86_64                                                                                                            8/26
  Verifying  : libXxf86dga-1.1.4-2.1.el6.x86_64                                                                                                                   9/26
  Verifying  : glibc-common-2.12-1.192.el6.x86_64                                                                                                                10/26
  Verifying  : libdmx-1.1.3-3.el6.x86_64                                                                                                                         11/26
  Verifying  : glibc-devel-2.12-1.192.el6.x86_64                                                                                                                 12/26
  Verifying  : xorg-x11-utils-7.5-14.el6.x86_64                                                                                                                  13/26
  Verifying  : libstdc++-devel-4.4.7-17.el6.x86_64                                                                                                               14/26
  Verifying  : oracle-database-server-12cR2-preinstall-1.0-1.el6.x86_64                                                                                          15/26
  Verifying  : glibc-headers-2.12-1.192.el6.x86_64                                                                                                               16/26
  Verifying  : libxcb-1.11-2.el6.x86_64                                                                                                                          17/26
  Verifying  : libX11-1.6.3-2.el6.x86_64                                                                                                                         18/26
  Verifying  : libX11-common-1.6.3-2.el6.noarch                                                                                                                  19/26
  Verifying  : libxcb-1.8.1-1.el6.x86_64                                                                                                                         20/26
  Verifying  : libstdc++-4.4.7-3.el6.x86_64                                                                                                                      21/26
  Verifying  : tzdata-2012j-1.el6.noarch                                                                                                                         22/26
  Verifying  : glibc-2.12-1.107.el6.x86_64                                                                                                                       23/26
  Verifying  : libX11-common-1.5.0-4.el6.noarch                                                                                                                  24/26
  Verifying  : glibc-common-2.12-1.107.el6.x86_64                                                                                                                25/26
  Verifying  : libX11-1.5.0-4.el6.x86_64                                                                                                                         26/26

Installed:
  oracle-database-server-12cR2-preinstall.x86_64 0:1.0-1.el6

Dependency Installed:
  compat-libcap1.x86_64 0:1.10-1               compat-libstdc++-33.x86_64 0:3.2.3-69.el6  glibc-devel.x86_64 0:2.12-1.192.el6  glibc-headers.x86_64 0:2.12-1.192.el6
  kernel-headers.x86_64 0:2.6.32-642.15.1.el6  ksh.x86_64 0:20120801-33.el6               libXxf86dga.x86_64 0:1.1.4-2.1.el6   libaio-devel.x86_64 0:0.3.107-10.el6
  libdmx.x86_64 0:1.1.3-3.el6                  libstdc++-devel.x86_64 0:4.4.7-17.el6      xorg-x11-utils.x86_64 0:7.5-14.el6

Updated:
  libxcb.x86_64 0:1.11-2.el6

Dependency Updated:
  glibc.x86_64 0:2.12-1.192.el6 glibc-common.x86_64 0:2.12-1.192.el6 libX11.x86_64 0:1.6.3-2.el6 libX11-common.noarch 0:1.6.3-2.el6 libstdc++.x86_64 0:4.4.7-17.el6
  tzdata.noarch 0:2017a-1.el6

Complete!

Mais informações →

quarta-feira, 22 de março de 2017

Preservando o estado dos pluggable databases após o restart do container database

Com a introdução da arquitetura multitenant na versão 12c do Oracle Database, passamos a ter múltiplos pluggable databases (PDBs) abaixo de um único container database (CDB). Anterior a versão 12.1.0.2, sempre que um container database era iniciado todos os pluggable databases associados permaneciam por padrão no estado MOUNT (com exceção do pluggable database SEED que fica em READ-ONLY).

Um mecanismo muito utilizado até então para se iniciar os pluggable databases eram triggers de startup. Quando o container era iniciado a trigger era disparada e todos os pluggable databases configurados abaixo da trigger eram automaticamente alterados para READ WRITE ou READ ONLY.


create or replace trigger startup_pdbs 
after startup on database
begin
  execute immediate 'alter pluggable database DBHMG1 open';
end;
/

Em um container database (CDB) com vários pluggable databases (PDBs) associados a solução começava a se tornar mais complexa, pois cada PDB poderia ter seu OPEN MODE diferente dos demais (MOUNTED, READ WRITE, READ ONLY). A cada necessidade de se disponibilizar um PDB em outro modo se tornava necessário também alterar a trigger manualmente ajustando o novo estado do PDB.

Iniciando na versão 12.1.0.2, a Oracle disponibilizou a feature pdb_save_or_discard_state junto ao comando ALTER PLUGGABLE DATABASE onde permite que o estado (state) de um PDB seja salvo ou descartado, agora sempre que o CDB é iniciado os pluggable databases (PDBs) voltam ao seu estado em que foram salvos (READ WRITE/READ ONLY).


Se um PDB não possui estado salvo ou ele foi descartado, então por default o estado dele será MOUNT quando o CDB for novamente iniciado.


SAVE: Salva o atual estado de OPEN MODE do(s) PDB(s) de modo que seja mantido após o restart do CDB;

DISCARD: Descarta o estado salvo do(s) PDB(s) resultando no retorno ao padrão MOUNTED;

INSTANCES_CLAUSE: Adicionado ao comando, permite salvar/descartar o estado de uma instance específica ou para todas as instances (RAC) - instances = ('cdb1','cdb2'). Se omitido, modifica o estado do PDB apenas para a instance corrente;

ALL: Salva/descarta o estado para todos pluggable database;

ALL EXCEPT: Salva/descarta o estado para todos pluggable databases exceto pelos listados na cláusula EXCEPT;

Demonstrações de uso:

-- Verificando o estado corrente dos pluggable databases

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DBHMG1                         READ WRITE NO
         4 DBHMG2                         READ ONLY  NO
         5 DBHMG3                         READ WRITE YES

Existem diferentes estados (open mode) para os pluggable databases, incluindo o DBHMG3 em modo restrito.

-- Verificando o estado salvo dos pluggable databases

SQL> select con_name, instance_name, state, restricted from dba_pdb_saved_states;

no rows selected

Neste momento nenhum PDB possuía seu estado salvo, ou seja, se o container database (CDB) for reiniciado, todos os pluggable databases irão ficar em estado MOUNT.


-- Salvando o estado de apenas um pluggable database

SQL> alter pluggable database DBHMG1 save state;

Pluggable database altered.

-- Salvando o estado de todos os pluggable databases exceto o DBHMG3

SQL> alter pluggable database ALL EXCEPT DBHMG3 save state;

Pluggable database altered.

-- Salvando o estado de todos os pluggable databases

SQL> alter pluggable database ALL save state;

Pluggable database altered.

-- Verificando o estado salvo dos pluggable databases

SQL> select con_name, instance_name, state, restricted from dba_pdb_saved_states;

CON_NAME                       INSTANCE_NAME   STATE          RES
------------------------------ --------------- -------------- ---
DBHMG3                         cdb             OPEN           YES
DBHMG1                         cdb             OPEN           NO
DBHMG2                         cdb             OPEN READ ONLY NO


O retorno da DBA_PDB_SAVED_STATES representa o estado salvo de cada PDB, se um outro PDB existir e o mesmo não for listado significa que ele não possui nenhum estado salvo até o momento, desta forma, um restart do container resultaria no retorno dele ao estado default, MOUNT.

-- Forçando um restat do container

SQL> startup force
ORACLE instance started.

Total System Global Area  629145600 bytes
Fixed Size                  2927528 bytes
Variable Size             281019480 bytes
Database Buffers          339738624 bytes
Redo Buffers                5459968 bytes
Database mounted.
Database opened.

-- Verificando o estado corrente dos pluggable databases

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DBHMG1                         READ WRITE NO
         4 DBHMG2                         READ ONLY  NO
         5 DBHMG3                         READ WRITE YES


Com o restart do CBD, todos os pluggable databases voltaram ao seu estado salvo.

Sempre que o estado de um PDB for alterado e este precise ser persistido após um restart do container, execute um novo SAVE STATE, sem o SAVE STATE ele voltara ao antigo estado salvo.

-- Descartando o estado salvo de um pluggalbe database

SQL> alter pluggable database DBHMG3 discard state;

Pluggable database altered.

-- Verificando o estado salvo dos pluggable databases

SQL> select con_name, instance_name, state, restricted from dba_pdb_saved_states;

CON_NAME                       INSTANCE_NAME   STATE          RES
------------------------------ --------------- -------------- ---
DBHMG1                         cdb             OPEN           NO
DBHMG2                         cdb             OPEN READ ONLY NO

-- Forçando um restat do container

SQL> startup force
ORACLE instance started.

Total System Global Area  629145600 bytes
Fixed Size                  2927528 bytes
Variable Size             281019480 bytes
Database Buffers          339738624 bytes
Redo Buffers                5459968 bytes
Database mounted.
Database opened.

-- Verificando o estado corrente dos pluggable databases

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DBHMG1                         READ WRITE NO
         4 DBHMG2                         READ ONLY  NO
         5 DBHMG3                         MOUNTED


A mudança proporcionada através da feature pdb_save_or_discard_state, embora pequena, representa uma melhoria significativa no mecanismo de gerenciamento dos pluggable databases (PDBs) principalmente aos DBAs que possuem muitos pluggable databases para gerenciar abaixo de um único container database (CDB).

Referências:

https://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NEWFT514
https://docs.oracle.com/database/121/SQLRF/statements_2008.htm#CCHGJJHH
Mais informações →

terça-feira, 21 de março de 2017

Renomeando um Pluggable Database (PDB)

Para se renomear um database, seja non-CDB ou CDB (container database), utilitários como o NID (DBNEWID) ou a recriação do próprio controlfile ainda são válidas e totalmente funcionais, no entanto nenhum abrange o rename de um pluggable database (PDB).

Para se renomear um pluggable database, além de ser muito simples, nada além do próprio PDB precisa ficar indisponível.

Passo a passo de como renomear um pluggable databse (PDB):

Irei renomear o pluggable database DBHMG3 para DBHMG3NEW


SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DBHMG1                         READ WRITE NO
         4 DBHMG2                         MOUNTED
         5 DBHMG3                         READ WRITE NO

O nome de um database, non-CDB ou CDB (container) possui uma limitação de 9 caracteres, já um pluggable database possui uma limitação de 30 caracteres dando uma maior flexibilidade ao empregar um nome ao PDB.

1. Parando o pluggable database (PDB):

SQL> alter pluggable database DBHMG3 close immediate;

Pluggable database altered.



2. Iniciando o pluggable databse em modo restrito:

SQL> alter pluggable database DBHMG3 open restricted;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DBHMG1                         READ WRITE NO
         4 DBHMG2                         MOUNTED
         5 DBHMG3                         READ WRITE YES



3.  Renomeando o pluggable database:

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=DBHMG3;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
DBHMG3
SQL> alter pluggable database rename global_name to DBHMG3NEW;

Pluggable database altered.



4. Reiniciando o pluggable database:

SQL> alter session set container=CDB$ROOT;

Session altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DBHMG1                         READ WRITE NO
         4 DBHMG2                         MOUNTED
         5 DBHMG3NEW                      READ WRITE YES

SQL> alter pluggable database DBHMG3NEW close immediate;

Pluggable database altered.

SQL> alter pluggable database DBHMG3NEW open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DBHMG1                         READ WRITE NO
         4 DBHMG2                         MOUNTED
         5 DBHMG3NEW                      READ WRITE NO
Mais informações →

segunda-feira, 20 de março de 2017

Alterando senhas no Exadata Database Machine (Database Node, Cell Node, ILOM, KVM, Switches e PDU)

Com a globalização, passamos a viver em um mundo cada vez mais digital, redes sociais, comercio eletrônico e até computação nas nuvens passou a fazer parte do dia-a-dia de muitas pessoas.

É fatídico dizer que, quanto mais nos tornamos digitais mais nos tornamos vulneráveis. Ataques a grandes sistemas e empresas são exemplos atuais do que podemos dizer, frutos da globalização e agora internet das coisas (do inglês, Internet of Things).

Investir em segurança deixou de ser banal e cada vez mais se faz necessário estarmos seguros.

Muitos sistemas e equipamentos adquiridos no mercado possuem senhas padrões. No Exadata não é diferente, ele também é implementado com várias contas de usuários e senhas padrões. Estando ele na internet, com as senhas padrões, qual seria a probabilidade de não ser invadido em um tentativa de ataque?

É o mesmo que dizer que a senha bancária das pessoas correspondem ao seu próprio nome, desta forma, o que me impediria de acessar a conta alheia?


Abaixo temos os usuários e senhas padrões de vários componentes do Exadata Database Machine:

Componente
User Name
Password
Compute Nodes
root
oracle
grid
dbmadmin   (image 12.1.2.x.x ou acima)
dbmmonitor (image 12.1.2.x.x ou acima)
grub
root ILOM)
welcome1
welcome1
welcome1
welcome1
welcome1
sos1Exadata
welcome1
Cell Nodes
root
celladmin
cellmonitor
root (ILOM)
welcome1
welcome1
welcome1
welcome1
InfiniBand switches
root
nm2user
ilom-admin (ILOM)
ilom-operator (ILOM)
welcome1
changeme
ilom-admin
ilom-operator
Ethernet switches
admin
welcome1
Power distribution units (PDUs)
admin
root
welcome1
welcome1

NOTA: Nas PDUs o usuário/senha default, conforme Doc ID 1570252.1 também pode ser admin/admin para PDU firmware anterior a 1.05 e admin/adm1n para PDU firmware 1.06 e superior.

Como visto acima, "welcome1" faz um enorme sucesso como senha! Mas bem, veremos a seguir como alterar estas senhas.

  •         Componente: Database Node (compute node)


Estando conectado no database node, podemos alterar a senha com o comando "passwd" ou "passwd <username>", ou para tornar o trabalho mais rápido e prático, podemos utilizar o DCLI para alterar a senha em todos os database nodes de uma única vez.

Exemplo:

Alterando a senha do usuário oracle para H4rdPwd234 em todos os database nodes de uma única vez.


[root@dbnode1 ~]# dcli -g dbs_group -l root "echo H4rdPwd234 | passwd --stdin oracle"
170.10.0.10: Changing password for user oracle.
170.10.0.10: passwd: all authentication tokens updated successfully.
170.10.0.11: Changing password for user oracle.
170.10.0.11: passwd: all authentication tokens updated successfully.

O comando pode ser executado para qualquer conta a nível de sistema operacional.


Para outras contas padrões de instalação:


dcli -g dbs_group -l root "echo H4rdPwd234 | passwd --stdin oracle"
dcli -g dbs_group -l root "echo H4rdPwd234 | passwd --stdin grid"
dcli -g dbs_group -l root "echo H4rdPwd234 | passwd --stdin dbmadmin"

Podemos também atribuir diferentes senhas para cada usuário:


dcli -g dbs_group -l root "echo pWD4acc355 | passwd --stdin root"

Se ao executar o DCLI informar que o grupo não existe, basta criar um arquivo com o nome do grupo que você desejar (dbs_groups, cell_groups, dbs_cell_groups) e adicionar neste arquivo os ips dos servidores que você quer que façam parte dele.



[root@dbnode1 ~]# cat cell_group
170.10.0.12
170.10.0.13
170.10.0.14
[root@dbnode1 ~]# cat dbs_group
170.10.0.10
170.10.0.11

Pode ocorrer também problema por falta de equivalência (chave pública) entre os servidores.


Para testar se a equivalência do grupo está funcionando:


[root@dbnode1 ~]# dcli -g cell_group -l root 'hostname'
170.10.0.12: cellnode1
170.10.0.13: cellnode2
170.10.0.14: cellnode3

Caso ocorra erros informando a necessidade de password, basta executar o procedimento abaixo para criar a equivalência.


[root@dbnode1 ~]# dcli -g cell_group -l root -k
root@cellnode1's password:
root@cellnode2's password:
root@cellnode3's password:
cellnode1: ssh key added
cellnode2: ssh key added
cellnode3: ssh key added



  •        Componente: Cell node


Da mesma forma que nos compute nodes, nos cell nodes também podemos alterar a senha conectando em cada um deles e executando um "passwd" ou então, ainda conectado em um compute node, podemos usar o DCLI apenas ajustando o grupo para cell_group e alterar a senha de todos os cell nodes de uma única vez.

Exemplo:


[root@dbnode1 ~]# dcli -g cell_group -l root "echo H4rdPwd234 | passwd --stdin celladmin"
170.10.0.12: Changing password for user celladmin.
170.10.0.12: passwd: all authentication tokens updated successfully.
170.10.0.13: Changing password for user celladmin.
170.10.0.13: passwd: all authentication tokens updated successfully.
170.10.0.14: Changing password for user celladmin.
170.10.0.14: passwd: all authentication tokens updated successfully.
[root@dbnode1 ~]#

Para outras contas padrões de instalação:
dcli -g cell_group -l root "echo pWD4acc355 | passwd --stdin root" 
dcli -g cell_group -l root "echo H4rdPwd234 | passwd --stdin cellmonitor"

  • ·           Componente: ILOM

Para alterar a senha na ILOM (Integrated Lights Out Manager), além do DCLI que veremos mais abaixo, temos ainda a possibilidade de alterar a senha via interface web (https://<ilom_ip>)

No menu Navigation à ILOM Administration à User Managementà User Accounts à Escolha o usuário à Edit à Altere a senha à Save.



OBS: Dependendo da versão da ILOM, o layout da página pode ser diferente tanto quanto o local de ajuste da senha.

Para alterar conectado na ILOM via command-line:


-> set /SP/users/root password

E finalmente a partir do DCLI que permite alterar facilmente em todos os dbnodes e cellnodes.

[root@dbnode1 ~]# dcli -g dbs_group -l root " ipmitool sunoem cli 'set /SP/users/root password=pWD4acc355' pWD4acc355 "
170.10.0.10: Connected. Use ^D to exit.
170.10.0.10: -> set /SP/users/root password=pWD4acc355
170.10.0.10: Changing password for user /SP/users/root...
170.10.0.10: Enter new password again: ***********
170.10.0.10: New password was successfully set for user /SP/users/root
170.10.0.10:
170.10.0.10: -> Session closed
170.10.0.10: Disconnected
170.10.0.11: Connected. Use ^D to exit.
170.10.0.11: -> set /SP/users/root password=pWD4acc355
170.10.0.11: Changing password for user /SP/users/root...
170.10.0.11: Enter new password again: ***********
170.10.0.11: New password was successfully set for user /SP/users/root
170.10.0.11:
170.10.0.11: -> Session closed
170.10.0.11: Disconnected

[root@dbnode1 ~]# dcli -g cell_group -l root " ipmitool sunoem cli 'set /SP/users/root password=pWD4acc355' pWD4acc355 "
170.10.0.12: Connected. Use ^D to exit.
170.10.0.12: -> set /SP/users/root password=pWD4acc355
170.10.0.12: Changing password for user /SP/users/root...
170.10.0.12: Enter new password again: ***********
170.10.0.12: New password was successfully set for user /SP/users/root
170.10.0.12:
170.10.0.12: -> Session closed
170.10.0.12: Disconnected
170.10.0.13: Connected. Use ^D to exit.
170.10.0.13: -> set /SP/users/root password=pWD4acc355
170.10.0.13: Changing password for user /SP/users/root...
170.10.0.13: Enter new password again: ***********
170.10.0.13: New password was successfully set for user /SP/users/root
170.10.0.13:
170.10.0.13: -> Session closed
170.10.0.13: Disconnected
170.10.0.14: Connected. Use ^D to exit.
170.10.0.14: -> set /SP/users/root password=pWD4acc355
170.10.0.14: Changing password for user /SP/users/root...
170.10.0.14: Enter new password again: ***********
170.10.0.14: New password was successfully set for user /SP/users/root
170.10.0.14:
170.10.0.14: -> Session closed
170.10.0.14: Disconnected

  •         Componente: KVM
Para alterar a senha do KVM (Keyboard, Vídeo, Mouse) siga conforme os procedimentos abaixo:

1.       Puxe a bandeja KVM para fora (localizado na frente do rack), abra-a usando a alça;

2.       Toque no touch pad;

3.       Alterne entre o host e a interface KVM pressionando a tecla CTRL no lado esquerdo duas vezes;

4.       Selecione "local" em User Accounts;

5.       Clique em Admin;

6.       Defina a senha para a conta administrador e Salve.


  •           Componente: PDU

Acesse a interface web da PDU e clique sobre "Net Configuration", será solicitado usuário e senha.


Conforme supracitado, na PDU o usuário/senha também pode ser admin/admin ou admin/adm1n dependendo da verão do firmware.

Estando conectado, role página até encontrar "Admin/User"


Altere a senha e clique em "Submit"

  •                     Componente: Infiniband Switch

Conectando na IB via ssh, verifique a versão do firmware.



[root@sw-iba01 ~]# version
SUN DCS 36p version: 2.1.5-1

Estando na versão 1.3.* use a ILOM para alterar a senha para evitar o bug 13494021


ssh -l ilom-admin 

set /SP/users/ password

Para versões 2.0.3 e superiores:

1.       Conectado no SO usar o "passwd <username>" (com exceção da conta ilom_admin que é necessário conectar na ILOM para realizar a alteração "set /SP/users/ilom-admin password")

2.        Usar o DCLI para alterar a senha em todos os Switches da Infiniband (IB)

a)      Verifique a equivalência com os switches


dcli -g ibswitch_group -l root "hostname"

Caso o grupo "ibswitch_group" não exista, basta criar o arquivo contendo o IP dos IB switches

Crie a equivalência:



[root@dbnode1 ~]# dcli -g ibswitch_group -l root -k
root@170.10.0.22's password:
root@170.10.0.21's password:
170.10.0.21: ssh key added
170.10.0.22: ssh key added
[root@dbnode1 ~]# dcli -g ibswitch_group -l root "hostname"
170.10.0.21: sw-iba01
170.10.0.22: sw-ibb01

b)      Altere a senha em todos os switches da IB de uma única vez via DCLI


[root@dbnode1 ~]# dcli -g ibswitch_group -l root -k
root@170.10.0.22's password:
root@170.10.0.21's password:
170.10.0.21: ssh key added
170.10.0.22: ssh key added
[root@dbnode1 ~]# dcli -g ibswitch_group -l root "hostname"
170.10.0.21: sw-iba01
170.10.0.22: sw-ibb01

Referências:
How to change OS user password for Cell Node, Database Node , ILOM, KVM , Infiniband Switch , GigaBit Ethernet Switch and PDU on Exadata Database Machine (Doc ID 1291766.1)


PDU default password changed after firmware 1.06 and above on Sun Rack II platforms and Engineered Systems (Doc ID 1570252.1)
Mais informações →

segunda-feira, 6 de março de 2017

segunda-feira, 20 de fevereiro de 2017

Carregando SQL Plans na SPM utilizando o AWR

A alteração do plano de execução de qualquer instrução sql pode ser desencadeada por uma variedade de ações e mudanças, desde a coleta de estatísticas (tabela, índice, schema, etc), mudanças de parâmetros, definição do objeto, criação ou remoção de índices, entre outros. 

Uma solução muito útil para este problema de desempenho resultante da mudança de plano de execução tem sido o SPM (SQL Plan Management).

O SPM foi introduzido na versão 11g cujo proposito é "impedir regressões de desempenho resultantes de mudanças súbitas no plano de execução de uma instrução SQL, fornecendo componentes para capturar, selecionar e desenvolver informações de plano SQL."

Este mecanismo cria uma SQL Plan Baseline, que é um conjunto de planos aceitos para uma instrução SQL.

Os SQL Plan Baselines podem ser carregados de varias formas:

  1. A partir do cursor cache (shared sql area);
  2. Utilizando SQL Tuning Set (STS);
  3. Export e Import usando "Staging table";
  4. Automaticamente.
Veremos mais abaixo como carregar um plano "bom" que não esta mais na shared sql area (cursor cache) mas ainda está presente no AWR.


Neste caso tenho a instrução sql (sql_id = 91jcabsgk4ydx) com problemas de performance pois um plano ruim está sendo selecionado.

Buscando pelos planos atuais deste sql_id temos apenas o plano de hash 1491429885, que no caso é o plano de execução ruim.


SQL> select distinct plan_hash_value from gv$sql where sql_id='91jcabsgk4ydx';

PLAN_HASH_VALUE
---------------
     1491429885

Pesquisando no AWR encontrei outros planos para esta mesma instrução sql, neste caso o plano de hash 1748113394 é o plano "bom".


SQL> select distinct plan_hash_value from dba_hist_sqlstat where sql_id='91jcabsgk4ydx';

PLAN_HASH_VALUE
---------------
     1748113394
     1491429885

Mais a frente irei especificar um conjunto de snapshots onde será buscado e carregado o plano de execução para dentro da STS, desta forma, abaixo já coletei o intervalo de snapshots onde o plano desejado está presente.

SQL> select min(snap_id), max(snap_id), plan_hash_value from dba_hist_sqlstat where sql_id='91jcabsgk4ydx' group by plan_hash_value ;

MIN(SNAP_ID) MAX(SNAP_ID) PLAN_HASH_VALUE
------------ ------------ ---------------
       14912        15006      1748113394
       14895        15008      1491429885

Criando um STS (SQL Tuning Set):

exec dbms_sqltune.create_sqlset(sqlset_name => '91jcabsgk4ydx_load_plan',description => 'load plan');

PL/SQL procedure successfully completed.

Populando STS com os planos do AWR:

declare
cur sys_refcursor;
begin
open cur for
select VALUE(p) from table(
DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(begin_snap=> 14912, end_snap => 15006, basic_filter =>'sql_id = ''91jcabsgk4ydx''', attribute_list=>'ALL')) p;
DBMS_SQLTUNE.LOAD_SQLSET( sqlset_name => '91jcabsgk4ydx_load_plan', populate_cursor=>cur);
close cur;
end;
/

PL/SQL procedure successfully completed.

Nos parâmetros begin_snap e end_snap insira os dados retornados no comando anterior de min/max snap_id. Na coluna basic_filter é a condição de "pesquisa"/filtro, ou seja, foi inserido sql_id = 91jcabsgk4ydx para capturar todos os planos relacionados a este sql_id.

A coluna attribute_list representa os atributos de retorno os valores possíveis são:

BASIC: todos os atributos (como estatísticas de execução e binds) são retornados, exceto os planos. O contexto de execução é sempre parte do resultado.

TYPICAL: BASIC + SQL plan (sem estatísticas de origem de linha) e sem lista de referência de objeto (padrão).

ALL: todos os atributos, sem excessão.

Lista de nomes de atributos separados por vírgulas, isto permite retornar apenas um subconjunto de atributos SQL: EXECUTION_STATISTICS, SQL_BINDS, SQL_PLAN_STATISTICS

OBS: Caso queria carregar todos os sqls capturados no AWR basta inserir NULL em basic_filter.

Detalhes do STS:


SQL> SELECT NAME,OWNER,CREATED,STATEMENT_COUNT FROM DBA_SQLSET where name='91jcabsgk4ydx_load_plan';

NAME                           OWNER                          CREATED   STATEMENT_COUNT
------------------------------ ------------------------------ --------- ---------------
91jcabsgk4ydx_load_plan        SYS                            17-FEB-17               1

Para verificar os planos do SQL_ID carregados na STS:

SQL> select * from table(dbms_xplan.display_sqlset('91jcabsgk4ydx_load_plan','91jcabsgk4ydx'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL Tuning Set Name: 91jcabsgk4ydx_load_plan
SQL Tuning Set Owner: SYS
SQL_ID: 91jcabsgk4ydx
SQL Text: 
   [...]
--------------------------------------------------------------------------------

Plan hash value: 203381466

----------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                      |       |       |     5 (100)|          |
|   1 |  SORT GROUP BY                    |                      |     1 |   231 |     5  (20)| 00:00:01 |
|   2 |   FILTER                          |                      |       |       |            |          |
|   3 |    NESTED LOOPS                   |                      |     1 |   231 |     4   (0)| 00:00:01 |
|   4 |     NESTED LOOPS                  |                      |     2 |   231 |     4   (0)| 00:00:01 |
|   5 |      NESTED LOOPS                 |                      |     1 |   156 |     3   (0)| 00:00:01 |
|   6 |       NESTED LOOPS                |                      |     1 |   105 |     2   (0)| 00:00:01 |
|   7 |        TABLE ACCESS BY INDEX ROWID| TAB1                 |     2 |   118 |     1   (0)| 00:00:01 |
|   8 |         INDEX RANGE SCAN          | TAB1_IDX1            |   158 |       |     1   (0)| 00:00:01 |
|   9 |        TABLE ACCESS BY INDEX ROWID| TAB2                 |     1 |    46 |     1   (0)| 00:00:01 |
|  10 |         INDEX UNIQUE SCAN         | TAB2_IDX1            |     1 |       |     1   (0)| 00:00:01 |
|  11 |       TABLE ACCESS BY INDEX ROWID | TAB3                 |     1 |    51 |     1   (0)| 00:00:01 |
|  12 |        INDEX UNIQUE SCAN          | TAB3_PK              |     1 |       |     1   (0)| 00:00:01 |
|  13 |      INDEX RANGE SCAN             | TAB4                 |     2 |       |     1   (0)| 00:00:01 |
|  14 |     TABLE ACCESS BY INDEX ROWID   | TAB4_IDX1            |     1 |    75 |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------

Plan hash value: 1748113394

----------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                      |       |       |     6 (100)|          |
|   1 |  SORT GROUP BY                    |                      |     1 |   232 |     6  (34)| 00:00:01 |
|   2 |   FILTER                          |                      |       |       |            |          |
|   3 |    NESTED LOOPS                   |                      |     1 |   232 |     4   (0)| 00:00:01 |
|   4 |     NESTED LOOPS                  |                      |     2 |   232 |     4   (0)| 00:00:01 |
|   5 |      NESTED LOOPS                 |                      |     1 |   157 |     3   (0)| 00:00:01 |
|   6 |       NESTED LOOPS                |                      |     1 |   105 |     2   (0)| 00:00:01 |
|   7 |        TABLE ACCESS BY INDEX ROWID| TAB2                 |     1 |    46 |     1   (0)| 00:00:01 |
|   8 |         INDEX RANGE SCAN          | TAB2_IDX2            |     1 |       |     1   (0)| 00:00:01 |
|   9 |        TABLE ACCESS BY INDEX ROWID| TAB1                 |     1 |    59 |     1   (0)| 00:00:01 |
|  10 |         INDEX RANGE SCAN          | TAB1_IDX2            |     1 |       |     1   (0)| 00:00:01 |
|  11 |       TABLE ACCESS BY INDEX ROWID | TAB3                 |     1 |    52 |     1   (0)| 00:00:01 |
|  12 |        INDEX UNIQUE SCAN          | TAB3_PK              |     1 |       |     1   (0)| 00:00:01 |
|  13 |      INDEX RANGE SCAN             | TAB4                 |     2 |       |     1   (0)| 00:00:01 |
|  14 |     TABLE ACCESS BY INDEX ROWID   | TAB4_IDX1            |     1 |    75 |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------


108 rows selected.

SQL>

A partir dos planos acima, confirmei que a considerada "boa" é a do plano hash = 1748113394

Criando o SQL Baseline a partir do STS deixando o novo plano (1748113394) habilitado e fixado:


set serveroutput on
declare
my_int pls_integer;
begin
my_int := dbms_spm.load_plans_from_sqlset (
sqlset_name => '91jcabsgk4ydx_load_plan',
basic_filter => 'plan_hash_value=''1748113394''',
sqlset_owner => 'SYS',
fixed => 'YES',
enabled => 'YES');
DBMS_OUTPUT.PUT_line(my_int);
end;
/

PL/SQL procedure successfully completed.

A partir de agora quando a instrução SQL for executada o SPB criado será utilizado para forçar o novo plano.

Verificando a instrução em cursor cache podemos observar que já consta na Note: - SQL plan baseline SQL_PLAN_2qz5a7x8r3ppzbd69646e used for this statement


SQL> select * from table (dbms_xplan.display_cursor('91jcabsgk4ydx', 0));

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  91jcabsgk4ydx, child number 0
-------------------------------------

[...]

Plan hash value: 1748113394

----------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                      |       |       |     6 (100)|          |
|   1 |  SORT GROUP BY                    |                      |     1 |   232 |     6  (34)| 00:00:01 |
|   2 |   FILTER                          |                      |       |       |            |          |
|   3 |    NESTED LOOPS                   |                      |     1 |   232 |     4   (0)| 00:00:01 |
|   4 |     NESTED LOOPS                  |                      |     2 |   232 |     4   (0)| 00:00:01 |
|   5 |      NESTED LOOPS                 |                      |     1 |   157 |     3   (0)| 00:00:01 |
|   6 |       NESTED LOOPS                |                      |     1 |   105 |     2   (0)| 00:00:01 |
|   7 |        TABLE ACCESS BY INDEX ROWID| TAB2                 |     1 |    46 |     1   (0)| 00:00:01 |
|   8 |         INDEX RANGE SCAN          | TAB2_IDX2            |     1 |       |     1   (0)| 00:00:01 |
|   9 |        TABLE ACCESS BY INDEX ROWID| TAB1                 |     1 |    59 |     1   (0)| 00:00:01 |
|  10 |         INDEX RANGE SCAN          | TAB1_IDX2            |     1 |       |     1   (0)| 00:00:01 |
|  11 |       TABLE ACCESS BY INDEX ROWID | TAB3                 |     1 |    52 |     1   (0)| 00:00:01 |
|  12 |        INDEX UNIQUE SCAN          | TAB3_PK              |     1 |       |     1   (0)| 00:00:01 |
|  13 |      INDEX RANGE SCAN             | TAB4                 |     2 |       |     1   (0)| 00:00:01 |
|  14 |     TABLE ACCESS BY INDEX ROWID   | TAB4_IDX1            |     1 |    75 |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

[...]

Note
-----
   - SQL plan baseline SQL_PLAN_2qz5a7x8r3ppzbd69646e used for this statement


70 rows selected.

Referências:

http://docs.oracle.com/cd/E25178_01/server.1111/e16638/optplanmgmt.htm
https://aprakash.wordpress.com/2012/07/05/loading-sql-plan-into-spm-using-awr/

Mais informações →

quarta-feira, 1 de fevereiro de 2017

System Statistics – modo “Exadata”

Adicionado nas estatísticas de sistema, temos agora o modo "Exadata". Seu objetivo é auxiliar com maior eficiência a coleta de informações sobre o sistema de armazenamento na plataforma Exadata. 

Não coletar as estatísticas de sistema específica para Exadata pode levar a planos otimizadores menos eficientes. 

Para verificar se a estatística já foi coletada alguma vez, execute:

SQL> select pname, PVAL1 from aux_stats$ where pname='MBRC';

PNAME                               PVAL1
------------------------------ ----------
MBRC

Estando o retorno do PVAL1 nulo, as estatísticas especificas do Exadata ainda não foram coletadas.

Para coletar as estatísticas especificas para Exadata:

SQL> exec dbms_stats.gather_system_stats('EXADATA');

PL/SQL procedure successfully completed.
Agora:
SQL> SELECT PNAME, PVAL1 FROM SYS.AUX_STATS$ WHERE SNAME = 'SYSSTATS_MAIN';

PNAME                               PVAL1
------------------------------ ----------
CPUSPEED
CPUSPEEDNW                           2918
IOSEEKTIM                               7
IOTFRSPEED                           4096
MAXTHR
MBRC                                  128
MREADTIM
SLAVETHR
SREADTIM

9 rows selected.

Machine type:     X2-2(4170), X2-2, X2-8, X3-2, X3-8, X4-2
Exadata version: 11.2.x +
Oracle version:   Pelo menos 11.2.0.2 BP18 ou 11.2.0.3 BP8

Referência: 
Oracle Sun Database Machine Setup/Configuration Best Practices [ID 1274318.1]
Mais informações →
Postagens mais antigas Página inicial

Translate

#Oracle

#Oracle
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.

#Blog reconhecido

Marcadores

Postagens populares