dilluns, 19 de maig del 2008
Suplantar usuarios
En Oracle tenemos la siguiente sentencia:
ALTER SESSION SET CURRENT_SCHEMA=SCOTT;
Aunque esto nos es útil para toquetear sus objetos sin necesidad de estar poniendo siempre el
SCOTT.OBJETO
no nos será útil para comprobar que ese privilegio que le hemos concedido a un usuario esté funcionando correctamente, ya que en realidad continuamos siendo el mismo usuario:
SQL> conn / as sysdba
SQL> alter session set CURRENT_SCHEMA=SCOTT;
Sesi�n modificada.
SQL> select user from dual;
USER
------------------------------
SYS
En Sybase tenemos el comando setuser, ahora mismo no dispongo de un gestor Sybase a mano, pero puedo decir que este comando es más potente que el comando de Oracle, ya que realmente estás suplantando al usuario, pudiendo por ejemplo dar permisos sobre objetos del usuario suplantado.
Y por último, la suplantación definitiva!!!!!
Lo vamos a probar con Oracle, pero seguro que también se puede hacer en Sybase.
Este método sólo es para utilizarlo en situaciones extremas, y por el bien de la humanidad, nunca para hacer el mal.
Ahí vamos:
-Primero miramos el password encriptado del usuario
SQL> select username, password from dba_users where username='SCOTT';
USERNAME PASSWORD
------------------------------ ------------------------------
SCOTT F894844C34402B67
-Cambiamos el password del usuario SCOTT
SQL> alter user SCOTT identified by lion;
Usuario modificado.
-Nos conectamos con el nuevo password y hacemos lo que tengamos que hacer
SQL> conn scott/lion
Conectado.
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
-Luego restauramos el password antiguo
SQL> conn / as sysdba
Conectado.
SQL> alter user scott identified by values 'F894844C34402B67';
-Y ya está.
SQL> conn scott/tiger;
Conectado.
Esto, como ya he dicho puede ser utilizado para hacer cosas muy feas, pero también nos puede ser útil por ejemplo en esa aplicación antigua que ya nadie sabe como funciona, y nadie se atreve a tocar, como la aplicación se conencta con un usuario del que nadie sabe el password no podemos modificarlo, pero si necesitamos entrar con este usuario, siempre podemos hacer esto.
Hasta lueg
dimarts, 29 d’abril del 2008
Una de parámetros en las estadísticas
Por cierto, probablemente cuando vuelva a leer lo que voy a escribir me darán ganas de llorrar, pero bueno,
le vamos a meter 4 al Mánchester (o no)!!!
Después de desvariar un poco, aquí va lo de las estadísticas:
"
Este tío ha hecho un comentario muy interesante sobre un tema de parámetros específicos en el paquete estrella que actualiza estadísticas en oracle.
Oracle no reconoce públicamente este error, pero yo también lo corroboro.
Comprobarlo y guardarlo en vuestro kit de supervivencia:
http://davidpujol.blogspot.com/2007/09/estadsticas-qu-mtodo-utilizar.html
Óscar
"
Top 10 CPU queries en Oracle
"Hola de nuevo,
He medio montado esta query que me parece muy útil. Extrae las 10 consultas que más cpu han consumido en una instancia oracle desde que ésta está arriba. Con una simple modificación, se puede usar también para sacar las que usan más accesos a la caché y otras.
select * from (
select distinct sql_text, round(cpu_time/executions)
runtime_mem, executions, cast ((parse_calls/executions) as number (10,0)) parse_call_per_exec, cast((sorts/executions) as number (10,2)) sorts_per_exec,
cast ((buffer_gets/executions) as number(10,0)) buffer_gets_per_exec , cast((disk_reads/executions) as number(10,0)) disk_reads_per_exec, loads, open_versions,
to_char(to_date(first_load
command_type, parsing_user_id, OPTIMIZER_MODE
from v$sqlarea
where (parsing_user_id != 0)
and (executions >= 1000) order by cpu_time_sec_per_exec desc)
where rownum <=10
Con cambiar el order by puedes sacar las que tienen más buffer gets, las que acceden más a disco, etc. Esta consulta está para 9i, pero en 10g se pueden sacar aún más datos (mirad la vista v$sqlarea).
Con esta vista lo más importante a tener en cuenta es que algunos datos son acumulativos, y otros no, y que, de los acumulados, unos nos interesan acumulados y otros no. Por eso hay que tratarla un poco.
En este caso he puesto executions >=1000 porque me interesaba sacar las consultas frecuentes que más consumen. Si se quiere sacar la que más ha consumido de todos los tiempos (desde que la instancia está arriba, claro) se ha de poner un 1. Esto depende del tipo de entorno que tengáis o de lo que busquéis.
Otra posibilidad a tener en cuenta es que si el entorno no usa bind variables (o no las usa bien), puede que todas las consultas que os ocupen el top ten sean variaciones de la misma (un select con diferentes condiciones de búsqueda). Ese caso se puede añadir substr(sql_text,1,50) (o el valor más apropiado para el caso) para eliminar las duplicaciones.
Si sospecháis que el problema no es el tipo de query, sino que hay una query que para un determinado valor se dispara el coste (por un tema de duplicaciones en índices, o que no entra por índice), se puede eliminar la cláusula distinct, pero en ese caso se tiene que añadir sql_text como condición con alguna cadena, esto es, hay que ir ya a la búsqueda de una determinada query y de cuánto consume. Si se lanza sin el distinct os pueden salir montones de queries iguales. Claro que siempre podéis lanzarla sin el rownum y leeros las cinco mil líneas, o más, que os saldrán a ver si encontráis algo interesante.
Xavi"
divendres, 25 d’abril del 2008
Oracle en Debian
Hoy vamos a hablar de línux y oracle. En un principio Oracle Database está hecho para que funcione sobre Suse y Red Hat, aunque esto no es del todo cierto, ya que existe desde hace un par de años una versión "express edition" para Debian, algún día igual podemos hacer "apt-get install oracle" y la mitad de los dba's nos vamos a la puta calle :-S
http://www.oracle.com/technology/software/products/database/xe/htdocs/102xelinsoft.html
Cuando decía "Oracle Database está hecho para...", básicamente me refería a que (aparte de temas de soporte y otras mandangas), en los únicos sistemas en un principio en los que podrás hacer ./runInstaller, y te saldrá la ventanita java del instalador son Red Hat y Suse.
Pero tranquilos si queremos instalarlo en otro sistema operativo con pingüinos, no tendremos que hacer un curso de ingeniería avanzada. Simplemente habremos de cumplir todos los requisitos que se le piden a cualquier otro s.o., y una vez comprobado esto, como no podremos cumplir el requisito del sistema operativo haremos lo siguiente:
./runInstaller -ignoreSysPrereqs
Nos hemos roto eh?
Bueno aparte de esto hemos de tener installadas unas cuantas librerías, y algún pequqño error no documentado que va apareciendo lo subsanamos con una visita al metalink.
Venga os paso un link donde sale la checklist para instalar una 10g en Debian, la 11g es igual, y si no soys tan vagos como yo y llegáis a la segunda página del google seguro que encontráis una checklist.
http://www.1x4x9.info/files/oracledebian/html/online-chunked/
Venga hasta luego
dissabte, 19 d’abril del 2008
Buenas a todos y a ver que pasa (tiempo de ejecución de una query)
De qué va este blog? Pues no lo tengo muy claro, en un principio la idea és ir poniendo entradas sobre documentos, ideas, howtos, etc., sobre temas de la administración de sistemas, y en especial administración de bases de datos (BBDD que queda más guay).
Aquí va el primero, Xavi me lo envió por correo el otro día, tengo muchas más cosas suyas, y mucho más interesantes, pero ya las iré poniendo poco a poco.
Venga, aquí va, como mirar cuanto tarda una query lanzada por nosotros mismos:
"
En sqlplus se puede usar la opción:
Set timing on
Por ejemplo
SQL> set timing on
SQL> select sysdate from dual;
SYSDATE
--------
17/04/08
Elapsed: 00:00:00.29
Esto no funciona con Embarcadero, por ejemplo."