Antón María Rodríguez Yuste

 
 
 
  • About

    Consultor orientado al sector TELCO (eTOM, SID), dirección de proyectos (scrum) y sistemas (Oracle, Weblogic, Jboss, Solaris, etc.). Un poco de todo, vamos.

  • Varios

Sindicación


Licencia


Validación



Sistemas






Varios

 
Copia de seguridad de la BD de ORACLE September 26th, 2007

Ejecutar desde Bash para el export:

CODE:
  1. ORACLE_SID=SID_BASE_DATOS exp userid=USUARIO/PASSWORD direct=y file=host-SID_BASE_DATOS-USUARIO-FECHA.dmp

Para el import primero nos deshacemos de todo las tablas del usaurio, algo así (ejecutado como el usuario en cuestión):

CODE:
  1. select 'drop table ' || table_name  || ' cascade constraints;' from user_tables order by table_name;

Y pegamos el resultado directamente en el sqlplus. Luego:

CODE:
  1.  
  2. ORACLE_SID=SID_BASE_DATOS imp userid=USUARIO/PASSWORD file=host-SID_BASE_DATOS-USUARIO-FECHA.dmp log=host-SID_BASE_DATOS-USUARIO-FECHA..log full=y
  3.  
PL/SQL Developer September 26th, 2007

Uf, cuanto me va a llevar aprender a dominar el programilla este. Algunos trucos muy buenos:

1) Ajustar debidamente las preferencias para que te ejecute sólo la sentencia SQL en la que se encuentra el cursor. (Tools -> Preferences -> SQL Window -> Autoselect statement). Además, hacer que recuerde las contraseñas. (Tools -> Preferences -> Logon history -> Story history y Store with password). También hay un pequeño recuadro que se puede situar en cualquier parte y que te deja navegar entre las distintas ventanas abiertas. Muy útil cuando tienes varias (Tool -> window list).

2) Cuando quieres ejecutar un script algo gordo para evitar que te abra mil pestañas (lo que además, hace que casque) abrés una command window y lo pegas ahí. Así se ejecuta sin generar nada.

3) En Tools -> Sessions puedes ver que sesiones hay a la BD y cargarte aquellas que generen demasiada carga.

La gran pega: no tiene versión para Linux. Gracias, Richy!.

Comando TOP September 25th, 2007

¿Qué decir a estas alturas del TOP?

Pués que para ordenar los procesos por consumo de CPU hay que pulsar la "P" y para memoria la "M".

En Solaris, no existe. Utilizar prstat.

Procedures y jobs en Oracle September 24th, 2007

Vamos a crear un procedimiento en Oracle que borre los registros con más de seis meses:

CODE:
  1.  
  2. create or replace procedure PROCEDIMIENTO_PRUEBA (meses in NUMBER) is
  3. begin
  4.   delete from TABLA_DE_PRUEBA where add_months(SYSDATE, -1*meses)> LAST_MODIFIED_DATE;
  5. end PROCEDIMIENTO_PRUEBA;
  6.  

Ahora vamos a hacer que se ejecute cada tres meses:

CODE:
  1.  
  2. declare
  3.   aJob binary_integer;
  4. begin
  5.   dbms_job.submit(job => aJob,
  6.                   what => 'PROCEDIMIENTO_PRUEBA(50);',
  7.                   next_date => trunc(sysdate)+1,
  8.                   interval => 'add_months(sysdate,3)');
  9.   commit;
  10. end;
  11. /
  12.  

Y, para comprobar que se ejecuta podemos ejecutarlo. Además, comprobar el parámetro job_queue_processes. Tiene que estar a un número mayor o igual que el número de jobs que se van a ejecutar:

CODE:
  1. select * from v$parameter t where t.NAME='job_queue_processes';

Para cambiarlo:

CODE:
  1. alter system set job_queue_processes=3 scope=memory;

Lo de scope es para que el cambio sólo sea en memoria, de forma que se pierde en el siguiente reinicio.

Como siempre, gracias a Maese Richard.

NOTA: otro ejemplo de JOB

CODE:
  1.  
  2. begin
  3.   sys.dbms_job.submit(job => :job,
  4.                       what => 'update TABLAPRUEBA set state=''PRUEBA1'' where state=''PRUEBA2'' ;',
  5.                       next_date => to_date('16-09-2007 19:00:45', 'dd-mm-yyyy hh24:mi:ss'),
  6.                       interval => 'sysdate+6/24');
  7.   commit;
  8. end;
  9. /
  10.  
Más truquitos de Oracle September 21st, 2007

Ahí van algunos ejemplos:

1) Seleccionar los registros con más de seis meses:

CODE:
  1. select count(*) from TABLA_EJEMPLO t where add_months(SYSDATE, -6)> t.LAST_MODIFIED_DATE;

2) Ver cuanto tamaño ocupa una tabla:

CODE:
  1. select bytes/1024/1024,t.* from user_segments t where t.segment_name='TABLA_EJEMPLO';

Además he aprendido varias cosas para configurar el PL/SQL Developer pero eso ya es otra historia. Gracias nuevamente a Richi por los consejos.