Friday, March 12, 2010

oradiag_oracle - Oracle 11gR2 - Disabling the Automatic Diagnost

Voltei aqui!

Fazendo a limpeza do filesystem de um  servidor Oracle me deparei coma seguinte situação :

[oracle@myserver oracle]$ du -sch *
360M admin
5.8M cfgtoollogs
8.0K checkpoints
1.2G diag
988K import_ONLINE.log
16K oraarch
8.9G oradiag_oracle
4.5G product
15G total
[oracle@amhston1 oracle]$ 



8.9 GB de arquivos sendo que a maioria são arquivos de TRACE.

.../oradiag_oracle/diag/clients/user_oracle/host_919093865_76
[oracle@myserver host_919093865_76]$ du -sch *
2.3M alert
8.0K cdump
8.0K incident
8.0K incpkg
24K lck
296K metadata
8.0K stage
8.0K sweep
8.9G trace
8.9G total


Porcurando no metalink,já que no 11gR2 muitas coisas mudaram,me deparei com a nota 
ID 454927.1 .

Vamos executar os passos sugeridos na nota para desabilitar estes traces,já que estou com pouco espaço no flesystem.

adrci

ADRCI: Release 11.2.0.1.0 - Production on Fri Mar 12 11:00:19 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/opt/oracle/oradiag_oracle"
adrci> show base -product client
ADR base is "/opt/oracle/oradiag_oracle"
adrci>  set base /opt/oracle/oradiag_oracle
adrci> exit


Vendo o trace file :

 more /opt/oracle/oradiag_oracle/diag/clients/user_oracle/host_919093865_76/trace/ora_13830_47831278068960.trc
Trace file /opt/oracle/oradiag_oracle/diag/clients/user_oracle/host_919093865_76/trace/ora_13830_47831278068960.trc
2010-03-11 15:40:09.488543 : --- TRACE CONFIGURATION INFORMATION FOLLOWS ---
2010-03-11 15:40:09.490799 : New trace stream is /opt/oracle/oradiag_oracle/diag/clients/user_oracle/host_919093865_76/trace/ora_13830_47831278068960.trc
2010-03-11 15:40:09.490827 : New trace level is 16
2010-03-11 15:40:09.490842 : --- TRACE CONFIGURATION INFORMATION ENDS ---
2010-03-11 15:40:09.490862 : --- PARAMETER SOURCE INFORMATION FOLLOWS ---
2010-03-11 15:40:09.490881 : Attempted load of system pfile source /opt/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
2010-03-11 15:40:09.490895 : Parameter source loaded successfully
2010-03-11 15:40:09.490910 : 
2010-03-11 15:40:09.490924 : Attempted load of local pfile source /home/oracle/.sqlnet.ora
2010-03-11 15:40:09.490937 : Parameter source was not loaded
2010-03-11 15:40:09.490950 : 
2010-03-11 15:40:09.490963 :  -> PARAMETER TABLE LOAD RESULTS FOLLOW <-
2010-03-11 15:40:09.490992 : Successful parameter table load
2010-03-11 15:40:09.491010 :  -> PARAMETER TABLE HAS THE FOLLOWING CONTENTS <-
2010-03-11 15:40:09.491029 :   CE_UNIQUE_CLIENT = ON
2010-03-11 15:40:09.491044 :   ADR_BASE = /opt/oracle
2010-03-11 15:40:09.491057 :   NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
2010-03-11 15:40:09.491071 :   TRACE_DIRECTORY_CLIENT = /home/oracle/temp
2010-03-11 15:40:09.491084 :   TRACE_TIMESTAMP_CLIENT = ON
2010-03-11 15:40:09.491097 :   TRACE_LEVEL_CLIENT = 16
2010-03-11 15:40:09.491110 :   TRACE_FILE_CLIENT = SQLNetTrace
2010-03-11 15:40:09.491123 : --- PARAMETER SOURCE INFORMATION ENDS ---
2010-03-11 15:40:09.491139 : --- LOG CONFIGURATION INFORMATION FOLLOWS ---
2010-03-11 15:40:09.491180 : Log stream will be "/opt/oracle/oradiag_oracle/diag/clients/user_oracle/host_919093865_76/alert/log.xml"
2010-03-11 15:40:09.491199 : Log stream validation not requested
2010-03-11 15:40:09.491213 : --- LOG CONFIGURATION INFORMATION ENDS ---

Tem a possibilidade de fazer um purge dos arquivos.
Neste caso fiz assim :

[oracle@myserver oradiag_oracle]$ adrci

ADRCI: Release 11.2.0.1.0 - Production on Fri Mar 12 12:55:48 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/opt/oracle/oradiag_oracle"
adrci> purge -age 10 -type trace
adrci> exit
[oracle@myserver oradiag_oracle]$ cd diag/clients/user_oracle/host_919093865_76/
[oracle@myserver host_919093865_76]$ du -sch *
2.3M alert
8.0K cdump
8.0K incident
8.0K incpkg
24K lck
296K metadata
8.0K stage
8.0K sweep
4.3M trace
6.9M total
[oracle@amhston1 host_919093865_76]$ 


Ou  no sqlnet.ora do client e inserindo o parametro DIAG_ADR__ENABLED=OFF .

Doc para help :

http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/trouble.htm#NETAG1524
 
Abs,

Julio Cesar Correa

Wednesday, February 24, 2010

Upgrade to Oracle 11gr2 - Para quem não sabe por onde começar

Abaixo uma figura que ilustra os simples passos para o processo de upgrade!
Esta é uma das tarefas mais delicadas,pois envolverá o seu ambiente de produção.

Esqueça ir direto para o passo 5 please!
So , take easy e take care with your  database !


Abaixo o link da documentação(em .pdf) do Oracle Database 11gr2 que fala sobre o processo de migração de uma versão anterior para o 11gr2,mais conhecido como upgrade kk.

http://download.oracle.com/docs/cd/E11882_01/server.112/e10819.pdf

Tem um post ótimo sobre isso do meu amigo Eduardo Legatti  aqui .

Att,

Júlio César Corrêa

Oracle SQL - Usando MERGE e error log

Já encontrei muitos códigos SQL onde se poderia usar o comando MERGE para resolver o problema.

Sintaxe do comando MERGE:

MERGE <hint> INTO <table_name>
USING <table_view_or_query>
ON (<condition>)
WHEN MATCHED THEN <update_clause>
DELETE <where_clause>
WHEN NOT MATCHED THEN <insert_clause>
[LOG ERRORS <log_errors_clause> <reject limit <integer | unlimited>];


O MERGE normalmente é usado nas situações em que já se tem uma tabela populada(alvo) e necessita inserir os registros da tabela origem que ainda não se encontram na tabela alvo.
Digamos que sua tabela alvo foi atualizada semana passada.Então hoje você resolve fazer um MERGE entre as linhas para caso tenha ocorrido alteração na tabela origem que esta seja propagada/efetuada na tabela alvo via UPDATE .

O interessante então no MERGE são as opções WHEN MATCHED THEN usando INSERT ou UPDATE.E também a cláusula DELETE .

Vamos fazer um exemplo de merge usando a tabela PRODUCTS do schema OE.


dbajcc@DBPOST on 24-FEB-10 >desc  oe.products;
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 PRODUCT_ID                                            NOT NULL NUMBER(6)
 LANGUAGE_ID                                                    VARCHAR2(3)
 PRODUCT_NAME                                                   NVARCHAR2(125)
 CATEGORY_ID                                                    NUMBER(2)
 PRODUCT_DESCRIPTION                                            NVARCHAR2(2000)
 WEIGHT_CLASS                                                   NUMBER(1)
 WARRANTY_PERIOD                                                INTERVAL YEAR(2) TO MONTH
 SUPPLIER_ID                                                    NUMBER(6)
 PRODUCT_STATUS                                                 VARCHAR2(20)
 LIST_PRICE                                                     NUMBER(8,2)
 MIN_PRICE                                                      NUMBER(8,2)
 CATALOG_URL                                                    VARCHAR2(50)

dbajcc@DBPOST on 24-FEB-10 >select count(*) from oe.products;

  COUNT(*)
----------
       288

Elapsed: 00:00:00.01
dbajcc@DBPOST on 24-FEB-10 >


Vamos criar uma tabela cópia da tabela oe.products mas no schema dbajcc

dbajcc@DBPOST on 24-FEB-10 >create table jcc_products
  2   as select * from oe.products where rownum=0 ;

Table created.

Elapsed: 00:00:01.57
dbajcc@DBPOST on 24-FEB-10 >

Vamos inserir exatamente 100 linhas nesta nova tabela,lembrando que na tabela oe.products há 288 linhas :

dbajcc@DBPOST on 24-FEB-10 >
dbajcc@DBPOST on 24-FEB-10 >insert into jcc_products
  2  select * from oe.products
  3  where rownum < 101 ;

100 rows created.

Elapsed: 00:00:00.20
dbajcc@DBPOST on 24-FEB-10 >commit ;

Commit complete.

Elapsed: 00:00:00.01
dbajcc@DBPOST on 24-FEB-10 >

Agora vamos usar o MERGE para inserir os outros 188 registros .

Vamos usar a package DBMS_ERRLOG para criar uma tabela de captura de erros:

dbajcc@DBPOST on 24-FEB-10 >EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('jcc_products', 'jcc_products_log');

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.30
dbajcc@DBPOST on 24-FEB-10 >

Usando o Merge:

dbajcc@DBPOST on 24-FEB-10 >
dbajcc@DBPOST on 24-FEB-10 >merge into jcc_products jp
  2  using oe.products p
on (jp.product_id = p.product_id)
when not matched then insert
  3    4    5  ( jp.language_id,
jp.product_name,
jp.category_id,
jp.product_description,
jp.weight_class,
jp.warranty_period,
jp.supplier_id,
jp.product_status,
jp.list_price,
jp.min_price ,
jp.catalog_url
)
values
( p.language_id,
 p.product_name,
 p.category_id,
 p.product_description,
 p.weight_class,
 p.warranty_period,
 p.supplier_id,
 p.product_status,
 p.list_price,
 p.min_price ,
  6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   p.catalog_url                             
 ); 29

188 rows merged.

Elapsed: 00:00:00.13
dbajcc@DBPOST on 24-FEB-10 >commit ;

Commit complete.

Elapsed: 00:00:00.01
dbajcc@DBPOST on 24-FEB-10 >
dbajcc@DBPOST on 24-FEB-10 >SELECT ORA_ERR_MESG$, ORA_ERR_TAG$ from  jcc_products_log ;

no rows selected

Elapsed: 00:00:00.00
dbajcc@DBPOST on 24-FEB-10 >


Principalmente para quem trabalha com ETL o MERGE é essencial !