viernes, 15 de mayo de 2009

VB 6 y Cursores De Oracle

Un cursor es un sinónimo de área de contexto de un área de trabajo en la memoria que Oracle almacena la instrucción de SQL actual. Para una consulta, el área de memoria también incluye los encabezados de columna y una fila recuperada por la instrucción SELECT.

un ejemplo muy sencillo la conexion a la base de datos desde visual basic abre en promedio 2 a 4 cursores segun he podido probar.

El problema se presenta cuando usamos muchos recorset sin cerrarlos , podemos hacer una simetría de un rs = un cursor de oracle.

Cuando actualizamos los datos no se abre ningún cursor ya que son consultas que no devuelven registros.

Podemos ver los cursores abiertos con la vista v$open_cursor

select count(*) , user_name
from v$open_cursor
group by user_name

notar que hay cursores que abre oracle para actualizar las estadísticas de la tabla y mas , osea por mas que nosotros abramos 3 cursores desde vb en la vista pueden aparecer 6 o 7 que son propios de oracle.

Muchas veces podemos ver que nos aparece la siguiente advertencia

Current Open Cursors Count

son las cantidad de cursores que tenemos abiertos , esto depende del tamaño de nuestra sga , normalmente podemos usar para calcular el tamaño de la shared_pool viendo la cantidad de cursores abiertos cuando la base esta a full , pero no dejar también de ver la aplicación porque una aplicación mal desarrollada lleva a los dba a a hacer sucesivos ajustes a la bd que por ahí tocando solo la aplicación los problemas se resuelven.

fuente : http://support.microsoft.com/kb/183639/es
free counters

jueves, 14 de mayo de 2009

ORACLE 10G R2 + UBUNTU 8.10 + UBUNTU 9.04 + UBUNTU 9.10


BAJAMOS ESTE ARCHIVO


10201_database_linux32.zip


Instalar esta paqueteria

apt-get install gcc libaio1 lesstif2 lesstif2-dev make rpm libc6 libstdc++5 binutils
libmotif3

como root crea las siguientes enlaces simbolicos:


ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/rpm /bin/rpm
ln -s /usr/bin/basename /bin/basename

Ahora editar el archivo /etc/sysctl.conf y añade o modifica estas líneas:


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

luego

/sbin/sysctl -p

Editamos el fichero /etc/security/limits.conf para modificar estos valores:

* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

Añade lo siguiente a /etc/pam.d/login:

session required /lib/security/pam_limits.so

pam_limits.so es el módulo que procesa la configuración del fichero /etc/security/limits.conf que cambiamos antes.

Crear usuario oracle


/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/groupadd nobody
/usr/sbin/useradd -c "oracle" -g oinstall -G dba oracle
/usr/sbin/useradd -g nobody nobody
# cambiamos el password del usuario oracle
passwd oracle

Creamos estos paths

mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01
chmod -R 775 /u01

mkdir -p /home/oracle

chown -R oracle:oinstal /home/oracle



conectate como usuario oracle y añade esto al fichero /home/oracle/.bash_profile:

umask 022
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1; export ORACLE_HOME
ORACLE_SID=SID_TU_BASE; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
ORACLE_OWNER=oracle; export ORACLE_OWNER
#TNS_ADMIN=/home/oracle/config/10.1.0 export TNS_ADMIN
NLS_LANG=SPANISH_SPAIN.WE8ISO8859P1; export NLS_LANG
#ORA_NLS10=${ORACLE_HOME}/db_1/nls/data; export ORA_NLS10
CLASSPATH=${CLASSPATH}:${ORACLE_HOME}/jdbc/lib/classes12.zip
LD_LIBRARY_PATH=${ORACLE_HOME}/lib; export LD_LIBRARY_PATH
DISABLE_HUGETLBFS=1; export DISABLE_HUGETLBFS
TEMP=/tmp; export TEMP
TMPDIR=/tmp; export TMP
PATH=$PATH:/u01/app/oracle/product/10.2.0/db_1/bin; export PATH

Crea tambien estos directorios:

mkdir /var/lock/subsys

entramos a la parte grafica como usuario oracle y ejecutamos esto

./runInstaller -ignoreSysPreReqs

para 7.1 :


LINK A 7.1

Espero que les sirva. saludos!!



free counters