04 noviembre 2016

¿Certificarte en Oracle? Aquí tienes su portfolio de certificaciones en Oracle

Con mi reciente estado laboral, he estado mirando varias certificaciones en bases de datos y como no, Oracle y MySQL son mis favoritas.
Aquí os dejo todas las que hay y señaladas en amarillo, las que planeo realizar, comenzando por SQL y PLSQL 

·         Database Application Development
o    Oracle Application Express (Oracle APEX)

o    SQL y PL/SQL

·         MySQL
o    MySQL Database Administration

o    MySQL Developer

·         Oracle Database
o    Database Cloud

o    Oracle Database 11g

o    Oracle Database 12c

o    Oracle Spatial 11g

28 octubre 2016

¿Hay vida más allá de Oracle? CriOS (Custom Real-time intelligent Operating System)?????



Hoy curioseando el publico que ve mi blog me he dado cuenta de una visita que ha usado el navegador CriOS. He investigado un poco y esta es la información que he sacado.

¿Qué es CriOS?
El sistem operativo de tu dispositivo móvil (tablet, smartphone) para identificar tu navegador usa una propiedad conocida como:
  • User Agent Strings (UA)
Esta propiedad ayuda a identificar qué navegador se está usando, qué versión, y de qué sistema operativo. Cuando las API de detección de características no están disponibles, se utiliza la UA para personalizar el comportamiento o el contenido de las versiones específicas del navegador.

Al igual que todos los demás navegadores, Chrome para iOS envía esta información en el encabezado HTTP User-Agent cada vez que se hace una petición a cualquier sitio. También está disponible en el cliente a través de JavaScript utilizando la llamada navigator.userAgent .:

De acuerdo con los desarrolladores de Google, la cadena de UA se ve así:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3

Así es como se diferencia de iOS Safari en el que dice CRIOS lugar de la versión. Así que esto:
  • if(navigator.userAgent.match('CriOS')
Debería de funcionar.

Pero...

Mirando esta página  encuentro:

  • Es la capa del sistema operativo (SO) es un diseño propio y personalizado basado en el sistema abierto Linux  con versión del kernel 2.6.x. Esta capa del sistema operativo está diseñado para proteger el sistema contra las amenazas basadas en software, proteger la integridad del kernel del sistema operativo y lograr el mejor rendimiento.
  • Se puede lograr un alto rendimiento de hardware de consumo mediante la eliminación de cuellos de botella estándar núcleo de Linux en recibir y enviar paquetes de red en tiempo real.
  • Esta capa del sistema operativo tiene varias tecnologías clave. Ellos son la tecnología de red directa de la caché de acceso (DNCA), Mac nivel de paquete Interceptación técnica, la tecnología de procesamiento paralelo de varios núcleos, Traffic Shaping algoritmo del motor (TSAE), y el motor de clasificación de paquetes IP. Pueden alcanzar plenamente un alto rendimiento del sistema, optimizar el uso de la CPU y maximizar el procesamiento de paquetes rápido en nuestro dispositivo de hardware de los productos básicos. Este sistema operativo está integrado en dispositivos de hardware que es un chasis montado en rack PC-industrial graduada estándar abierto. Es 100% seguro con OS endurecen y sin ningún coste oculto o de alta conjunto de habilidades de las necesidades de instalación de base de datos o software. Con el fin de mantener un alto rendimiento robusto para el despliegue de nuestros productos en entornos de red de transporte, todos los componentes de hardware como CPU, placas electrónicas, y la fuente de alimentación totalmente se examinarán y bien probados en el laboratorio de pruebas de la célula y otras organizaciones de prueba estándar.

No siempre se encuentra toda la verdad en las primeras búsquedas de internet.

24 octubre 2016

¿Hay vida más allá de Oracle? Tutorial de JSON subido a Slideshare


He publicado en SlideShare un pequeño tutorial de JSON para recién iniciados como Yo, encuentralo en este lugar. .


Detección de licencias Oracle Database Server




Nota:

La concesión de licencias de Oracle es un asunto complicado. Las notas aquí son sólo una guía. Siempre se debe hablar de su licencia con Oracle License Management Services.

Esta pequeña entrada del blog mostrará algunos comandos SQL que pueden ser ejecutados para mostrar que componentes de tu base de datos han de ser licenciados con Oracle Inc.

Poniéndonos en situación
Imaginemos que tenemos una auditoria de licencias de Oracle en enero, por lo que habrá que echar un vistazo a todo lo que tenemos para comprobar qué características que estamos utilizando.

Mi primer consejo seria mantener un repositorio de información, con toda esta información inventariada, a modo de pequeña CMDB, como aconseja las buenas practicas de ITIL

El lado de la base de datos es bastante fácil porque tenemos licencias FTE para Enterprise Edition, Diagnostics y Tuning Pack y Partitioning.



  • Numero de usuarios, CPU/Procesadores:
select * from v$license;


  • ¿Que versión tengo instalada?:
select banner from v$version where BANNER like '%Edition%';

¿Está instalada la opción de particonamiento de tablas y tablespaces?:
select decode(count(*), 0, 'No', 'Yes') Partitioning
from ( select 1 
       from dba_part_tables
       where owner not in ('SYSMAN', 'SH', 'SYS', 'SYSTEM')
         and rownum = 1 )
/
  • ¿Está Oracle Spatial instalado?:

select decode(count(*), 0, 'No', 'Yes') Spatial
from ( select 1
       from all_sdo_geom_metadata 
       where rownum = 1 )
/
  • ¿Está Oracle RAC instalado?:
select decode(count(*), 0, 'No', 'Yes') RAC
from ( select 1 
       from v$active_instances 
       where rownum = 1 );
/
  • ¿Que características están siendo usadas y cuáles no?: 
(solo para versiones Oracle  9i)

Col name  format a50 heading "Option"
Col value format a5  heading "?"      justify center wrap
Break on value dup skip 1
Spool option
Select parameter name, value
from v$option 
order by 2 desc, 1
/
  • ¿Que características están siendo usadas y cuáles no?: 
(solo para versiones Oracle 10g)

Set feedback off
Set linesize 122
Col name             format a45     heading "Feature"
Col version          format a10     heading "Version"
Col detected_usages  format 999,990 heading "Detected|usages"
Col currently_used   format a06     heading "Curr.|used?"
Col first_usage_date format a10     heading "First use"
Col last_usage_date  format a10     heading "Last use"
Col nop noprint
Break on nop skip 1 on name
Select decode(detected_usages,0,2,1) nop,
       name, version, detected_usages, currently_used,
       to_char(first_usage_date,'DD/MM/YYYY') first_usage_date, 
       to_char(last_usage_date,'DD/MM/YYYY') last_usage_date
from dba_feature_usage_statistics

order by nop, 1, 2
/
  • ¿Que características están siendo usadas y cuáles no?: 
(para versiones Oracle 11g en adelante)
En realidad bastante simple para ver qué características están siendo utilizados en la base de datos. Oracle proporciona la vista DBA_FEATURE_USAGE_STATISTICS para ese fin. SQL> 
SQL> DESC dba_feature_usage_statistics
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------
 DBID                                                  NOT NULL NUMBER
 NAME                                                  NOT NULL VARCHAR2(64)
 VERSION                                               NOT NULL VARCHAR2(17)
 DETECTED_USAGES                                       NOT NULL NUMBER
 TOTAL_SAMPLES                                         NOT NULL NUMBER
 CURRENTLY_USED                                                 VARCHAR2(5)
 FIRST_USAGE_DATE                                               DATE
 LAST_USAGE_DATE                                                DATE
 AUX_COUNT                                                      NUMBER
 FEATURE_INFO                                                   CLOB
 LAST_SAMPLE_DATE                                               DATE
 LAST_SAMPLE_PERIOD                                             NUMBER
 SAMPLE_INTERVAL                                                NUMBER
 DESCRIPTION                                                    VARCHAR2(128)

La salida se muestra corresponde a una base de datos Oracle 12c de prueba.
COLUMN name  FORMAT A60
COLUMN detected_usages FORMAT 999999999999

SELECT u1.name,
       u1.detected_usages,
       u1.currently_used,
       u1.version
FROM   dba_feature_usage_statistics u1
WHERE  u1.version = (SELECT MAX(u2.version)
                     FROM   dba_feature_usage_statistics u2
                     WHERE  u2.name = u1.name)
AND    u1.detected_usages > 0
AND    u1.dbid = (SELECT dbid FROM v$database)
ORDER BY name;

NAME                                                         DETECTED_USAGES CURRE VERSION
------------------------------------------------------------ --------------- ----- -----------------
Adaptive Plans                                                             1 TRUE  12.1.0.2.0
Automatic Maintenance - Optimizer Statistics Gathering                     1 TRUE  12.1.0.2.0
Automatic Maintenance - SQL Tuning Advisor                                 1 TRUE  12.1.0.2.0
Automatic Maintenance - Space Advisor                                      1 TRUE  12.1.0.2.0
Automatic Reoptimization                                                   1 TRUE  12.1.0.2.0
Automatic SGA Tuning                                                       1 TRUE  12.1.0.2.0
Automatic SQL Execution Memory                                             1 TRUE  12.1.0.2.0
Automatic Segment Space Management (system)                                1 TRUE  12.1.0.2.0
Automatic Undo Management                                                  1 TRUE  12.1.0.2.0
Backup Rollforward                                                         1 TRUE  12.1.0.2.0
Backup and Restore of plugged database                                     1 TRUE  12.1.0.2.0

NAME                                                         DETECTED_USAGES CURRE VERSION
------------------------------------------------------------ --------------- ----- -----------------
Character Set                                                              1 TRUE  12.1.0.2.0
Deferred Segment Creation                                                  1 TRUE  12.1.0.2.0
Flashback Database                                                         1 TRUE  12.1.0.2.0
Job Scheduler                                                              1 TRUE  12.1.0.2.0
LOB                                                                        1 TRUE  12.1.0.2.0
Locally Managed Tablespaces (system)                                       1 TRUE  12.1.0.2.0
Locally Managed Tablespaces (user)                                         1 TRUE  12.1.0.2.0
Logfile Multiplexing                                                       1 TRUE  12.1.0.2.0
Oracle Java Virtual Machine (system)                                       1 TRUE  12.1.0.2.0
Oracle Managed Files                                                       1 TRUE  12.1.0.2.0
Oracle Multitenant                                                         2 TRUE  12.1.0.1.0

NAME                                                         DETECTED_USAGES CURRE VERSION
------------------------------------------------------------ --------------- ----- -----------------
Oracle Pluggable Databases                                                 1 TRUE  12.1.0.2.0
Parallel SQL Query Execution                                               1 TRUE  12.1.0.2.0
Partitioning (system)                                                      1 TRUE  12.1.0.2.0
Recovery Area                                                              1 TRUE  12.1.0.2.0
Result Cache                                                               1 TRUE  12.1.0.2.0
SQL Plan Directive                                                         1 TRUE  12.1.0.2.0
SecureFiles (system)                                                       1 TRUE  12.1.0.2.0
SecureFiles (user)                                                         1 TRUE  12.1.0.2.0
Server Parameter File                                                      1 TRUE  12.1.0.2.0
Traditional Audit                                                          1 TRUE  12.1.0.2.0
Unified Audit                                                              1 TRUE  12.1.0.2.0

33 rows selected.

Por defecto esta vista se actualiza una vez por semana, pero se puede realizar una tarea para tenerla mas actualizada.

21 enero 2015

Tip: Límites físicos de una Base de datos Oracle

Para aquellos que desean poner al límite una base de datos Oracle 11g y 12c, con motivos perversos, claro.

"El único límite para nuestra comprensión del mañana serán nuestras dudas del presente."
Franklin Delano Roosevelt 


Item
Tipo of Limite
Valor para Oracle 11g R2-12g R1
GROUP BYclause
Maximum length
The GROUP BY expression and all of the no distinct aggregate functions (for example, SUMAVG) must fit within a single database block.
Indexes
Maximum per table
Unlimited
Indexes
Total size of indexed column
75% of the database block size minus some overhead
Columns
Per table
1000 columns maximum
Columns
Per index (or clustered index)
32 columns maximum
Columns
Per bitmapped index
30 columns maximum
Constraints
Maximum per column
Unlimited
Subqueries
Maximum levels of subqueries in a SQL statement
Unlimited in the FROM clause of the top-level query
Partitions
Maximum length of linear partitioning key
255 subqueries in the WHERE clause
Partitions
Maximum number of columns in partition key
4 KB - overhead
Partitions
Maximum number of partitions allowed per table or index
16 columns
Subpartitions
Maximum number of subpartitions in a composite partitioned table
1024K - 1
Rows
Maximum number per table
Unlimited
System Change Numbers (SCNs)
Maximum
281,474,976,710,656, which is 281 trillion SCNs
Stored Packages
Maximum size
PL/SQL and Developer/2000 may have limits on the size of stored procedures they can call. The limits typically range from 2000 to 3000 lines of code.
Trigger Cascade Limit
Maximum value
Operating system-dependent, typically 32
Users and Roles
Maximum
2147483638
Tables
Maximum per clustered table
32 tables
Tables
Maximum per database
Unlimited

18 enero 2015

Oracle 12cR1 novedades (Parte II); Columnas Identidad



Oracle 12c Nueva característica – Columnas Identidad

Viendo las nuevas características de la versión 12c, encontré que ahora podemos definir una columna con el  tipo de dato Identity, tal como lo tiene desde hace tiempo IBM DB2, en concreto desde la versión 8.0, de la siguiente manera:

SQL>CREATE TABLE table (col1 INT,col2 DOUBLE,col3 INT NOT NULL GENERATED ALWAYS AS IDENTITY;
(START WITH 100, INCREMENT BY 5))

Que significa una columna Identity?
Es incorporar a una columna la propiedad de ser auto numérica.


COLUMN_NAME  GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ]AS                                  
  IDENTITY  [ ( identity_options ) ]

Donde

  • ALWAYS      Indica que no será necesario introducir un valor para esta columna en una sentencia insert. Por el contrario indicar un valor aunque sea Null, da un error ORA-32795.
  • BY DEFAULT  Le permite utilizar Identity, si la columna no se hace  referencia en la una sentencia insert, pero si se hace referencia a la columna, el valor especificado se utiliza en lugar de la  identidad. El intento de especificar el valor NULL en este caso se traduce en un error, ya que las columnas de identidad son siempre NOT NULL. 
  • BY DEFAULT [ON NULL]: Si en una sentencia INSERT se mete un valor NULL, esta se generará un nuevo valor, si en cambio si mete un valor para esta columna, se insertará el valor de la sentencia.
Contras al implementar esta característica
  1. Dado a que una columna definida como IDENTITY está vinculada a una secuencia, le ocurre lo mismo que si la secuencia se define por fuera, por lo cual si una sentencia INSERT abortara, los números de la secuencia se perderían.
  2. En el caso de hacer una copia de seguridad de una tabla, se exportaría con todos sus valores, la querer importar esa tabla. 
  • Solución: Deberíamos tener en cuenta que la columna IDENTITY  este en by default porque en caso contrario daría error.
Conclusión 
La inclusión de las columnas IDENTITY, es un importante avance, ya que encapsula en una sentencia INSERT la obtención del nextval de la secuencia. Como ocurre con IBM DB2 o M$ SQL Server.

Por otro lado la inclusión de las opciones By Default y By Default On Null, permiten que los valores puedan ser internos o externos. Lo más importante es que esto lo hacemos casi sin que perdamos performance.

Mi opinion
Esta es una característica poco aseada que se ha introducido unos 20 años tarde. En mi opinión, que fácilmente podría haber sido implementado en Oracle 6.0. Podría ser útil para nuevas aplicaciones, aunque la cantidad de tiempo y esfuerzo ahorrado es insignificante. Para las aplicaciones existentes de la relevancia de esta nueva característica es más cuestionable;´Nadir va a mezclar estilos de codificación y modificar código funcional, por una característica que apenas aporta nada.

Oracle 12cR1 novedades (Parte I); Columnas Invisibles



Oracle 12cR1 – Columnas Invisibles


La primera de las Nuevas Características de Oracle 12c que vamos a traer a este blog son las columnas invisibles. Es una de las opciones menos controvertidas y mas sencillas de explicar.

La idea básica de las columnas básicas es que ellos permiten ser ocultadas desde las aplicaciones.  Las columnas se pueden hacer invisibles en la sentencia CREATE TABLE o posteriormente utilizando una sentencia ALTER TABLE. Por defecto columnas son visibles. Columnas invisibles pueden hacerse visibles de nuevo utilizando una sentencia ALTER TABLE.

¿Como funciona todo esto?

El siguiente ejemplo crea una tabla con una columna invisible:
SQL> CREATE TABLE ejemplo1
(
  c1 NUMBER,
  c2 NUMBER INVISIBLE,
  c3 NUMBER,
  c4 NUMBER
);

SQL> DESC ejemplo1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------
 C1                                                 NUMBER
 C3                                                 NUMBER
 C4                                                 NUMBER

SQL*Plus puede opcionalmente mostrar columnas implementando la opción COLINVISIBLE.
SQL> SET COLINVISIBLE ON

SQL> DESC ejemplo1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------
 C1                                                 NUMBER
 C3                                                 NUMBER
 C4                                                 NUMBER
 C2 (INVISIBLE)                                     NUMBER

A pesar de que la columna es invisible, en esa columna todavía se pueden visualizar y modificar. Por ejemplo:

SQL> INSERT INTO ejemplo1 (c1,c2,c3,c4) VALUES (11,12,13,14);

1 row created.
SQL> SELECT c1,c2,c3,c4 FROM ejemplo1;

        C1         C2         C3         C4
---------- ---------- ---------- ----------
        11         12         13         14

Mirad, que en el ejemplo superior, todas las columnas son listadas tanto en las sentencias INSERT y SELECT. Que ocurre si omitimos los nombres de las columnas en la sentencia INSERT?

INSERT INTO ejemplo1 VALUES (21,22,23,24)
            *
ERROR at line 1:
ORA-00913: too many values

La sentencia INSERT falla por que estamos intentando meter ina columna invisible en la columna (C2). Si nosotros lo intentamos otra vez omitiendo para C2 la sentencia INSERT será correcta:


SQL> INSERT INTO ejemplo1 VALUES (21,22,24);

1 row created.

SQL> SELECT c1,c2,c3,c4 FROM ejemplo1;

        C1         C2         C3         C4
---------- ---------- ---------- ----------
        11         12         13         14
        21                    22         24

Observa que el valor para C2 es NULL para cada fila encontrada. SELECT * no devuelve las columnas invisibles. Por ejemplo:

SQL> SELECT * FROM ejemplo1;

        C1         C3         C4
---------- ---------- ----------
        11         12         14
        21         22         24

Una columna invisible puede ser visible de nuevo, por ejemplo:
ALTER TABLE ejemplo1 MODIFY c2 VISIBLE;

Una columna visible puede ser invisible, por ejemplo:

ALTER TABLE ejemplo1 MODIFY c2 INVISIBLE;

Tip Shell UNIX: Comandos divertidos (Parte III)



Aquí está la tercera lista que compilé de comandos UNIX que devuelven mensajes de error ingeniosas .
Algunos de los comandos no devuelven los mismos mensajes de error , dependiendo de qué sistema operativo se está ejecutando (es decir, HP / UX , Ultrix , Oracle Solaris. ). A Divertirse!



% mkdir yellow_pages; cat > yellow_pages
yellow_pages: Is a directory 
%touch me
%chmod 000 me
%touch me
touch: cannot touch me: permission denied 
% ar x "my love life"
ar: my love life does not exist 
% ar x "matey, the treasure"
ar: matey, the tresure does not exist 
make "bottle open"
make "heads or tails of all this"
make love
make mistake
make sense
man woman
man -kisses dog 
% echo '[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq'|dc
GET A LIFE! 
% ping elvis.rice.edu | awk '{print substr($1,1,5), $2, $3}'
elvis is alive 
% finger body-of-christ@bread-jar.mass
Unknown host 
% finger huge-keg-party@big-house
Unknown host 
% make ' ' bang ' ' with gun
make: Fatal error: Don't know how to make target ` '

Tip Shell UNIX: Comandos divertidos (Parte II)



Aquí está la segunda lista que compilé de comandos UNIX que devuelven mensajes de error ingeniosas .
Algunos de los comandos no devuelven los mismos mensajes de error , dependiendo de qué sistema operativo se está ejecutando (es decir, HP / UX , Ultrix , Oracle Solaris. ). A Divertirse!



% alias alias alias
alias: Too dangerous to alias that. 
% cat catfood
cat: cannot open catfood 
% cat "food in cans"
cat: can't open food in cans 
% nice man woman
No manual entry for woman. 
% man p***y
No manual entry for p***y. 
% rm God
rm: God nonexistent 
% ar r God
ar: creating God 
% Unmatched ".
Unmatched ". 
% write desert
desert is not logged on. 
% man you
No manual entry for you. 
% !bluemoon
bluemoon: Event not found. 
% scan for <<"Arnold Schwarzenegger"^J^D
"Arnold Schwarzenegger": << terminator not found 
% cat 'the can of tuna'
cat: cannot open the can of tuna 
% cat "door: paws too slippery"
cat: cannot open door: paws too slippery 
% look into "my eyes"
look: cannot open my eyes 
% lost
lost: not found 
% make war
Make: Don't know how to make war. Stop. 

Tip Shell UNIX: Comandos divertidos (Parte I)



Aquí está la primera lista que compilé de comandos UNIX que devuelven mensajes de error ingeniosas . Algunos de los comandos no devuelven los mismos mensajes de error , dependiendo de qué sistema operativo se está ejecutando (es decir, HP / UX , Ultrix , Oracle Solaris. ). A Divertirse!



% make fire
Make: Don't know how to make fire. Stop. 
% why not?
No match. 
% gotta light?
No match. 
% !1984
1984: Event not found. # (on some systems) 
% How's my lovemaking?
Unmatched '. 
% "How would you rate Mariano Rajoy's incompetence?
Unmatched ". 
% [Where is Jimmy Hoffa?
Missing ]. 
% [Where is my brain?
Missing ]. 
% ^How did the sex change^ operation go?
Modifier failed. 
% ^How did the sex change operation go?
Bad substitute. 
% If I had a ( for every $ Congress spent, what would I have?
Too many ('s. 
% man: why did you get a divorce?
man:: Too many arguments. 
% %blow
%blow: No such job. 
% \(-
(-: Command not found. 
% sh
$ PATH=pretending! /usr/ucb/which sense
no sense in pretending! 
$ mkdir matter; cat >matter
matter: cannot create 
% cd /tmp
% touch this; chmod 000 this
% ln -s /usr/bin/touch U
% U this
U: cannot touch this: no write permission 
% rm meese-ethics
rm: meese-ethics nonexistent 
% cd ~god
Unknown user: god. 
% ar m God
ar: God does not exist 
% make love
Make: Don't know how to make love. Stop. 
% sleep with me
bad character 
% ^What is Sacarina?
Bad substitute. 
% drink bottle: cannot open
opener: not found