miércoles, 23 de diciembre de 2015

Modificar el valor de STALE_PERCENT

STALE_PERCENT indica el porcentaje de cambios que debe alcanzar una table para que Oracle pase las estadísticas de forma automática sobre las mismas. En la mayoría de los casos, el valor predeterminado, suele ser suficiente y no hay que tocar este valor que por defecto es 10%. En algunos casos, para mejor el rendimiento, es necesario que en ciertas tablas, las estadísticas se pasen  por ejemplo  con más frecuencia y debemos disminuir el valor de STALE_PERCENT. 
A continuación muestro como consultar el valor que tienen las tablas y como cambiarlo al valor que queremos.

1.-Consultamos el valor para todas las tablas del esquema donde queremos modificar STALE_PERCENT. También  podemos filtrar la consulta y consultar solamente sobre las tablas que nos interesa.

SELECT owner, table_name,
DBMS_STATS.get_prefs(ownname=>'NOMBRE_ESQUEMA',tabname=>table_name,
pname='STALE_PERCENT') 
FROM dba_tables 
WHERE owner = 'NOMBRE_ESQUEMA';


2.-Modificamos  el STALE_PERCENT a 5% para algunas tablas 

--modificamos para la Tabla1  
exec dbms_stats.set_table_prefs(ownname=>'NOMBRE_ESQUEMA',tabname=>'Tabla1',pname=>'STALE_PERCENT',pvalue=>5);

--modificamos para la Tabla 2
exec dbms_stats.set_table_prefs(ownname=>'NOMBRE_ESQUEMA',tabname=>'Tabla2',pname=>'STALE_PERCENT',pvalue=>5); 

Si en vez de ir cambiando tabla por tabla, quisiéramos cambiar el valor de las tablas que tengan más de 1000000 filas, lo haríamos de este modo:

BEGIN
FOR c IN (SELECT TABLE_NAME, T.NUM_ROWS FROM DBA_TABLES T WHERE T.OWNER = 'NOMBRE_ESQUEMA'  and T.NUM_ROWS > 1000000) 
LOOP
    DBMS_STATS.SET_TABLE_PREFS('NOMBRE_ESQUEMA', c.TABLE_NAME, 'STALE_PERCENT', '5');
END LOOP;
END;

3.- Y por último, comprobamos los nuevos valores y en vez de 10% deberían de salir 5%, lo que implica que Oracle pasará las estadísticas sobre esas tablas con más frecuencia.

SELECT owner, table_name,
DBMS_STATS.get_prefs(ownname=>'NOMBRE_ESQUEMA',tabname=>table_name,
pname='STALE_PERCENT') 
FROM dba_tables 
WHERE owner = 'NOMBRE_ESQUEMA';

jueves, 17 de diciembre de 2015

Modificar tamaño SGA

Hoy un pequeño caso práctico, como modificar el valor de los parámetro sga_target y sga_max_size.

Comprobamos los valores del SGA actual:

SQL> show parameter sga_target;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 1G

SQL> show parameter sga_max_size;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 2G


Hacemos una copia de seguridad del fichero de parámetros:

create pfile = '$ORACLE_HOME/dbs/initSID_BK.ora' from spfile;

Aumentamos el tamaño del sga_max_size a 3Gb y  el tamaño de sga_target a 2Gb

ALTER SYSTEM SET SGA_MAX_SIZE=3G scope=SPFILE;

ALTER SYSTEM SET SGA_TARGET=2G scope=SPFILE;

Paramos y arrancamos la base de datos , para que los cambios se hagan efectivos
shutdown immediate;
startup;

Comprobamos que se han cambiado los valores:

SQL> show parameter sga_target;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 2G

SQL> show parameter sga_max_size;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 3G



En el caso que fuera necesario aumentar más el SGA_TARGET, lo podríamos hacer sin parar la base de datos, con la siguiente sentencia:

ALTER SYSTEM SET SGA_TARGET=2560M scope=BOTH;


En este caso, como el SGA_MAX_SIZE es igual a 3Gb, SGA_TARGET podemos aumentar hasta 3Gb sin tener que reiniciar la base de datos

martes, 15 de diciembre de 2015

Certificaciones Oracle para DBAs

Llevo años trabajando con Oracle, primero desarrollando en PL/SQL y ahora como DBA, pero hasta ahora no había animado a certificarme. Después de darle muchas vueltas al asunto, me he decido a dar el paso. En mi caso quiero obtener el certificado de OCP en Oracle 11g.
Antes de lanzarte a la piscina de las certificaciones, tienes que tener en cuenta:
  1. Los exámenes son en inglés.
  2. Los exámenes y los cursos cuestan dinero.El OCA cuesta 321€, el OCP y OCM cuestan mucho más. Hay que tener en cuenta también  material adicional que puedes necesitar tanto online, como libros de consulta
  3. Te va llevar tiempo prepararlos.
  4. A partir del OCA, necesitarás experiencia de haber trabajado con bases de datos Oracle, solo con estudiar la teoría no será suficiente para certificarte

 Si aún estas interesado, te dejo aquí el enlace de los diferentes certificaciones que ofrece Oracle, para que puedas elegir la que mejor encaja con tu carrera profesional.
En el caso de los DBAs, es interesantes sacar primero el OCA (Oracle Certified Associate),  luego OCP (Oracle Certified Master) y finalmente cuando tengas algunos años de experiencia como administradores de bases de datos, tiempo y dinero, te animo que saque el OCM (Oracle Certified Master), seguramente te abrirá muchas puertas ;)

En mi caso voy a comenzar a preparar el OCA, Oracle Certified Associate. Para ello, hay que sacar 2 exámenes  uno de SQL y otro de Administración de Bases de Datos. La parte de SQL, tenemos varios exámenes y de estos debemos elegir solo uno, la segunda parte no hay opción, hay que sacar el  1Z0-052.


De la primera parte de los exámenes de SQL, voy a preparar el 1Z0-051, que cuesta 109 € y luego tendré que hacer el 1Z0-052, que cuesta 212€.
Para hacer los exámenes  se puede contactar con academias asociadas, donde gestionan todo el proceso para poder realizar el examen en sus instalaciones.

Espero que  ya tengas claro que ruta de certificación vas a seguir y manos a la obra!!!!

En los siguientes post iré publicando, temario del examen y materiales con los que comenzaré a preparar el mi 1Z0-051.