ORA-30926: unable to get a stable set of rows in the source tables. Merge Oracle.

Oracle envía el error “ORA-30926: unable to get a stable set of rows in the source tables” cuando hacer una actualización a una tabla con la comando MERGE.

Este error es debido a que la sentencia está tratando de actualizar una misma fila (row) más de una vez. La solución es revisar los resultados que arroja la tabla o la consulta, que estamos utilizando para hacer la actualización, para que no arroje filas duplicadas.

¡Saludos!

Desplazarse o navegar en un documento de word usando el teclado

El cuadro siguiente muestra cómo podemos mover el cursor para desplazarnos o navegar en un documento Word y que teclas del teclado usar para dicho propósito:

Para mover el cursor:  Usamos las teclas:
Arriba o abajo una linea a la vez o un caracter a la derecha o izquierda a la vez. Flechas
Palabra por palabra. Ctrl + Flecha Izquierda o
Ctrl + Flecha Derecha
Párrafo por párrafo. Ctrl + Flecha Arriba o
Ctrl + Flecha Abajo
Subir o bajar pantalla por pantalla. Re Pag o Av Pag
Subir o bajar página por página. Ctrl + Av Pag o
Ctrl + Re Pag
Al principio o final de una línea. Inicio o Fin
Al inicio del documento. Ctrl + Inicio
Al final del documento. Ctrl + Fin

¡A navegar por Word con el teclado se ha dicho!

¡Hasta la próxima!

Totales rápidos con la herramienta análisis rápido de Excel.

¿Has usado la herramienta de análisis rápido de Excel para obtener rápidamente totales de un rango de celdas?

Veamos el siguiente ejemplo de datos de el número de pasaportes consulares producidos en los meses de enero, febrero y marzo de ciertas ciudades con consulados de los Estados Unidos:

Si queremos obtener los totales de pasaportes por cada mes rápidamente, seleccionamos el rango de celdas necesarias y automáticamente Excel nos mostrará la herramienta de análisis rápido, indicada con una flecha en la siguiente imagen:

Si damos clic sobre ella aparecerá el menú de opciones de la herramienta, de ahí seleccionamos el menú Totales:

Aparecerán abajo de los menú las opciones correspondientes a Totales: Sumar, Promedio, Recuento, % del total, Total…; repetidas dos veces. Las primera cinco operaciones hace las operaciones automáticamente por columnas (los resultados aparecerán al final de cada columna de la selección), las otras cinco, lo hacen por filas (los resultados aparecerán al final de la fila de la selección):

Por ejemplo, si seleccionamos la primera opción Sumar, calculará automáticamente la sumatoria de lo meses de enero, febrero y marzo y los colocará abajo de la selección:

Si por el contrario, seleccionamos la segunda opción de Sumar, la sumatoria la hará por consulado, es decir sumará los valores de la fila:

Los mismo sucederá si seleccionamos las otras opciones del menú Totales: Promedio, Recuento, etcSi las celdas donde va a poner los resultados, ya contienen datos, la herramienta nos preguntará si queremos reemplazarlos con los nuevos resultados.

Espero y les sea de ayuda este post. ¡Nos vemos a la próxima!

¡Visiten a los anunciantes para poder continuar haciendo post prácticos como este!

 

 

 

 

SQL Developer 4.2 no depura procedimientos de Oracle 10g. Se ha producido un error al realizar la operación solicitada: ORA-00904.

Al actualizar la herramienta de Oracle SQL Developer a la versión 4.2 y querer depurar procedimientos PL/Sql que la versión anterior lo hacía sin problemas en mi base de datos Oracle 10g, no me permite ejecutarlos ahora, lanzando el error “Se ha producido un error al realizar la operación solicitada: ORA-00904: “OBJECT_ID”: invalid identifier. Código de proveedor 904″, como muestra la imagen siguiente:

Al parecer las tablas que usa la base de datos para llevar un control de el proceso de depuración ha cambiado y se ha agregado el campo OBJECT_ID que no existe en las versiones 10.2 y menores de Oracle. Con las versiones superiores, el procedimiento de depuración funciona sin problemas.

¿Solución? Instalar la versión 4.1 de SQL Developer para depurar dicha version de Oracle o inferior.

¡Saludos!

Abrir archivos XML con Excel

A veces algunos datos que necesitamos analizar vienen en formato XML y lo queremos hacer con Excel. Si vemos con el Bloc de Notas el contenido de un archivo XML veremos algo como esto:

Para importar un archivo XML a nuestra hoja de Excel necesitamos que esté visible la ficha Programador en nuestro menú. Si este ficha no está visible, habrá que activarla.

Para activarla vaya a Archivo-> Opciones:Aparecerá la ventana Opciones de Excel. Ahí seleccione Personalizar cinta de opciones y luego active la casilla Programador de las opciones de Pestañas principales:

Una vez activada la ficha Programador, la seleccionamos y damos clic en Importar, en la ventana Importar XML navegamos hasta donde está ubicado nuestro archivo XML, lo seleccionamos y oprimimos el botón Importar:

En el diálogo siguiente damos Aceptar:

Aparece el diálogo Importar datos, le decimos que inserte los datos a partir de la celda A1 (o en la que se desee o en una nueva hoja de cálculo) y damos Aceptar:

Automáticamente Excel da formato de tabla a los datos importados:

Espero y les sea útil este post. No olvide visitar a los anunciantes para que podamos seguir haciendo tips como estos.

¡Hasta luego!

Obtener las líneas que contengan direcciones ip de archivos de texto o salida de algún comando en Windows

A veces es necesario extraer de archivos de de texto, como archivos .log de algunos sistemas, las líneas que contengan direcciones IP, ya sea para análisis u otro motivo.

El linux existen herramientas o comandos como grep que permiten hacer esto, en Windows está el comando findstr, que aunque no tan poderoso como el grep, permite hacer lo que estamos buscando.

El comando findstr se debe ejecutar desde una consola o ventana de comandos de Windows, aunque es posible también incluirlo en archivos .bat (procesamiento por lotes) si así se requiere.

En el ejemplo siguiente obtendremos las lineas de salida del comando ipconfig que contengan direcciones IP. Ipconfig es el comando de Windows que nos permite ver la configuración de los adaptadores de red de nuestro equipo Windows. La imagen siguiente muestra los resultados de ejecutar el comanda ipconfig:

Ahora, vamos a obtener, de ese resultado, sólo las lineas que contienen una dirección IP con ayuda del comando findstr. Para eso ejecutaríamos el comando:

Lo que nos daría el siguiente resultado:

Como podemos ver en la imagen, el comando findstr muestra sólo las lineas de salida del comando ipconfig que contienen una dirección IP, el resto de las lineas son ignoradas.

Para obtener las lineas con IPs de un archivo de texto llamado archivo.log, la sintaxis del comando sería:

Para más información y usos del comando findstr pueden visitar la página del comando.

¡Hasta luego!

Auditar una tabla o usuario en #Oracle 10g

Antes de auditar una tabla o usuario de la base de datos Oracle, es necesario que ésta esté habilitada para ello. Los pasos aquí mostrados se deben hacer siempre con un usuario conectado con permisos administrativos (AS SYSDBA) como el usuario SYS.

Para saber si Oracle está habilitada para generar auditorías listamos el valor del parámetro AUDIT desde sqlplus o sqldeveloper autentificados con un usuario administrativo, por ejemplo SYS:

En mi caso la auditoría ya esta habilitada. Esto lo indica el parámetro audit_trail que tiene asignado el valor DB_EXTENDED. Por defecto, cuando se instala Oracle, la auditoría esta deshabilitada y este parámetro tiene el valor NONE

El valor DB_EXTENDED le indica a Oracle registrar los eventos de auditoría en la tablas SYS.AUD$. DB_EXTENDED registra, además de otros datos, tanto las variables encadenadas (bind) como las consultas ejecutadas, en los campos SQL_BIND y SQL_TEXT respectivamente.

Cambiemos el valor de audit_trail en caso de que tenga el valor NONE:

Para que este parámetro estático tome efecto y Oracle permita auditorías, es necesario dar baja y luego dar alta nuevamente la base de datos con los comandos SHUTDOWN y STARTUP respectivamente:

Bien, si vamos a auditar una tabla por cualquier operación que se haga sobre ella, ejecutaríamos la siguiente sentencia sql:

Le estamos indicando de cualquier operación o sentencia sql que se haga sobre la tabla facturas del esquema pagos, sea registrada. BY ACCESS indica que insertará un registro en las tablas de auditoría por cada operación que se haga en la tabla, la otra opción BY SESSION, registraría todas las operaciones a la tabla de una sesión de usuario en un sólo registro de auditoría.

Ahora si queremos auditar todas las operaciones de inserción, actualización y borrado a cualquier tabla que haga un usuario específico:

En este ejemplo estaremos auditando los insert, delete y update que haga en usuario pancho a cualquier tabla y registrando un registro en las tablas de auditoría por cada operación.

Para listar las operaciones de auditoría que ha registrado Oracle, podemos usar la vista dba_audit_trail:

Para más opciones de auditoría ver la ayuda de Oracle 10g. Espero y les ayude este post.

¡Visita los patrocinadores por favor!

¡Saludos!

 

 

 

 

 

Borrar archivos viejos o antiguos en Windows desde linea de comando

Aunque esto lo podríamos hacer desde el el explorador de archivo de windows, ordenando los archivos por fecha y seleccionando los que cumplan la condición requerida de antigüedad, existe una forma más práctica de hacerlo usando el comando FORFILES desde la linea de comandos (CMD) del mismo windows. Este comando puede ser usado interactivamente o en un archivo de procesamiento por lotes (batch).

Por ejemplo en el siguiente uso del comando FORFILES:

Indica buscar en la carpeta C:\Documentos (/p “C:\Documentos”) y todas las carpetas contenidas en ella (/s), recursivamente,  aquellos archivos con la extensión .doc (/m *.doc) de 30 días o más de antigüedad (/d -30) y borrar dichos archivos con el comando del (/c “cmd /c del @path”).

También se le puede indicar la fecha exacta de antigüedad:

En este caso borrará los archivos igual o anterior a la fecha del primero de enero del 2017 (/d -01/01/2017), el formato de la fecha como puedes observar es dd/mm/aaaa (día/mes/año).

Más información y usos de este comando lo pueden encontrar aquí.

¡Espero les sirva!

¡No olviden visitar a los patrocinadores!

 

 

¿Cómo encontrar un texto o palabra dentro de todas las funciones, procedimientos, disparadores y otros objetos en Oracle?

A veces nos vemos en la necesidad de saber dónde hacemos uso de un nombre de una tabla, función, variable, campo o un simple texto dentro del código fuente de los diferentes objectos de la base de datos Oracle.

Para localizar dónde se usa cierto nombre, palabra o texto podemos ejecutar la siguiente sentencia con el usuario SYS preferentemente:

En el ejemplo anterior estamos buscando el texto o palabra “VENTAS” dentro de todos los códigos fuente que definen los objectos de Oracle, como son procedimientos, funciones, disparadores.

Si encuentra la palabra buscada la consulta nos  como resultado el propietario, nombre de objeto, tipo del objeto, la linea donde encontró el texto y el texto completo de la linea.

Espero y les sea útil. ¡Hasta pronto!

Vagrant was unable to mount VirtualBox shared folders.

A iniciar el box de icinga2 me mandaba el mensaje siguiente:

En mi caso se debía a un bug en la versión de VirtualBox Guest Additions (vbguest) instalada en el box (la 5.1.21). Así que procedí a instalar la última versión (5.1.22) ejecutando las siguientes instrucciones:

Instalar el más reciente plugin de vbguest, iniciar el box, instalar la última versión de vbguest, parar el box y volverlo a arrancar.

El mensaje de error desapareció. Espero les ayude.

¡Saludos!