Mostrando entradas con la etiqueta ORACLE. Mostrar todas las entradas
Mostrando entradas con la etiqueta ORACLE. Mostrar todas las entradas

Ejemplo Oracle Entity Framework

En este post podremos ver un ejemplo practico de como funciona Entity Framework con Oracle, los objetivos a tratar serán:
  1. Crear un store Procedure en Oracle
  2. Configurar el Entity Framework
  3. Consumir una tabla de Oracle
  4. Consumir un store procedure de Oracle

Antes que nada debemos instalar el cliente de Oracle y las herramientas ODAC el cual podemos descargar del siguiente link:
http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html


1.) En este paso vamos  crear las tablas con la que realizaremos el ejemplo , en este link podrán encontrar los script necesarios:
http://www.cjorellana.net/p/scriptoracle.html


2.) Crear un proyecto en Visual Studio .Net
    3.1) Archivo - Create web site






4.) Configurando Entity Framework
         4.1) Clic derecho sobre el solución explorer - add new item


         4.2) Seleccione Entity framework y deje el nombre predeterminado.


         4.3) El la primera pantalla del asistente debe seleccione "Generate from database"

         4.4) Presioné clic en el botón new Connection y configure su conexión a oracle.




         4.3) Ahora mostrara la pantalla seleccione la conexión que acaba de configurar, seleccione "yes" en incluir password.


         4.3) Ahora mostrara la pantalla para que seleccione los objetos a utilizar, seleccione la tabla Products y por ultimo presión clic en finish.
5.) Abra la pagina Default que fue creada automáticamente y agregue un Gridview y botón.



<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

        <asp:Button ID="Button1" runat="server" Text="Button" /> 
        <asp:GridView ID="GridView1" runat="server"> 
        </asp:GridView> 
     
    </div> 
    </form> 
</body> 
</html> 





6.) Ahora realizaremos una consulta a la base de datos, presioné doble clic en el botón que acaba de crear.

protected void Button1_Click(object sender, EventArgs e)
    { 
        Model.Entitiesdbo db = new Model.Entitiesdbo(); 
        var query = from p in db.PRODUCTS 
                    select new { p.PRODUCTID, p.PRODUCTNAME, p.UNITPRICE };

        GridView1.DataSource = query; 
        GridView1.DataBind(); 
    }


El resultado sera:




Ahora vamos hacer la consulta por medio de un Store Procedure que retorne un conjunto de datos.


El primer paso es crear el store procedure:


7.) Como ustedes ya sabes, los store procedure en oracle son muy rápidos, por lo que es un importante utilizar un  Store procedure que obtenga una conjunto de resultados. en este paso vamos crear un store procedure:

7.1.) Vamos a crear un Store Procedure que retorne un conjunto de datos, abra cualquier cliente oracle y ejecute lo siguiente.

CREATE OR replace PROCEDURE ObtenerCat(tabla OUT SYS_REFCURSOR)
IS
BEGIN
  OPEN tabla FOR
    SELECT categoryid,
           categoryname,
           description
    FROM   dbo.categories;
END;

/ 

7.1) Ahora tenemos que configurar nuestro web Config para que entity framework pueda crear su tabla, esta es la parte fea de este cliente oracle ya que tenemos que configurar como se llama el store procedure y cada valor que retorne con su respectivo tipo de datos, 


7.1.1) Abra su web config y agregue esto.


<oracle.dataaccess.client> 
    <settings> 
      <add name="DBO.obtenercat.RefCursor.tabla" value="implicitRefCursor bindinfo='mode=Output'" /> 
      <add name="DBO.obtenercat.RefCursorMetaData.tabla.Column.0" value="implicitRefCursor metadata='ColumnName=CATEGORYID;BaseColumnName=CATEGORYID;BaseSchemaName=DBO;BaseTableName=categories;NATIVEDATATYPE=NUMBER;ProviderType=decimal'" /> 
      <add name="DBO.obtenercat.RefCursorMetaData.tabla.Column.1" value="implicitRefCursor metadata='ColumnName=CATEGORYNAME;BaseColumnName=CATEGORYNAME;BaseSchemaName=DBO;BaseTableName=categories;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" /> 
      <add name="DBO.obtenercat.RefCursorMetaData.tabla.Column.2" value="implicitRefCursor metadata='ColumnName=DESCRIPTION;BaseColumnName=DESCRIPTION;BaseSchemaName=DBO;BaseTableName=categories;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" />       
    </settings> 
  </oracle.dataaccess.client>






8.) Abramos en Model del entity Framework para llamar a nuestro store procedure
8.1) Precie clic derecho "update Model from DataBase"




9.) En la pantalla el asistente, bajo Store Procedure seleccione el store procedure




10.) Tenemos que crear una función para poder usar el store procedure.
       10.1) Presione clic derecho sobre Model y Add y por ultimo "Funtion Import..." llene con la siguiente información.




       10.2) En la pantalla de importación, podrá notar que no hay ningún Complex, presione clic "Get Column Information"  para que genere la información con los datos del Store Procedure, luego precione Crete New Complex Type, por ultimo OK.








11.) Ahora vamos Agregar a nuestra pagina un Dropdown List para jugar con nuestro store procedure, este de debe agregar antes del Boton.


<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"> 
        </asp:DropDownList> 
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
        <asp:GridView ID="GridView1" runat="server"> 
        </asp:GridView> 
     
    </div> 
    </form> 
</body> 
</html> 
12.a) Llenaremos nuestro dropdown list en el load de la pagina, precione clic derecho view code y agregue el siguiente código:
 protected void Page_Load(object sender, EventArgs e)
    { 
        if (!Page.IsPostBack) 
        { 
            Model.Entitiesdbo db = new Model.Entitiesdbo(); 
            var query = db.OBTENERCAT(); 
            DropDownList1.DataSource = query; 
            DropDownList1.DataTextField = "CATEGORYNAME"; 
            DropDownList1.DataValueField = "CATEGORYID"; 
            DropDownList1.DataBind(); 
        } 
    } 


13.) Por ultimo vamos a cambiar el código de nuestro botón para el gridview1 se filtre en base al drowdownlist.
 protected void Button1_Click(object sender, EventArgs e)
    { 
        Model.Entitiesdbo db = new Model.Entitiesdbo(); 

        decimal codigo = Convert.ToDecimal(DropDownList1.SelectedValue);
        var query = from p in db.PRODUCTS 
                    where p.CATEGORYID== codigo 
                    select new { p.PRODUCTID, p.PRODUCTNAME, p.UNITPRICE };

        GridView1.DataSource = query; 
        GridView1.DataBind(); 
    }


EL RESULTADO FINAL SERA ASI:


Más allá de las bases de datos relacionales

supernova

Las bases de datos relacionales, como MySQLPostgreSQL y varios productos comerciales, nos han servido bien durante muchos años. Últimamente, sin embargo, ha habido mucha discusión sobre si el modelo relacional está llegando al final

combinando MS Access con Oracle

Combinando Microsoft Access y Oracle
En este artículo vamos a ver cómo implementar una sencilla aplicación que trabaje sobre una base de datos Oracle para actualizar datos y generar reportes, usando una herramienta amigable y disponible en la mayoría de los ordenadores como lo es Microsoft Access.

La idea es, en 5 pasos crear una interfase gráfica con poco esfuerzo y en tiempo récord, que facilite la vida de muchos usuarios no IT, como por ejemplo la del Gerente del Area de Recursos Humanos que necesita ingresar y consultar datos en su base de datos corporativa. No hay necesidad de comprar un caro producto comercial para esa sencilla tarea.

Qué software necesitamos para desarrollar y ejecutar nuestra aplicación?

- Microsoft Access, sino nuestro archivo .mdb no será reconocido por Windows.
- Un cliente Oracle, para que podamos conectarnos con la base de datos de destino.

(Este software debe estar presente ya sea en la máquina que usemos para desarrollar como en la máquina destino donde va a correr el programa. No está en el alcance de este artículo explicar cómo instalar estos dos productos)

Los 5 pasos para crear la aplicación

1) Crear una conexión ODBC
2) Vincular en Access las tablas de Oracle
3) Crear las relaciones existentes
4) Crear formularios
5) Crear un reporte

Nuestra aplicación va a conectarse y trabajar con el usuario Oracle SCOTT. Uso Windows Vista, Access 2003 y un cliente Oracle 10g.

Disculpas por las pantallas de Access en portugués y Windows en inglés, pero es todo lo que tengo en la vuelta :)

Paso 1. Crear una conexión ODBC

- En Windows, vamos al menú Start, Control Panel, Administrative Tools y seleccionamos Data Sources (ODBC)

- En la lengueta User DNS, presionar sobre el botón Add. Una lista de drivers disponibles aparecerá en un diálogo. Tenemos dos posiblidades para seleccionar, una es elegir el driver de Microsoft para Oracle (Microsoft ODBC for Oracle), y la otra es elegir el driver de Oracle que fue instalado con nuestro cliente (en mi caso Oracle em OraClient10g). Recomiendo usar el driver nativo de Oracle, ya que está optimizado y se corresponde exactamente con la versión de Oracle que acabamos de instalar.

Nota: En caso que se nos presente un mensaje de error con el título SQORAS32 y el mensaje An unsupported operation was attemped, se trata de un bug conocido cuya solución está en Metalink nota NR.5699495. Será necesario descargar un patch y reemplazar algunos archivos en el cliente Oracle. Es aplicable a los clientes 10.2.0.3.0 a 10.2.0.3.7 y las instrucciones vienen con el propio patch.

- En el diálogo siguiente, ingresar los datos de la conexión:

Data Source Name: Un nombre cualquiera describiendo nuestra conexión
Description: Opcional, puede ser nada
TNS Service Name: El mismo nombre de servicio en nuestro tnsnames.ora
User ID: Opcional, puede ser nada



- Pulsar Test Connection para ver si nuestra conexión funciona. Aparecerá un diálogo solicitando usuario y password. En mi caso colocaré scott/tiger. El mensaje Connection successfull deberá aparecer para poder continuar. De lo contrario, revisar el tnsnames.ora que está siendo usado, para ver si tiene la entrada correcta.

Luego de seleccionar OK en el diálogo principal, nuestra conexión ODBC está lista para ser usada.

Paso 2. Vincular en Access las tablas de Oracle

- Ingresar a Access y comenzar un nuevo proyecto en blanco.

- En el menú Insertar, elegir Tabla y Vinculación de tabla.



Aparecerá un diálogo como los de seleccionar archivos, pero tenemos primero que elegir en el combo Tipos de archivos, la opción Bases de datos (ODBC).

Luego se muestra el diálogo Select Data Source. Ir a la lengueta Machine Data Source y seleccionar la conexión ODBC creada en el paso anterior.



Somos solicitados para informar el usuario y password de la base de datos Oracle (scott/tiger).

Observar que se nos presentan todas las tablas y vistas a las que el usuario scott tiene acceso. Buscar aquellas que comienzan con el prefijo SCOTT y marcarlas: BONUS, DEPT, EMP y SALGRADE. Seleccionar OK.

- Access solicitará indicar para algunas tablas las columnas identificadoras (clave primaria). Eso dependerá si la clave está definida en la tabla original o no. En este caso vamos a ignorar el aviso simplemente seleccionando OK.

Listo! Las tablas ya están vinculadas en nuestro proyecto. Notar que el nombre de cada tabla asignado automáticamente por Access es [ESQUEMA]_[TABLA].

Paso 3. Crear las relaciones

Cuando se vinculan las tablas del esquema Oracle en Access, no se crean los relacionamientos entre ellas. Es necesario hacerlo manualmente, si queremos mantener el esquema de integridad de datos.

- En el menú Herramientas, ingresar a Relaciones.

- En el diálogo Mostrar Tabla, en la lengueta Tablas, seleccionar (presionando Control) las tablas SCOTT_EMP y SCOTT_DEPT, y pulsar Agregar. Las tablas se mostrarán en la ventana de relacionamientos, y podremos cerrar el diálogo Mostrar Tabla.

- Si la tabla SCOTT_EMP no muestra todas las columnas, agrandarla desde el vértice inferior derecho para permitir ver la columna DEPT.



- Hacer click (izquierdo) sobre la columna DEPT de SCOTT_EMP, y sin soltar, arrastrar la columna hacia la tabla SCOTT_EMP, soltándola encima de la columna DEPTNO (clave primaria de SCOTT_DEPT). Un nuevo diálogo se abrirá con la definición de la relación.

- Podemos elegir las propiedades de esta relación, en nuestro caso vamos a dejar todo por defecto, que corresponde a un INNER JOIN entre ambas tablas. Luego de seleccionar Crear, la relación entre las tablas será visible gráficamente en pantalla.



- Cerrar la ventana de relacionamientos y elegir Sí para guardar los cambios.

Paso 4. Crear formularios

Tenemos las tablas vinculadas en Access con sus relaciones, y de aquí para adelante depende exclusivamente de nuestros conocimientos en Access. Da lo mismo que sean tablas propias de Access o de Oracle con las que estemos trabajando. Podemos inclusive usar este mismo esquema para importar datos desde una tabla Oracle a una local.

Crearemos un formulario para cada una de las tablas importadas, para facilitar el mantenimiento de los datos a través de la aplicación. Explicaré cómo hacer los formularios de DEPT y EMP; para el resto es el mismo procedimiento.

- En la ventana principal de Access, ir a Formularios, y elegir la opción Crear formulario usando el asistente.

- Seleccionar la tabla SCOTT_DEPT en el combo de tablas, y seleccionar todos los campos disponibles (DEPTNO, DNAME, LOC) con el botón >>.

- Presionar Avanzar, elegir el layout 'Columna', el estilo 'Standard', y escribir el título 'Departamentos'. Seleccionar Concluir.



Ya está listo nuestro primer formulario donde daremos mantenimiento a los departamentos. Por defecto, todas las operaciones sobre los datos están permitidas. Si se desea, se pueden alterar las propiedades del formulario activando la caja Propiedades con Alt-Enter.

Ahora vamos al formulario de empleados.

- En la ventana Formularios, elegir la opción Crear formulario usando el asistente.

- Seleccionar la tabla SCOTT_EMP en el combo de tablas, y seleccionar todos los campos disponibles con el botón >>.

- Elegir las mismas opciones que en la tabla anterior, excepto por el título 'Empleados'.

Nuestro formulario de empleados está listo, pero vamos a introducir una pequeña mejora: que el campo DEPTNO en lugar de un texto numérico sea un combo list con los nombres de los departamentos, para evitar tener que recordar los números.

- Seleccionar en el menú Exibir, el modo Diseño.

- Marcar el campo DEPTNO en el formulario y borrarlo (pulsando la tecla DELETE)

- En la caja de herramientas (lateral izquierda) seleccionar la herramienta Caja de Combinación.



- Crear el combo en el lugar que eliminamos el campo numérico DEPTNO. Se abrirá automáticamente el asistente para caja de combinación.

- Seleccionar la primera opción para que el combo busque los datos a partir de una consulta y Avanzar.

- Elegir la tabla SCOTT_DEPT y Avanzar.

- Seleccionar los campos DEPTNO y DNAME y Avanzar

- Definir el orden de ordenamiento por DNAME (creciente) y Avanzar.

- Dejar seleccionado el checkbox Ocultar llave primaria y Avanzar.

- Dejar la opción Recordar valor para uso posterior y Avanzar.

- Si se desea modificar el rótulo, puede alterarse para 'DEPTO'.

- Concluir la operación.



Terminamos nuestro formulario para dar mantenimiento a los empleados.
Ahora nuestro campo de departamentos se actualiza dinámicamente a partir de la tabla SCOTT_DEPT.

Repetir el proceso de creación de formularios para el resto de las tablas, y estaremos aptos para insertar, borrar y alterar registros completamente a través de nuestra interface gráfica.

Paso 5. Crear un reporte

Crearemos un reporte para mostrar un ejemplo más de funcionalidad.

- En la ventana principal de Access, ir a Consultas, y elegir la opción Crear consulta en modo diseño.

- Cerrar la ventana Mostrar tabla y en el menú Exibir seleccionar SQL.

- Escribir la query:

SELECT e.empno, e.ename, e.job, e.sal, d.dname, s.grade
FROM scott_emp e, scott_dept d, scott_salgrade s
WHERE e.deptno=d.deptno
AND e.sal BETWEEN s.losal AND s.hisal

- Cerrar la ventana query y elegir Sí para grabar los cambios, asignando un nombre cualquiera para la consulta, por ejemplo 'Salarios de empleados por departamento'.

- En la ventana principal de Access, ir a Reportes, y elegir la opción Crear reporte usando el asistente.



- En el combo Tablas/Consultas elegir la consulta creada anteriormente, junto con todas las columnas disponibles en la consulta, y avanzar.

- En el nivel de agrupamiento, elegir DNAME (el departamento) y avanzar.



- Elegir el ordenamiento por orden de ENAME creciente.

- Dejar las opciones de diseño por defecto y avanzar hasta visualizar el reporte.



Nuestro reporte está listo luego de 10 minutos con cero esfuerzo de programación, simplemente usando una sencilla consulta SQL.

Combinamos la facilidad de uso y versatilidad de una herramienta como Access con el potencial de una base de datos Oracle. Las posibilidades dependen sólo de nuestra voluntad, pudiendo integrar planillas de Excel, gráficos, multimedia y mejorar la lógica de nuestra aplicacion con VBA (Visual Basic for Applications).

PD: hago mención de que esta tuto no es mio,, es publicad por Ifer de este blog, solo para que no digan repost o lammer o demas tonterias,, ahi se los dejo,, es bueno hacer este tipo de post xDXDXDXDXD KDSDSDSD

see u next time

XSS – Cross-Site-Scripting IV

Defendiendo Nuestros Usuarios.


Las formas más sencillas de defender nuestros usuarios son mediante las siguientes acciones:

Cookies:

Evitar almacenar datos vitales

XSS – Cross-Site-Scripting III

Defendiendo Nuestra Aplicación.


El primer modo de defensa que veremos, será la defensa de nuestra aplicación, misma que nos enseñara técnicas sencillas para defender nuestro sitio mediante la validación de entradas de datos.


Tenemos que tener claro que lo que debemos hacer es impedir la entrada de scripts en nuestros campos de inserción de datos, validando cada entrada para asegurarnos que no contenga código que pueda afectar nuestra aplicación o a nuestros usuarios.




  1. Limitación de caracteres de entrada.
    Lo primero que debemos hacer

MariaDB, La Hermanita Menor de MySQL

Es por todos sabido que Oracle ha adquirido Sun, y con ello lo que Sun había adquirido meses atrás, hablo en concreto de MySql.


MySql es o era (no sé cuál de los dos calificativos es correcto) el sistema de bases de datos Open Source más famoso y utilizado en el mundo.


Sin embargo, ahora tenemos que Sun forma definitivamente parte de Oracle, y Oracle tiene ahora la "patita" en máquinas de Sun, la "pattita" en lenguajes con Java, y la "patita" de bases de datos con MySql, pero Oracle es famosa precisamente por tener un gestor de bases de datos muy poderoso, el propio Oracle que da nombre a la compañía, así que, ¿qué hacer con MySql?.


Hay que tener en cuenta además, que la sombra de Oracle es muy larga y lo suficientemente ancha como para ocultar a MySql de la faz de la tierra. La incertidumbre por lo tanto, es bastante grande con respecto al futuro de MySql.


De momento no ha hecho nada "raro" con MySql, sin embargo, hay mucha gente que comenta que Oracle va a empezar a cobrar soporte con MySql y en el futuro...:s ya veremos qué...;) igual incluso hasta desaparece...


Aún y así, un irreducible finlandés no se va a quedar de brazos cruzados.
Hablo de Ulf Michael Widenius a quién se le conoce con el apodo de "Monty" (blog de Monty).


Monty es el principal autor de MySql y miembro fundador de MySql AB, empresa que fue adquirida en Febrero de 2008 por Sun Microsystems como comentaba anteriormente. Por la nada depreciable cantidad de 16 millones de € ($ 252883200 MXN).


Con la venta de MySql, Monty se embolsó mucho dinero y en Febrero de 2009 dejó Sun para montar una nueva compañía. Los motivos por los que dejó Sun no están claros.


Lo peor para Oracle, es que Monty se ha puesto a crear un nuevo motor de bases de datos de datos teniendo en mente a MySql y agregándoles "esas" cosas que quería haberle agregado a MySql en su día y que por las razones que sean, no ha podido llevar a cabo.


La iniciativa de Monty tiene que ver sobre todo con la adquisición de Sun por parte de Oracle.


Adquisición maestra, ya que se ha manejado la situación estratégica de forma expecional. Primero Sun compra MySql,  todo normal y coherente, no!?.


Luego Oracle compra Sun, y aquí aparecen las dudas. Monty duda de la compra (seguramente se sintió engañado/decepcionado/triste como amante de un sistema gestor de bases de datos abierto).


El departamento de la libre competencia de la Unión Europea analiza entonces si vulnera la libertad, pero aunque Oracle y Sun tienen un frente común en el mundo de las bases de datos, no es menos cierto que al tener Sun sus departamentos de Hardware y Software con Java a la cabeza, se ha hecho claramente la vista gorda sobre MySql.


Sin dudas, siento que esto ya estaba pactado de ante mano y Monty fue engañado. Quitaron a MySql, y así Oracle solo tendría un único competidor real y de importancia, hablo de SQL Server.


Al menos a Monty le quedó la tranquilidad de haberse hecho rico. Pero Monty es como comentaba antes, un hombre irreducible y tenía pensado vengar su honor como si de un duelo se tratara.


En Internet apareció entonces una iniciativa impulsada por el propio Monty para salvar a MySql, hecho que motivó que Monty se adentrara en esta aventura.


El producto en el que anda trabajando se llama MariaDB. El nombre de Maria se debe a su hija menor.


En realidad, MariaDB es un fork (bifurcación, branch o rama) que parte del código base de MySql. Es decir y como ellos lo comentan en el wiki de la página MariaDB es un upgrade de MySQL.


La empresa de Monty encargada de llevar a cabo la aventura de MariaDB se llama Monty Program AB.


El icono elegido por Monty en este caso es una foca, icono que posiblemente utilice para sus distribuciones.




MariaDB Logo
MariaDB Logo


Ahora bien... ¿cuál es la versión actual de MariaDB?.
La versión actual es MariaDB 5.2.0 Beta que está basada en MySql 5.1.


Monty afirma que esta versión es estable, aunque no quiere decirlo muy alto porque es una versión en desarrollo y por lo tanto, no debería ser utilizada en producción.


El caso es que a Oracle le ha salido un emergente y posible competidor, porque el irreducible Monty no tiene pensado dejar tirada a la Comunidad y va a hacer todo lo posible por sacar adelante el proyecto de MariaDB.


Por su hija y por él mismo, va a luchar para prevalecer su honor. Una noticia que personalmente celebro de pie.

Los diez errores más comunes en el diseño de una base de datos

Hola SQLeros,Louis Davidson es un experto en el diseño de Base de Datosy es autor del libro SQL Server 2005 Database Design and Optimization en el artículo aquí enlazado presenta los diez errores más comunes en el diseño de una BD que el ha detectado a lo largo de su experiencia:




  • Mala planeación del diseño

  • Ignorar la normalización

  • Estándares de nomenclatura deficientes

  • Falta de documentación

  • Una sola tabla para guardar todos los valores del dominio

  • Usar columnas GUID como la única llave de una tabla

  • No usar las funcionalidades SQL para preservar la integridad de los datos

  • No usar Stored Procedures para acceder a los datos

  • Intentar construir objetos genéricos en los stored procedures

  • Falta de pruebas


En mi experiencia la mayoría de los desarrollos donde he trabajado presentan algunas de estas deficiencias en su base de datos. Creo yo que en muchos de los casos es porque se deja a un programador diseñar la base cuando debe ser haber un DBA involucrado en el proceso. Se que muchos proyectos no pueden pagar el sueldo de un DBA en exclusivo pero creo que al menos debe haber un DBA por organización que supervise el diseño elaborado por los programadores, lo mejore y le de su visto bueno.
Con las bases de datos pasa como con el diseño web, cuando se deja en manos de un programador elresultado puede ser un desastre e imagino que la mayoría de ustedes ha tenido que lidiar con chapuzas como una tabla totalmente desnormalizada (digo a veces está bien desnormarlizar para ganar en desempeño pero hay límites) y que necesita de 5 o más campos para tener una llave compuesta (y dile adios a tu idea de usar un ORM para la capa de datos), o una tabla con 20 campos que se llaman campo1, campo2, .. campoN y que nadie en la organización sabe que diablos es el campo7 o quién era el encargado de actualizarlo pero sin él tu aplicación no funciona, en fin no seguiré descargando mi frustración aquí :P . En mi opinión una forma de evitarle frustraciones a los otros programadores es que, dado que las empresas no van a querer pagar un DBA para auxiliarte en el 70% de los casos,nosotros nos documentemos con artículos como el de Louis para realizar un mejor trabajo que programar no es solo usar Spring o el último patrón de diseño.

Ctrl Alt Supr

Enero de 2004. La prensa especializada deja caer entre sus artículos uno dedicado a un ingeniero de IBM que despues de muchos años abandona la empresa. ¿Qué puede tener de especial una persona para merecer ese titular? El protagonista de esta historia se llama David J. Bradley. Tiene 55 años. Formó parte del equipo que creó el primer ordenador personal. Debe sus quince minutos de fama a haber sido quien ideó la combinación de teclas "Control+Alt+Supr" para reiniciar un ordenador.


Por esta razón Bradley entra en el Club de los Históricos de ARRAI.


¿Cuantas veces hemos usado esta combinación de teclas para reiniciar nuestros equipos? El "Control+Alt+Supr" (en inglés "Control+Alt+Delete") es uno de los pequeños iconos culturales del mundillo de la informática.


Corría el año 1981. 12 ingenieros, "los 12 del patíbulo", creaban en los laboratorios de IBM situados en Boca Ratón, Florida, el primer ordenador personal, el IBM-PC. Entre ellos estaba David J. Bradley. Fue el encargado de diseñar la BIOS de aquel primer equipo de uso doméstico. El resto de su trabajo para el "gigante azul" queda empañado por la anécdota: la creación del código de reinicio del PC.



El ingeniero David Bradley


Entró en IBM en 1975, y formó parte a partir de 1980 del equipo que desarrolló el primer ordenador personal. Entre otras cosas, es responsable del código de la ROM BIOS que llevaban los primeros PCs. Despues de 28 años y medio en IBM, Bradley la abandonó en enero de 2004. En la actualidad continúa impartiendo clase en la Universidad Estatal de Carolina del Norte. Para este ingeniero en electricidad e informática, cuantos más estudiantes vayan a carreras de ciencia y tecnología, mayor será la fuerza económica del país (en su caso, de los Estados Unidos).


David J. Bradley



Control Alt Delete


¿Por qué se desarrolló esta función? Bradley explica que a principios de los 80 en IBM se estaban haciendo pruebas de forma intensa con nuevo hardware y nuevo software. Esto provocaba que los ordenadores se quedasen colgados con facilidad. Para volver a arrancar un equipo era necesario apagarlo, esperar unos segundos a que reposara para no provocar daños al hardware, volver a arrancarlo y esperar por las rutinas de autocomprobación que ejecutaba el PC. Se tardaba más de un minuto en volver a tener el equipo operativo.


La idea de Bradley era crear un mecanismo que permitiese el reinicio "en caliente", sin tener que seguir todo ese proceso. El ahorro de tiempo era considerable, y por eso esta funcionalidad, que en un principio estaba destinada únicamente a ser conocida por los desarrolladores de IBM, se difundió paulatinamente entre el público.


¿Porqué esas tres teclas?


¿Por qué estas tres teclas? Se trataba de encontrar una combinación que no se pudiese teclear por accidente. Se eligieron dos teclas de uso poco común (Control y Alt) y la tercera se buscó justo al otro lado del teclado. Al principio Bradley pensó en la tecla "+", pero creyó que DELETE tendría más sentido. Una vez definida la solución, Bradley afirma que programarla no le llevó más de cinco minutos.



La actualidad de "Control Alt Delete"


Ya no es lo que era, ahora es más. Las versiones de Windows 2000 y XP capturan esta combinación y ofrecen un panel de opciones: el administrador de tareas, cerrar sesión o apagar de forma civilizada. En los casos extremos en que esto ya no funciona, no hay más remedio que volver al fatídico botón de reset.


Tambien se incorpora en Windows 2000 para arranque de sesión, con lo que "Control+Alt+Supr", tambien conocido como "La llave de Vulcano", o "El saludo de los tres dedos", ha dejado definitivamente de ser un truco no escrito a ser una combinación de teclas de obligado conocimiento, mucho más usada si cabe.



Hacerlo famoso


Cuando se celebraba el vigésimo aniversario de la creación del Pc, compartían escenario en una mesa redonda Bill Gates y David Bradley, entre otros. Durante una parte del evento, el tema de conversación era el mecanismo de reinicio. En el vídeo cuyo enlace ofrecemos se puede oir a Bradley bromeando con Gates, aunque este último no pone cara de estar divirtiéndose. Bradley dice: "Hacerlo llevó cinco minutos, no sabía que iba a crear un icono cultural. Pero tengo que compartir el mérito, puede que yo lo haya inventado, pero ha sido Bill el que lo ha hecho famoso."


Seguramente, Bradley fue el primer sorprendido por la fama alcanzada por su código. Algo que en principio era simple, que no llevó más de cinco minutos, se acaba convirtiendo en un icono cultural. Quizá esto nos puede enseñar a apreciar los detalles y los trabajos pequeños. Si están bien hechos y son útiles, pueden convertirse en algo con un gran significado.


La idea de Bill Gates es distinta. Adoptó el código de Bradley, le era útil y lo utilizó como un complemento para construir algo mayor. Es tambien una forma de ver como lo que hacemos, si lo compartimos, puede servirle a otra gente. Aunque podemos adivinar que Gates hubiese preferido que el "Ctrl+Alt+Supr" no fuese tan conocido por sus usuarios.


Ahora una rola del reno renardo al respecto.


Ctrl Alt Supr - Reno Renardo

Replicando Datos En Oracle

Introducción


El presente documento muestra la forma de replicar de manera sencilla los datos de una base de datos en oracle hacia otro servidor oracle, mediante el uso de vistas materializadas.


La replicación te permite tener una copia exacta de una base de datos alojada en un servidor (maestro) que se guardará en otro servidor (esclavo). Todas las modificaciones que se hagan en la base de datos del servidor maestro se actualizarán inmediatamente en el servidor esclavo.


Esto no es una copia de seguridad, ya que si borramos una fila en la base de datos maestra, también se borrará en la base de datos esclava.


A continuación tenemos los pasos para instalar y configurar nuestro servidor para replicar datos.



Instalando Oracle.


Para nuestro caso usaremos la de oracle llamada oracle Express Edition, la cual es gratuita para nuestro servidor. Nos dirigimos a la página:


http://www.oracle.com/technology/software/products/database/xe/htdocs/102xewinsoft.html


Y aceptamos los términos de licenciamiento del programa, en este momento descargaremos el producto para posteriormente instalarlo en nuestro sistema.





[caption id="attachment_51" align="aligncenter" width="300" caption="Descargando OracleXE"]Descargando OracleXE[/caption]


Una vez descargado lo instalaremos dando clic derecho en el instalador y eligiendo la opción, abrir.




[caption id="attachment_52" align="aligncenter" width="300" caption="Ejecutando el instalador"]Ejecutando el instalador[/caption]


Esperamos un momento y podremos ver las opciones del programa.




[caption id="attachment_53" align="aligncenter" width="300" caption="Opciones de configuracion"]Opciones de configuracion[/caption]

[caption id="attachment_54" align="aligncenter" width="300" caption="Instalacion OracleXE"]Instalacion OracleXE[/caption]

El programa de instalación nos muestra la pantalla de bienvenida para la instalación, en este momento tenemos que dar click en siguiente.





[caption id="attachment_55" align="aligncenter" width="300" caption="LicenciaDirectorio de instalacion"]Licencia[/caption]


Aceptamos los términos y condiciones del programa y pulsamos siguiente, en seguida seleccionamos la ubicación de los archivos de instalación, si queremos instalarlos en otra ubicación podemos seleccionarla pulsando el botón  Examinar, después de esto pulsamos siguiente.





[caption id="attachment_57" align="aligncenter" width="300" caption="Establecer contraseña"]Establecer contraseña[/caption]


Ahora tecleamos una contraseña para los usuarios SYS y SYSTEM, los cuales son los usuarios (dba) administradores en oracle, y pulsamos en siguiente, ahora nos mostrara un resumen de la instalación si estamos de acuerdo con este daremos clic en instalar.





[caption id="attachment_58" align="aligncenter" width="300" caption="Instalacion"]Instalacion[/caption]

Configurando El Servidor


Ahora editaremos el archivo “C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora”, y agregaremos las siguientes líneas de configuración (resaltadas en cursiva y negrita) para que el servidor oracle reconozca nuestro servidor remoto, usando una resolución de nombres tns.
# tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora


# Generated by Oracle configuration tools.

LISTENER_ORCL =

(ADDRESS =

(PROTOCOL = TCP)

(HOST = RAMMSCORP.gateway.2wire.net)

(PORT = 1522)

)

ORCL =

(DESCRIPTION =

(ADDRESS =

(PROTOCOL = TCP)

(HOST = RAMMSCORP.gateway.2wire.net)

(PORT = 1522)

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

YOS =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS =

(COMMUNITY = TCP)

(PROTOCOL = TCP)

(HOST = yosy1)

(PORT = 1521)

)

)

(CONNECT_DATA =

(SID = XE)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS =

(PROTOCOL = IPC)

(KEY = EXTPROC1)

)

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)
Donde YOS es el nombre del servidor remoto que agregamos, es decir un alias, PROTOCOL es el protocolo de comunicación hacia el servidor, HOST es el nombre ó la dirección IP de la computadora que tiene el servidor, PORT indica el numero de puerto al cual se conectara el servidor y finalmente SID que es el nombre de servicio del servidor remoto.


De esta manera nos podremos conectar con el servidor remoto usando la nomenclatura de conexión:


Usuario/Password@Alias_Del_Servidor:[Puerto]


Donde Usuario es cualquier usuario valido del servidor remoto, Password es la contraseña del usuario remoto, @Alias_del_servidor es el nombre que hemos añadido en el archivo de configuración tnsnames.ora, y finalmente el Puerto que indica a que puerto se conectara este parámetro es opcional, por defecto las conexiones se realizan al puerto 1521.


Una vez editado y configurado archivo, tendremos que configurar nuestro servidor estableciendo un DBLink ó un enlace a base de datos.


Usando la siguiente instrucción:




Create database link "Nombre_Del_DBLink" connect to Usuario identified by "Password" using 'HOST[: PUERTO]/SID'

De la siguiente instrucción tenemos Nombre_Del_DBLink el cual es un nombre cualquiera para identificar a que base de datos estamos ligados, Usuario el cual debe de ser un usuario remoto valido, Password es la contraseña del usuario remoto, HOST es el nombre ó dirección ip del servidor, PUERTO indica el numero del puerto al que se conectara el parámetro es opcional, el puerto por defecto es el 152, y por ultimo SID es el nombre del servicio al cual se conectara nuestro servidor.


La cual nos proporcionara la facilidad de hacer consultas del tipo:


Objeto@DBLink


Donde Objeto puede ser cualquier tipo de objeto en la base de datos remota y @DBLink es el enlace a la base de datos, de este modo podremos usar las tablas, vistas, triggers y demás objetos en el servidor.


Estos pasos de configuración se hacen en los dos servidores para que se puedan comunicar, es decir tenemos que dar de alta el servidor 1 en el servidor 2 y viceversa; además tenemos que dar de alta un DBLink para cada uno de ellos, una vez teniendo configurados los servidores podremos iniciar la replicación.



Replicando Datos


Ahora antes de replicar los datos tenemos que tener datos, necesitamos tener cuando menos una tabla en la base de datos, ahora crearemos una tabla para hacer esta práctica la cual llamaremos: COMPRAS; la cual estará en el servidor 1 (RAMMS) y será replicada hacia el servidor 2 (YOS). Utilizaremos las sentencias de SQL Plus para crear la tabla con los siguientes campos de la siguiente manera:



CREATE TABLE RAMMS.COMPRAS

(

CODIGO VARCHAR2 (8 BYTE) NOT NULL,

PROVEEDOR VARCHAR2 (30 BYTE) NOT NULL,

PRODUCTO VARCHAR2 (45 BYTE) NOT NULL,

PRECIOCOMPRA INTEGER NOT NULL,

PRECIOVENTA INTEGER NOT NULL,

CANTIDAD NUMBER NOT NULL

)

Y posteriormente:
ALTER TABLE RAMMS.COMPRAS ADD (

PRIMARY KEY

(CODIGO)

USING INDEX

TABLESPACE USERS

PCTFREE    10

INITRANS   2

MAXTRANS   255

STORAGE    (

INITIAL          64K

MINEXTENTS       1

MAXEXTENTS       UNLIMITED

PCTINCREASE      0

));

Después de crear la tabla agregaremos datos en ella, quedando de la siguiente manera:


Ahora realizaremos una consulta desde el servidor 2 (YOS) usando los DBLink, quedando de la siguiente manera:




[caption id="attachment_50" align="aligncenter" width="300" caption="Datos"]Datos[/caption]
SELECT * FROM COMPRAS@DBLINKRAMMS

Arrojando la siguiente información:

[caption id="attachment_50" align="aligncenter" width="300" caption="Datos"]Datos[/caption]

Como podemos observar la consulta funciona es decir que podemos consultar objetos desde el servidor 2, ahora crearemos en el servidor 1 (RAMMS), una tabla LOG para la replicación de la tabla COMPRAS, con la siguiente instrucción:



CREATE MATERIALIZED VIEW LOG ON RAMMS.COMPRAS

NOCACHE

LOGGING

NOPARALLEL;


Esta tabla guardara los datos cambiados y actualizara de manera instantánea todas las replicas de la tabla COMPRAS.


Ahora desde el servidor 2 (YOS) crearemos nuestra vista materializada para recibir los datos de la tabla original, a este procedimiento de replica se le denomina replica en forma de instantánea o de snapshot, lo haremos usando la siguiente instrucción.



CREATE MATERIALIZED VIEW RAMMS.COMPRAS

BUILD IMMEDIATE

REFRESH FAST ON COMMIT

AS

SELECT * FROM COMPRAS@DBLINKRAMMS;

Ahora en el servidor 2 (YOS), ya disponemos de una copia exacta de la tabla compras del servidor 1 (RAMMS), y se actualizara automáticamente cuando se haga un commit en las transacciones, ahora podemos ejecutar la sentencia:



SELECT * FROM COMPRAS;

E inmediatamente después podremos apreciar el resultado de la consulta, nótese que en el servidor 2,no existían datos para la tabla COMPRAS de hecho COMPRAS no es una tabla es una ¡vista!







[caption id="attachment_50" align="aligncenter" width="300" caption="Datos"]
Datos[/caption]




De esta manera cualquier cambio realizado en el servidor 1, se verá reflejado inmediatamente en el servidor 2, de esta manera tenemos la información actualizada y lo más importante distribuida en varios nodos al mismo tiempo.



Conclusión


En esta práctica aprendimos a hacer una replicación de instantánea de una tabla en oracle usando dos servidores uno que es el servidor que tiene la tabla a replicar (RAMMS) y un cliente (YOS)  el cual puede tener los datos de la tabla para consultar, cabe señalar que la vista materializada es de solo lectura, debido a que es una instantánea, también configuramos los accesos de los servidores mediante el archivo de configuración tnsnames.ora y dimos de alta los servidores en los archivos, lo que nos daba como resultado la comunicación entre ambos y logrando así poder generar el enlace de base de datos entre ellos. Teniendo la posibilidad de realizar consultas distribuidas entre los servidores. Finalizando en la creación de la tabla de LOGS y la vista materializada, para poder consultar los datos replicados de manera local.


Documento en Scribd ó ¡Descargalo!