lunes, 29 de abril de 2013

ESPEJEO


 Mirror (Espejo): Este método permite hacer una réplica exacta de una base de datos de un servidor a otro. La gran ventaja de este método es que permite el failover automático sin intervención humana (siempre que se instale un tercer servidor witness). De hecho, en la cadena de conexión de las aplicaciones de .NET, podemos especificar cuando conectamos con la aplicación el servidor de sql al que nos conectamos y un failover partner, osea un servidor mirror para que en caso de failover, la aplicación pueda reconectar automáticamente al otro servidor.  La desventaja del mirror, respecto el log shipping y la replicación, es que sólo podemos tener una máquina secundaria o mirror y que esta no es accesible y no podemos tenerla en modo lectura.

BENEFICIOS DEL ESPEJEO
  • Incrementa la disponibilidad de una base de datos.
Si se produce un desastre en el modo de alta seguridad con conmutación automática por error, la conmutación por error pone en línea rápidamente la copia en espera de la base de datos, sin pérdida de datos. En los demás modos operativos, el administrador de bases de datos tiene la alternativa del servicio forzado (con una posible pérdida de datos) para la copia en espera de la base de datos. 
  • Aumenta la protección de los datos.
La creación de reflejo de la base de datos proporciona una redundancia completa o casi completa de los datos, en función de si el modo de funcionamiento es el de alta seguridad o el de alto rendimiento. 
Un asociado de creación de reflejo de la base de datos que se ejecute en SQL Server 2008 Enterprise o en versiones posteriores intentará resolver automáticamente cierto tipo de errores que impiden la lectura de una página de datos. El socio que no puede leer una página, solicita una copia nueva al otro socio. Si la solicitud se realiza correctamente, la copia sustituirá a la página que no se puede leer, de forma que se resuelve el error en la mayoría de los casos. 
  • Mejora la disponibilidad de la base de datos de producción durante las actualizaciones.
Para minimizar el tiempo de inactividad para una base de datos reflejada, puede actualizar secuencialmente las instancias de SQL Server que hospedan los asociados de creación de reflejo de la base de datos. Esto incurrirá en el tiempo de inactividad de solo una conmutación por error única. Esta forma de actualización se denomina actualización gradual.

Como se hace una  Activación de espejeo en un DBMS.

REFERENCIAS

domingo, 28 de abril de 2013

Seguridad


La seguridad de los datos implica protegerlos de operaciones indebidas que pongan en peligro su definición, existencia, consistencia e integridad independientemente de la persona que los accede. Esto se logra mediante mecanismos que permiten estructurar y controlar el acceso y actualización de los mismos sin necesidad de modificar o alterar el diseño del modelo de datos; definido de acuerdo a los requisitos del sistema o aplicación software.
Los siguientes seis requisitos son esenciales para la seguridad de la base de datos:
1.     La base de datos debe ser protegida contra el fuego, el robo y otras formas de destrucción.
2.    Los datos deben ser re construibles, porque por muchas precauciones que se tomen, siempre ocurren accidentes.
3.    Los datos deben poder ser sometidos a procesos de auditoria. La falta de auditoria en los sistemas de computación ha permitido la comisión de grandes delitos.
4.    El sistema debe diseñarse a prueba de intromisiones. Los programadores, por ingeniosos que sean, no deben poder pasar por alto los controles.
5.    Ningún sistema puede evitar de manera absoluta las intromisiones malintencionadas, pero es posible hacer que resulte muy difícil eludir los controles.
6.    El sistema debe tener capacidad para verificar que sus acciones han sido autorizadas. Las acciones de los usuarios deben ser supervisadas, de modo tal que pueda descubrirse cualquier acción indebida o errónea.

MEDIDAS DE SEGURIDAD
·         Físicas: Controlar el acceso al equipo. Tarjetas de acceso, etc
·         Personal: Acceso sólo del personal autorizado. Evitar sobornos, etc.
·         SO: Seguridad a nivel de SO
·         SGBD: Uso herramientas de seguridad que proporcione el SGBD. Perfiles de usuario, vistas, restricciones de uso de vistas, etc.
·         Identificar y  autorizar  a los usuarios: uso de códigos de acceso y palabras claves, exámenes, impresiones  digitales,  reconocimiento  de  voz,  barrido de la retina, etc
·         Autorización:  usar  derechos  de  acceso  dados  por el terminal,  por  la operación que puede realizar o por la hora del día.
·         Uso de técnicas de cifrado: para proteger datos en Base de Datos distribuidas o con acceso por red o internet.
·         Diferentes tipos de cuentas:  en especial del ABD  con   permisos  para:  creación de cuentas,   concesión  y  revocación   de  privilegios y  asignación  de   los niveles de seguridad.
·         Manejo de la tabla de usuarios con código y contraseña, control de las operaciones efectuadas en cada sesión de trabajo por cada usuario y anotadas en la bitácora, lo cual facilita la auditoría de la Base de Datos.

Identificación y autentificación
En un SGBD existen diversos elementos que ayudan a controlar el acceso a los datos.
En primer lugar el sistema debe identificar y autentificar a los usuarios utilizando alguno de las siguientes formas:
·         Código y contraseña
·         Identificación por hardware
·         Características bioantropométricas
·         Conocimiento, aptitudes y hábitos del usuario
·         Información predefinida (Aficiones, cultura, etc)

Además, el administrador deberá especificar los privilegios que un usuario tiene sobre los objetos:


·        
Usar una B.D.
·         Consultar ciertos datos
·         Actualizar datos
·         Crear o actualizar objetos
·         Ejecutar procedimientos almacenados
·         Referenciar objetos
·         Indexar objetos
·         Crear identificadores

REFERENCIAS

http://www.slideshare.net/Drakonis11/integridad-y-seguridad-en-las-bases-de-datos-presentation

miércoles, 17 de abril de 2013

Rendimiento de una base de datos

El administrador de bases de datos es el profesional  responsable de los aspectos técnicos, tecnológicos, científicos, inteligencia de negocios y legales de bases de datos. Los administradores de bases de datos, implementan, dan soporte y gestionan, bases de datos corporativas. Los administradores de bases de datos, crean y configuran bases de datos relacionales. Los administradores de bases de datos, son responsables de la integridad de los datos y la disponibilidad. Los administradores de bases de datos, diseñan, despliegan y monitorizan servidores de bases de datos. Los administradores de bases de datos, diseñan la distribución de los datos y las soluciones de almacenamiento. Los DBAs, garantizan la seguridad de las bases de datos, incluyendo backups y recuperación de desastres. Los administradores de bases de datos, planean e implementan el aprovisionamiento de los datos y aplicaciones. Los administradores de bases de datos, diseñan planes de contigencia. Los administradores de bases de datos, diseñan y crean las bases de datos corporativas de soluciones avanzadas.

Cuando nos encontramos con problemas de rendimiento en nuestro servidor de base de datos, por lo regular pensamos que se trata de algún problema físico (CPU, memoria, disco) del servidor. Sin embargo la mayoría de los problemas de rendimiento se deben al diseño lógico de la Base de Datos, con esto me refiero al el diseño de la BD, los Índices y en la forma de utilizar Transact-SQL para consultar la BD.

Diseño de la Base de Datos

El diseño de la BD es un punto muy importante. Si se tiene un buen diseño, hecho a la medida de las reglas de negocio y necesidades para la cual se está creando garantiza éxito y un menor tiempo de soporte.

Recomendaciones para diseñar una Base de Datos

  • No hay que olvidarnos de la Formas Normales.
  • Crear por cada Tabla una llave Primaria que sirva como identificador de la tabla.
  • Los campos de llave primaria de preferencia deben ser numéricos e ”Identity”.
  • Crear llaves foráneas para relacionar las tablas.
  • Evitar relaciones muchos a muchos, crear tablas intermedias.
  • No crear tablas ni campos que no se van a utilizar.

Creación de Índices

Un índice es una estructura de datos definida sobre una columna de tabla (o varias) y que permite localizar de forma rápida las filas de la tabla en base a su contenido en la columna indexada.

Los índices son de suma importancia para un buen rendimiento de una Base de Datos ya que estos permiten realizar consultas con menos operaciones de E/S de disco y un menor uso de los recursos del sistema.

Recomendaciones para crear índices

  • Crear índices adecuados a las consultas más ejecutadas y las más costosas.
  • No solo crear índices por cada campo, crear índices compuestos cuando las consultas así lo requieran.
  • En las tablas que continuamente se están actualizando, no crear demasiados índices y tratar de definirlos con el menor número de columnas.
  • En tablas que no se actualizan constantemente y tienen un gran número de datos se recomienda usar un número mayor de índices.
  • En tablas con pocos datos no es necesario crear índices.
  • Revisa periódicamente la fragmentación de los índices y en caso de ser necesario re-indéxalos o reconstruirlos.

Creación de consultas

Transact-SQL tiene una gran variedad de opciones para hacer una consulta de distinta forma, es por ello que tenemos que encontrar la forma de realizar las consultas de acuerdo a nuestras necesidades con el menor tiempo y costo posible.

Recomendación para crear consultas

  • Revisar siempre el plan de ejecución de las consultas para que identifiques como SQL está viendo la consulta y veas la manera de mejorar el rendimiento.
  • Tratar de no utilizar cursores, ya que impactan al rendimiento.
  • Sub-Consultas transfórmalas en “JOINS”. Muchas veces las sub-consultas con sentencias “IN” se vuelven muy lentas.
  • Evitar consultas que generan bloqueos.
  • Evitar el uso de “NOT IN”, usar mejor “EXISTS” o “NO EXISTS”.
  • Evitar usar “SUBSTRING” dentro de un “WHERE”
  • Usar “ORDER BY” solo si es absolutamente necesario.
  • No usar el comando “GROUP BY” sin una función de agregación.
  • Consultar únicamente las filas y columnas requeridas. No usar un “SELECT”.

martes, 16 de abril de 2013

Manejo de índices

EN MYSQL
Archivo índice:
Los índices son un grupo de datos vinculado a una o varias columnas que almacena una relación entre el contenido y la fila en la que se encuentra. Con esto se agilizan las búsquedas en una tabla al evitar que MySQL tenga que recorrer toda la tabla para obtener los datos solicitados.
Tipos de índice:
  • PRIMARY KEY: Este índice se ha creado para generar consultas especialmente rápidas, debe ser único y no se admite el almacenamiento de NULL.
  • KEY o INDEX: Son usados indistintamente por MySQL, permite crear indices sobre una columna, sobre varias columnas o sobre partes de una columna.
  • UNIQUE: Este tipo de índice no permite el almacenamiento de valores iguales.
  • FULLTEXT: Permiten realizar búsquedas de palabras. Sólo pueden usarse sobre columnas CHAR, VARCHAR o TEXT
  • SPATIAL: Este tipo de índices solo puede usarse sobre columnas de datos geométricos (spatial) y en el motor MyISAM
SINTAXIS:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [USING index_type]
    ON tbl_name (index_col_name,...)

index_col_name:
    col_name [(length)] [ASC | DESC]


EN ORACLE
TIPOS DE ÍNDICE:
·          Lectura/Escritura
  B-tree (árboles binarios)
  Function Based
  Reserve key

·         Sólo lectura (read only)
  Bitmap
  Bitmap join
  Index-organized table (algunas veces usados en lectura/escritura)
  Cluster y hash cluster

·         Domain (muy específicos en aplicaciones Oracle) Índices en Oracle
SINTAXIS
CREATE INDEX nombre_indice ON [esquema.] nombre_tabla (columna1 [, columna2, ...]) UNIQUE

BIBLIOGRAFIA

viernes, 12 de abril de 2013

Modos de operación de un sgbd


ROLLBACK
Señala el final sin éxito de una transacción, elimina todas las modificaciones de datos realizadas desde el inicio de la transacción y también libera los recursos que retiene la transacción. Su sintaxis es la siguiente:
ROLLBACK [WORK] [TO SAVEPOINT nombrePuntoRestauración | FORCE 'texto'];
COMMIT
Una sentencia COMMIT marca el final de una transacción correcta, implícita o definida por el usuario. COMMIT hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, y además, libera los recursos mantenidos por la conexión. Su sintaxis es la siguiente:

COMMIT COMMENT 'mensaje' | FORCE 'texto']


RECOVERY (RESTORE)
Restaura la tabla o tablas de una copia de seguridad que se hizo con BACKUP TABLE. Las tablas existentes no se sobreescriben; si trata restaurar una tabla existente, obtiene un error. Pero como BACKUP TABLE, RESTORE TABLE actualmente funciona sólo para tablas MyISAM. El directorio debe especificarse como una ruta completa.
 
ROLLBACK
En MYSQL
mysql> CREATE TABLE innotest (campo INT NOT NULL PRIMARY KEY) TYPE = InnoDB;
Query OK, 0 rows affected (0.10 sec)
 
mysql> INSERT INTO innotest VALUES(1);
Query OK, 1 row affected (0.08 sec)
 
mysql> INSERT INTO innotest VALUES(2);
Query OK, 1 row affected (0.01 sec)
 
mysql> INSERT INTO innotest VALUES(3);
Query OK, 1 row affected (0.04 sec)
 
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
|     1 |
|     2 |
|     3 |
+-------+
3 rows in set (0.00 sec)
De acuerdo, nada espectacular. Ahora veamos como usar transacciones.
mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)
 
mysql> INSERT INTO innotest VALUES(4);
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
|     1 |
|     2 |
|     3 |
|     4 |
+-------+
4 rows in set (0.00 sec)
Si en este momento ejecutamos un ROLLBACK, la transacción no será completada, y los cambios realizados sobre la tabla no tendrán efecto.
mysql> ROLLBACK;
Query OK, 0 rows affected (0.06 sec)
 
mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
|     1 |
|     2 |
|     3 |
+-------+


En Oracle
Para deshacer los cambios realizados en una transacción. Rollback restaura el estado de la base de datos para el último punto de confirmación.

Ejemplo:
delete from emp;
rollback;          /* undo the changes */

COMMIT
En mysql
START TRANSACTION;
SELECT @A := presupuesto
FROM departamentos_externos
WHERE codigo =11;
INSERT INTO departamentos( codigo, nombre, presupuesto )
VALUES ( 11, ‘Department test’, @A );
COMMIT;

En Oracle
Para que los cambios realizados en un número de transacción permanente la sentencia COMMIT.

La sintaxis de la sentencia COMMIT es:
COMMIT  [WORK]  [COMMENT ‘your comment’];

RECOVERY (RESTORE)
En mysql
RESTORE TABLE tbl_name [, tbl_name] ... FROM '/path/to/backup/directory'

En Oracle
RECOVER [AUTOMATIC] [FROM 'localizacion'] [BD]
   [UNTIL CANCEL]
   [UNTIL TIME fecha]
   [UNTIL CHANGE entero]
[USING BACKUP CONTROLFILE]

BIBLIOGRAFIA