Event Attribute Functions

Quando uma trigger é disparada, pode-se retornar certos atributos sobre o evendo que causou o disparo. Cada atributo é retornado por uma função.

As funções, retiradas da documentação da Oracle. Confirmado que funciona na versão 9.2 e não funciona em algumas releases do 10g por causa de bugs (metalink.oracle.com para maiores detalhes)

Attribute Type Description Example
ora_client_ip_address
VARCHAR2

Returns the IP address of the client in a LOGON event, when the underlying protocol is TCP/IP

if (ora_sysevent = 'LOGON')
then addr :=
ora_client_ip_address;
end if;
ora_database_name
VARCHAR2(50)

Database name.

DECLARE
db_name VARCHAR2(50);
BEGIN
db_name := ora_database_name;
END;
ora_des_encrypted_password
VARCHAR2

The DES encrypted password of the user being created or altered.

IF (ora_dict_obj_type = 'USER')
THEN INSERT INTO event_table
(ora_des_encrypted_password);
END IF;
ora_dict_obj_name
VARCHAR(30)

Name of the dictionary object on which the DDL operation occurred.

INSERT INTO event_table
('Changed object is ' ||
ora_dict_obj_name');
ora_dict_obj_name_list
(name_list OUT
ora_name_list_t)
BINARY_INTEGER

Return the list of object names of objects being modified in the event.

if (ora_sysevent = 'ASSOCIATE
STATISTICS')
then number_modified :=
ora_dict_obj_name_list
(name_list);
end if;
ora_dict_obj_owner
VARCHAR(30)

Owner of the dictionary object on which the DDL operation occurred.

INSERT INTO event_table ('object
owner is' ||
ora_dict_obj_owner');
ora_dict_obj_owner_list(owne
r_list OUT ora_name_list_t)
BINARY_INTEGER

Returns the list of object owners of objects being modified in the event.

if (ora_sysevent = 'ASSOCIATE
STATISTICS')
then
number_of_modified_objects :=
ora_dict_obj_owner_list(owner_li
st);
end if;
ora_dict_obj_type
VARCHAR(20)

Type of the dictionary object on which the DDL operation occurred.

INSERT INTO event_table ('This
object is a ' ||
ora_dict_obj_type);
ora_grantee(
user_list
OUT ora_name_list_t)
BINARY_INTEGER

Returns the grantees of a grant event in the OUT parameter; returns the number of grantees in the return value.

if (ora_sysevent = 'GRANT') then
number_of_users :=
ora_grantee(user_list);
end if;
ora_instance_num
NUMBER

Instance number.

IF (ora_instance_num = 1)
THEN INSERT INTO event_table
('1');
END IF;
ora_is_alter_column(
column_name IN VARCHAR2)
BOOLEAN

Returns true if the specified column is altered.

if (ora_sysevent = 'ALTER' and
ora_dict_obj_type = 'TABLE')
then alter_column :=
ora_is_alter_column('FOO');
end if;
ora_is_creating_nested_table
BOOLEAN

Return TRUE if the current event is creating a nested table

if (ora_sysevent = 'CREATE' and
ora_dict_obj_type = 'TABLE' and
ora_is_creating_nested_table)
then insert into event_tab
values ('A nested table is
created');
end if;
ora_is_drop_column(
column_name IN VARCHAR2)
BOOLEAN

Returns true if the specified column is dropped.

if (ora_sysevent = 'ALTER' and
ora_dict_obj_type = 'TABLE')
then drop_column :=
ora_is_drop_column('FOO');
end if;
ora_is_servererror
BOOLEAN

Returns TRUE if given error is on error stack, FALSE otherwise.

IF
(ora_is_servererror(error_number
))
THEN INSERT INTO event_table
('Server error!!');
END IF;
ora_login_user
VARCHAR2(30)

Login user name.

SELECT ora_login_user
FROM dual;
ora_partition_pos
BINARY_INTEGER

In an INSTEAD OF trigger for CREATE TABLE, the position within the SQL text where you could insert a PARTITION clause.

-- Retrieve ora_sql_txt into
-- sql_text variable first.

n := ora_partition_pos;
new_stmt :=
substr(sql_text, 1, n-1) ||
' ' || my_partition_clause ||
' ' || substr(sql_text, n));
ora_privilege_list(
privilege_list OUT
ora_name_list_t)
BINARY_INTEGER

Returns the list of privileges being granted by the grantee or the list of privileges revoked from the revokee in the OUT parameter; returns the number of privileges in the return value.

if (ora_sysevent = 'GRANT' or
ora_sysevent = 'REVOKE')
then number_of_privileges :=
ora_privilege_list(priv_list);
end if;
ora_revokee (
user_list OUT
ora_name_list_t)
BINARY_INTEGER

Returns the revokees of a revoke event in the OUT parameter; returns the number of revokees in the return value..

if (ora_sysevent = 'REVOKE')
then
number_of_users :=
ora_revokee(user_list);
ora_server_error
NUMBER

Given a position (1 for top of stack), it returns the error number at that position on error stack

INSERT INTO event_table ('top
stack error ' ||
ora_server_error(1));
ora_server_error_depth
BINARY_INTEGER

Returns the total number of error messages on the error stack.

n := ora_server_error_depth;
-- This value is used with
-- other functions such as
-- ora_server_error
ora_server_error_msg
(position in binary_integer)
VARCHAR2

Given a position (1 for top of stack), it returns the error message at that position on error stack

INSERT INTO event_table ('top
stack error message' ||
ora_server_error_msg(1));

ora_server_error_num_params
(position in binary_integer)
BINARY_INTEGER

Given a position (1 for top of stack), it returns the number of strings that have been substituted into the error message using a format like "%s".

n :=
ora_server_error_num_params(1);
ora_server_error_param
(position in binary_integer,
param in binary_integer)
VARCHAR2

Given a position (1 for top of stack) and a parameter number, returns the matching “%s”, “%d”, and so on substitution value in the error message.

-- E.g. the 2rd %s in a message
-- like "Expected %s, found %s"
param :=
ora_server_error_param(1,2);
ora_sql_txt (sql_text out
ora_name_list_t)
BINARY_INTEGER

Returns the SQL text of the triggering statement in the OUT parameter. If the statement is long, it is broken up into multiple PL/SQL table elements. The function return value specifies how many elements are in the PL/SQL table.

sql_text ora_name_list_t;
stmt VARCHAR2(2000);
...
n := ora_sql_txt(sql_text);
FOR i IN 1..n LOOP
stmt := stmt || sql_text(i);
END LOOP;
INSERT INTO event_table ('text
of triggering statement: ' ||
stmt);
ora_sysevent
VARCHAR2(20)

System event firing the trigger: Event name is same as that in the syntax.

INSERT INTO event_table
(ora_sysevent);
ora_with_grant_option
BOOLEAN

Returns true if the privileges are granted with grant option.

if (ora_sysevent = 'GRANT' and
ora_with_grant_option = TRUE)
then insert into event_table
('with grant option');
end if;
space_error_info(
error_number OUT NUMBER,
error_type OUT VARCHAR2,
object_owner OUT VARCHAR2,
table_space_name OUT
VARCHAR2,
object_name OUT VARCHAR2,
sub_object_name OUT
VARCHAR2)
BOOLEAN

Returns true if the error is related to an out-of-space condition, and fills in the OUT parameters with information about the object that caused the error.

if (space_error_info(eno, typ,
owner, ts, obj, subobj) = TRUE)
then
dbms_output.put_line('The
object ' || obj || ' owned by '
|| owner || ' has run out of
space.');
end if;

Obtendo informações de uma sessão usando o SYS_CONTEXT

O select abaixo mostra muitas informações da sessão sem que seja necessário ler a visão v$session.

SELECT
SYS_CONTEXT(‘USERENV’,’TERMINAL’) terminal,
SYS_CONTEXT(‘USERENV’,’LANGUAGE’) language,
SYS_CONTEXT(‘USERENV’,’SESSIONID’) sessionid,
SYS_CONTEXT(‘USERENV’,’INSTANCE’) instance,
SYS_CONTEXT(‘USERENV’,’ENTRYID’) entryid,
SYS_CONTEXT(‘USERENV’,’ISDBA’) isdba,
SYS_CONTEXT(‘USERENV’,’NLS_TERRITORY’) nls_territory,
SYS_CONTEXT(‘USERENV’,’NLS_CURRENCY’) nls_currency,
SYS_CONTEXT(‘USERENV’,’NLS_CALENDAR’) nls_calendar,
SYS_CONTEXT(‘USERENV’,’NLS_DATE_FORMAT’) nls_date_format,
SYS_CONTEXT(‘USERENV’,’NLS_DATE_LANGUAGE’) nls_date_language,
SYS_CONTEXT(‘USERENV’,’NLS_SORT’) nls_sort,
SYS_CONTEXT(‘USERENV’,’CURRENT_USER’) current_user,
SYS_CONTEXT(‘USERENV’,’CURRENT_USERID’) current_userid,
SYS_CONTEXT(‘USERENV’,’SESSION_USER’) session_user,
SYS_CONTEXT(‘USERENV’,’SESSION_USERID’) session_userid,
SYS_CONTEXT(‘USERENV’,’PROXY_USER’) proxy_user,
SYS_CONTEXT(‘USERENV’,’PROXY_USERID’) proxy_userid,
SYS_CONTEXT(‘USERENV’,’DB_DOMAIN’) db_domain,
SYS_CONTEXT(‘USERENV’,’DB_NAME’) db_name,
SYS_CONTEXT(‘USERENV’,’HOST’) host,
SYS_CONTEXT(‘USERENV’,’OS_USER’) os_user,
SYS_CONTEXT(‘USERENV’,’EXTERNAL_NAME’) external_name,
SYS_CONTEXT(‘USERENV’,’IP_ADDRESS’) ip_address,
SYS_CONTEXT(‘USERENV’,’NETWORK_PROTOCOL’) network_protocol,
SYS_CONTEXT(‘USERENV’,’BG_JOB_ID’) bg_job_id,
SYS_CONTEXT(‘USERENV’,’FG_JOB_ID’) fg_job_id,
SYS_CONTEXT(‘USERENV’,’AUTHENTICATION_TYPE’) authentication_type,
SYS_CONTEXT(‘USERENV’,’AUTHENTICATION_DATA’) vauthentication_data,
SYS_CONTEXT(‘USERENV’,’CURRENT_SQL’) current_sql,
SYS_CONTEXT(‘USERENV’,’CLIENT_IDENTIFIER’) client_identifier,
SYS_CONTEXT(‘USERENV’,’GLOBAL_CONTEXT_MEMORY’) global_context_memory
FROM dual;

Dicas para iniciantes no APEX

#############################
DICAS ORACLE EXPRESS
#############################
Fazer o download do ORACLE EXPRESS
http://download.oracle.com/otn/nt/oracle10g/xe/10201/OracleXEUniv.exe

e instalar na maquina.

#############################
DOWNLOAD DO APEX
#############################
Fazer o download do ORACLE APEX

http://download.oracle.com/otn/java/appexpress/apex_3.1.2.zip

#############################
REFERENCIAS INSTALACAO DO APEX
#############################

http://www.apex-blog.com/oracle-apex/installing-apex-tutorial-23.html
http://jeffkemponoracle.blogspot.com/2007/07/apex-30-via-embedded-plsql-gateway.html
http://www.liberidu.com/blog/?p=122

#############################
RESOLVENDO PROBLEMAS CONEXAO XDB
#############################
http://afsungur.wordpress.com/2008/08/

#############################
FAZENDO USUARIO CAIR DIRETO NA SUA APLICACAO
#############################

Para redirecionar uma aplicacao, em uma devida URL use a procedure abaixo:

CREATE OR REPLACE
PROCEDURE myapp IS
BEGIN
OWA_UTIL.REDIRECT_URL(
‘/apex/f?p=105’);
END;

#############################
CRIAR UM DAD
#############################
Criar um DAD para sua aplicacao.

Geralmente necessitamos de um DAD, direct access database para acessar a aplicacao diretamente, sem a necessidade utilizar o mesmo usuario do APEX, visto que qualquer alteracao o usuario do APEX podera ser removido ou alterado sem maiores delongas.

Os passos para se criar o seu DAD, ou seja para que seu usuario seja acessado diretamente pela WEB faremos o seguinte:

crie seu usuario:

create user abc identified by secretpassword;

begin
DBMS_EPG.create_dad (
dad_name => ‘ABC’,
path => ‘/abc/*’);
DBMS_EPG.set_dad_attribute (
dad_name => ‘ABC’,
attr_name => ‘database-username’,
attr_value => ‘ABC’);
dbms_epg.authorize_dad(‘ABC’,’ABC’);
end;
/

informe o grant se a sua procedure esta no usuario flows_030000, ou seja diferente do usuario abc;

grant execute on flows_030000.myapp to abc;

create public synonym myapp for flows_030000.myapp;

(Note 1: if you move the procedure out of the flows_030000 schema, you’ll need to modify the above commands)
(Note 2: the name of the DAD is case-sensitive, so if you see “ABC” above, don’t put in “abc”, and vice versa)
(Note 3: don’t use “secretpassword” for your password!)

Once the above is done, a user can run myapp via a url like:

Podemos testar a procedure diretamente atraves da chamada:

http://MINHAMAQUINA/abc/myapp

Voce pode passar parametros se caso necessario:

http://MINHAMAQUINA/abc/myapp?param1=XXX&PARAM2=XYZ

Voce podera designar uma pagina padrao para que se caso o usuario vindo da internet, nao digitar a procedure podera entao ser direcionado diretamente para a procedure padrao.

begin
DBMS_EPG.set_dad_attribute (
dad_name => ‘ABC’,
attr_name => ‘default-page’,
attr_value => ‘myapp’);
end;
/

Entao a chamada poderia ser executada assim:

http://myapexserver/abc

Instalando o XML no banco ORACLE

A principio, precisamos registrar o xml em um banco oracle, para que possamos executar as funcionalidades do xml no oracle. Existem varias funcoes que possamos retornar e trabalhar com os dados xml, e armazenar os arquivos xml diretamente no banco oracle. Vamos entao verificar se o banco corrente contem a opcao de xml instalada.

select comp_name “Component” from dba_registry;

Se nesta saida nao retornar:

Oracle XML Database

Entao, execute os comandos:
sqlplus / as sysdba

create tablespace xmldb_ts
datafile /u01/xmldb_ts.dbf’ size 10M autoextend on maxsize unlimited
extent management local uniform size 1M;

Altere o shared pool para nova realidade.

SQL> alter system set shared_pool_size = 80M scope=spfile;

Instale a opcao do XML.

SQL> set feedback off
SQL> @?/rdbms/admin/catqm.sql senha_xml xmldb_ts temp

Confirme se esta OK:

select comp_name “Component” from dba_registry;
Component
——————————————
Oracle Database Catalog Views
Oracle Database Packages and Types
Oracle XML Database

Se ocorrer problemas, reinstale.

SQL> @?/rdbms/admin/catnoqm
SQL> alter tablespace XMLDB_TS offline;
SQL> drop tablespace XMLDB_TS including contents;

#############

O script catqm, cria:

As can be seen, XML DB is not installed. XML DB can be installed with the database configuration assistant (dbca) or by calling the catqm.sql script. catqm stands for catalog script for sQl xMl management.

the user xdb
the user anonymous (at least in 10gR1)
the role xdbadmin,
and some tables in the xdb schema
xml db related static views.
dbms_xmldom
dbms_xmlparser
dbms_xmlschema
dbms_regxdb
dbms_xdb
dbms_xdbutil_int
dbms_xdbz
dbms_xdbz0
dbms_version
The dbms_xmldom_lib library
The xmlschema_lib library
Various XDB$* types
The xml-extension-type28_T type
The XDB$XMLTYPE_REF_LIST_T type

Criando um banco CLONE na mesma maquina

Levando em conta que ja temos um banco de dados ORCL, vamos criar um banco clone com as mesmas tablespaces no mesmo servidor.

$ cd /u01

$ mkdir bdo$ export ORACLE_SID=orcl
$ sqlplus / as sysdba

Antes de executar este comando o ideal é procurar a area de dump.
sql> show parameter user_dump
logo em seguida apago o conteudo para que nao tenha nenhum outro arquivo,
assim
SQL> host rm /u01/app/oracle/admin/orcl/udump/*

SQL> alter database backup controlfile to trace;

Executar 3 vezes o comando porque demora um pouco a gerar o trace, assim é mais rapido, em compensacao ira gerar 3 entradas as vezes no mesmo arquivo de trace mas isso nao causa nenhum transtorno. Algumas vezes tem que tentar varias e varias vezes, sair do sqlplus ou executar o commit…

–Antes de fechar banco original
Executar agora a troca do arquivo de redo log online, para evitar perdas de informacoes.

SQL> select group#, status from v$log;

GROUP# STATUS
———- —————-
1 INACTIVE
2 INACTIVE
3 CURRENT

SQL> alter system switch logfile;
SQL> alter system checkpoint;

SQL> show parameter user_dump

NAME TYPE VALUE
———————————— ———– ——————————
user_dump_dest string /u01/app/oracle/admin/orcl/udu
mp

Pegar o último trace para ser usado mais a frente para criar o arquivo de controle.
Ainda nao iremos editar o arquivo, somente geramos e confirmamos que dentro do arquivo de trace gerado contem instrucoes para se recriar o novo arquivo de controle. Continue nas proximas instrucoes.

SQL> host ls /u01/app/oracle/admin/orcl/udump/*

O arquivo é listado.

SQL> host gedit /u01/app/oracle/admin/orcl/udump/orcl_ora_6209.trc

Ok, o arquivo foi criado !

Agora crie um arquivo texto a partir do spfile (binario), este arquivo contera todas
as informacoes sobre os parametros:

SQL> create pfile=’/u01/bdo/init.ora’ from spfile;
Mostre a localizacao atual dos seus datafiles.
SQL> select name from v$datafile;
Interrompa o banco de dados de producao.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit;

Alterar o arquivo de inicializacao /u01/bdo/init.ora

Mudar instance_name e bd_name para bdo e todas as entradas que estiverem como orcl para bdo e tambem as devidas pastas. O que estiver como orcl.__ pode ser removido isso é criado pelo gerenciamento automatico de memoria. Alterar também dump_dest, background e core_dump_dest, audit, control_files, a flash_recovery_area que é o parametro db_recovery_file_dest

Crie as pastas para os diretorios:
— mkdir back bdump
— mkdir core cdump
— mkdir user udump
— mkdir audit adump
Como o comando abaixo:
no prompt do sistema operacional crie as pastas abaixo:

mkdir /u01/bdo/bdump -p
mkdir /u01/bdo/cdump -p
mkdir /u01/bdo/udump -p
mkdir /u01/bdo/adump -p
mkdir /u01/bdo/flash_recovery_area -p

Copiar só os datafiles originais para debaixo da pasta /u01/bdo
Com os comandos cp ou copy do sistema operacional, lembrado que o banco de producao deve estar fechado, ou copia sera invalida.
cp $ORADATA/*.dbf /u01/bdo

Se a base de dados estiver em ASM temos que fazer o backup e
restaurar como no exemplo:

export ORACLE_SID=bdo

sqlplus / as sysdba

SQL> startup nomount pfile=’/u01/bdo/init.ora’

Se der algum problema edite novamente o arquivo init.ora e remova os problemas/acerte os parametros.

Pegue o arquivo de trace e extraia o Set #2 para criar o arquivo de controle.
O que se tem que fazer é remover o texto anterior ao Set #2 e o posterior a finalizacao do comando de recriar o arquivo de contole que finaliza em CHARACTER SET WE8ISO8859P1 ;

Como o exemplo abaixo, o que tem que sobrar da sua edicao do arquivo de trace é o texto similar ao abaixo:

— Set #2. RESETLOGS case — –

Crie um sql a partir do trace, que foi gerado com o comando alter database backup controlfile to trace e salvar como sql (init.sql)

Trocar o REUSE por set

#####################################################
Exemplo de script para recriar o arquivo de controle abaixo:
#####################################################

CREATE CONTROLFILE set database “bdo” RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
‘/u01/bdo/redo01.log’,
‘/u01/bdo/redo01b.log’
) SIZE 50M,
GROUP 2 (
‘/u01/bdo/redo02.log’,
‘/u01/bdo/redo02b.log’
) SIZE 50M,
GROUP 3 (
‘/u01/bdo/redo03.log’,
‘/u01/bdo/redo03b.log’
) SIZE 50M
— STANDBY LOGFILE
DATAFILE
‘/u01/bdo/system01.dbf’,
‘/u01/bdo/undotbs01.dbf’,
‘/u01/bdo/sysaux01.dbf’
CHARACTER SET WE8ISO8859P1 ;
#####################################################

Rode o comando, o banco bdo esta nomount.

sqlplus / as sysdba

SQL> @/u01/bdo/init.sql ;

SQL> alter database mount;

SQL> alter database open resetlogs;

criar o arquivo temp;
SQL> alter tablespace temp add tempfile ‘/u01/bdo/temp01.dbf’ size 100M;

SQL> exit;

Crie o arquivo de senhas:

orapwd file=$ORACLE_HOME/dbs/orapwbdo password=oracle entries=5

Mostrar o listener para verificar se o banco esta registrando o servico dinamicamente.

lsnrctl start
lsnrctl services

Confirme se o servico foi registrado, senao registre estaticamente via netmgr.

Recrie o dbcontrol.

emca -repos recreate

emca -config dbcontrol db

emctl start dbconsole

Treinamento do XML

Bom, a principio o xml é bem pesado e que envolve varias configuracoes e entradas para a validacao dos determinados elementos dentro dos arquivos de validacao seja o DTD ou XMLSchema.

Para o Jdeveloper tive que criar as devidas aplicacoes.

E:devstudio10132jdkbinjava.exe
-classpath “E:devstudio10132libxmlparserv2.jar;E:labsclasses” ShowXmlNS “${file.path}”

-classpath “E:devstudio10132libxmlparserv2.jar;E:labsclasses” oracle.xml.parser.v2.oraxml -schema ${file.path}

-classpath “E:devstudio10132libxmlparserv2.jar;E:labsclasses” TestXPath ${file.path}

To modify the Windows 2000 environment variables:
1. Open the Control Panel
2. Double click the System icon.
3. Click the Advanced tab
4. Click Environment Variables…
5. Modify the PATH environment variable to include the binary directories for the Oracle 10g XDK under the ORACLE_HOME.
6. Create or add to the CLASSPATH variable the following: Java libraries, JDBC, XDK paths or files:

set ORACLE_HOME=E:oracleproduct10.2.0client_1

CLASSPATH
%ORACLE_HOME%LIB;%ORACLE_HOMEjdbclib;%ORACLE_HOME%jdbclibclasses12.jar;%ORACLE_HOME%LIBxsu12.jar;%ORACLE_HOME%LIBxmlparserv2.jar;%ORACLE_HOME%LIBoraclexsql.jar;%ORACLE_HOME%RDBMSjlibxdb.jar

Instalar o XMLXDK que baixei da internet, é so descompactar e depois dentro do admin,
rodar um script para ele carregar as classes, é so ler o arquivo html que vem junto tem as dicas.

Depois configurar o listener atraves dessa procedure para configurar a porta WEB.

———————————————————————
DECLARE
HTTP_PORT pls_integer := 8080;
FTP_PORT pls_integer := 2100;
config xmltype;
BEGIN
SELECT updateXML(dbms_xdb.cfg_get(),
‘/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()’,
HTTP_PORT) INTO config
FROM DUAL;
DBMS_XDB.CFG_UPDATE(config);

SELECT updateXML(dbms_xdb.cfg_get(),
‘/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()’,
FTP_PORT) INTO config
FROM DUAL;
DBMS_XDB.CFG_UPDATE(config);
END;
/
COMMIT;

Linux Oracle AS 4 update 6

Aconteceram alguns problemas durante o treinamento AS2 em Porto Alegre, com a instalacao do Linux Oracle. Quando iriamos executar a instalacao, ja pegava e colocava a configuracao como localhost.
A primeira providencia foi alterar o arquivo de hosts e colocar a primeira linha como:
10.0.0.200 nomemaquina.dominio nomemaquina
#127.0.0.1 nomemaquina.dominio localhost nomemaquina

E claro comentar a linha do localhost. O que acontecia é que no meio da instalacao, era interrompida devido a falta do ip 127 e localhost dava erro no opmnctl e entao, alteramos o arquivo hosts e prosseguia a instalacao.

Outro problema acontecia porque a porta do clusterware, 7200 estava sendo escutada somente pelo IP localhost 127. Isso foi descoberto com os comandos:

netstat -nap |grep 7202

encontrado o processo, entao buscamos debaixo da pasta do apache todos os arquivos de configuracao que continham a entrada 7202.

grep dms.conf |grep 7202

Achamos no arquivo dms.conf assim, abrimos o arquivo e alteramos em todas suas entradas para o nome da maquina local. Iniciamos novamente a maquina e os servicos estavam ok.

Obrigado ao Rogerio pela ajuda.

certificacao em RAC

Bom pessoal, a ultima novidade é que passei na prova de RAC 1Z0-048.
Bom a principio, fiz a prova e sabia que continha dois assuntos, administracao de oracle em RAC e o clusterware. Ja fiz varias provas, e dessa vez fui pego de surpresa. Como de habito, com 15,20 minutos de prova, terminado – comeca a revisao das questoes. Depois de ter revisado, sai bebi uma agua, lavar o rosto e depois finalizar. Depois de 1 hora, finalizei. SUPRISE! Comecou a segunda parte, com 1 hora pra faze-la. Pintou claro o frio na espinha. Puxa, tem mais, assim entao fiz o restante e deu tempo. No final, contabilizei as questoes que eu tinha certeza e as quais eu tinha duvida. Findei, 65% clusterware, 70% administracao banco RAC. Ta bom, visto que estudei pouco achei que nao ia passar. Fui aprovado o minimo era 60% em cada etapa. Bom galera, os cursos estao bombando, depois vou postar ai algumas dicas.

Abraços.