Category: Oracle 10g

Export Datapump : No tan maravilloso pero.... comprime :)



Hace un tiempo hice un comentario, en parte infundado , en parte con fundamento sobre el export datapump.



Pueden revisar la nota acá

Era el problema de no poder contar con PIPE , tuberías o como le quieran llamar, al momento de exportar, lo que hacía que todos esos queridos códigos de export que comprimían on-line los respaldos, ya no funcionan con la versión Export Datapump.

Pues realizando un pequeño ejemplo, me encontre con la siguiente tabulación de ejemplos de export y export datapump, incluso con tuberías de por medio.
Comando % Compresion Tamaño MB
exp sin compress 0 574
exp con compress 0 574
exp sin compress y PIPE 87.5 77.5
expdp sin compress 11 512
expdp con compress 83.5 95

Los comandos

exp sin compress
exp system/oracle file=FULLDB11g full=y buffer=1000000

exp con compress
exp system/oracle file=FULLDB11g full=y buffer=1000000 compress=y

Nota : El COMPRESS del export , no está relacionado a la compresión de bloques Oracle, sino, más bien, a la cantidad de extensiones que conformarán un segmento :) , pero como sonaba a compresión lo añadí :P

exp sin compress y con PIPE
mknod pipes p
gzip < pipes> FULDB11gPipes.dmp.gz &
exp system/oracle file=pipes full=y buffer=1000000

expdp sin compress
expdp system/oracle DIRECTORY=data_pump_dir FULL=y DUMPFILE=FULLDB11gexpdp.dmp

expdp con compress
expdp system/oracle DIRECTORY=data_pump_dir FULL=y DUMPFILE=FULLDB11gexpdp.dmp COMPRESSION=ALL

Como pueden ver el ya famoso PIPE con export tiene un grado de compresión altísimo cercano al 87,5% , o sea , de cada 100MB de tamaño, deja un archivo en 12,5MB aproximadamente :)

Pero el Export Datapump , no es tan malo después de todo , pues logra un óptimo 83,5% de compresión , o sea, de cada 100MB de tamaño generaría un archivo de 16,5MB

Todo esto es en base a una base de datos de pruebas, todo varía de acuerdo a la porosidad de la base de datos (fragmentación)

Espero les sirva y claro.. me forme una mala impresión sobre el nuevo y populoso Export DataPump

PD : Gracias Luis Farías y Waldo Rojas ;)

PPD : La compresión está disponible desde 10g, pero para esta versión sólo es medatada, para la compresión total se debe usar Oracle 11g, gracias a mi amigo Juan Díaz (jada) por el comentario


by Ligarius
15.07.09. 19:30:39. 400 words, 25988 views. Categories: Base de datos, Oracle 11g, Oracle 10g, Tuning / Performance ,

BBDD : Como tracear una sesión que se conecta/procesa/desconecta en 2 segundos



0.-Situación
La situación es que hay una sesión que está hecha en un programa (C) , este programa hace una conexión a la base de datos y ejecuta ciertas rutinas en Pro*C , y se desconecta, el inconveniente es que se demora entre que se conecta, procesa y desconecta , entre 3 a 5 segundos.
Por ende hacerle un trace es bastante complicado, ya que no se alcanza a conocer el SID ,SPID o #SERIAL para incluirlo en el package
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESION(SID,#SERIAL,TRUE)

Tampoco podríamos utilizar el package DBMS_SUPPORT.START_TRACE_IN_SESSION() ya que también debiesemos conocer el SID y #SERIAL

Por ende se debe desarrollar algo alternativo para poder rescatar el proceso de esa sesión



1.-Solución
Crear un trigger on-logon para detectar cuando hace la conexión ese usuario a través de ese programa (Pro*C)

2.-Código
CREATE OR REPLACE TRIGGER
tracea_audit_trigger
AFTER LOGON ON DATABASE
DECLARE
var_session VARCHAR2(100);
var_module VARCHAR2(100);
BEGIN
SELECT sys_context('USERENV','SESSIONID')
INTO var_session
FROM dual
;


BEGIN
SELECT module
INTO var_module
FROM v$session
WHERE audsid = var_session;
EXCEPTION
WHEN OTHERS THEN
var_module := 'NO';
END;


IF UPPER(var_module) LIKE '%PROGRAMA%' THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE=TRUE';
END IF;
END;
/


Hay que tener cuidado de dar los privilegios de select sobre la vista v$session, ya que un usuario que no posea los permisos de lectura no podrá realizar la conexión, por eso se recomienda que este código sea probado en ambientes de test, previo paso a producción

3.-Permisos necesarios

Grant select on v_$session to public;

¿Porque un privilegio a Public? Pues desde el momento en que se cree el trigger cualquier usuario que se conecte a la base de datos pasara por el trigger on-logon y si no tiene acceso a la vista v$session pues simplemente no se conectará y saldrá un error de privilegios.

Grant alter system to nombre_usuario;
Grant alter session to nombre_usuario;


Los permisos para alterar la sesión y el system debiesen ser revocados una vez finalizado el proceso de captura de estadísticas

Revoke alter system from ;
Revoke alter session from ;


4.-Si no esta activada la recolección de estadísticas
Si el parámetro TIMED_STATISTICS en la base de datos posee el valor FALSE, la traza no contendrá datos relevantes por ejemplo CPU, disk , etc.

Para ello se puede alterar el trigger y modificarlo de la siguiente forma

Código anterior
IF UPPER(var_module) LIKE '%PROGRAMA%' THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE=TRUE';
END IF;


Código nuevo
IF UPPER(var_module) LIKE '%PROGRAMA%' THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE=TRUE';
EXECUTE IMMEDIATE 'ALTER SYSTEM SET TIMED_STATISTICS=TRUE';
END IF;


5.-Si el archivo de trace generado es demasiado grande
Si el archivo de trace generado es demasiado grande, se puede disminuir su tamaño modificando el trigger

Código anterior
IF UPPER(var_module) LIKE '%PROGRAMA%' THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE=TRUE';
END IF;


Código nuevo
IF UPPER(var_module) LIKE '%PROGRAMA%' THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE=TRUE';
EXECUTE IMMEDIATE 'ALTER SYSTEM SET max_dump_file_size=5120';
END IF;


El tamaño asignado al parámetro max_dump_file_size está dado por Kb y el valor por defecto es UNLIMITED


6.- ¿Qué pasa si hay muchos usuarios, en la misma máquina, ejecutando el mismo Pro*C?
Pues una solución es realizar una copia de programa , por ejemplo si el programa se llama EjecutaProc, llamarlo de una forma que sea identificable , ejemplo , prueba_ejecucion y otorgar los permisos necesario para su ejecución

Con lo anterior , este programa va a ser inequivocamente ubicado en la vista v$session , bajo el campo module, y solamente a esta sesión le realizaremos un traceo

7.- Archivo de resultados
El archivo de resultados debe estar ubicado en la ruta que está predefinida en el parámetro de inicialización user_dump_dest

select value from v$parameter where name like 'user_dump_dest' , por defecto tiene el valor $ORACLE_HOME/rdbms/trace

El archivo de resultados del traceo , no es algo que sirva mucho a primera vista, a no ser que tengamos una memoria y ojos extraordinarios para hacer un formateo visual

Ejemplo del archivo :
PARSING IN CURSOR #6 len=67 dep=1 uid=0 oct=3 lid=0 tim=19191305310633 hv=2889900621 ad='f6f19668'
select pos#,intcol#,col#,spare1,bo#,spare2 from icol$ where obj#=:1
END OF STMT
PARSE #6:c=10000,e=9470,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=0,tim=19191305310617
EXEC #6:c=0,e=918,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=19191305311971
FETCH #6:c=0,e=408,p=1,cr=3,cu=0,mis=0,r=1,dep=1,og=4,tim=19191305312494
FETCH #6:c=0,e=24,p=0,cr=1,cu=0,mis=0,r=0,dep=1,og=4,tim=19191305312632
FETCH #5:c=0,e=94,p=0,cr=0,cu=0,mis=0,r=1,dep=1,og=4,tim=19191305312816
EXEC #6:c=0,e=50,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=19191305313060
FETCH #6:c=0,e=42,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=4,tim=19191305313186
FETCH #6:c=0,e=16,p=0,cr=1,cu=0,mis=0,r=0,dep=1,og=4,tim=19191305313283
FETCH #5:c=0,e=43,p=0,cr=0,cu=0,mis=0,r=1,dep=1,og=4,tim=19191305313402
EXEC #6:c=0,e=37,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=19191305313660
FETCH #6:c=0,e=46,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=4,tim=19191305313788
FETCH #6:c=0,e=16,p=0,cr=1,cu=0,mis=0,r=0,dep=1,og=4,tim=19191305313888
FETCH #5:c=0,e=40,p=0,cr=0,cu=0,mis=0,r=1,dep=1,og=4,tim=19191305314015
EXEC #6:c=0,e=36,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=19191305314229
FETCH #6:c=0,e=39,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=4,tim=19191305314347
FETCH #6:c=0,e=16,p=0,cr=1,cu=0,mis=0,r=0,dep=1,og=4,tim=19191305314452


8.- Formateo de archivo, salida de trace
Como es algo complicado el análisis del archivo anterior, existe un utilitario llamado tkprof que realiza el formateo de este archivo, para utilizarlo se debe ejecutar lo siguiente

tkprof [explain=usuario/password] [sys=no] [insert=archivo]

Con el parámetro "explain=usuario/password" indicamos que nos muestre el plan de ejecución de todas las instrucciones, conectándose para ello al usuario/password indicados.

Con el parámetro "sys=no" indicamos que no nos muestre las instrucciones realizadas por el usuario SYS.

Con el parámetro "insert=archivo" , dejamos toda la información mostrada por tkprof en el archivo de salida,como sentencias insert en una tabla llamada tkprof_table, con lo cual podemos realizar consultas de forma más óptima

Después de haber formateado nuestro archivo en user_dump_dest , se visualizaría de la siguiente forma

select USER into :b0
from
DUAL


call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 3 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.00 0.00 0 3 0 1


Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 30

Rows Row Source Operation
------- ---------------------------------------------------
1 TABLE ACCESS FULL DUAL


by Ligarius
26.06.09. 18:15:21. 1151 words, 6857 views. Categories: Base de datos, Oracle 11g, Oracle 10g, Tuning / Performance ,

Migración de Oacle9i a Oracle10g, paso a paso (migrating Oracle9i to Oracle10g)


Hola

A veces leemos tremendas notas en Metalink con respecto a la migración de una base de datos en Oracle9i a Oracle10g u Oracle11g, es tanto texto que muchas veces no perdemos u optamos por lo más sencillo, export e import. Como sabemos el exp/imp es bueno para bases de datos pequeñas, pero que sucede con aquellas bases de 1TB o 2TB o más??



Pues claramente no nos sirve el método antiguo del exp/imp, por ende... debemos recurrir a lo mpas básico de un DBA , los comandos, SIII!!!! pantalla negra y letras verdes :>>

Por eso , acá les explico como hacer la migración desde Oracle9i a Oracle10g, todo muy detallado.

Esta probado, pero si hubiese algún comentario, me lo hacen saber a hector.ulloa@gmail.com y lo modificaré a la brevedad

Matriz de certificación

8.1.7.4 -> 10.2.X.X.X
9.0.1.4 or 9.0.1.5 -> 10.2.X.X.X
9.2.0.4 or higher -> 10.2.X.X.X
10.1.0.2 or higher -> 10.2.X.X.X

B) Nota de origen

Complete Checklist for Manual Upgrades to 10gR2 Doc ID: Note:316889.1

1.- Bajar el motor Oracle10gr2 (10.2.0.1) desde la siguiente ruta
http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201sol64soft.html

2.- Verificar los prerequisitos de instalación
http://download.oracle.com/docs/cd/B19306_01/install.102/b15690/toc.htm

3.- Instalar el motor Oracle10gr2

4.- Instalar el parche 10.2.0.4 número 6810189 (leer previamente el Readme)

5.- En (oracle10g)
Copiar estos archivos a otra ubicación , para que sean ejecutados desde la instancia Oracle9i

ORACLE_HOME/rdbms/admin/utlu102i.sql
ORACLE_HOME/rdbms/admin/utltzuv2.sql

6.- En (oracle9i)
Ejecutar los archivos del punto anterior

sqlplus '/as sysdba'

SQL> spool Database_Info.log
SQL> @utlu102i.sql
SQL> spool off

Simplemente verificar la información que arroja el Upgrade Information Tool, por ejemplo warnings , parámetros obsoletos, etc

7.- En (oracle9i)
Para verificar los usuarios que poseen rol de CONNECT

SELECT grantee FROM dba_role_privs
WHERE granted_role = 'CONNECT' and
grantee NOT IN (
'SYS', 'OUTLN', 'SYSTEM', 'CTXSYS', 'DBSNMP',
'LOGSTDBY_ADMINISTRATOR', 'ORDSYS',
'ORDPLUGINS', 'OEM_MONITOR', 'WKSYS', 'WKPROXY',
'WK_TEST', 'WKUSER', 'MDSYS', 'LBACSYS', 'DMSYS',
'WMSYS', 'OLAPDBA', 'OLAPSVR', 'OLAP_USER',
'OLAPSYS', 'EXFSYS', 'SYSMAN', 'MDDATA',
'SI_INFORMTN_SCHEMA', 'XDB', 'ODM');

A este rol de esos usuarios se les debe revocar todos los privilegios que no sean el CREATE SESSION, una vez que se haya realizado la migración

8.- En (Oracle9i)
Obtener información de los links públicos

SELECT
'create '||DECODE(U.NAME,'PUBLIC','public ')||'database link '||CHR(10)
||DECODE(U.NAME,'PUBLIC',Null, U.NAME||'.')|| L.NAME||chr(10)
||'connect to ' || L.USERID || ' identified by '''
||L.PASSWORD||''' using ''' || L.host || ''''
||chr(10)||';' TEXT
FROM sys.link$ L,
sys.user$ U
WHERE L.OWNER# = U.USER# ;

Para reconstruirlos una vez se haya realizado la migración

9.- En (Oracle9i)
Para buscar corrupciones

Set verify off
Set space 0
Set line 120
Set heading off
Set feedback off
Set pages 1000
Spool analyze.sql

Select 'Analyze cluster "'||cluster_name||'" validate structure cascade;'
from dba_clusters
where owner='SYS'
union
Select 'Analyze table "'||table_name||'" validate structure cascade;'
from dba_tables
where owner='SYS' and partitioned='NO' and (iot_type='IOT' or iot_type is NULL)
union
Select 'Analyze table "'||table_name||'" validate structure cascade into invalid_rows;'
from dba_tables
where owner='SYS' and partitioned='YES';

spool off

Este sql crea un script llamado analyze.sql.

Y se debe ejecutar de la siguiente forma

$ sqlplus '/as sysdba'
SQL> @$ORACLE_HOME/rdbms/admin/utlvalid.sql
SQL> @analyze.sql

Todo esto no debiese retornar error , si fuese así se debe investigar y solucionar

10.- En (Oracle9i)
Bajar el listener

$ lsnrctl
LSNRCTL> stop

Asegurarse que no hay archivos que necesiten recuperación

$ sqlplus '/ as sysdba'
SQL> select * from v$recover_file;

Por lo anterior , no debiese devolver registros

11.- En (Oracle9i)
Asegurarse que no hay archivos en modo backup

SQL> select * from v$backup where status!='NOT ACTIVE';

Esto no debiese retornar errores

12.- En (Oracle9i)
Deshabilitar todos los jobs y crontabs

13.- En (Oracle9i)
El usuario sys y system deben tener el tablespace por defecto en SYSTEM

SQL> select username, default_tablespace from dba_users
where username in ('SYS','SYSTEM');

Modificación de los usuarios , si estuviesen con inconvenientes

SQL> alter user sys default tablespace SYSTEM;
SQL> alter user system default tablespace SYSTEM;

14.- En (Oracle9i)
Asegurarse que la tabla aud$ este en el tablespace SYSTEM

SQL> select tablespace_name from dba_tables where table_name='AUD$';

15.- En (Oracle9i)
Tomar nota de todos los controlfiles

SQL> select * from v$controlfile;

16.- En (Oracle9i)
Si la tabla XDB.MIGR9202STATUS existe en la base 9i , borrarla

17.- En (Oracle9i)
Verificar donde estan los archivos de redo

select * from v$logfile;

18.- En (Oracle9i)
Verificar donde estan los datafiles

select * from dba_data_files;

19.- En (Oracle9i)
Bajar la base de datos

$ sqlplus '/as sysdba'
SQL> shutdown immediate;

20.- En (Oracle9i)
Realizar un full cold backup

21.- En (Oracle9i)
Copiar todos los datafiles, todos los controlfiles, todos los redologs y archivos temporales , desde la ruta antigua (Oracle9i) a la ruta nueva (Oracle10g)

22.- En ambas instancias
- Copiar el init.ora de la base 9i a la base 10g
- Copiar el archivo de password desde la base 9i a la base 10g
- Comentar cualquier parámetro obsoleto ubicado en el apendice A , y verificar los parámetros depreciados en el apendice B en el init de Oracle9i
- Setear el parámetro COMPATIBLE a la versión de Oracle que se está migrando, en Oracle9i
- Si el valor NLS_LENGTH_SEMANTICS está en CHAR cambiar a BYTE , en Oracle9i
- Verificar el DB_DOMAIN en Oracle9i
- Modificar el PGA_AGGREGATE_TARGET y asignarle unos 512MB en Oracle9i
- Setear el SHARED_POOL_SIZE mínimo en 150MB en Oracle9i
- Setear el LARGE_POOL_SIZE mínimo en 150MB en Oracle9i
- Setear el JAVA_POOL_SIZE mínimo en 150MB en Oracle9i
- Comentar cualquier parámetro AQ_TM_PROCESSES y JOB_QUEUE_PROCESS y dejarlos a ambos en 0 en Oracle9i

23.- En (Oracle10g)
Asegurarse que la variable de medioambiente NLS_LANG este seteada correctamente

$ env | grep $NLS_LANG

24.- En ambas instancias
- Copiar los archivos de Oracle Net a la nueva ubicación (Desde Oracle9i a Oracle10g)

$ cp $OLD_ORACLE_HOME/network/admin/*.ora /network/admin

25.- En (Oracle10g)
Actualizar el oratab
SID:ORACLE_HOME:N

26.- En (Oracle10g)
Actualizar las variables de medio ambiente ORACLE_HOME y PATH

27.- En (Oracle10g)
Verificar estos parámetros , que se encuentren con la ruta adecuada
- ORACLE_HOME
- PATH
- ORA_NLS10
- ORACLE_BASE
- LD_LIBRARY_PATH
- ORACLE_PATH

28.- En (Oracle10g)
Levantar la base de datos en modo UPGRADE
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus / as sysdba

SQL> startup upgrade

29.- En (Oracle10g)
Crear el nuevo tablespace SYSAUX , esta información proviene del punto de la ejecución del script utlul02i.sql

SQL> CREATE TABLESPACE sysaux DATAFILE 'sysaux01.dbf'
SIZE 500M REUSE
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO
ONLINE;

30.- En (Oracle10g)
Ejecutar el siguiente archivo

SQL> spool upgrade.log
SQL> @catupgrd.sql
SQL> spool off

El cual nos enseña que scripts de upgrade necesitan ser ejecutados en Oracle10g

31.- En (Oracle10g)
Ejecutar el siguiente archivo

SQL> @utlu102s.sql TEXT

El cual muestra el status de la base después del upgrade

32.- En (Oracle10g)
Ejecutar la siguiente consulta para saber el estado de los componentes

QL> select comp_name, status, version from dba_registry;

33.- En (Oracle10g)
Hacer un restart a la base de datos
SQL> shutdown immediate
SQL> startup restrict

34.- En (Oracle10g)
SQL> @olstrig.sql

Para el OLS

35.- En (Oracle10g)
Ejecutar para compilar los objetos inválidos en Oracle10g
SQL> @utlrp.sql

36.- En (Oracle10g)
Para verificar los objetos inválidos

spool invalidos_post_migracion.lst
Select substr(owner,1,12) owner,
substr(object_name,1,30) object,
substr(object_type,1,30) type, status
from
dba_objects where status <>'VALID';
spool off

Sólo se puede ignorar esto

SYS.V_$KQRPD
SYS.V_$KQRSD
SYS.GV_$KQRPD
SYS.GV_$KQRSD

37.- En (Oracle10g)
Levantar la base de datos en modo restringido

% sqlplus '/as sysdba'
SQL> shutdown
SQL> startup restrict

38.- En (Oracle10g)
En el nuevo archivo de inicialización , dejar el parámetro NLS_LENGTH_SEMANTICS en CHAR (había sido cambiado a BYTE)

39.- En (Oracle10g)
- Levantar la base de datos de forma normal
SQL> startup

40.- En (Oracle10g)
Revocar los privilegios que no sean CREATE SESSION desde el rol CONNECT, para los usuarios que se obtuvieron en Oracle9i

41.- En (Oracle10g)
Crear el spfile
SQL> create spfile from pfile;

42.- En (Oracle10g)
Reconstruir los links públicos según lo encontrado en Oracle9i

43.- En (Oracle10g)
Modificar los parámetros del listener y levantarlo (Oracle10g)

44.- En (Oracle10g)
Habilitar CRON y JOBS

45.- En (Oracle10g)
Modificar el oratab si corresponde

46.- En (Oracle10g)
Ejecutar el DBMS_STATS para verificar el tema de las estadísticas

DBMS_STATS.GATHER_DATABASE_STATS

Gathering Statistics for the Cost Based Optimizer (Pre 10g) Nota : 114671.1

47.- En (Oracle10g)
Tareas post-instalación

How to tune your Database after Migration/Upgrade Doc ID: Note:262592.1

Apendices

Appendix A --> Parámetros obsoletos
ENQUEUE_RESOURCES
DBLINK_ENCRYPT_LOGIN
HASH_JOIN_ENABLED
LOG_PARALLELISM
MAX_ROLLBACK_SEGMENTS
MTS_CIRCUITS
MTS_DISPATCHERS
MTS_LISTENER_ADDRESS
MTS_MAX_DISPATCHERS
MTS_MAX_SERVERS
MTS_MULTIPLE_LISTENERS
MTS_SERVERS
MTS_SERVICE
MTS_SESSIONS
OPTIMIZER_MAX_PERMUTATIONS
ORACLE_TRACE_COLLECTION_NAME
ORACLE_TRACE_COLLECTION_PATH
ORACLE_TRACE_COLLECTION_SIZE
ORACLE_TRACE_ENABLE
ORACLE_TRACE_FACILITY_NAME
ORACLE_TRACE_FACILITY_PATH
PARTITION_VIEW_ENABLED
PLSQL_NATIVE_C_COMPILER
PLSQL_NATIVE_LINKER
PLSQL_NATIVE_MAKE_FILE_NAME
PLSQL_NATIVE_MAKE_UTILITY
ROW_LOCKING
SERIALIZABLE
TRANSACTION_AUDITING
UNDO_SUPPRESS_ERRORS

Appendix B --> Parámetros depreciados
LOGMNR_MAX_PERSISTENT_SESSIONS
MAX_COMMIT_PROPAGATION_DELAY
REMOTE_ARCHIVE_ENABLE
SERIAL_REUSE
SQL_TRACE
BUFFER_POOL_KEEP (replaced by DB_KEEP_CACHE_SIZE)
BUFFER_POOL_RECYCLE (replaced by DB_RECYCLE_CACHE_SIZE)
GLOBAL_CONTEXT_POOL_SIZE
LOCK_NAME_SPACE
LOG_ARCHIVE_START
MAX_ENABLED_ROLES
PARALLEL_AUTOMATIC_TUNING
PLSQL_COMPILER_FLAGS (replaced by PLSQL_CODE_TYPE and PLSQL_DEBUG)

Appendix C --> Cosas varias

Además , esta la interrogante sobre la consola y cada uno de los componentes que quedan invalidos, por ejemplo XML .

a)
El Enterprise Manager no existe en Oracle9i, existe un módulo que no es la misma consola que vemos, por ende , habría que ejecutar el emca para reconstruir el repositorio , mediante el comando :

emca -config dbcontrol db -repos create

Teniendo en cuenta que hay que setear ORACLE_HOME y ORACLE_SID

b)
Las características de Oracle10g, ese dato lo podemos ver con la siguiente consulta

SQL> col comp_name format a60
SQL> select comp_name , status , version , procedure from dba_registry

Donde status me indica el estado del componente, version es la versión del componente y procedure es aquel package que lo recrea, o sea, ante un error ejecutamos el procedimiento.

Espero les sirva


by Ligarius
24.06.09. 20:12:36. 1923 words, 19253 views. Categories: Base de datos, Oracle 10g ,

ASMCMD : Utilitario para trabajar con instancias ASM

En Oracle10gr1 nacio Automatic Segment Management , una nueva manera de trabajar con los datafiles.

Obviamente esto apunta al mejoramiento del trabajo con los datafiles, a eliminar los cuellos de botella , por ejemplo I/O.

En Oracle10gr2, nacio un utilitario para realizar muchas tareas sobre ASM, llamado ASMCMD

Entonces para que complicarnos aprendiendonos tantos comandos y vistas de ASM

En realidad.... debiesemos conocerlas!!! y después usar ASMCMD

Pero bueno... acá el manual

Manual de ASMCMD en Oracle10g

Espero les sirva

Espero que sirva

by Ligarius
04.06.09. 07:50:04. 86 words, 6382 views. Categories: Base de datos, Oracle 10g ,

Analizando la carga de trabajo mediante los Switch de Redologs

A veces sucede que nos dicen

" La base de datos está lenta " , y claro, al buscar y buscar, no encontramos el porque, hasta que alguien nos dice..

"Y justo se coloca lenta , cuando ejecutamos un proceso de carga masiva" |-|

Obviamente una de las cosas que siempre debemos fijarnos cuando el desempeño de nuestras bases de datos se ven afectadas , es inicialmente si hay algún proceso que genere alta transaccionalidad.

Esto se puede verificar por la cantidad de Switch de Redo log (información generada en los archivos de redolog)

¿Cómo saberlo? aunque sea una estimación...

Pues hay mucho scripts al respecto, y de hecho el script que les voy a enseñar, esta en miles de partes, pero la verdad es bastante útil

Este script tiene que ser ejecutado con la instancia arriba

Script SQL para calcular la cantidad de Switch de Redo Log
Para ejecutar este archivo :
sqlplus "/ as sysdba" @redo.txt

Como se visualiza la información

Este script puede que ser ejecutado con la instancia abajo :>>
Script en Perl para calcular la cantidad de Switch de Redo Log
Basado en los switch que aparecen en el archivo de alertas
Para ejecutar este archivo :
perl count_log_switches.txt

Dentro del archivo count_log_switches.txt existe una línea que se visualiza así

@check_files=("/u01/app/oracle/admin/$db_sid/bdump/alert_$db_sid.log");

En esa línea debemos colocar la real ruta de nuestro archivo de alertas ;)

Como se visualiza la salida del perl

Si analizan la información que saca estos scripts, no debiesen sobrepasar (según Oracle) los 3 switch por hora, como recomendación , les puedo decir que un switch cada 10 minutos no es para nada malo (se debe considerar el tamaño de los archivos de redolog)

Particularmente me gusta mas el de la consulta a la base de datos mediante SQL, ya que la mantención sobre el archivo de alertas muchas veces no nos deja mirar muchos días hacía atrás.

Referencias
Script: Perl sample script to parse the Alert Log for log switches Doc ID: 73475.1

Espero les sirva

by Ligarius
11.06.09. 18:13:17. 357 words, 8462 views. Categories: Base de datos, Oracle 10g, Tuning / Performance ,

<< 1 2 3 4 >>