jueves, 15 de abril de 2010

ORA-12012: error on auto execute of job # ORA-44003: invalid SQL name

Es un bug

Lo podes parar de esta forma , pero no se va a ejecutar mas el auto_space_advisor:

SQL> execute dbms_scheduler.disable('AUTO_SPACE_ADVISOR_JOB');

o

Aplicar el Patch 4519934 .


Si lo necesitan me avisan.

Aplicacion:

unzip  p4519934_10201_LINUX.zip

Connect as SYS
Then run rdbms/admin/prvtdadv.plb
Then run rdbms/admin/prvtspcu.plb


free counters

miércoles, 14 de abril de 2010

RMAN-06429: TARGET database is not compatible with this version of RMAN

In general, the rules of RMAN compatibility are as follows:

The RMAN catalog schema version should be greater than or equal to the catalog database version.
The RMAN catalog is backwards compatible with target databases from earlier releases.
The versions of the RMAN executable and the target database should be the same.

MY DB:

BD REPOSITORY:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Prod

SQL> select * from rcver;

VERSION
------------
10.02.00.0

BD TARGET:

Oracle Database 11g Release 11.2.0.1.0 - 64bit Production


You can upgrade the catalog schema ,do the following:

1. Connect to target and catalog using the 11.2.0.1 RMAN executable.
2. Run this command two times: RMAN> upgrade catalog;
3. Run the RMAN duplication again.


RMAN> upgrade catalog;

recovery catalog owner is RMAN
enter UPGRADE CATALOG command again to confirm catalog upgrade

RMAN> upgrade catalog;
recovery catalog upgraded to version 11.02.00.01
DBMS_RCVMAN package upgraded to version 11.02.00.01
DBMS_RCVCAT package upgraded to version 11.02.00.01

and ready!!.

Notes:
if show the next mistake:


error creating rc_offline_range
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-06004: ORACLE error from recovery catalog database: ORA-01031: insufficient privileges.

you need do the next as user sys:

grant RECOVERY_CATALOG_OWNER to rman;

and run again upgrade catalog;

free counters

jueves, 25 de marzo de 2010

ORACLE 10G + FEDORA 10 + FEDORA 11

No encontre en ninguna pagina como instalar oracle 10 en fedora 10 o fedora 11 , asi que practicando y leyendo lo pude conseguir y lo mejor funciona muy bien!!.

Es una mezcla de instalaciones que vi , tanto para instalar oracle 11 en fedora 11 como oracle 10 en fedora 7. La pizca esta en encontrar los paquetes que faltan.

Bueno comenzemos y que sea solo un copy/paste:

1 - Editar /etc/sysctl.conf

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144

2 - /sbin/sysctl -p

3 -Editar /etc/security/limits.conf y añadir


oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
4 - editar /etc/pam.d/login y añadir
session    required     pam_limits.so
5 - editar /etc/selinux/config y modificar

SELINUX=disabled

6 - ahora , por mas que no muestre error hacemos esto : ponemos el dvd de fedora 10 o 11 y ejecutamos:

cd /media/dvd/Fedora
rpm -Uvh setarch-*
rpm -Uvh --force tcl-*
rpm -Uvh compat-db-*
rpm -Uvh --force libXau-devel-*

yum install libXp libaio
yum install compat-libstdc++* compat-libf2c* compat-gcc* compat-libgcc*
Esto nos mostrar algun error o no depende si es fedora 10 o 11 , pero no importa funciona bien.

7 - Lo de siempre creamos directorios:
mkdir -p /u01/app/oracle/product/10.2.0/db_1
chown -R oracle.oinstall /u01
8 - Editamos el /etc/redhat-release :
redhat-3

9 - creamos usuaiors y grupos:

groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin

useradd -g oinstall -G dba,oper,asmadmin oracle
passwd oracle

9 - Nos loguemos como usuario oracle y editamos el .bash_profile
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
ORACLE_SID=TSH1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
Ejecutamos como usuario oracle :

./runInstaller

Y work!!!




free counters

martes, 12 de enero de 2010

CLONAR ORACLE 32 bit a 64 bit

Una vez que clonaron con el comando duplicate de rman una base de datos oracle , tendran que hacer lo siguiente para que no les tire error y se compilen los objetos para un s.o de 64 bit.

sql>connect / as sysdba
sql>shutdown immediate;
sql>startup migrate;
sql> @$ORACLE_HOME/rdbms/admin/utlirp.sql
sql>shutdown immediate;
sql> startup
sql>
sql> @$ORACLE_HOME/rdbms/admin/utlrp.sql
sql> connect system/password

hay que hacer rsto para que los pl/sql se compilen en 64 bit

free counters

martes, 8 de septiembre de 2009

dbi-link postgres to oracle

1 - instalar dbi-link

http://pgfoundry.org/projects/dbi-link/

2 - bajar los rpm instantclient de la pagina de oracle (http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html)

oracle-instantclient-basic-10.2.0.3-1.i386.rpm

oracle-instantclient-devel-10.2.0.3-1.i386.rpm

3 - yo use alien para crear los .deb

en la carpeta donde bajaste los rpm hacer esto:

alien *.rpm

4 - una vez creados los .deb hacer:

dpkg -i *.deb y te instalara el instantclient

5 - bajar el modulo de perl para que funcione con oracle

yo lo baje de esta pagina

http://ftp.debian.org/debian/pool/contrib/libd/libdbd-oracle-perl/libdbd-oracle-perl_1.21-2_i386.deb

y luego dpkg -i libdbd-oracle-perl_1.21-2_i386.deb

6 -

luego en la carpeta dbi_link hay unos ejemplos para testear el dbi-link el mismo se llama oracle.sql y hacemos

psql -f oracle.sql tuBD

tener en cuenta que tenes que editar el oracle.sql para ponerle tu usuario y pass de oracle para testearlo.

free counters

jueves, 6 de agosto de 2009

oracle to postgres dblink

Para todos los casos

sid de postgres es postg


1)primero configurar el odbcinst.ini para que vea el driver de postgres

[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1



2)configurar el ODBC.ini con la bd que tiene que leer , el nombre del servicio tiene que ir entre corchetes

   
[postg]
Driver = /usr/lib/libodbcpsql.so
Trace = No
TraceFile =
Database = pruebaBD
Servername = 192.168.63.6 //tu ip
UserName = usertest // usuario
Password = passtes //pass
Port = 5432
Protocol = 7.0
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
3)probar con el comando isql –v nombre driver;

en este caso isql –v postg

+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+


Para que se conecte con oracle:

1 – hay que ir al directorio /u01/app/oracle/product/10.2.0/db_1/hs/admin

crear un archivo que se llame INIT(sid).ora

por ejemplo initpostg.ora y que tenga esto

HS_FDS_CONNECT_INFO = postg
HS_FDS_TRACE_LEVEL = 0
HS_FDS_TRACE_FILE_NAME = postg.trc
HS_AUTOREGISTER = TRUE
HS_FDS_SHAREABLE_NAME = /usr/lib/libodbcpsql.so

set ODBCINI=/etc/odbc.ini
set client_encoding=latin1 

2 - agregar al listener.ora

(SID_DESC =
  (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
  (SID_NAME =postg)
  (PROGRAM = hsodbc)
  )

y al tnsnames.ora

postg=
( DESCRIPTION=
  (ADDRESS = (PROTOCOL = TCP)(HOST=localhost)(PORT=1521))
  (CONNECT_DATA =
  (SID = postg)
 )
 (HS=OK) //esto es porque es un servicio heterogeneo
)

después se crea un dblink pero tener en cuenta que el usuario debe ir entre comillas dobles y con minusculas

CREATE PUBLIC DATABASE LINK base
 CONNECT TO "oracle" IDENTIFIED BY "pass" USING 'postg';

Con este script de oracle podras crear las tablas en postgres ,una vez ejecutada esta consulta te devolvera todas las sentencias necesarias , solo tendras que copiar y pegas y tendras tus tablas en postgres , es simple despues voy a poner para pasar los indices.

select case

when instr(LEAD (datos, 1, 0) OVER (ORDER BY nro),'create table') > 0
then substr(datos,1,length(datos) -1) || ');'
when LEAD (datos, 1, 0) OVER (ORDER BY nro) = '0'
then substr(datos,1,length(datos) -1) || ');'
else
datos
end
from (
select nro, case when table_name <> LAG (table_name, 1, 0) OVER (ORDER BY nro)
then 'create table ' || table_name || '('
else
null
end || ' ' ||
columna datos
from (
SELECT rownum nro,
uc.table_name,


column_name
|| ' '
|| DECODE (uc.data_type, 'NUMBER', 'NUMERIC', 'VARCHAR2', 'CHAR','CLOB','text',uc.data_type)
|| ' '
|| decode(uc.data_type,'VARCHAR2','('||uc.data_length||')', null)
|| ',' columna,
LEAD (uc.table_name, 1, 0) OVER (ORDER BY uc.table_name) AS prox
FROM user_tables ut, user_tab_cols uc
WHERE ut.table_name = uc.table_name))

free counters

viernes, 17 de julio de 2009

ORA-39014 , ORA-39029,ORA-31671 con imdp

ORA-39014: Uno o m�s workers han salido antes de tiempo.
ORA-39029: el worker 1 con el nombre de proceso "DW01" ha terminado antes de tiempo
ORA-31671: El proceso de worker DW01 tiene una excepci�n no tratada.
ORA-00600: c�digo de error interno, argumentos: [qerxtAgentOpen_911], [5], [4], [], [], [], [], []
ORA-06512: en "SYS.KUPW$WORKER", l�nea 1345
ORA-06512: en l�nea 2


este error en mi caso me paso porque en el momento del import estaban habilitados los trigers , los desabilite y anduvo bien.
Otra causa fue porque las estructuras de las tablas no son las mismas.

Si no setear hacer lo siguiente en spfile:

SQL> alter system set event= '38066 trace name context forever, level 2' scope=spfile;
SQL> alter system set "_complex_view_merging" = false scope=spfile;
SQL> alter system set "_optimizer_cost_based_transformation"=off scope=spfile;


free counters