Category: SQL / Programación
SQL : Como contar los registros de las tablas de usuarios en una sola consulta
Este es un script que encontré por la Web , y que está bastante padre (a lo mexicano), pues en una sola consulta cuenta la cantidad de registros de todas las tablas de un esquema en partícular

La consulta
select table_name ,
to_number(extractvalue(dbms_xmlgen.getXMLtype ('select count(*) cnt from '||table_name),
'/ROWSET/ROW/CNT')) "Cantidad de filas"
from dba_tables
where owner like '%NOMBRE USUARIO%'
/
¿Práctico cierto?
Espero les sirva
![]()
![]()
23.03.10. 07:13:40. 78 words, 1262 views. Categories: SQL / Programación , Leave a comment » • Send a trackback »
Como crear ROLES de consulta sobre toda la base de datos, de forma fácil
La pregunta es la siguiente
".. Necesito generar un usuario que sea de sólo lectura para toda mi base de datos .."
Pues bien , eso se puede hacer con el siguiente script
click en el LINK

, los pasos para llevarlo a cabo
1.- Copiar el archivo a una ruta fácil de repetir
, no colocar en Documents and Settings, etc ..etc ..etc 
2.- Ejecutar el archivo de la forma
sqlplus usuario/password@string_conexion @archivo.sql
3.- En el script va a aparecer una consulta con respecto al nombre del usuario
Ingrese usuario a crear con solo roles de lectura :
4.- Además aparece una pregunta si es VoC ,
V = Implica que se mostrará el comando (Visualizar)
C = Implica que se ejecutará el comando (Crear)
Desea visualizar o crear (V o C)? :
5.- Con lo anterior se crearán roles con el prefijo ROLSER_nombre_de_esquema
6.- Se creará el usuario con grant de connect y se le asignarán todos los roles generados
En resumidas cuentas, un comando , para esa ingrata tarea ... de enrolar
Espero les sirva
![]()
![]()
26.01.10. 14:00:00. 180 words, 5881 views. Categories: Base de datos, SQL / Programación, Cosas varias, Sql*Plus , Leave a comment » • Send a trackback »
Oracle10gr2 : Disminuyendo el LOG FILE SYNC con COMMIT NOWAIT
Para comenzar la charla , les pido disculpas por el tiempo alejado de las canchas, pero fue única y exclusivamente por la carga de trabajo que tenía en mi empresa, de hecho hoy en día me encuentro dictando dos cursos por día :
- Horario de tarde : WorkShop II Ed 3 de Oracle10g
- Horario de noche : Oracle Reports Builder 11g
Así que imagínense el tiempo que tengo, pero bueno... a lo que vinimos...

El evento de espera LOG FILE SYNC se da cuando una sesión de usuario ejecuta un final de transacción por ejemplo un COMMIT o un ROLLBACK , la información almacenada en el Log Buffer para esa transacción necesita ser envíada a disco , especificamente a los archivos de redolog, cuando está finaliza , la sesión recién comienza a generar otras actividades, en otras palabras, cuando se ejecuta un término de transacción la sesión entra en un evento de espera, que está relacionado al tiempo que demora el LGWR en escribir las entradas del log buffer (en realidad son vectores, pero es materia de otro Post) hacía los redologs, cuando eso finaliza .. la transacción se acepta como válida.
A veces , cuando la aplicación es muy transaccional , el LOG FILE SYNC , aparece como un Top 5 dentro del Statspack o dentro un AWR Rpt, cuando sucede eso, hay formas de mejorar esos tiempos de respuesta.
Observación : No se recomienda llevar a cabo estos cambios sin la visación de Oracle Support
Ejecución de commit asincrónico
Como ya vimos el proceso del commit y como se vaciaban los registros desde el Log Buffer , pasamos a señalar el como ejecutar el commit asincrónico para solucionar el evento de espera LOG FILE SYNC
El comando commit posee variaciones , las cuales se pueden apreciar en el siguiente detalle
WAIT : No se retorna el mensaje de commit exitoso hasta que las entradas del LogBuffer hayan sido escritas a los redo logs
NOWAIT : El commit puede retornar el control a la aplicación aunque aún la sentencia no este registrada a los archivos de redologs, lo cual puede resultar algo peligroso.
IMMEDIATE : El proceso LGWR escribe de forma inmediata la entrada de la transacción presente en los log buffer hacía los redo logs, en otras palabras , se fuerza un I/O
BATCH : Este modo le indica a Oracle que a pesar de haber finalizado la transacción con un commit, la bajada de los vectores desde el log buffer se produzca en el ciclo normal del log buffer , por ejemplo , cuando se llena a un tercio
Por defecto , cuando ustedes ejecutan el commit se ejecuta con WAIT IMMEDIATE , pero esto se puede modificar ejecutando la siguiente sentencia
COMMIT WRITE NOWAIT IMMEDIATE , o sea, no espera a que se escriba la información del log buffer a los redo logs, entrega el control a la aplicación y hace la bajada de la información del log buffer de forma inmediata a los redo logs
Es una opción que hay que manejar con cuidado , pues puede haber pérdida de datos , por ejemplo este comando
COMMIT WRITE NOWAIT BATCH , puede dejar mucha información en memoria , indicarles que se hizo el commit exitoso y ante una caída quedar con información inconsistente.
Todo lo anterior también se puede setear mediante el parámetro de incialización correspondiente
COMMIT_WRITE
Y analizando toda esta información , para solucionar en parte el evento de espera LOG FILE SYNC , se podría cambiar el modo del commit para los procesos batch de la siguiente forma
COMMIT WRITE NOWAIT BATCH
Espero que les haya servido
Documentación necesaria
Parámetro COMMIT_WRITE
Evento de espera LOG FILE SYNC
![]()
![]()
02.12.09. 13:23:18. 632 words, 1876 views. Categories: Oracle 11g, Oracle 10g, SQL / Programación, Tuning / Performance , Leave a comment » • Send a trackback »
VARIOS : Buena matriz de las funciones en Oracle 11gr1
Leyendo por aquí por acá , encontre esta estupenda matriz de las funciones en Oracle, con ejemplos, sintáxis y agrupaciones.

Realmente muy buena, para Oracle11gr1
26.06.09. 18:17:44. 31 words, 388 views. Categories: Base de datos, SQL / Programación , Leave a comment » • Send a trackback »
Utilizar el Report Builder, sobre todo con el Layout Editor
Me imagino que todos los que hemos programado en Reports Builder, conocemos lo complicado que es cuando nos encontramos con una serie de Frame de repetición, de no repetición , campos, imagenes, etc.
De hecho se podría decir que se ve así 



Pues bien, existe una serie de modificaciones que se pueden realizar en Reports para que nunca más se visualice un reports de esa forma.
1.- Genero un reports por defecto , con el Wizard

2.- La salida del reporte se verá como sigue

3.- Y dentro del Paper Layout, saldrá así, todo junto, pegado , una línea sobrepuesta con otra y en este punto, maldecimos de porque llegamos a la informáatica, sobre todo, cuando se mueve una de esas rayitas ![]()

4.- Para evitar esas líneas pegadas, vamos al menú principal, y en Edit --> Preferences, veremos la siguiente pantalla

Y modificamos los campos "Horizontal Gap", "Vertical Gap" , "Horizontal Interfield" y "Vertical Interfield" , asignandole un valor, salvamos y cerramos
5.- Volvemos a ejecutar el reporte y se visualiza de la siguiente forma

O sea, igual que la vez anterior
6.- Pero la diferencia grandiosa y única, es que ahora aparece todo separado, que bien!!

Espero les sirva
![]()
![]()
23.06.09. 11:32:39. 202 words, 865 views. Categories: Base de datos, SQL / Programación , Leave a comment » • Send a trackback »