Univercidad Tegnologica Americana “UNITA” Carla Terán Informática BASE DE DATOS ORACLE Oracle es un sistema de gestión de base de datos relacional (o RDBMS por el acrónimo en inglés de Relational Data Base Management System), desarrollado por Oracle Corporation. Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando: soporte de transacciones, estabilidad, escalabilidad y Soporte multiplataforma. Ha sido criticada por algunos especialistas la seguridad de la plataforma, y las políticas de suministro de parches de seguridad, modificadas a comienzos de 2005 y que incrementan el nivel de exposición de los usuarios. En los parches de actualización provistos durante el primer semestre de 2005 fueron corregidas 22 vulnerabilidades públicamente conocidas, algunas de ellas con una antigüedad de más de 2 años. Aunque su dominio en el mercado de servidores empresariales ha sido casi total hasta hace poco, recientemente sufre la competencia del Microsoft SQL Server de Microsoft y de la oferta de otros RDBMS con licencia libre como PostgreSQL, MySql o Firebird. Las últimas versiones de Oracle han sido certificadas para poder trabajar bajo GNU/Linux. METODOS DE RESPALDO Y RECUPERACION Oracle ofrece varios tipos de respaldo para la información; entre ellos no existe un método que sea el más óptimo para todas las organizaciones, debido a que son muchos los factores que inciden y se deben evaluar para determinar cual es el mejor procedimiento para determinado escenario de recuperación. Cada método de respaldo cumple funciones definidas, es por ello que se debe conocer muy bien la Base de Datos, la carga transaccional y la criticidad de la información entre otros para determinar el tipo de respaldo que necesita cada organización. EXPORT E IMPORT Es uno de los más usados por los clientes de Oracle por su flexibilidad y portabilidad y solo se puede hacer si la Base de Datos esta abierta; RESPALDOS EN FRIO (Cold backup) Es un método de respaldo muy restrictivo, y debe hacerse únicamente cuando la base de datos este cerrada. Es útil en el evento de perdida total de la base de datos. RESPALDOS EN CALIENTE (Hot Backup) Este tipo de respaldo es especialmente utilizado en organizaciones en las cuales la base de datos necesita estar disponible durante las veinticuatro horas y los siete dias de la semana. Los respaldos en caliente son una consecuencia de una funcionalidad de Oracle llamada el modo "ARCHIVE". Este modo consiste en configurar algunos parámetros de la base de datos para que se registren todos los cambios hechos a la misma por mínimos que sean en unos archivos llamados "REDO LOGS". PROCESO ESTANDAR PARA LA GENERACION DE UN FULL-EXPORT Se debe tener un comando "AT" programado para que active un archivo llamado "Backup" de manera automática. El archivo Backup contendrá lo siguiente EN WINDOWS NT : El archivo Backup es una opción de Inicio, programas y contendrá lo siguiente: d:\orant\bin\exp73.exe parfile = d:\orant\backup\param_fullexp.txt El archivo PARAM_FULLEXP.TXT contiene lo siguiente Backup/Backup full=y compress=y indexes=y file=d:\orant\backup\fullexpor.dmp log=d:\orant\backup\fullexpor.log rows=y EN UNIX: EXP USERID=Backup/Backup BUFFER=3076000 FILE=/u01/Backup/Fullexport.dmp FULL=Y COMPRESS=Y GRANTS=Y INDEXES=Y CONSTRAINTS=Y ROWS=Y LOG=/u01/Backup/Fullexport.log Para lo anterior se debe crear un usuario llamado Backup en las bases de datos, y direccionar los archivos con extensión (.dmp) a un disco con suficiente espacio. PROCESO ESTANDAR PARA LA GENERACION DE UN Cold-Backup Este es un respaldo de todos los archivos de la base de datos (no de sistema operativo, aunque se podrían incluir), habiendo sido esta bajada en forma normal. Los archivos a copiar en este tipo de respaldo son los generados en las siguientes busquedas: select status, enabled, bytes, name from v_$datafile; select * from v_$controlfile; select status, member from v_$logfile; Además se debe respaldar el archivo initsid.ora. EN WINDOWS NT : 1. Verificar que no hayan usuarios conectados a la base de datos. 2. Entrar a Inicio, Programas y ejecutar el comando "BAJAR_BD", el cual baja la base de datos y contiene: d:\orant\bin\oradim73.exe -shutdown -sid ORCL -usrpwd oracle –shuttype srvc,inst shutmode n 3. Entrar a la utilidad de backup de Windows NT, escoger la unidad requerida, y los archivos a ser respaldados, incluyendo D:orant y los directorios en donde están los archivos con extensiones .trc, .dmp, .ctl, .dbf, .log, init*.ora. 4. Entrar a Inicio, Programas y ejecutar el comando "SUBIR_BD", el cual sube la Base de Datos y contiene: d:\orant\bin\oradim73.exe -startup -sid ORCL -usrpwd oracle starttype srvc,inst -pfile d:\orant\database\initorcl.ora EN UNIX Bajar la base de datos asi: Estando conectado a Unix verificar que no hayan usuarios conectados a la base de datos svrmgrl connect internal shutdown exit ejecutar el script que genera la copia de los archivos a ser respaldados Subir la base de datos asi: svrmgrl connect internal startup PROCESO ESTANDAR PARA LA GENERACIÓN DE Hot-Backup Para inicializar este modo de operación se recomienda hacer antes un backup de la base de datos por si ocurre algún problema. Posteriormente se deben configurar en el archivo INITsid.ORA los siguientes parámetros: LOG_ARCHIVE_DEST = (Directorio donde seran grabados los archivos Ejemplo: d:/backup/archive/arch). LOG_ARCHIVE_FORMAT = (Formato del nombre de los archivos Ejemplo: %t_%s.dbf) LOG_ARCHIVE_START = TRUE enseguida se deben ejecutar los siguientes comandos: Alter database mount; (Sube la instancia pero no abre la base) Alter database archivelog; (Coloca la base en modo Archivelog) Archive log start; (Activa el archive automaticamente cada vez suba la instancia) Alter database open; (Abre la base de datos y la deja disponible) PROCESO ESTANDAR PARA LA RESTAURACION DE UN FULL-EXPORT Se debe tener presente si se desea restaurar la información por tabla, usuario o la base de datos, pues del fullexport puedo obtener los tres. Además se debe evaluar si se desea sobreescribir la información existente al bajar el fullexport o si se baja sobre un usuario temporal para posteriormente proceder a hacer el insert a las tablas originales. Restaurar el archivo (Fullexport.dmp) de la cinta a un disco con suficiente capacidad. EN WINDOWS NT : Modificar uno de los siguientes tres archivos según el tipo de Import que se desee realizar : d:\orant\backup\Imp_tabla d:\orant\backup\Imp_user d:\orant\backup\Imp_full. Digitar el siguiente comando por inicio ejecutar o por Ms-dos (no se hace automatico por que son muchos los escenarios que se pueden presentar y especificos según el import deseado,debido a ello existe cierto riesgo de error). d:\orant\bin\imp73.exe parfile = d:\orant\backup\imp_tabla ó d:\orant\backup\imp_user ó d:\orant\backup\imp_full según el archivo que haya modificado anteriormente. PROCESO ESTANDAR PARA LA RESTAURACION DE Cold-Backup Bajar estos archivos es tan sencillo como copiar los archivos del medio en donde se respaldaron a su posición original. Se debe tener en cuenta que cuando se esta en modo NOARCHIVELOG (este se verifica haciendo un select * from sys.v_$database) se debe bajar completamente, sin dejar ningún archivo de lado, de lo contrario la base de datos no reconocerá los archivos bajados o los que ya estaban y presentará problemas. IMPORT El import se puede hacer a nivel de tabla, usuario o Full database dependiendo de los privilegios de quien importa y de la manera como se hizo el export. SECUENCIA DE RECUPERACION UTILIZANDO IMPORT Digite el comando IMP username / password PARFILE = filename o IMP PARFILE = filename El username/password especifican quien hace el import, lo importante es que tenga los privilegios suficientes. el tamaño del Buffer Size se estima como = rows_in_array * maximun_row_size PROGRAMACIÓN EN PL/SQL PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los lenguajes de programación . Con PL/SQL vamos a poder programar las unidades de programa de la base de datos ORACLE, están son: PROCEDIMIENTOS ALMACENADOS Los procedimientos almacenados son grupos de instrucciones PL/SQL que se pueden llamar por su nombre. Son similares a los procedimientos conocidos de los lenguajes de tercera generación, pero a diferencia de éstos, se almacenan directamente en la base de datos. También admiten parámetros. Asimismo, existen funciones almacenadas. Un procedimiento almacenado PL/SQL se define como:CREATE OR REPLACE PROCEDURE La sintaxis de un procedimiento almacenado es la siguiente: CREATE [OR REPLACE] PROCEDURE <procedure_name> [(<param1> [IN|OUT|IN OUT] <type>, <param2> [IN|OUT|IN OUT] <type>, ...)] IS -- Declaracion de variables locales BEGIN -- Sentencias [EXCEPTION] -- Sentencias control de excepcion END [<procedure_name>]; FUNCIONES Una función es un subprograma que devuelve un valor. La sintaxis para construir funciones es la siguiente: CREATE [OR REPLACE] FUNCTION <fn_name>[(<param1> IN <type>, <param2> IN <type>, ...)] RETURN <return_type> IS result <return_type>; BEGIN return(result); [EXCEPTION] -- Sentencias control de excepcion END [<fn_name>]; TRIGGERS Un trigger es un bloque PL/SQL asociado a una tabla, que se ejecuta como consecuencia de una determinada instrucción SQL (una operación DML: INSERT, UPDATE o DELETE) sobre dicha tabla. La sintaxis para crear un trigger es la siguiente: CREATE [OR REPLACE] TRIGGER <nombre_trigger> {BEFORE|AFTER} {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN] [OR {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]...]} ON <nombre_tabla> [FOR EACH ROW [WHEN (<condicion>)]] DECLARE -- variables locales BEGIN -- Sentencias [EXCEPTION] -- Sentencias control de excepcion END <nombre_trigger>; SCRIPTS Dentro de la seccion DECLARE de un bloque anónimo podemos declarar funciones y procedimientos almacenados y ejecutarlos desde el bloque de ejecución del script. Este tipo de subprogramas son menos conocidos que los procedimientos almacenados, funciones y triggers, pero son enormemente útiles. El siguiente ejemplo declara y ejecuta utiliza una funcion (fn_multiplica_x2). DECLARE idx NUMBER; FUNCTION fn_multiplica_x2(num NUMBER) RETURN NUMBER IS result NUMBER; BEGIN result := num *2; return result; END fn_multiplica_x2; BEGIN FOR idx IN 1..10 LOOP dbms_output.put_line ('Llamada a la funcion ... '||TO_CHAR(fn_multiplica_x2(idx))); END LOOP; END; Pero además PL/SQL nos permite realizar programas sobre las siguientes herramientas de ORACLE: Oracle Forms Oracle Reports Oracle Graphics Oracle Aplication Server USUARIOS Y PRIBILEGIOS CREACIÓN DE USUARIOS Una de las más básicas tareas de un administrador de base de datos es identificar los usuarios. Cada usuario que conecta en la base de datos debe de tener una cuenta. En las cuentas compartidas son difíciles de aplicar una auditoria. Para crear un usuario utilizamos la sentencia CREATE USER. Cuando creas una cuenta como mínimo tienes que asignar un único nombre (username) y una contraseña para poder autenticarse. Para cambiar alguno de los atributos que se le ha añadido al usuario creado se utiliza la sentencia ALTER USER. AUTENTICACIÓN ORACLE Cuando uno se conecta con una instancia de una base de datos la cuenta de usuario debe de estar autenticada. ORACLE provee tres métodos de autenticación para nuestra cuenta de usuario. AUTENTICACIÓN MEDIANTE PASSWORD Cuando un usuario conecta con una base de datos verifica que este usuario y la contraseña introducida almacenada en la base de datos, sea correcta. Las contraseñas se guardan encriptadas en la base de datos (en el data dictionary). SQL> CREATE USER carla IDENTIFIED BY tititus; En este caso tititus es la contraseña de david que será guardada encriptada en la base de datos. AUTENTICACIÓN EXTERNA Cuando un usuario conecta con la base de datos se verifica que el nombre de usuario es el mismo que el nombre de usuario del sistema operativo para permitir la validación. No se almacenan las cuentas en la base de datos de ninguna forma. Estas cuentas están siempre referidas con OPS$ .A partir de la versión 10g puedes configurar OS_AUTHENT_PREFIX en el spfile SQL> CREATE USER ops$carla IDENTIFIED BY tititus; Mediante IDENTIFIED EXTERNALLY decimos a la base de datos que nuestra cuenta es externa y tiene que ser validada con el sistema operativo. AUTENTICACIÓN GLOBAL Cuando un usuario se conecta con la base de datos se verifica globalmente cuando la información pasa por una opción avanzada de seguridad ( ADVANCED SECURITY OPTION ) para la autenticación tal como Kerberos, RADIUS .... Para las cuentas globales no se almacena tampoco nada en la base de datos. SQL> CREATE USER carla IDENTIFIED GLOBALLY AS’CN=alumnus,OU=campos’ ……; Mediante IDENTIFIED GLOBALLY decimos a la base de datos que nuestra cuenta se autentica globalmente, mediante otra opción de seguridad avanzada. ASIGNACIÓN DE UN USUARIO A UN TABLESPACE ( DEFAULT TABLESPACE ) Mediante esta sentencia asignamos un usuario a un tablespace, este será su tablespace por defecto cuando creamos un usuario. SQL> CREATE USER carla IDENTIFIED BY tititus DEFAULT TABLESPACE usesrS; Mediante esta sentencia, en caso de tener creado ya el usuario le asignamos un tablespace. SQL> ALTER USER carla DEFAULT TABLESPACE usesrS; La base de datos toma un tablespace por defecto, en caso de querer cambiar este tablespace utilizamos la siguiente sentencia SQL> ALTER DATABASE DEFAULT TABLESPACE usesrS; ASIGNACIÓN DE UN USUARIO A UN TABLESPACE TEMPORAL Un tablespace temporal se utiliza para almacenar “segmentos” temporales que son creados durante operaciones como ORDER BY,SELECT DISTINCT, MERGE JOIN o CREATE INDEX.A veces a los usuarios se les asocia un tablespace temporal para realizar este tipo de operaciones, cuando estas operaciones finalizan este segmento temporal que se ha creado exclusivamente para la operación desaparece. SQL> CREATE USER carla IDENTIFIED BY tititus DEFAULT TABLESPACE usesrs TEMPORARY TABLESPACE temp; Mediante TEMPORARY TABLESPACE asignamos como tablespace temporal temp al usuario david. En caso de que el usuario esté creado si queremos asignarle un tablespace temporal utilizamos ALTER USER SQL> ALTER USER carla DEFAULT TABLESPACE temp; ASIGNACIÓN DE UN PERFIL A UN USUARIO Al igual que podemos asignar un tablespace a un usuario, también podemos asignarle un perfil (profile). El principal perfil ( profile ) por defecto se denomina default. Si el usuario no está lo podemos crear de la siguiente forma: SQL> CREATE USER carla IDENTIFIED BY tititus; DEFAULT TABLESPACE users TEMPORARY TABLESPACE users PROFILE resource profile; En caso de que el usuario ya esté creado al igual que en los anteriores casos utilizamos la sentencia ALTER USER. SQL> ALTER USER carla PROFILE resource profile; BORRADO DE UN USUARIO Para borrar un usuario utilizamos la sentencia DROP USER, podemos opcionalmente incluir la opción CASCADE, se utiliza para borrar recursivamente los objetos del usuario que se pretende borrar. SQL> DROP USER carla CASCADE OTORGANDO PRIVILEGIOS (GRANTING) A un usuario podemos otorgarle una serie de privilegios. Un privilegio permite a un usuario acceder a ciertos objetos o realizar ciertas acciones:. - Privilegios sobre Objetos ( Object privileges ) a permisos sobre vistas, tablas, secuencias, procedimientos, paquetes. - Privilegios del Sistema ( System privileges ) a permisos sobre “niveles de la base de datos” como pueden ser conexión a la base de datos, creación de usuarios, limitar cuentas. - Privilegios sobre Roles ( Role privileges ) a muchos permisos son otorgados mediante roles agrupando un conjunto de privilegios. Para otorgar privilegios utilizamos la sentencia GRANT, para quitar un privilegio o permiso a un usuario utilizamos la sentencia REVOKE EJEMPLOS Privilegio sobre una tabla: SQL> GRANT ALL ON tabla_aLumnos TO carla; Siendo tabla_alumnos una tabla de nuestra base de datos y david un usuario de esta, hemos asignado mediante GRANT ALL,todos los permisos al usuario david sobre esta tabla. GRANT ALL= permisos SELECT, INSERT, UPDATE, DELETE Si queremos asignar sólo uno de estos permisos utilizamos la misma sentencia pero con el permiso que queramos otorgar. SQL> GRANT SELECT ON tabla_alumnos TO carla SQL> GRANT SELECT, INSERT ON tabla_alumnos TO carla PRIVILEGIO SOBRE UNA VISTA: Para el caso de las vistas podemos a un usuario otorgar permisos SELECT, INSERT, UPDATE, DELETE, DEBUG, REFERENCES. Siendo vista_alumnos una vista de nuestra base de datos y david un usuario de esta: Otorgamos al usuario david todos los permisos sobre la vista vista_alumnos. SQL> GRANT ALL ON vista_alumnos TO carla Otorgamos al usuario david algunos permisos sobre la vista_alumnos SQL> GRANT SELECT ON vista_alumnos TO carla SQL> GRANT SELECT, INSERT ON tabla_alumnos TO carla Privilegio sobre una secuencia: Con las secuencias pasa lo mismo que con los anteriores objetos vistos, para otorgar permisos se utiliza GRANT. Los permisos que podemos otorgar a una secuencia es SELECT o ALTER. Privilegio sobre un paquete,función o procedimiento Los permisos que podemos otorgar a las funciones, paquetes o procedimientos almacenados en nuestra base de datos son los siguientes: EXECUTE, DEBUG. QUITANDO PRIVILEGIOS Si queremos quitar un privilegio a uno de estos objetos haremos lo mismo que con GRANT pero utilizando la sentencia REVOKE. SQL> REVOKE ALL ON tabla_usuarios FROM carla HERRAMIENTAS ESPECIALES Oracle ofrece la gama más completa e integrada de herramientas para el desarrollo de aplicaciones, desarrollo de base de datos e inteligencia de negocio, compatibles con cualquier enfoque de desarrollo, plataforma tecnológica o sistema operativo. Oracle también ofrece diversas herramientas JDeveloper y Eclipse gratuitas que facilitan el desarrollo de aplicaciones web y bases de datos, además de facilitar a los desarrolladores .NET la implantación de aplicaciones basadas en tecnología Oracle y servicios web en la plataforma Windows. SQLForms: es la herramienta de Oracle que permite, de un modo sencillo y eficiente, diseñar pantallas para el ingreso, modificaciones, bajas y consultas de registros. El usuario podrá, una vez definida la forma, trabajar con ella sin necesidad de generar códigos, dado que Oracle trae incorporado un conjunto de procedimientos y funciones asociados a las teclas de funciones, como por ejemplo la tecla [F7], que se usa para iniciar una consulta. La herramienta fundamental de SQL es la sentencia SELECT, que permite seleccionar registros desde las tablas de la Base de Datos, devolviendo aquellos que cumplan las condiciones establecidas y pudiendo presentar el resultado en el orden deseado. Para ver el gráfico seleccione la opción "Descargar" del menú superior SQL (Structured Query Languague = Lenguaje de Consulta estructurado). La orden FROM identifica la lista de tablas a consultar. Si alguna de las tablas a consultar no es propiedad del usuario, debe especificarse el nombre del propietario antes que el nombre de la tabla en la forma nombre_propietario.nombre_tabla. La orden WHERE decide los registros a seleccionar según las condiciones establecidas, limitando el número de registros que se muestran. La orden ORDER BY indica el orden en que aparece el resultado de la consulta. BASES DE DATOS DISTRIBUIDAS Una base de datos distribuida (BDD) es un conjunto de múltiples bases de datos lógicamente relacionadas las cuales se encuentran distribuidas entre diferentes sitios interconectados por una red de comunicaciones, los cuales tienen la capacidad de procesamiento autónomo lo cual indica que puede realizar operaciones locales o distribuidas. Un sistema de Bases de Datos Distribuida (SBDD) es un sistema en el cual múltiples sitios de bases de datos están ligados por un sistema de comunicaciones de tal forma que, un usuario en cualquier sitio puede acceder los datos en cualquier parte de la red exactamente como si los datos estuvieran siendo accedidos de forma local. En un sistema distribuido de bases de datos se almacenan en varias computadoras. Los principales factores que distinguen un SBDD de un sistema centralizado son los siguientes: Hay múltiples computadores, llamados sitios o nodos. Estos sitios deben de estar comunicados por medio de algún tipo de red de comunicaciones para transmitir datos y órdenes entre los sitios. Tipos de arquitecturas/implementaciones En un sistema de bases de datos distribuidas, existen varios factores que deben tomar en consideración que definen la arquitectura del sistema: 1. Distribución: Los componentes del sistema están localizados en la misma computadora o no. 2. Heterogeneidad: Un sistema es heterogéneo cuando existen en él componentes que se ejecutan en diversos sistemas operativos, de diferentes fuentes, etc. 3. Autonomía: Se puede presentar en diferentes niveles, los cuales se describen a continuación: Autonomía de diseño: Habilidad de un componente del para decidir cuestiones relacionadas a su propio diseño. Autonomía de comunicación: Habilidad de un componente del para decidir como y cuando comunicarse con otros SMBD. Autonomía de ejecución: Habilidad de un componente del para ejecutar operaciones locales como quiera. Multi Base de Datos Distribuida Cuando una base de datos distribuida es muy homogénea se dice que es multi base de datos distribuida. Base de Datos Federada Cuando una base de datos distribuida tiene mucha autonomía local se dice que es federada. Objetivos de Implementación Al implementar una base de datos distribuida se tienen ciertos objetivos comunes: Transparencia de ubicación. Permite a los usuarios tener acceso a los datos sin que tenga conocimiento de la ubicación de éstos. Se puede conseguir este nivel de transparencia al utilizar los administradores de transacciones distribuidas, los cuales son capaces de determinar la localización de los datos y de emitir acciones a los calendarizadores apropiados, lo cual puede ejecutarse cuando los administradores de transacciones distribuidas poseen acceso a los directorios de localizaciones de los datos. Transparencia de duplicación. Para que la transparencia de duplicación sea posible, los administradores de transacciones deben traducir las solicitudes de procesamiento de transacción en acciones para el administrador de datos. Para las lecturas el administrador de transacciones selecciona uno de los nodos que almacena los datos y ejecuta la lectura. Para optimizar el proceso, el administrador de transacciones necesita información sobre el rendimiento de varios nodos respecto al sitio de consulta, así podrá seleccionar el nodo de mejor rendimiento. La actualización y escritura de datos duplicados suelen ser más complicadas, ya que el manejador de transacciones debe emitir una acción de escritura para cada uno de los calendarizadores que almacena una copia de los datos. Transparencia de concurrencia. Cuando varias transacciones se ejecuten al mismo tiempo, los resultados de las transacciones no deberán afectarse. La trasparencia de concurrencia se logra si los resultados de todas las transacciones concurrentes son consistentes de manera lógica con los resultados que se habrían obtenido si las transacciones se hubieran ejecutado una por una, en cualquier orden secuencial. Transparencia de fallas. Significa que a pesar de fallas las transacciones sean procesadas de un modo correcto. Frente a una falla, las transacciones deben ser atómicas, significa que se procesen todas o ninguna de ellas. Para este tipo de problemas es importante tener resguardo de la base de datos, y así poder restaurarla cuando sea conveniente. El sistema debe detectar cuándo falla una localidad y tomar las medidas necesarias para recuperarse del fallo. El sistema no debe seguir utilizando la localidad que falló. Por último, cuando se recupere o repare esta localidad, debe contarse con mecanismos para reintegrarla al sistema con el mínimo de complicaciones. Localidad del procesamiento. Los datos se deben distribuir lo más cerca posible de las aplicaciones que los usan para maximizar la localidad del procesamiento, este principio responde a minimizar el acceso remoto a los datos. Diseñar una distribución que maximice localidad del procesamiento puede hacerse añadiendo la cantidad de referencias locales y remotas correspondientes a cada fragmentación candidata y asignar la fragmentación eligiendo la mejor solución. Independencia de configuración. La independencia de configuración permite añadir o reemplazar hardware sin tener que cambiar componentes de software existentes en el sistema de base de datos distribuida. Particionamiento de la Base de Datos. La base de datos se distribuye de modo que no haya solapamiento o duplicación de los datos mantenidos en las diferentes localidades, como no hay duplicaciones de los datos, se evitan los costos asociados con el almacenamiento y mantenimiento de datos redundantes. Si un mismo segmento de datos se usa en más de una localidad se ve limitada la disponibilidad de los datos. La fiabilidad también puede verse limitada cuando se produce un fallo en el sistema de cálculo de una localidad se afecta la disponibilidad de los datos de esa localidad no estén disponible para los usuarios en cualquier parte del sistema. Fragmentación de datos. Consiste en subdividir las relaciones y distribuirlas entre los sitios de la red, tiene como objetivo buscar formas alternativas de dividir una las instancias (tablas) de relaciones en otras más pequeñas. La fragmentación se puede realizar por tuplas individuales (fragmentación horizontal), por atributos individuales fragmentación vertical) o una combinación de ambas (fragmentación híbrida). El principal problema de la fragmentación radica en encontrar la unidad apropiada de distribución. Una relación no es una buena unidad por muchas razones. Normalmente las vistas de una relación están formadas por subconjuntos de relaciones. Además, las aplicaciones acceden localmente a subconjuntos de relaciones. Por ello, es necesario considerar a los subconjuntos de relaciones como unidad de distribución. Al descomponer de una relación en fragmentos, tratados cada uno de ellos como una unidad de distribución, permite el proceso concurrente de las transacciones. El conjunto de estas relaciones, provocará la ejecución paralela de una consulta al ser dividida en una serie de subconsultas que operará sobre los fragmentos. Cuando las vistas definidas sobre una relación son consideradas como unidad de distribución que se ubican en diferentes sitios de la red, podemos optar por dos alternativas diferentes: La relación no estará replicada y se almacena en un único sitio, o existe réplica en todos o algunos de los sitios en los cuales reside la aplicación. Las consecuencias de esta estrategia son la generación de un volumen de accesos remotos que pueden ser innecesarios con un mal manejo de estas replicas. Además, las réplicas innecesarias pueden causar problemas en la ejecución de las actualizaciones y puede no ser deseable si el espacio de almacenamiento está limitado. Los inconvenientes de la fragmentación están dados en que si las pueden estar definidas por fragmentos mutuamente exclusivos y al recuperar los datos de dos fragmentos situados en sitios diferentes es necesario trasmitir los datos de un sitio a otro y realizar sobre ellos la operación de unión (Join), lo cual puede ser costoso. El control semántico cuando los atributos implicados en una dependencia una relación se descompone en diferentes fragmentos y estos se ubican en sitios diferentes puede ser muy costos porque es necesario hacer búsquedas en un gran número de sitios. Ventajas y Desventajas Ventajas Refleja una estructura organizacional - los fragmentos de la base de datos se ubican en los departamentos a los que tienen relación. Autonomía local - un departamento puede controlar los datos que le pertenecen. Disponibilidad - un fallo en una parte del sistema solo afectará a un fragmento, en lugar de a toda la base de datos. Rendimiento - los datos generalmente se ubican cerca del sitio con mayor demanda, también los sistemas trabajan en paralelo, lo cual permite balancear la carga en los servidores. Economía - es más barato crear una red de muchas computadoras pequeñas, que tener una sola computadora muy poderosa. Modularidad - se pueden modificar, agregar o quitar sistemas de la base de datos distribuida sin afectar a los demás sistemas (módulos). Desventajas Complejidad - Se debe asegurar que la base de datos sea transparente, se debe lidiar con varios sistemas diferentes que puden presentar dificultades únicas. El diseño de la base de datos se tiene que trabajar tomando en cuenta su naturaleza distribuida, por lo cual no podemos pensar en hacer joins que afecten varios sistemas. Economía - la complejidad y la infraestructura necesaria implica que se necesitará una mayor mano de obra. Seguridad - se debe trabajar en la seguridad de la infraestructura así como cada uno de los sistemas. Integridad - Se vuelve difícil mantener la integridad, aplicar las reglas de integridad a través de la red puede ser muy caro en términos de transmisión de datos. Falta de experiencia - las bases de datos distribuidas son un campo relativamente nuevo y poco común por lo cual no existe mucho personal con experiencia o conocimientos adecuados. Carencia de estándares - aún no existen herramientas o metodologías que ayuden a los usuarios a convertir un DBMS centralizado en un DBMS distribuido. Diseño de la base de datos se vuelve más complejo - además de las dificultades que generalmente se encuentran al diseñar una base de datos, el diseño de una base de datos distribuida debe considerar la fragmentación, replicación y ubicación de los fragmentos en sitios específicos.