martes, 18 de noviembre de 2014

Script - Valores repetidos en Índice Único

Si queremos tener valores repetidos en una tabla, pero que las futuras inserciones se eviten duplicidades, se puede hacer uso de constraints tipo UNIQUE en estado ENABLE NOVALIDATE, es decir, donde los datos a insertar deben cumplir la restricción, pero pueden existir datos en la tabla que no lo hagan.

Este caso es un poco especial, ya que el comando habitual "... ENABLE NOVALIDATE" no funciona directamente, hay que crear el índice de tipo NORMAL previamente:

-- Ejemplo:

-- Creamos la tabla PRU1 con valores duplicados
CREATE TABLE PRU1 AS SELECT TABLE_NAME, OWNER FROM DBA_TABLES UNION ALL SELECT TABLE_NAME, OWNER FROM DBA_TABLES;

-- Creamos un índice "normal" sobre dicha tabla en los campos necesarios
CREATE INDEX PRU1_01_I ON PRU1(TABLE_NAME, OWNER);

-- Añadimos la constraint en estado "enable novalidate"
ALTER TABLE PRU1 ADD CONSTRAINT PRU1_01_I UNIQUE (TABLE_NAME, OWNER) ENABLE NOVALIDATE;

Así, no se podrán insertar valores repetidos en la tabla, pero se mantienen en la misma valores repetidos.

viernes, 19 de septiembre de 2014

Formación en MS Office con Certificación Oficial

¿Qué dice tu Curriculum sobre tus conocimientos de Microsoft Office?

Con nuestro método de entrenamiento aprenderás de verdad y podrás obtener la certificación oficial que necesitas, con validez internacional.


Incluye las aplicaciones de Microsoft Office: Word, Excel, PowerPoint, Access con una metodología única y a un precio inmejorable.

Matrícula abierta permanente, de manera que empiezas el curso inmediatamente en cualquiera de sus modalidades, sin necesidad de esperar a que se formen grupos.

Certificación oficial de Microsoft Office Specialist (MOS). Se trata de la única que acredita oficialmente tus conocimientos en MS Office.

Según estudios realizados por Certiport y Microsoft:

El 91 % de los directores de recursos humanos considera que las certificaciones forman parte de sus criterios de contratación. —Microsoft, Microsoft Certification Program Satisfaction Study, abril de 2012

El 80% del tiempo de trabajo diario es dedicado a la utilización de Microsoft Office, el 89% de los supervisores entrevistados afirman que sus empleados son más productivos tras obtener la certificación. —Post Microsoft Office Impact on the job (certiport survey, 2007)

Formación Avanzada te ofrece los siguientes cursos:

Word 2010 o 2013     niveles: Specialist y Expert
200€ online
234€ presencial

Excel 2010 o 2013    niveles: Specialist y Expert
200€ online
234€ presencial

PowerPoint 2010    nivel: Specialist
200€ online
234€ presencial

Access 2010        nivel: Specialist
200€ online
234€ presencial

Máster core (Word, Excel, PowerPoint, Access)   
600€ online   
702€ presencial

Garantía masterofimatica.com: En todas las modalidades, se trata de una formación muy metódica con la que se garantiza la enseñanza completa de las aplicaciones, realizando ejercicios prácticos y utilizando siempre las aplicaciones reales, no se utilizan simuladores.

Escríbenos a la dirección info@formacionavanzada.com, con el nombre, correo y teléfono, y nos pondremos en contacto para ofrecer un asesoramiento personalizado gratuito.
-----
Atención al cliente:
900 901 095 (teléfono gratiuto)


martes, 27 de mayo de 2014

Script - Impdp optimizado

Ejemplo de importación (suponemos ya existe un export full completo de la bbdd ORCL) del esquema USER cambiandole el nombre a USER_PRU, donde usamos opciones de paralelismo y optimizamos el tiempo de creación de las constraints creándolas con la opción NOVALIDATE.

export ORACLE_SID=ORCL

------------------------------------------------------------------
-- GENERAMOS CONSTRAINTS.SQL
------------------------------------------------------------------

impdp userid=\'sys/sys as SYSDBA\' schemas=USER REMAP_SCHEMA=USER:USER_PRU dumpfile=expdp_ORCL_%U.dmp  directory=EXPORTS_DIR INCLUDE=CONSTRAINT sqlfile=USER_PRU.constraints.sql

------------------------------------------------------------------
-- MODIFICAMOS FICHERO GENERADO, CON CLAUSULA NOVALIDATE
------------------------------------------------------------------
sed -e "s/ENABLE;/ENABLE NOVALIDATE;/g" USER_PRU.constraints.sql > USER_PRU.constraints.modificado.sql

------------------------------------------------------------------
-- IMPORT SIN CONSTRAINTS
------------------------------------------------------------------
impdp userid=\'sys/sys as SYSDBA\' full=n directory=EXPORTS_DIR dumpfile=expdp_ORCL_%U.dmp logfile=impdp_ORCL.log parallel=4 job_name=Imports_dp schemas=USER REMAP_SCHEMA=USER:USER_PRU EXCLUDE=CONSTRAINT,INDEX_STATISTICS

------------------------------------------------------------------
-- CARGAMOS LAS CONSTRAINTS
------------------------------------------------------------------
sqlplus / as SYSDBA @USER_PRU.constraints.modificado.sql

------------------------------------------------------------------
-- ANALIZAMOS
------------------------------------------------------------------
exec dbms_stats.gather_database_stats;

jueves, 1 de agosto de 2013

OEM Grid Control

Apuntes Oracle Enterprise Manager Grid Control:

1) Para obtener trazas a distintos niveles (info, warm, debug, ...) de la ejecución de la paquetería interna de OEM Grid Control (esquema SYSMAN del repositorio central del Grid), se puede utilizar la tabla:

EMDW_TRACE_CONFIG

Donde tenemos la posibilidad de activación de trazas a distintos niveles:

CONTEXT_TYPE_ID CONTEXT_TYPE                   TRACE_LEVEL
--------------- ------------------------------ -----------
              9 COMPLIANCE_EVALUATION                    0
              1 DEFAULT                                  0
              2 TRACER                                   0
              3 LOADER                                   0
              4 NOTIFICATION                             0
              5 REPOCOLLECTION                           0
              6 EM.JOBS                                  0
              7 EM.BLACKOUT                              0
              8 SVCTESTAVAIL                             0

Cambiando el "Trace_level" manualmente o a través de la llamada de algún paquete (revisar metalink para extender la información).

En caso de querer la traza de todo a nivel de debug:

update sysman.emdw_trace_config set trace_level=4;

2) Para cambiar el HOSTNAME que utiliza la instalación de un agente del grid, en vez de tener que cambiar el hostname de la máquina, se puede utilizar la variable ORACLE_HOSTNAME a la hora de ejecutar el "runInstaller" y posterior agentca -f:

./oui/bin/runInstaller -clone -forceClone ORACLE_HOME=... ORACLE_HOME_NAME=... -noconfig -silent ORACLE_HOSTNAME=....

./bin/agentca -f

viernes, 24 de mayo de 2013

Script - Bloqueos_Espera

Nos muestra los objetos por los que está esperando una session (si está esperando por un segmento), se le pasa como parámetro el sid de la sessión a monitorizar.


(recodificado para 11g)

select vw.* ,vw.event,segment_name, segment_type 
from 
dba_extents,
(select vw.*, rownum rown from v$session_wait vw where vw.sid=&&1 order by rown) vw
where 
file_id(+) = vw.p1 
and
vw.p2 between block_id and block_id+blocks;

miércoles, 22 de mayo de 2013

Script - Foreign keys sin Indexar

Consulta para localizar FKs sin indexar en nuestra bbdd, utiliza la función transponer (http://www.soportedba.com/2011/01/script-trasponerfilasacolumnasql.html), (se debe modificar para incluir la directiva "with authid current_user").

Con la columna "INDICE_A_CREAR" obtenemos la propuesta del índice a crear (que habrá que revisar para incluir opciones de almacenamiento u otras características).

COLUMN INDICE_A_CREAR FORMAT A200

SELECT DISTINCT FK.OWNER,FK.TABLE_NAME, FK.CONSTRAINT_NAME, 'CREATE INDEX '||FK.OWNER||'.'||FK.TABLE_NAME||'_'||ROWNUM||'_I ON '||FK.OWNER||'.'||FK.TABLE_NAME||'('||TRANSPONER('SELECT COLUMN_NAME FROM DBA_CONS_COLUMNS WHERE OWNER='||CHR(39)||FK.OWNER||CHR(39)||' AND CONSTRAINT_NAME='||CHR(39)||FK.CONSTRAINT_NAME||CHR(39)||' ORDER BY POSITION',',')||')' INDICE_A_CREAR
FROM
    (select DC.OWNER, DC.TABLE_NAME, DC.constraint_name, DCC.COLUMN_NAME, DCC.POSITION
    FROM
        DBA_CONSTRAINTS DC,
        DBA_CONS_COLUMNS DCC
    WHERE
        DC.CONSTRAINT_NAME=DCC.CONSTRAINT_NAME AND
        DC.OWNER=DCC.OWNER AND
        DC.CONSTRAINT_TYPE='R') FK,
    (SELECT DI.OWNER, DI.TABLE_NAME, DI.INDEX_NAME, DIC.COLUMN_NAME, DIC.COLUMN_POSITION   
    FROM
        DBA_INDEXES DI,
        DBA_IND_COLUMNS DIC
    WHERE
        DI.INDEX_NAME=DIC.INDEX_NAME AND
        DI.OWNER=DIC.INDEX_OWNER ) IND
WHERE
    FK.COLUMN_NAME=IND.COLUMN_NAME(+) AND
    FK.POSITION=IND.COLUMN_POSITION(+) AND
    FK.OWNER=IND.OWNER(+) AND
    FK.TABLE_NAME=IND.TABLE_NAME(+) AND
    IND.TABLE_NAME IS NULL AND
    FK.OWNER NOT IN ('SYS','SYSTEM','ORACLE_OCM','DIP','TSMSYS','SYSMAN','DBSNMP','WMSYS','EXFSYS')
ORDER BY 1,2,3
/