quinta-feira, 30 de julho de 2009

Acessando planilhas do excel através do Oracle

Minha cabeça expludiu, rs, perdi algumas horinhas pra achar um jeito de popular algumas tabelas com dados dentro de planilhas do excel, sem ter a necessidade de qualquer modificação no xls ou usar algum software de terceiros. A solução encontrada foi: Conectar na planilha através de um dblink, configurado pelo com listener através de fontes de dados ODBC.
OBS - Conexões Oracle/Terceiros é chamada de Generic Heterogeneous Services.

Muito simples de ser feito, envove as seguintes etapas:

  1. Criar o odbc pra planilha;
  2. Configurar o listener/tnsnames.
  3. Configurar o parametro HS_FDS_CONNECT_INFO em $ORACLE_HOME/hs/admin/initXXX.ora.
  4. Reload do listener.
  5. Criar o DB link.
1) Criar o odbc:



2) Configurar o listener/tnsnames

OBS - As modificações necessárias estão em negrito.

tnsnames.ora:


XE =

(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dhnomura)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)


testing_hs = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dhnomura)(PORT = 1521)) ) (CONNECT_DATA =(SID = testing_hs) (SRVR = DEDICATED) ) (HS = OK) )





listener.ora:

SID_LIST_LISTENER =

(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = c:\oraclexe\app\oracle\product\10.2.0\server\)
(PROGRAM = extproc)
)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC = (SID_NAME = testing_hs) (ORACLE_HOME =c:\oraclexe\app\oracle\product\10.2.0\server\) (PROGRAM = hsodbc) )
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
(ADDRESS = (PROTOCOL = TCP)(HOST = dhnomura)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)




3) Configurar o parametro HS_FDS_CONNECT_INFO em $ORACLE_HOME/hs/admin/initXXX.ora.

Se torna necessário criar o arquivo $ORACLE_HOME/hs/admin/intiXXX.ora substituindo os xxx do nome pelo nome dado nos tnsnames.ora e listener.ora no sid_name, no caso ficará como:

$ORACLE_HOME/hs/admin/inittesting_hs.ora

Adicionar as entradas no arquivo:


# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent.
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = ts
HS_FDS_TRACE_LEVEL = 0
#
# Environment variables required for the non-Oracle system
#
#set =


OBS - HS_FDS_CONNECT_INFO é igual ao nome dado a fonte de dados ODBC.

4) Reload ou stop/start do lister.



LSNRCTL> reload
Estabelecendo conexπo com (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_X
E)))
O comando foi executado com Ωxito


5) Criar os db link:



SQL> create database link excel using 'testing_hs’;

Database link created.




Agora como teste final acessar os dados da planilha:

SQL> select count(*) from Planilha1$@excel;

COUNT(*)
----------
664



Obs - Planilha1 é o nome da planilha e não o nome do arquivo em sí.

quarta-feira, 8 de julho de 2009

Upgrading to Oracle 11g

E ae!!!!!

Resolvi atualizar a versão do Oracle da minha maquina de estudo, meu ambiente resume-se em:

SO: Centos 4.4
Database: Oracle 10g
Instances: +ASM - Gerenciamento de discos
orcl - Estudo

Passerei ambas as bases para a versão 11g através de scripts. É possivel realizar o upgrade pelo DBUA (o que é o recomendavel) ou através do datapump.

Assim seguiremos o passo-a-passo para um upgrade bem sucessido, irei realizar da seguinte forma:

1) Pre Checks
1.1) Pre check OS;
1.2)
Backup full consistente de toda a base, incluindo controlfile e spfile;

2) Upgrade
2.1) Instalação do software 11g;
2.2) Upgrade do CSS;
2.3) Upgrade da instancia do ASM;
2.4) Upgrade da base de dados, orcl;

3) Pos Upgrade

3.1) Base de dados, orc
3.1.1)
Backup full consistente de toda a base, incluindo controlfile e spfile;
3.1.2) Criação do spfile;
3.1.3) Parametros;
3.1.4) OraPWD;
3.1.5) Configurar o threshold de alerta das tablespaces;
3.1.6) Configurar o Enterprise Manager;

3.2) Discos, ASM instance
3.2.1) Configurar


1)
Pre checks

1.1) Pre check OS

Deve ser verificado durante essa fase parametros do kernel e packages instaladas, caso alguns desses itens esteja incorreto o Oracle irá apresentar um warning durante a instalação e podemos nesse momento ou devemos configura-los da maneira correta.

1.2) Backup full consistente

Não vou entrar em detalhes de como deve ser realizado este backup, fica a critério do DBA. No
meu caso prefiro realizar pelo rman, o importante é saber fazer o restore caso seja necessário.

2) Upgrade

2.1) Instalar o Software do Oracle 11g

Após realizar o download do software da Oracle e descompacta-lo inciar o instalador:
Seguir no diretório e executar o runInstaller como a seguir
[oracle@hobd001dhn database]$ ./runInstaller
Durante o processo de instalação será necessário informar o novo home do Oracle, que no
meu caso será em: /u01/app/oracle/app/oracle/product/11.1.0/db_1

Link para o download: http://www.oracle.com/technology/software/products/database/index.html

A seguir temos as telas para completar a instalação, muito intuitiva a instalação. No meu caso não quero um banco novo e sim fazer o upgrade dos demais, portanto vou realizar a instalação avançada.














2.2) Upgrade do CSS;

O oracle Synchronization Services é um daemon que é instalado pelo root, iniciado a cada boot e é responsável pela comunicação entre a instancia do ASM e as demais bases de dados.
Para atualizar o CSS realizaremos da seguinte forma:

1) Stop de todas as instancias;
2) executar como root
./u01/app/oracle/app/oracle/product/11.1.0/db_1/bin/localconfig reset

2.2) Upgrade do ASM;

Resolvi realizar o upgrade do ASM pelo DBUA, pois achei mais fácil, e também não tenho o procedimento para realizar manualmente.
Devemos com as bases paradas e com as váriaveis de ambiente devidamente configuradas para o novo home do Oracle, PATH, ORACLE_HOME e ORACLE_SID chamar o dbau, e seguir o procedimento:








Ps - Eu não fiz o print nessas duas utimas telas então fui obrigado a busca-la em outro lugar, por isso a divergencia nos nomes do Oracle_home.

2.4) Upgrade da base de dados, orcl;

Antes de realizar o upgrade é necessário realizar um pre-check do database, para tal, utilizar o caminho do ORACLE_HOME da nova instalação e chamar o script ?/rdbms/admin/
utlu111i.sql.
No meu caso utilizava a versão 10.2.0.1, foi necessário realizar upgrade nos arquivos de timezone, realizei os steps para isso de acordo com o site http://advait.wordpress.com/2007/09/07/upgrading-to-oracle-database-11g/ onde segui o guia para aplicar o patch do oracle e atualizar a versão dos arquivos do timezone.

Após o realizar o pre-check de upgrade, e não apresentar mais erros já é possivel realizar o upgrade.

Para realizar o upgrade é necessário modificar alguns parametros, no meu caso foi necessário alterar os parametros: COMPATIBLE='11.1.0' e diagnostic_dest='/u01/app/oracle/diag/rdbms/orcl/orcl/trace'

No caso diagnostic_dest é um novo parametro o qual substitui o user_dump e background_dump_dest.

Com o novo init feito e no seu devido diretório ?/dbs/initorcl.ora parar o banco de dados e realizar o upgrade:

startup upgrade pfile='?/dbs/initorcl.ora';
@?/rdbms/admin/catupgrd.sql

Após o termino do upgrade realizar a validação do upgrade:
@?/rdbms/admin/utlu111s.sql

Oracle Database 11.1 Post-Upgrade Status Tool 07-19-2009 20:24:06
.
Component Status Version HH:MM:SS
.
Oracle Server
. VALID 11.1.0.6.0 01:54:20
JServer JAVA Virtual Machine
. VALID 11.1.0.6.0 00:00:00
Oracle Workspace Manager
. VALID 11.1.0.6.0 00:00:00
OLAP Analytic Workspace
. VALID 11.1.0.6.0 00:00:00
OLAP Catalog
. VALID 11.1.0.6.0 00:00:00
Oracle OLAP API
. VALID 11.1.0.6.0 00:00:00
Oracle Enterprise Manager
. VALID 11.1.0.6.0 00:00:00
Oracle XDK
. VALID 11.1.0.6.0 00:00:00
Oracle Text
. VALID 11.1.0.6.0 00:00:00
Oracle XML Database
. VALID 11.1.0.6.0 00:00:00
Oracle Database Java Packages
. VALID 11.1.0.6.0 00:00:00
Oracle Multimedia
. VALID 11.1.0.6.0 00:24:09
Spatial
. VALID 11.1.0.6.0 00:00:00
Oracle Expression Filter
. VALID 11.1.0.6.0 00:00:00
Oracle Rules Manager
. VALID 11.1.0.6.0 00:00:00
Gathering Statistics
. 00:17:25
Total Upgrade Time: 02:35:59

PL/SQL procedure successfully completed.

É preciso verificar se ficou algum objeto invalido:
@?/rdbms/utlrp.sql
SELECT COUNT(*) FROM DBA_INVALID_OBJECTS;

É recomendavel nesse momento realizar o backup da base de dados.

Abraços