tag:blogger.com,1999:blog-41120562642429437062024-03-13T22:46:46.096-07:00Oracle Certificación Blog 1Z-052Santiago de la Cruz de los Santos
Distrito Federal, México.
ujat55@yahoo.com.mx
Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.comBlogger45125tag:blogger.com,1999:blog-4112056264242943706.post-54343827916886861302015-07-01T10:02:00.002-07:002015-07-01T10:02:06.298-07:00<div style="text-align: center;">
<span style="font-size: x-large;">Estamos migrando a </span></div>
<div style="text-align: center;">
<span style="color: blue; font-size: x-large;"><a href="http://www.oradba.com.mx/">www.oradba.com.mx</a></span></div>
Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-36861956258402724742013-02-13T21:52:00.005-08:002017-04-06T21:09:44.669-07:0019.02 GESTIONAR PARCHES.<br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">OBJETIVO DE
CERTIFICACION 19.02<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">GESTIONAR PARCHES.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b> </b>En algunos entornos, aplicar parches
puede tomar una considerable cantidad de tiempo, es, sin embargo, una tarea
vital. Algunos parches serán para solucionar problemas en el Código Oracle que
causa que algunas características no trabajen como están documentadas: la
aplicación de estos es opcional, sola es necesario si su instalación pasa a
tener problemas. Otros son para arreglar los problemas de seguridad y no son
todos opcionales. Los parches pueden ser aplicados utilizando línea de comandos
o con el Enterprise Manager.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">TIPOS DE PARCHES.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los parches son suministrados en
tres tipos:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">· <i>Interim Parches </i>(Parches
Provisionales) estos son escrito para solucionar un problema especifico, para
un exacto nivel de versión de la Base de Datos. No son necesariamente completa
integración o regresión probada.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">· <i>CPU (Critical Patch
Update) patches </i>(Actualización
de Parches Críticos) Estos son parches acumulativos para un especifico nivel de
versión y incluyen todos los parches dependientes. CPUs son integración
completa y regresión probada.<b><o:p></o:p></b></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">· <i>Patch sets</i><b> </b>conjunto de parches Un patch set es un conjunto
acumulativo de soluciones de productos que
incrementaran el nivel de versión del producto (según informe de una
consulta contra V$VERSION). Para instancias de 11.1.0.6 a 11.1.0.7.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-indent: 35.4pt;">Si usted tiene un problema, y lo investiga
con MetaLink y con otras fuentes de
identifica el problema como un conocido Bug para solucionarlo un parche, este
parche puede ser instalados como un parche provisional. De lo contrario, no
instale parches provisionales. CPUs son usualmente emitidos cada tres meses y a
menudo incluyen parches para problemas de seguridad. Estos deben ser
instalados, particularmente si su sistema tiene que cumplir con estándares de
seguridad aplicadas por la jurisdicción local. Aplicando un patch set es una
operación mucho más grande que puede cambiar el comportamiento del producto, en
lugar de limitarse a la solución. La aplicación de patch set no debe ser
emprendido sin pruebas.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-indent: 35.4pt;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-indent: 35.4pt;">Para aplicar parches, utilice la utilidad
Opatch. Este puede ser invocado desde la línea de comandos, o atraves de
Database Control.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Database Control incluye Patch
Advisor (Asesor) que identificará que CPUs y parches que oracle recomienda que
deben ser aplicados a la Base de Datos. Esto requiere configurar una conexión a
MetaLink y programar un Job para realizar la comprobación. Una cuenta con MetaLink
y una conexión a Internet desde la maquina servidor son prerrequisitos para
hacer esto.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para configurar la integración
MetaLink, tome el Link Setup en la derecha superior de la Pagina principal de
la Base de Datos del Database Control y luego el Link Patching Setup en la
sección Overview of Setup. En la ventana Patching Setup, ingrese su username y
Password MetaLink. Este será asociado con el username utilizado cuando se
conecta a Database Control. Si existe un servidor proxy entre el servidor de base
de datos y el internet, la ficha Proxy And Connection Setting permitirá
configurar esto.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para programar un job para comprobar
que parches son necesarios, desde la página principal de la Base de Datos en el
Database Control tome el link Jobs en la sección de enlaces relacionados. En la
caja seleccionable Create Job elija
actualizar desde MetaLink y haga clic en Aceptar. Dar el nombre del job, <span class="apple-style-span">programarlo para que se ejecute
con cualquier frecuencia si se estima conveniente, y presentar el trabajo. Una
vez que el trabajo se ejecuta, el Asesor de parches debe estar disponible. <o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Para llegar al Patch Advisor, desde
la pagina principal de la Base de Datos tome la ficha Software And Support,
luego el Link Patch Advisor en la sección Database Software Patching. Estos
mostrarán todos los parches recomendados para la Base de Datos, a partir de la
última vez que el trabajo se ejecuto. <o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">DENTRO DEL EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">SELECCIONANDO LA
EDICION CORRECTA.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El material de este capítulo es poco
probable que se examinado a detalle, pero los principios generales pueden ser
probados. Trabajar con Oracle Support Services es una parte vital del trabajo
de un DBA. los contactos suelen ser uno de dos clases: trabajo proactivo
destinado para detener futuros problemas, y trabajo reactivo cuando se trata
con problemas. Database Control puede ser configurado para ejecutar un Job (the
REFRESHFROMMETALINK job) que contactará a MetaLink regularmente y descargara Lista
de parche, CPUs y Patch sets que son considerados relevantes para su
instalación. La aplicación de todo lo mencionado para mantener el sistema
actualizado con soluciones para problemas conocidos, se espera antes de que
ocurran. Utilizando Database Control interactivamente, usted puede levantar un
SRs, y descargar y aplicar parches en respuesta de problemas particulares.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">APLICANDO PARCHES. <o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los Parches pueden ser aplicados con
la utilidad Opatch, o con el Database Control; El método Database Control de
hecho utiliza Opatch detrás de la escena. La utilidad Opatch es instalada en el
directorio ORACLE_HOME/Opatch y lanzada para ejecución mediante el archivo
ejecutable Opatch (o Opatch.bat en Windows). El prerrequisito es que la
variable de Entorno ORACLE_HOME debe estar establecida (tenga en cuenta que en
Windows no es suficiente tiene que estar como variable de registro, se debe
establecer dentro de la sesión de sistema operativo); el entorno Java Runtime o
posterior debe estar disponible; algunas utilidades standard del sistema
operativo deben estar disponibles. Para probar los prerrequisitos, utilice el
comando LSINVENTORY como en la figura 19-4.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: x-small;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; margin-left: 1em; margin-right: 1em;"><a href="http://4.bp.blogspot.com/-5uHyIjgKUYE/URx5RqzxluI/AAAAAAAAA3A/VLGafkJDsyQ/s1600/img006.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="254" src="http://4.bp.blogspot.com/-5uHyIjgKUYE/URx5RqzxluI/AAAAAAAAA3A/VLGafkJDsyQ/s400/img006.jpg" width="400" /></a></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-align: justify; text-indent: 35.4pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-align: justify; text-indent: 35.4pt;">En la figura 19-4, Opatch está siendo
ejecutado sobre un Sistema Windows. La utilidad fue invocada especificando el
Path completo, utilizando la variable de entorno ORACLE_HOME, y el comando
LSINVENTORY. Este muestra un resumen de información recopilada de lo que ha sido instalado, incluyendo
cualquier parche provisional (ninguno, en este ejemplo). Para obtener mucho mas
información detallada, utilice el parámetro –detail:</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="EN-US">%ORACLE_HOME%\Opatch\opatch
lsinventory –detail</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Todos los parches vienen con un archivo
README.TXT de instrucciones detallando como instalar el parche. Estas
instrucciones incluirán detalles sobre si la Base de Datos debe estar abierta o
apagada mientras el parche es aplicado. Para aplicar un parche una vez
descargado desde MetaLink y descomprimido (estos vienen como archivos ZIP),
ejecute Opatch como sigue:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="EN-US">opatch apply </span><i><span lang="EN-US">path_to_patch</span></i><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Donde <i>Path_to_patch</i>
es el directorio donde el parche fue descomprimido.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-indent: 35.4pt;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-indent: 35.4pt;">Para aplicar un parche con Database Control,
el parche deber ser primero descargado a un </span><i style="font-family: Verdana, sans-serif; font-size: small; text-indent: 35.4pt;">staging
área (área de espera, área de ensayo). </i><span style="font-family: Verdana, sans-serif; font-size: x-small; text-indent: 35.4pt;">El staging área es una ubicación
donde el parche es staged (organizado, etapas)-almacenado localmente, antes de
su aplicación. Para llegar al Wizard que organizará y aplicara el parche, de la
pagina Home del Database Control tome la ficha Software And Support, y luego el
link Stage Patch en la sección Database Software Patching, esto lanzara seis
pasos a seguir.</span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Seleccione
el Parche.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Seleccione
el Destino<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Establecer
Credenciales.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Efectúese
o aplíquese.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Programar.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Resumen.</span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-indent: 35.4pt;"><br /></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-indent: 35.4pt;">El Wizard se conectara a MetaLink utilizando credenciales
guardadas, descargue el parche y cree un Job para aplicar el parche. Las
ilustraciones siguientes muestran ejemplo de cómo utilizar el Wizard para
aplicar un parche.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN <o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los parches son aplicados con la
utilidad Opatch-incluso cuando trabajamos con Database Control, usted todavía
está utilizando Opatch.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">1.
<!--[endif]-->Primero,
Ingrese el numero de parche y el sistema operativo (algunos parches vienen en
versiones que son especificas del sistema operativo).<o:p></o:p></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-o2tmiNQY07Y/URx5f18JsoI/AAAAAAAAA3I/Z7bsebjEPCE/s1600/img007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="306" src="http://3.bp.blogspot.com/-o2tmiNQY07Y/URx5f18JsoI/AAAAAAAAA3I/Z7bsebjEPCE/s400/img007.jpg" width="400" /></span></a></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
</div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2.
<!--[endif]-->Elija
los objetivos a los que el parche se debe aplicar. La elección se limitará a
los objetivos adecuados para el parche.<o:p></o:p></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-DK6qm7n-tCQ/URx5s1teaVI/AAAAAAAAA3Q/o0OIeui5ORk/s1600/img008.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="293" src="http://1.bp.blogspot.com/-DK6qm7n-tCQ/URx5s1teaVI/AAAAAAAAA3Q/o0OIeui5ORk/s400/img008.jpg" width="400" /></span></a></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
</div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3.
<!--[endif]-->Proporcionar
las credenciales. Estas serán credenciales del sistema operativo, base de datos
o ambas dependiendo del parche.<o:p></o:p></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-VEhbGeObetE/URx51OW37zI/AAAAAAAAA3Y/9bgSxRqOvvI/s1600/img009.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="282" src="http://1.bp.blogspot.com/-VEhbGeObetE/URx51OW37zI/AAAAAAAAA3Y/9bgSxRqOvvI/s400/img009.jpg" width="400" /></span></a></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
</div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4.
<!--[endif]-->Decida
si va aplicar el parche o solo para uso futuro.<o:p></o:p></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-embyQ0jMS7g/URx5_3kdsII/AAAAAAAAA3g/qaHmw3WPaN4/s1600/img010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="293" src="http://1.bp.blogspot.com/-embyQ0jMS7g/URx5_3kdsII/AAAAAAAAA3g/qaHmw3WPaN4/s400/img010.jpg" width="400" /></span></a></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
</div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5.
<!--[endif]-->Programar
un Job que descargará y aplicará el Parche.<o:p></o:p></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-c5kgwbiCU60/URx6NJUWyPI/AAAAAAAAA3o/HtFIeuN1vXA/s1600/img011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="293" src="http://1.bp.blogspot.com/-c5kgwbiCU60/URx6NJUWyPI/AAAAAAAAA3o/HtFIeuN1vXA/s400/img011.jpg" width="400" /></span></a></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
</div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6.
<!--[endif]-->El
paso final, es revisar el resumen de las operaciones.<o:p></o:p></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-FyMoBal1gEs/URx6Vkp4ghI/AAAAAAAAA3w/gQYmgiqS6sA/s1600/img012.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="287" src="http://2.bp.blogspot.com/-FyMoBal1gEs/URx6Vkp4ghI/AAAAAAAAA3w/gQYmgiqS6sA/s400/img012.jpg" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJERCICIO 19-2.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">DESCARGAR Y APLICAR
UN PARCHE.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, usted descargara
un parche y aplicara este. Oracle Corporation proporciona un Parche ficticio
para este fin. En el momento de la escritura, esto solo está disponible para
Linux 32 bit. Si usted está trabajando en otro sistema operativo, no te
preocupes, <span class="apple-style-span">obtendrá la
práctica en parches muy pronto cuando comienza a trabajar en una base de datos
en vivo.<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">1.
<!--[endif]-->Entrar
en MetaLink.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">2.
<!--[endif]-->Tome
la ficha Patches & Update, y luego el Link Simple Search.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">3.
<!--[endif]-->Cuando
le pida nombre o número de parche, ingrese 6198642. Cuando le solicite
plataforma o Lenguaje, selecciones Linux
x86 de la Lista. Clic siguiente.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">4.
<!--[endif]-->Clic
en el Botón Download, mostrado en la siguiente ilustración, para descargar el
Parche de Metalink a un directorio apropiado.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-cvgO9RtI5Nw/URx6hlxDYHI/AAAAAAAAA34/yYcHMOoIybc/s1600/img013.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="295" src="http://2.bp.blogspot.com/-cvgO9RtI5Nw/URx6hlxDYHI/AAAAAAAAA34/yYcHMOoIybc/s400/img013.jpg" width="400" /></span></a></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5.
<!--[endif]-->Desde
el prompt del Sistema Operativo, descomprimir el parche, se descomprimirá en un
directorio llamado 6198642.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6.
<!--[endif]-->Baje
la Base de Datos y el Listener: Opatch no procederá si esto están ejecutándose.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7.
<!--[endif]-->Aplique
el parche:<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="EN-US">$ORACLE_HOME/OPatch/opatch
apply </span><i><span lang="EN-US">patch_directory<o:p></o:p></span></i></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<i><span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></span></i></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Donde patch_directory es el directorio en el cual el parche fue
descomprmido. La siguiente ilustración muestra este paso, y el inicio de la
salida.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-9rSRozWml3M/URx6u3BegBI/AAAAAAAAA4A/hJmzD9WJGc8/s1600/img014.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="256" src="http://4.bp.blogspot.com/-9rSRozWml3M/URx6u3BegBI/AAAAAAAAA4A/hJmzD9WJGc8/s400/img014.jpg" width="400" /></span></a></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="EN-US"> </span><span style="text-align: justify; text-indent: -18pt;">1.
</span><span style="text-align: justify; text-indent: -18pt;">Confirme
la aplicación del parche con este comando.</span></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">$ORACLE_HOME/OPatch/opatch lsinventory<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">RESUMEN DE
CERTIFICACION.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Support Workbench es una interfaz
entre su Base de Datos y MetaLink. Utilizando el Support Workbench usted puede
identificar problemas, recopilar toda la información relevante a un paquete, y
levantar un SR con Oracle Support Services. Algunos problemas requerirán
instalar Parches. Estos son instalados con la Utilidad Opatch, o desde la Linea
de comandos o atraves de la Interfaz Database Control.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">DOS MINUTOS<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>Utilize el Enterprise
Manager Support Workbench.</b><o:p></o:p></span></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Database
Control puede conectarse a Metalink e identificar las Listas de Parches
Recomendados.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->El
Support Workbench puede clasificar a los errores en los problemas nombrados.
Cada uno compuesto de uno o más incidentes.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->La
información de Diagnostico es almacenada en archivos en el ADR, ubicado por
default en el ORACLE_BASE.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Toda
la información de Diagnostico en el ARD relacionado con un problema puede ser
empaquetada para su transmisión a Oracle Support Services.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>Gestionando
Parches.</b><o:p></o:p></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]-->Parches
provisionales solucionan un problema.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="apple-style-span">·
</span><!--[endif]--><span class="apple-style-span">CPU se
agrupan los parches, a menudo incluyendo revisiones de seguridad.</span><span class="apple-style-span"><o:p></o:p></span></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="apple-style-span">·
</span><!--[endif]--><span class="apple-style-span">Parche
establece elevar el nivel de release del producto (</span>Patch sets raise the
release level of the product.<span class="apple-style-span">).<o:p></o:p></span></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">·
<!--[endif]--></span><span style="font-size: x-small;"><span style="font-family: Verdana, sans-serif;">La
utilidad Opatch instala parches y actualiza el inventario.</span><span style="font-family: Arial, sans-serif;"><o:p></o:p></span></span></div>
<br />
<br />
<br />Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com2tag:blogger.com,1999:blog-4112056264242943706.post-30609647345035124542013-02-13T21:39:00.001-08:002017-04-06T21:09:44.656-07:0019.01. UTILIZAR EL ENTERPRISE MANAGER SUPPORT WORKBENCH<b><span lang="ES" style="font-family: Verdana, sans-serif; font-size: x-small;">Mejoras a la Infraestructura Inteligente</span></b><br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b><span lang="ES"><br /></span></b>
<b><span lang="ES">Objetivos de Certificación</span></b></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin-bottom: 0.0001pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><b><span lang="EN-US">1<span style="font-weight: normal;"> </span></span></b><!--[endif]--><b><span lang="EN-US">Utilize el Enterprise Manager Support Workbench</span></b><b><span lang="EN-US"><o:p></o:p></span></b></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><b><span lang="ES">2 <span style="font-weight: normal;"> </span></span></b><!--[endif]--><b><span lang="ES">Gestión de Parches.<o:p></o:p></span></b></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-indent: -18pt;">
<b><span lang="ES" style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></b></div>
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-indent: -18pt;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Este
capítulo final abarca la descripción de los mecanismos para el Uso de Servicios
de soporte de Oracle, y como aplicar parches a la Base de Datos. Un
prerrequisito es que usted debe tener una cuenta con MetaLink asociada con
un CSI (Identificador de Soporte de Cliente)
número emitido por Oracle Corporation. MetaLink es la interfaz externa de
Oracle Support Services: una Base de Datos que contiene millones de artículos
sobre cuestiones técnicas. y facilidades para localizar y descargar parches y
levantar SRs (Service Requests). Un SRs es una solicitud de asistencia al
analista de Servicios de Oracle para ayudar con un problema.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> Este material no es ampliamente
examinado, pero es posible que los conocimientos generales de los
procedimientos pudieran ponerse a prueba. Si usted no tiene una cuenta de
MetaLink, usted no será capaz de completar los ejercicios de este capítulo-por
esta razón, incluye captura de pantallas de cada paso en el uso del Database
Control para crear un Job para descargar
y aplicar un parche.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO<o:p></o:p></span></b></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b><span style="line-height: 115%;"> </span></b><span style="line-height: 115%;">Los SRs eran llamados
tras (Technical Assitant Request), y todavía se escuchan a los DBAs usar las
frases tales como “Levantar un TAR”.</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="line-height: 115%;"><br /></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-WAfN-ExXsl0/URx30EpEswI/AAAAAAAAA2Y/U5wWg7m7wKM/s1600/img001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="152" src="http://4.bp.blogspot.com/-WAfN-ExXsl0/URx30EpEswI/AAAAAAAAA2Y/U5wWg7m7wKM/s640/img001.jpg" width="640" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="line-height: 115%;"><br /></span>
<span style="line-height: 115%;"><br /></span>
</span><br />
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small; line-height: 115%;"><br /></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-indent: -18pt;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">OBJETIVO DE
CERTIFICACION 19.01.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">UTILIZAR EL
ENTERPRISE MANAGER SUPPORT WORKBENCH<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> El Enterprise Manager Support
Workbench es una herramienta Gráfica que da acceso al Automatic Diagnostic
Repository (El ADR) con facilidades para recoger información, empaquetado y envió
a Oracle Support Services.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EL AUTOMATIC
DIAGNOSTIC REPOSITORY (ADR).<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El ADR es un punto central de almacenamiento
de toda la información de diagnostico. Este incluye los volcados de y Trace
Files, el Alert Log y informes del Monitor Healt. Se trata de un archivo basado
en repositorio. Todas la instancias (instancias RDBMS y también instancias ASM)
crean su propia estructura de Directorio dentro del ADR.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La ubicación del ADR es determinado por el
parámetro de instancia DIAGNOSTIC_DEST. Esto por defecto a la variable de
entorno ORACLE_BASE (que es una variable de registro en sistemas Windows) o, si
esto no ha sido establecido, a el directorio ORACLE_HOME/log. Dentro de
DIAGNOSTIC_DEST, habrá un directorio para el ADR_BASE: Este es DIAGNOSTIC_DEST.
En el ADR_BASE existen directorios para cada producto de Oracle, tales como el
RDBMS, o los Database Listener. Dentro de cada directorio de producto,
existirán directorios para cada instancia del producto: esto es el ADR_HOME
para cada instancia. Para una instancia de base de datos, el ADR HOME es.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="EN-US"><br /></span>
<span lang="EN-US">ORACLE_BASE/diag/</span><i><span lang="EN-US">database_name</span></i><span lang="EN-US">/</span><i><span lang="EN-US">instance_name</span></i><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Donde <i>database_name</i>
es el nombre de la Base de Datos y <i>instance_name</i>
es el nombre de la instancia. Por ejemplo:<o:p></o:p></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">/u01/app/oracle/orcl11g/orcl11g<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Dentro del ADR_HOME habrá una estructura de
directorio para los distintos archivos que conforman el ADR de la instancia. <span class="apple-style-span">Algunos de los archivos se dan
formato con las etiquetas de XML y no se piensan para ser vistos directamente
con los redactores; algunos son datos binarios, otros son texto llano. El
directorio ADR_HOME/Trace es utilizado como valor por default para los
parámetros de instancia USER_DUMP_DEST (archivos trace generados por sesiones
de usuario) y BACKGROUND_DUMP_DEST (archivos alert log y trace generados por
procesos backgprund) no hay otra copia de los Alert log, formateado con
etiquetas XML, en ADR_HOME/alert.<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="apple-style-span"><b><br /></b></span>
<span class="apple-style-span"><b>PROBLEMAS E INCIDENTES<o:p></o:p></b></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> Un problema es un error crítico en
la Base de Datos o la Instancia. Ejemplos incluyen Errores Internos de Oracle
(errores reportados con el código de error ORA-600) o errores de Sistema
Operativo. Cada problema tiene una llave de problema, que es un texto que
incluye el código de error y cualquier otro parámetro. <o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> Un incidente es una ocurrencia de un
problema. Los incidentes se consideran que tienen la misma causa original si
sus claves de problema son las mismas. Cuando un incidente ocurre, se informa
al Alert Log y Enterprise Manager recoge datos de diagnostico sobre el
incidente en volcando la información en archivos (incident dumps) y almacena
estos en un subdirectorio ARD creado para ese incidente.<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> Un incident package es una colección
de datos recolectados sobre uno o varios incidentes y problemas, con formato
para subirlo a Oracle Support Services como parte de un SR.<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><b><span style="font-family: Verdana, sans-serif; font-size: x-small;">LA INTERFAZ DE LINEA DE COMANDO ADR (ADRCI)<o:p></o:p></span></b></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> Existe una herramienta de línea de
comandos para gestionar el ADR: el ADRCI. Esta herramienta puede desplegar
detalles de todos los problemas e incidentes, y generar reportes y incident
packages. Figura 19-1 muestra el lanzamiento del ADRCI sobre Windows, y luego
la ejecución del comando HELP.<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> En la figura 19-1, tenga en cuenta
que ADRCI ha detectado el ADR_BASE. Una simple sesión de ADRCI podría usar los
siguientes comandos:<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: x-small;">set home diag/rdbms/orcl1g/orcl11g<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">show problem<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ips create package problem 8<span class="apple-style-span"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> El comando SET HOME posicional el
ADRCI hacia un ADR_HOME, el Path está en relación con el ADR_BASE. El comando
SHOW PROBLEM listara todos los problemas conocidos para ese ADR_HOME, identificados
por el numero PROBLEM_ID. El comando IPS CREATE PACKAGE va a generar un
incident package para el problema propuesto en el directorio ADR_HOME/incpkg. <o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> En muchos casos, el ADRCI no será
necesario: El Database Control tiene una interfaz con ADR que usualmente será
más fácil de usar.<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span class="apple-style-span"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> <o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EL SUPPORT WORKBENCH.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> Enterprise Manager Database Control
de la Base de Datos, la página principal despliega todas las alertas críticas.
Dando clic en cualquiera de ellas le llevara a su Support Workbench. Figura
19-2.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-3xmgqIAn8yI/URx4CCm7B9I/AAAAAAAAA2g/SqY9hNW1ShQ/s1600/img002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="275" src="http://4.bp.blogspot.com/-3xmgqIAn8yI/URx4CCm7B9I/AAAAAAAAA2g/SqY9hNW1ShQ/s400/img002.jpg" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br />
<br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-TpHAN4N0QTI/URx4Kf2_fsI/AAAAAAAAA2o/-mwpRaH8vy8/s1600/img003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="205" src="http://2.bp.blogspot.com/-TpHAN4N0QTI/URx4Kf2_fsI/AAAAAAAAA2o/-mwpRaH8vy8/s400/img003.jpg" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br />
</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b> </b>El Support Workbench es una
herramienta que funciona como interfaz con MetaLink y paquetes de Información
de Diagnostico.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> La figura 19-2 muestra que tiene
ocho problemas con un total de 127 incidentes, pero únicamente un problema
todavía sigue activo. Este es el problema numero 5, que genero un error
ORA-600. Desde el Support Workbench, usted puede seleccionar un problema, ver
el detalle y crear un paquete de incidente haciendo clic en los botones apropiados.
<o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> Para crear un SR con respecto a un
problema, seleccione el problema y dar clic en Ver para llegar a la ventana
detalle del problema. Figura 19-3.<o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> Los Links mostrados en la Ficha
Oracle Support de la ventana detalle del problema lanzarán wizards para crear
un paquete de incidente, y luego levantar un SR para que el paquete sea
adjuntado.<o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-H3Ebbr51GwE/URx4SUR8mzI/AAAAAAAAA2w/ESEBSV-ieks/s1600/img004.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="221" src="http://2.bp.blogspot.com/-H3Ebbr51GwE/URx4SUR8mzI/AAAAAAAAA2w/ESEBSV-ieks/s400/img004.jpg" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br />
</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJERCICIO 19-1.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">UTILIZAR EL SUPPORT
WORKBENCH.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> En este ejercicio, investigará los
problemas que pueden ser registrados en el ADR.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">1.
<!--[endif]-->Conéctese
a su Base de Datos con Database Control como usuario SYSTEM.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">2.
<!--[endif]-->Abrir
el Support Workbench: desde la pagina principal de la Base de Datos, tome la
ficha Software And Support, luego el
Link Support Workbench en la sección Support.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;">3.
<!--[endif]-->La
ventana por default mostrará los problemas de las últimas 24 horas. En el List
Box View, elija Todos para ver todos los problemas que son conocidos para el
ADR, como se muestra aquí.<o:p></o:p></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-L7cQaDxazLc/URx4ZcXW3HI/AAAAAAAAA24/nVEM1be1eLw/s1600/img005.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="290" src="http://1.bp.blogspot.com/-L7cQaDxazLc/URx4ZcXW3HI/AAAAAAAAA24/nVEM1be1eLw/s400/img005.jpg" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<br />
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: 0px;">
<span class="apple-style-span" style="font-family: Verdana, sans-serif; font-size: x-small;">4. Investigar
cualquier problema se muestra al hacer clic en los enlaces para ver los
detalles del problema.</span></div>
Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-47118493237565930482013-01-31T22:38:00.001-08:002017-04-06T21:09:44.708-07:0017.01 GENERALIDADES DEL DATAR RECOVERY ADVISOR<b style="text-align: justify;"><span style="font-family: Verdana, sans-serif; font-size: xx-small;">OBJETIVO DE
CERTIFICACION 17.01</span></b><br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">GENERALIDADES DEL
DATAR RECOVERY ADVISOR.<o:p></o:p></span></b></div>
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span>
<br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El
Data Recovery Advisor (DRA) es una instalación para diagnostico y reparación de
problemas con una Base de Datos. Hay dos interfaces: el ejecutable RMAN y
Enterprise Manager. El DRA es capaz de
generar script para reparar daños a DataFiles y (en algunas circunstancias) ControlFile:
no asesora problemas con spfile o con online redo log files. Depende del
Automatic Diagnostic Repository (ADR) y el Health Monitor. La información que
reúne el Health Monitor y el consejo del DRA da a seguir el mismo diagnostico y
método de reparación que el DBA seguirá sin ellos-pero hacen el proceso más
rápido y menos propenso a error.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br />
La perdida de Archivos de Bases de
Datos no es razón para perder datos-siempre que las precauciones apropiadas han
sido tomadas:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Multiplexar
los ControlFiles.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Multiplexar
los Online Redo Log Files.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Backup
a ControlFiles y los DataFiles.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Ejecutando
la Base de Datos en Modo archivelog<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt 35.4pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Dependiendo el tipo
de archivo que se pierde, hay diferentes técnicas para la recuperación. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">RECUPERACION DE LA
PÉRDIDA DEL CONTROLFILE.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Un
punto a enfatizar es que el ControlFile nunca debe ser completamente perdido: debe
ser multiplexado, de modo que si una copia de este es perdido, otra copia
todavía estará disponible. Si una copia de ControlFile está dañada. La
instancia de Base de Datos inmediatamente abortará. Si usted intenta iniciarla, la instancia ira a modo NOMOUNT
pero se detendrá ahí: no va a montar la Base de Datos a menos que todas las
copias del ControlFile, según lo especificado por el parámetro de instancia
CONTROL_FILES, son validos.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El daño a cualquier copia de
ControlFile abortará la instancia inmediatamente. No será posible montar la
Base de Datos hasta que el problema ha sido resuelto.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Para confirmar que el ControlFile
está multiplexado, cuando en modo MOUNT u OPEN emita esta consulta:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> <span lang="EN-US">select name from v$controlfile;</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small; line-height: 115%;">El
cual listara todas las copias de los ControlFiles. Si esta consulta regresa
solo un registro, el ControlFile no está multiplexado. Corregir esta situación
durante el próximo periodo de
inactividad programado, y si no está programado el tiempo de inactividad, debe
programar un periodo pronto como sea posible. El proceso es:<o:p></o:p></span><br />
<span style="font-family: Verdana, sans-serif; font-size: xx-small; line-height: 115%;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Shutdown
a la Base de Datos.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Copie
el ControlFile.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Inicie
la instancia en modo NOMOUNT.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Cambie
el parámetro CONTROLFILES para incluir la nueva copia.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Shutdown
nuevamente.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Inicie
la Base de Datos en modo OPEN.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><span style="text-indent: 35.4pt;"><br /></span>
<span style="text-indent: 35.4pt;">Ejecute la consulta dada previamente ahora
listara ambas copias. La necesidad de un Shutdown es obtener unacopia
consistente del ControlFile. Si fueron
copiados cuando la Base de Datos estaña OPEN o MOUNT, la copia no sería válida.</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: xx-small; text-indent: 35.4pt;">Si el inicio se detiene en modo NOMOUNT
porque la Base de Datos no puede ser montada, determine que copia de ControlFiles,
busque con esta consulta.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> <span lang="EN-US">select value from v$parameter where
name='control_files';</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Para saber que copia está
dañada o perdida, busque en el Alert Log. Este es el archivo
alert_instancename.ora en el directorio señalado por el parámetro
BACKGROUND_DUMP_DEST. Las ultimas líneas será algo como esto:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">ALTER DATABASE MOUNT<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">ORA-00210: cannot open
the specified control file<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">ORA-00202: control
file: 'D:\APP\ORACLE\ORADATA\ORCL11G\CONTROL02.CTL'<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">ORA-27041: unable to
open file<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">OSD-04002: unable to open file<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">O/S-Error: (OS 2) The system cannot find the file
specified.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">Mon Fe:b 18 09:01:10 2008<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">Checker run found 1 new persistent data failures<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><span lang="EN-US">ORA-205 signalled
during: ALTER DATABASE MOUNT...</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Para reparar el daño, copia un archivo
sobreviviente (uno de los archives listado en la consulta contra V$PARAMETER) sobre
el archivo dañado (el archivo mencionado en el Alert Log).<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EN EL TRABAJO<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Este método de recuperación, aunque
es manual, es generalmente el más rápido. Pero estar absolutamente seguro de que no
accidentalmente copie el archivo dañado sobre el bueno. <span class="apple-style-span">No te rías.</span><span class="apple-converted-space"> </span><span class="apple-style-span">Es muy fácil cometer un error como ese, sobre todo cuando se
trabaja a toda prisa.</span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">RECUPERACION DE LA
PERDIDA DE UN ONLINE REDO LOG FILE MEMBER.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Si su Online Redo Log File Groups
son multiplexados, la pérdida de un solo miembro no es un problema. Mientras
haya al menos un miembro valido de cada Online Redo Log File Group, la Base de
Datos continuará ejecutándose, y si se apaga, se abrirá sin problemas. Pero
Oracle no estará feliz: habrá muchos mensajes escritos en el Alert Log. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EN EL TRABAJO<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Un Redo Log File Member perdido no
será reportado por el Server Alert System.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">La situación donde todos los
miembros de un grupo son perdidos ( en cuyo caso la instancia abortará y no se
puede abrir) esta mas allá del alcance del primer examen.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Para confirmar si el Online Redo Log
File Members está multiplexados y para ver el status de cada archivo, ejecute
esta consulta:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> select * from v$logfile;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Si cualquier miembro tiene un STATUS
de INVALID, usted debe tomar medidas inmediatas para corregir la situación. El
status STALE puede ser reportado-esto no es un problema; solo muestra que el
archivo no se ha usado todavía. Para reparar un miembro dañado, la técnica más
simple es utilizar el comando CLEAR. Este instruirá a Oracle a Eliminar y
Recrear todos los miembros del Log File Group 3:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> <span lang="EN-US">alter database clear logfile group 3;</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;"> <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Si el Log File Group es actual, activo, o (en
modo archivelog) unarchived, el CLEAR fallará con un mensaje de error
apropiado. Este<span lang="EN-US"> comando solucionará estas
cuestiones:<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">alter system switch logfile;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">alter system checkpoint;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><span lang="EN-US">alter system archive log all;</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El daño a un miembro Online Redo Log
File no hará que la instancia aborte o evitar la apertura de la Base de Datos,
siempre y cuando haya al menos un miembro en funcionamiento por cada grupo.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">PERDIDA DE CUALQUIER
DATAFILE EN MODO NOARCHIVELOG<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">En modo NOARCHIVELOG, no puede haber
concepto de recuperación: El Redo es necesario para traer un Backup restaurado
hacia adelante en el tiempo no está disponible. No es posible abrir una Base de
Datos con un DataFile que esta fuera de fecha. Si lo fuera, la integridad del
Sistema se vería comprometida. Si cualquier archivo está dañado, las únicas
opciones son instruir a Oracle nunca a buscar el archivo otra vez para eliminar
el Tablespace del cual es parte, o restaurar la Base de Datos completamente: el
conjunto completo de DataFiles y los ControlFiles desde el último Backup. Si
usted tiene el Online Redo Log Files así (<span class="apple-style-span">que por lo general tienen si está haciendo copias de
seguridad gestionados por el usuario</span>) restaurar estos también y
abra la Base de Datos. Si usted no tiene Backups de Online Redo Log Files,
vuelva a crear mediante la apertura de la Base de Datos con este comando:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">alter database open
resetlogs;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">PERDIDA DE UN
DATAFILE EN MODO ARCHIVELOG<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Los DataFiles que conforman los
Tablespace SYSTEM y UNDO son críticos. Si alguno de estos es dañado mientras la
Base de Datos está abierta, abortará. Los otros DataFiles son no críticos: La
Base de Datos los tomará fuera de línea automáticamente, y la Base de Datos se
mantendrá abierta. Si la Base de Dato se cierra, si el DataFile Dañado o
perdido es crítico no será posible abrir la Base de Datos hasta que se haya
restaurado y recuperado. Si el DataFile es no crítico, debe ser tomado fuera de
línea manualmente antes de que la Base de Datos pueda ser abierta, y entonces
puede ser restaurado y recuperado mientras las Base de Datos es abierta. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br />
Durante el periodo que la Base de
Datos es abierta pero un archivo no crítico
es fuera de línea, las aplicaciones pueden comportarse de maneras inesperadas.
Cualquier índice con Extents en el archivo fuera de línea será inutilizable, cual
puede conducir a una degradación del rendimiento y también bloqueos a tablas
por la imposibilidad de comprobar restricciones. Cualquier tabla con Extents en
el archivo fuera de línea será inutilizable, aunque las consultas que se pueden
satisfacer con columnas incluidas en los índices pueden todavía trabajar. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br />
Para el diagnostico daño a
DataFiles, ejecute esta consulta en modo MOUNT o OPEN.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> <span lang="EN-US">select name,online_status,error from
v$datafile join v$recover_file using (file#);</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Si la Base de Datos esta abajo, los pasos
para reparar un DataFile dañado no critico son:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Montar
la base de Datos (MOUNT).<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Tomar
los archivos dañados fuera de línea.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Abrir
la Base de Datos (OPEN).<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Restaurar
los archivos dañados (RESTORE).<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Recuperarlos
(RECOVER).<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Traer
los archivos dañado online.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El paso 3 debe ser pospuesto hasta el final
si no te importa el periodo de tiempo de inactividad. Si la Base de Datos es abierta,
solo los últimos tres pasos son necesarios.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Daño a un DataFile crítico solo puede ser
reparado en modo MOUNT, por lo que hay cuatro pasos:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Montar
la Base de Datos (MOUNT).<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Restaurar
el Archivo Dañado (RESTORE).<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Recuperarlo
(RECOVER).<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Abrir
la Base de Datos.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> Abrir una Base de Datos es posible a
partir de daños causados a cualquier DataFiles
que no pertenecen al Tablespace SYSTEM o UNDO.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EL HEALTH MONITOR Y
EL ADR<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> El Health Monitor es un conjunto de
comprobaciones que se ejecutan automáticamente cuando se presentan ciertas
condiciones de error, o manualmente en respuesta a instrucciones del DBA. Los
resultados de las comprobaciones no son almacenadas en la Base de Datos, sino
en el Sistema de Archivos. Esto es porque la naturaleza de algunos errores es
tal que la Base de Datos no está disponible. Es por lo tanto esencial tener un
repositorio externo para los resultados del Health Monitor. Este repositorio es
el ADR, que se encuentra en el directorio especificado por el parámetro de
instancia DIAGNOSTIC_DEST.<o:p></o:p></span><br />
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> Diferentes comprobaciones del Health
Monitor pueden ejecutarse en varias etapas:<o:p></o:p></span><br />
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->En
modo NOMOUNT, solo la comprobación “DB Structure Integrity” puede ejecutarse, y
puede únicamente comprobar la integridad del ControlFiles.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->En
modo MOUNT, la comprobación “DB Structure Integrity” comprobará la integridad de los ControlFiles,
y de los Online Redo Log File y los DataFile Headers. El “Redo Integrity Check”
puede también ejecutarse, que comprobará los Online y Archive Log Files por la accesibilidad y
corrupción.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->En
modo OPEN, es posible ejecutar comprobaciones
que escanearan cada Data Block por corrupción, y comprobara la
integridad del Diccionario de Datos y los Segmentos UNDO. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br />
Las interfaces que permitirán la ejecución
manual de comprobaciones del Health
Monitor están disponibles solo cuando la Base de Datos está abierta (OPEN). Hay
dos interfaces: utilizando SQL*PLUS para
invocar procedimientos del paquete PL/SQL DBMS_HM, y el Database Control. La
figura 17-1 muestra la interfaz Database Control. Para alcanzar esta ventana desde
la pagina principal del Database Control, tome el Link Advisor Central en la
sección de enlaces relacionados, y luego la ficha Checkers. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br />
Desde la ventana mostrada en la figura 17-1, usted
puede ver los resultados de todas las ejecuciones de Health Monitor (se
ejecutan en respuesta a errores y ejecuciones manuales) y también ejecutar
comprobaciones en demanda.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">LAS CAPACIDADES Y
LIMITACIONES DEL DRA.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> El DRA no puede hacer nada a menos
que la instancia este en el Modo NOMOUNT o más. Viene que no puede ayudar si
hay un problema con el archivo de inicialización. En modo NOMOUNT, puede
diagnosticar problemas con el ControlFile y generar script para restaurar, ya
sea mediante el uso de una copia valida o (si no está disponible) mediante la
extracción de una copia desde un conjunto de Backup – lo proporciono para
encontrar uno. Una vez que la Base de Datos puede llegar a modo MOUNT, el DRA
puede diagnosticar problemas con la falta o daño a DataFiles y falta de Online
Log File Groups y generar script para reparar. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br />
El DRA (en la actual versión) solo
soporta Bases de Datos de single-instance. Si un fallo trae abajo una Base de
Datos RAC, usted puede montar en modo Single-Instance, utilizar el DRA para
reparar el daño, y luego apagarlo y
abrirlo en modo RAC. Esta técnica puede
no ser capaz para reparar daños que es local a una instancia. El DRA no puede
reparar fallos en una Base de Datos primaria
mediante el uso de Blocks o archivos desde una base de datos standby, y
no puede reparar fallos en una Base de Datos standby. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-PIq2kqPwUMM/UQtgzlV1RyI/AAAAAAAAA1o/4rU6uwSOL4E/s1600/imagen+17-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: xx-small;"><img border="0" height="226" src="http://2.bp.blogspot.com/-PIq2kqPwUMM/UQtgzlV1RyI/AAAAAAAAA1o/4rU6uwSOL4E/s400/imagen+17-1.jpg" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-5A9XB3ra13k/UQtg-QOJGFI/AAAAAAAAA1w/cNPneE5lJL4/s1600/imagen+17-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: xx-small;"><img border="0" height="145" src="http://4.bp.blogspot.com/-5A9XB3ra13k/UQtg-QOJGFI/AAAAAAAAA1w/cNPneE5lJL4/s400/imagen+17-2.jpg" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El DRA solo funcionará para Bases de
Datos Single-Instance. No puede trabajar con una Base de Datos en cluster RAC, ni
con una Base de Datos Data Guard en espera.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EJERCICIO 17-1<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">UTILICE EL DRA PARA
DIAGNOSTICAR Y ASESORAR SOBRE LOS PROBLEMAS.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">En este ejercicio, usted causará un
problema con la Base de Datos y utilizará el DRA para informar sobre el mismo.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">1.
<!--[endif]-->Desde
un prompt de sistema operativo, lance el ejecutable RMAN:<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">rman target /<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">2.
<!--[endif]-->Confirme
que existe una copia Backup completa de todo el Tablespace SYSAUX.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><span lang="EN-US">list
backup of tablespace sysaux;</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Si esta no regresar por lo menos un conjunto
backup de tipo FULL, repita el ejercicio 16-2, pasos 6-8.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">3.
<!--[endif]-->Baje
la instancia y salir de RMAN.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">shutdown
immediate;<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">exit;<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">4.
<!--[endif]-->Utilizando
una Utilidad de sistema operativo, elimine los DataFiles del Tablespace SYSAUX
que fueron listados en el paso 2. Si utilizas Windows, puede que tenga que
detener el Servicio Windows con la instancia que se está ejecutando para
liberar el bloqueo a archivos antes de la eliminación.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">5.
<!--[endif]-->Conectese
a la Base de Datos con SQL*PLUS, y intente iniciar:<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">startup;<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Esta se detendrá en modo MOUNT, con un error
recuperando el archivo perdido. Si utiliza Windows, asegúrese que el servicio
ha sido iniciado.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">6.
<!--[endif]-->Lance
el ejecutable RMAN y conéctese, como el paso 1.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">7.
<!--[endif]-->Diagnosticar
el problema:<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">8.
<!--[endif]-->Generar
recomendación sobre el fallo:<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">advise failure;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><span style="font-size: xx-small;">esto sugiere que debe restaurar y recuperar
el DataFile, y generar un script de reparación. Abrir el script con cualquier
editor de sistema operativo y estudiar el contenido.</span><span style="font-size: xx-small;"> </span></span><span style="font-family: Arial, sans-serif; font-size: x-small;"><o:p></o:p></span></div>
Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-78893304563106481022013-01-31T22:38:00.000-08:002017-04-06T21:09:44.773-07:0017.02 UTILIZAR EL DATA RECOVERY ADVISOR PARA REALIZAR UN RECOVERY<span style="font-family: Verdana, sans-serif;"><span style="font-size: xx-small;"><br /></span>
</span><br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">OBJETIVO DE
CERTIFICACION 17.02<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><b>UTILIZAR EL DATA
RECOVERY ADVISOR PARA REALIZAR UN RECOVERY </b><b>(CONTROLFILE, REDO
LOG FILE, Y DATA FILE)</b></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El DRA hace uso de la Información
recolectada por el Health
Monitor y busca problemas, y a continuación construye scripts de RMAN para
repararlos. Como con cualquier utilidad basada
RMAN, la instancia debe ser iniciada. Para iniciar una instancia en modo
NOMOUNT, todo lo que se requiere es un archivo de parámetros. RMAN es de hecho
capaz de iniciar la instancia sin un archivo de parámetros, utilizando la
variable de entorno ORACLE_SID por default para un parámetro para el cual no
hay valor por default: el parámetro DB_NAME. Esta capacidad puede significar
que es posible iniciar una restauración
y recuperación de la nada. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El flujo del uso del DRA es el
siguiente:</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]--><b>Evaluar los Fallos de
Datos </b>El
Health Monitor, ejecutándose en forma reactiva o sobre demanda, escribirá
detalles de errores al ADR.<b><o:p></o:p></b></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]--><b>Lista de Fallos </b>El DRA listara todos
los Fallos, clasificados acorde a su gravedad.<b><o:p></o:p></b></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]--><b>Asesorara en la
Reparación </b>El
DRA generará script de RMAN para reparar el daño.<b><o:p></o:p></b></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]--><b>Ejecutar la
Reparación </b>Ejecutar
los scripts.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small; text-indent: 35.4pt;">Los comandos pueden ser ejecutados desde el
ejecutable de RMAN o atraves del Database Control. El asesor solo será generado
para los errores previamente listados y todavía abrirse. Ningún consejo se
generara para errores adicionales que se han producido desde la lista, o para
los errores fijados desde el listado.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EN EL TRABAJO<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Si uno o más fallos existen, entonces
usted debe usar típicamente LIST FAILURE para mostrar información acerca de los
fallos y a continuación utilizar ADVISE FAILURE en la misma sesión RMAN para
obtener un informe de sus opciones de reparación. Finalmente, REPAIR FAILURE
solucionara el problema.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">La figura 17-2 muestra una sesión
DRA, lanzada desde el ejecutable RMAN. La situación es que la instancia inicia
y monta la Base de Datos, pero falla al abrir. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El primer comando en la figura lanza
el ejecutable RMAN, desde un prompt de sistema operativo. La conexión es
exitosa, pero RMAN informa que la Base de Datos no está abierta. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El segundo comando enumera todos los
actuales fallos, hay un DataFile non-system no encontrado (perdido). Si este
paso fuera omitido, el siguiente paso no devuelve nada.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El tercer comando genera un asesor
(advise) en la fijación (fixing) de la falla. La primera sugerencia es que
algún error de los administradores del sistema pueden ser responsables del
problema y podría ser fijado (fixed) manualmente. Entonces hay una reparación
automática que implica restauración (restore) y recuperación (recovery). <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Esta es la forma de un script de
RMAN. El contenido del script (no se muestra en la figura):<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;"># restore and recover datafile<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">restore datafile 4;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">recover datafile 4;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Para ejecutar el script, el comando
sería.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> repair failure;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Después de esto, la Base de Datos
puede ser abierta.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"> <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">DENTRO DEL EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Restore y Recovery son tópicos de
vital importancia, pero para el primer examen son tratados superficialmente. Los
candidatos se esperaran entender los conceptos y las técnicas básicas. Que se
puede hacer en modo NOARCHIVELOG y en ARCHIVELOG, y los efectos de daño a los
diferentes tipos de archivo de Base de Datos. Los aspectos prácticos de restore
y Recovery es poco probable que se prueben. La comprensión de las capacidades
del DRA se esperaran, y el flujo de la
lista para asesorar la reparación.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EN EL TRABAJO<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El DRA funciona, pero usted a menudo
puede hacer lo mejor. Por ejemplo. No genera secuencias que reduzcan el tiempo
de inactividad mediante la apertura de la Base de Datos antes de realizar el restore y Recovery (que sería
posible en el ejemplo).<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El DRA no generará ningún asesor, si
usted primero no ha pedido enumerar las fallas, cualquier fallo ocurrido desde
la última lista, o fijado (fixed) desde la última lista, no será aconsejado.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small; text-align: justify;">Al conectase con Database Control a
una Base de Datos dañada, siempre habrá un botón llamado Perform Recovery. La
figura 17-3 muestra la ventana que esto producirá para la misma situación
demostrada en la figura 17-2.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">La sección de información se ve en
la figura 17-3 muestra que hay un fallo, y que la Base de Datos está Montada
(MOUNT). El botón Advise y Recover lanzara un Wizard que listara detalles del
Fallo, generar el script de reparación, y luego enviará como un Job al
Enterprise Manager Job System, y finalmente aviso para Abrir la Base de Datos.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">El DRA puede generar script para restaurar
(restore) una copia de ControlFile perdido o dañado y la reconstrucción de un
Online Log File Group perdido o para Restaurar (restore) y Recuperar (Recovery) DataFiles perdidos o
dañados. No tomará ninguna acción si un miembro de un Log File Group multiplexado
esta dañado.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-ZWLM2F0IM_I/UQthRkdMQRI/AAAAAAAAA14/BoiUZhpyNyU/s1600/imagen+17-3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: xx-small;"><img border="0" height="236" src="http://2.bp.blogspot.com/-ZWLM2F0IM_I/UQthRkdMQRI/AAAAAAAAA14/BoiUZhpyNyU/s400/imagen+17-3.jpg" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br />
<br />
<br />
</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">EJERCICIO 17-2<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">REPARAR UN FALLO CON EL DRA.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">En este ejercicio,
usted diagnostica y repara el problema causado en el ejercicio 17-1 utilizando
el Database Control.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">1.
<!--[endif]-->Utilizando
un Navegador, intente conectarse al
Database Control. Este presentara una ventana de inicio que la Base de Datos
está Montada, con botones para Iniciar y Perform Recovery.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">2.
<!--[endif]-->Dar
clic en el botón Iniciar. Ingrese las credenciales del sistema operativo y Base
de Datos y siga las instrucciones para abrir la Base de Datos. Esta fallara,
así que dar clic en el botón Perform Recovery.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">3.
<!--[endif]-->En
la ventana Perform Recovery, dar clic al botón Advise And Repair para ingresar
al DRA Wizard.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;"><span lang="EN-US">4. </span><!--[endif]--><span lang="EN-US">En la ventana View And Manage Failures, dar clic en Advise.<o:p></o:p></span></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">5.
<!--[endif]-->En
la ventana Manual Actions, dar clic en continuar con Advise.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">6.
<!--[endif]-->En
la ventana Recovery Advice, observe el script y dar clic en continuar.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;"><span lang="EN-US">7. </span><!--[endif]--><span lang="EN-US">En la ventana Review, dar clic Submit Recovery Job.<o:p></o:p></span></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">8.
<!--[endif]-->Cuando
el trabajo se complete, utilice el Database Control o SQL*PLUS para abrir la
Base de Datos. Es posible que Database Control se ha vuelto confuso como el
resultado de este ejercicio, y puede
tener problemas para determinar el estado de la Base de Datos. Si esto aparece
en este caso, cierre el navegador y reinicio el Database Control, desde el
sistema operativo.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">emctl stop dbconsole;<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: xx-small;">emctl
start dbconsole;</span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Reconecte con el Navegador y confirme que la
Base de Datos ahora está abierto.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">RESUMEN DE CERTIFICACION.</span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small; text-align: justify; text-indent: 35.4pt;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small; text-align: justify; text-indent: 35.4pt;">El Health Monitor es un conjunto de
comprobaciones que se ejecutan automáticamente
cuando condiciones de error surgen. Los resultados escritos al ADR,
almacenado en el directorio DIAGNOSTIC_DEST. El DRA hace uso de la información
del ADR para identificar Fallos y a continuación construir scripts RMAN para
repararlos.</span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: xx-small;">DOS MINUTOS<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Aspectos
Generales del Data Recovery Advisor.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->El
ADR es un conjunto de archivos en el directorio DIAGNOSTIC_DEST.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->El
DRA puede reparar daños a DataFiles y ControlFile, y remplazar log File Groups
perdidos.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->La
Restauración y Recuperación de ControlFile o DataFile críticos puede ser
realizada solo en modo MOUNT.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->La
restauración y Recuperación de DataFiles no críticos puede ser realizada
mientras la Base de Datos está abierta.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif;"><span style="font-size: xx-small;"><br /></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-v8oytT95Lsk/UQtha289PmI/AAAAAAAAA2A/10sk8sF0JdU/s1600/imagen+17-4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: xx-small;"><img border="0" height="331" src="http://2.bp.blogspot.com/-v8oytT95Lsk/UQtha289PmI/AAAAAAAAA2A/10sk8sF0JdU/s400/imagen+17-4.jpg" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif;"><span style="font-size: xx-small;"><br /></span>
<span style="font-size: xx-small;"><br /></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;">Utilizar
Data Recovery Advisor para realizar un Recovery (ControlFile,
Redo Log File, y DataFile).</span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->Los
Fallos deben ser enumerados antes de que puedan ser aconsejados.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->El
DRA puede ser accedido atreves del
Ejecutable RMAN o con el Enterprise Manager.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: xx-small;">·
<!--[endif]-->El
DRA está disponible en todos los Modos: en modo NOMOUNT puede reparar el
ControlFile; en modo MOUNT u OPEN puede reparar DataFiles.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: xx-small;"><br /></span></div>
<br />Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com1tag:blogger.com,1999:blog-4112056264242943706.post-46741912595907635232012-07-21T08:13:00.002-07:002017-04-06T21:09:44.701-07:0011.03 GESTIONAR UNDO<br />
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Una características importante de los
Segmentos UNDO es que son gestionado automáticamente, pero debe estableces los
limites que Oracle va a gestionar. Después de considerar la naturaleza y el
volumen de la actividad en su base de datos, se establece ciertos parámetros de
la instancia y ajusta el tamaño de su Tablespace UNDO con el fin de alcanzar
sus objetivos.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Condiciones
de Error relacionados a UNDO.</span></span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Los principios son simples, primero,
siempre debe haber suficiente espacio UNDO disponible para permitir a todas las transacciones continuar, y
segundo lugar, siempre debe ser suficiente
datos UNDO disponibles para todas las consultas para tener éxito. El
primer principio requiere que su Tablespace UNDO debe ser lo suficientemente
grande para acomodar el peor de los casos para demando Undo. Se debe tener
suficiente espacio asignado para el el uso máximo de Datos Undo Activos
generados por la carga de trabajo de transacciones. Tenga en cuenta que esto
podría no ser el mayor numero de transacciones
concurrentes; podría ser que durante el funcionamiento normal tiene muchas
transacciones pequeñas, pero el total de Undo que generan puede ser menor que el generado por un trabajo por lote de fin de mes. el segundo principio
requiere que haya espacio adicional en el Tablespace Undo para almacenar Datos
Undo caducado que puede ser necesario para la consistencia de lectura.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Si una transacción se queda sin
espacio UNDO, esta fallara con el error ORA-30036, “no se puede extender el
segmento en el Tablespace Undo”. La declaración que origina el proble es hecha
Roll Back, pero el resto de las transacciones se mantiene intactas y sin
confirmar (uncommitted). El algoritmo que asigna espacio en el Tablespace Undo
para segmentos Undo significa que esta condición de error solo se levantara si
el Tablespace Undo está completamente lleno de Datos Undo Activos.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Si una consulta encuentra un Block que
ha sido cambiado desde que comenzó la consulta, irá al segmento Undo a buscar
la versión preupdate de los datos. Si, cuando va al segmento Undo, ese pedazo
de Datos Undo ha sido sobrescrito, la consulta fallara en la lectura
consistente con un famoso error ORA-1555 “snapshot too old”.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Si el tablespace Undo es insuficiente
para el volumen de transacciones y la duración de las consultas, Oracle tiene
la opción: ya sea que las transacciones de éxito y el riesgo de querys fallando
con ORA-1555 o querys teniendo éxito y el riesgo de transacciones fallando con
ORA-30036. El comportamiento por defecto es permitir que las transacciones
tengan éxito para que puedan sobrescribir el Undo Expridado.</span></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">If the undo tablespace is undersized for the transaction volume and the
length of queries, Oracle has a choice: either let transactions succeed and
risk queries failing with ORA-1555 or let queries succeed and risk transactions
failing with ORA- 30036. The default behavior is to let the transactions
succeed, to allow them to overwrite unexpired undo.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Examen</span></span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Si una sentencia DML se queda sin
espacio undo, la porción de ella que había tenido éxito será hecha rollback. El
resto de la transacción se mantiene intacta y sin confirmar (uncommitted).</span></span></div>
<div class="Standard" style="margin-left: 35.4pt; text-align: justify; text-indent: -35.4pt;">
<br /></div>
<div class="Standard" style="margin-left: 35.4pt; text-align: justify; text-indent: -35.4pt;">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Parámetros para la Gestión de Undo y
Garantizar la Retención.</span></span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay tres parámetros para controlar
Undo: UNDO_MANAGEMENT, UNDO_TABLESPACE y UNDO_RETENTION.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b><i><span lang="ES">UNDO_MANAGEMENT</span></i></b><span lang="ES"> por defecto
es AUTO con la versión 11g. Es posible establecerlo este a MANUAL, lo que
significa que Oracle no utilizara segmentos Undo en todo. Esto es para compatibilidad atrás, y si se
utiliza esto, usted tendrá que hace una vasta cantidad de trabajo de crear y
ajustar Segmentos RollBack, no lo hagas. Oracle Corporación recomienda
configurar este parámetro a AUTO, apara habilitar el uso de Segmentos Undo.
Este parámetro es Estático, esto significa que si es cambiado el cambio no
surtirá efecto hasta que la instancia sea reiniciada. Los otros parámetros son
dinámicos-puedan ser cambiados mientras la instancia está corriendo.</span></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Si usted está usando
UNDO_MANAGEMENT=AUTO usted también debe especificar <b>UNDO_TABLESPACE</b>. Este parámetro nomina un Tablespace, que debe haber
sido creado como un Tablespace Undo, como los tablespace undo Activos. Todos
los Segmentos Undo dentro del serán
traídos en línea (es decir disponible para su uso) de forma automática.</span></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Por último, <b>UNDO_RETENTION</b>, establece en segundo, es generalmente opcional. Especifica el objetivo para mantener inactivo
Datos Undo y determina cuando se clasifica como expirado algo que no ha
expirado. Si, por ejemplo, su larga consulta en ejecución es de treinta
minutos, se establece el parámetro a 1800. Oracle intentara mantener todos los
Datos Undo por al menos 1800 segundo y su consulta por lo tanto nuca fallara
con ORA-1555. Si embargo, si no se establece este parámetro, o se establece en
cero, Oracle todavía mantendrá los datos por largo tiempo mientras pueda. El algoritmo de control que expiro los Datos
Undo se seobrescribe primero siempre elige a sobrescribir el pedazo mas
antiguo, UNDO_RETENTION es siempre el máximo permitido por el tamaño del
Tablesapce.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">The algorithm
controlling which expired undo data is overwritten first will always choose to
overwrite the oldest bit of data; therefore, UNDO_RETENTION is always at the
maximum allowed by the size of the tablespace.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">En
el Trabajo</span></span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Algunas consultas pueden ser muy
largas ejecutándose en realidad.
Consultas de varios días no son desconocidos. Usted necesitara un
tablespace Undo de tamaño de Jupiter si se va ha ejecutar este tipo de consulta
con éxito durante procesamiento norma. <span class="apple-converted-space"><span style="color: #333333;"> </span></span><span class="hps"><span style="color: #333333;">Es posible que desee</span></span><span class="apple-converted-space"><span style="color: #333333;"> </span></span><span class="hps"><span style="color: #333333;">considerar limitar</span></span><span class="apple-converted-space"><span style="color: #333333;"> </span></span><span class="hps"><span style="color: #333333;">la carga de trabajo</span></span><span class="apple-converted-space"><span style="color: #333333;"> </span></span><span class="hps"><span style="color: #333333;">DML</span></span><span class="apple-converted-space"><span style="color: #333333;"> </span></span><span class="hps"><span style="color: #333333;">durante los recorridos</span></span><span class="apple-converted-space"><span style="color: #333333;"> </span></span><span class="hps"><span style="color: #333333;">largosinformes</span></span><span class="apple-style-span"><span style="color: #333333;">.</span></span></span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Donde el parámetro UNDO_RETENTION no
es opcional es si ha configurado Undo para garantizar la retención (Guarantedd
Undo Retention). El modo por defecto de operación para Undo es que Oracle
favorece transacciones encima de consultas. Si el tamaño del Tablespace Undo es
tal que una elección tiene que ser hecha entre la posibilidad que una consulta falle con ORA-1555 y la
certeza de una transacción con ORA-30036,
Oracle optara por permitir a la transacción continuar sobrescribiendo datos
Undo que una consulta que podría necesitar. En otras palabras, la retención de
Undo solo es un objetivo que oracle va a tratar de lograr. Pero puede haber
circunstancias cuando consultas exitosas son consideradas más importantes que
una transacción exitosa. Un ejemplo podría ser la facturación de fin de mes
para obtener las utilidades, cuando podría ser aceptable para operaciones de
riesgo de ser bloqueado por algunas horas mientras el reporte se está
generando. Otro cso es si usted está haciendo uso de consultas flashback, que
se basan en datos Undo.</span></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Garantizar Undo Retention, significa
que datos Undo nunca serán sobrescritos hasta el momento especificado por la
retención de Undo haya pasado. Esta habilitado en el tablespace level. Este
atributo puede ser especificado en el tiempo de creación del tablespace, o un
tablespace undo puede ser modificado posteriormente para habilitarlo. Una vez
que active un tablespace undo para el cual se ha especificado la garantía de
retención. Todas las consultas se realizan correctamente, siempre que termine
dentro del tiempo de Undo Retention; usted nunca tendrá errores “snapshot
errors old” de nuevo. La desventaja es que la transacciones pueden fallar por
falta de espacio Undo.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">Si el parámetro UNDO_RETENTION ha sido
establecido, y los datafiles que conforman el Tablespace Undo son establecidos
a Autoextend, entonces Oracle incrementara el tamaño de los datafiles
automáticamente si es necesario para mantener el Undo Retention. Esta
combinación de garantizar Undo Retention y autoextend de datafiles significa
que transacciones y consultas siempre serán exitosas-asiminedo que tiene
suficiente espacio en disco. Si no la autoextension fallara.</span><span lang="ES"><o:p></o:p></span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">Una base de datos podría tener un
tablespace utilizado para operaciones normales donde undo retention no es
garantizado y otro será usado durante el reporte de fin de mes donde la
retencion esta garantizada, tales
sistemas pueden ser configurados asi,</span><span lang="ES"><o:p></o:p></span></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-5sA0AekK3AI/UArGW8P2lhI/AAAAAAAAAmU/1QIxEvVnLV0/s1600/11.054.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="182" src="http://3.bp.blogspot.com/-5sA0AekK3AI/UArGW8P2lhI/AAAAAAAAAmU/1QIxEvVnLV0/s400/11.054.jpg" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Dimensionando y
Monitoreo de Tablespace Undo</span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">El tablespace debe ser lo suficientemente
granda para almacenar el peor caso de
todos Undos generados por las transacciones concurrentes, que serán Undo
Active, además de suficiente Undo Unexpired para satisfacer las consultas
grandes en ejecución. En un entorno avanzado, es posible agregar espacion para
permitir consultas flashback también. El algoritmo es simple: calcular la
velocidad a la que se está siendo generando Undo en su hora pico y multiplicar
por la duración de su consulta más larga. Hay una vista V$UNDOSTAT que le dice
todo lo que necesita saber. También hay un asesor con el Database Control que
presentara información de una manera inmediata y comprensible.</span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">La figura 11-4 muestra la ventana de
Gestión de Undo del Database Control. Para alcanzar esto, tomar la ficha server
de la página principal de su base de datos, luego el Link Automatic Undo
Management en la seccion Database Configuration.</span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">La seccion de Configuracion de la
pantalla muestra que el Tablespace Undo actualmente que está en uso es llamado
UNDO1 y es de 100MB de tamaño, pero los datafiles para el tablesapce son
autoextensibles. Haciendo su datafiles undo autoextensibles asegura que
transacciones nunca se quedaran sin espacio, pero Oracle no los extiende simplemente para cumplir
con el objetivo UNDO_RETENTION, por lo que es todavía posible para una consulta
a fallar con "snapshot too old". Sin embargo no debe confiar en la
capacidad de autoextend. Su tablespace debería estar en el tamaño correcto para
iniciar. El botón Change Tablespace emite un comando ALTER SYSTEM para activar
un tablespace undo alternativo.</span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Cyc13Kp-TiM/UArGp53u8EI/AAAAAAAAAmk/YWRK1oGZSYg/s1600/11.06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="225" src="http://3.bp.blogspot.com/-Cyc13Kp-TiM/UArGp53u8EI/AAAAAAAAAmk/YWRK1oGZSYg/s400/11.06.jpg" width="400" /></span></a></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></span></div>
<br />
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-O1-8dt6k0zI/UArG2AMil6I/AAAAAAAAAms/LW5g0Wv3P6w/s1600/11.07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="222" src="http://3.bp.blogspot.com/-O1-8dt6k0zI/UArG2AMil6I/AAAAAAAAAms/LW5g0Wv3P6w/s400/11.07.jpg" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Más información dada en la ficha
System Activity, mostrada en el Figura 11-5, dice que su pico de generación de
Undo fue solo 1664KB por minuto, y la consulta más larga fue de 25 minutos. El mínimo tamaño del
Tablespace Undo será absolutamente seguro para prevenir errores, debería ser en
kilobytes.</span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">1664 * 25 = 40265</span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Que es algo más de 40M, Si el tamaño
actual fuera menos, esto sería señalado en la sección de Undo Advisor. No ha
habido errores en las transacciones causada por la falta de undospace, y no
errores de consulta por falta de datos de deshacer.</span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Flashback
Query.</span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Flashback query puede imponer
exigencias adicionales sobre el Sistema Undo. Flashback query es un servicio
que permite a los usuarios ver la base de datos como fue en un momento en el
pasado. Hay varios metodos de realizar consultas flashback query, pero el mas
simple es una sentencia SELECT con una clausula AS OF por ejemplo:<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from scott.emp as of timestamp (systimestamp - 1/1440);<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Esta declaración regresara todas las
filas en la tabla SCOTT.EMP de hace 10 minutos. Las filas que se han eliminado
se verán, filas que se han insertado no
se verán, y las filas que se han actualizado se verán con sus valores antiguos.
Este es el caso si o no las sentencias DML han sido confirmadas. Para ejecutar
una consulta flashback query, datos Undo son utilizados para hacer roll back
todos los cambios: Las filas que han sido eliminadas son extraídas desde los
segmentos undo e insertar de regreso en el resultado; filas que han sido
insertadas son eliminadas del conjunto de resultados.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Esta sentencia trata de ver la taba
como lo fue hace un día:<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from scott.emp as of timestamp (systimestamp - 1);<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">La primera sentencia es probable tenga
exito-esta segunda sentencia probablemente falle con un “snapshot too old”
error. El fallo será porque los Datos Undo necesarios para reconstruir la
versión de la tabla que fue de hace un día han sido sobrescritos.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Escenarios
y Soluciones</span></span></b></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">A veces usuarios cometen errores
terribles. Eliminar datos, hacer actualizaciones inapropiadas, se hacen dos
veces las cosas no una vez, y asi sucesivamente ¿Que consideraciones deben ser
tomadas para corregir estos errores?<o:p></o:p></span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Existen varios enfoques para la
corrección de errores del usuario. El más drástico es una "recuperación
incompleta", que pone la base de datos al estado en que se encontraba
antes del error, pero esto va a perder todo el trabajo realizado posteriormente
y puede tardar un tiempo (long) tiempo. Un "flashback de base de
datos" tiene el mismo resultado, pero será mucho más rápido. Una consulta
de flashback a menudo la mejor solución, pero tendrás que ser rápido, o los
datos de deshacer se han expirado.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Como se puede asegurar que ninguna
consulta nunca fallara por problemas de undo.<o:p></o:p></span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Vas a tener que trabajar el tiempo de
la consulta es el mas largo. En cuanto a la columna MAXQUERYLEN de la vista
$UNDOSTAT ayudara. Establecer el parámetro UNDO_RETENTION por lo menos a este
valor. A continuación. Establezca a autoextent los datafiles Undo Tablespace y
habilite RETENTION GUARANTEE para el tablespace. Pero recuerde que esto plantea
la posibilidad de llenar el espacio en disco, que puede tener resultados
desastrosos. Usted debe controlar la situación.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Flashback query puede ser una
herramienta valiosa. Por ejemplo, si debido a algún error una eliminación ha
ocurrido en algún momento de la ultima hora, este comando reversa mediante la
inserción todas las filas eliminadas de regreso a la tabla.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">insert into scott.emp<o:p></o:p></span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">(select from * scott.emp as of timestamp (systimestamp – 1/24)<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">minus<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from scott.emp);<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Si el flashback query es probablemente que se usado, entonces
el sistema Undo debe estar configurado para manejar, al establecer el parametro
UNDO_RETENTION a un valor apropiado. Si desea que la capacidad de flash back
query de un día, se debe establecer a 86400 segundos. El tablespace undo debe
ser del tamaño adecuado. Entonces para estar seguros del éxito. O bien permitir
la extension automatica para los datafiles del tablespace undo o habilitar la
retention guarantee para el tablaspace.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Creando
y Gestionando Tablespace Undo.</span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Hasta ahora la gestión de datafiles se refiere, un tablespace undo
es lo mismo como cualquier tablepace: archivos pueden ser agregados, ajustados
de tamaño, tomados online y offline, movido o renombrado. Pero no es posible
especificar cualquier opción de almacenamiento: usted no puede especificar
automatic segment space management, usted no puede especificar un uniform extent
size. Para crear un tablespace utilice la palabra UNDO:<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">CREATE UNDO TABLESPACE </span><i><span lang="ES">tablespace_name</span></i><span lang="ES"><o:p></o:p></span></span></div>
<div class="Standard">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">DATAFILE </span><i><span lang="ES">datafile_name </span></i><span lang="ES">SIZE
</span><i><span lang="ES">size</span></i><span lang="ES"><o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">[ RETENTION NOGUARANTEE | GUARANTEE ] ;<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Por default, el tablespace no
garantiza undo retention. Esta características pueden ser pueden ser
especificadas en el momento de creación del tablespace o establecerlas
posteriormente.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER TABLESPACE tablespace_name<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">retention [ GUARANTEE | NOGUARANTEE ] ;<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">no es posible crear segmentos en un
tablespace undo, con excepción que los segmentos undo que serán creados
automáticamente. Inicialmente, habrá un pool de 10 segmentos undo creados en un
tablespace undo. Mas serán creados si hay mas
de diez transacciones concurrentes. Oracle monitora la velocidad de
transacciones concurrentes y ajusta el numero de segmentos necesarios.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">No importa cuantos tablespace undo
pueda haber en una base de datos, en
general solo uno estará en uso a la vez. Los segmentos Undo en este tablespace
tendrán un estatus online (lo que significa que esta disponible para su uso);
los segmentos en cualquier otro tablespace tendrá estatus offline, lo que
significa que no serán utilizados. Si el tablespace undo es cambiado, todos los
segmentos undo en el viejo tablespace serán hechos offline, y los del nuevo
tablespace undo seran hechos online. Hay dos excepciones para esto:<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard" style="margin-left: 0cm; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">•
</span><!--[endif]--><span lang="ES">En una base de datos RAC, cada instancia que
abre las base de datos debe tener su propio tablespace undo. Esto puede ser
controlado con el ajuste del parametro UNDO_TABLESPACE a un valor diferente
para cada instancia. Cada instancia aportara su propios segmentos undo en
linea.</span></span></div>
<div class="Standard" style="margin-left: 0cm; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">•
</span><!--[endif]--><span lang="ES">Si el tablespace undo es cambiado mediante el
parametro UNDO_TABLESPACE, cualquier segmento en el tablespace que estaba
soportando una transacción en el momento del cambio permanecerá online hasta
que la transacción finalice.</span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Examen.</span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Salvo especifique en tiempo de
creación en la clausula del Datafile, el datafile de un tablespace undo no se
establecerá a autoextend. Pero si su base de datos es creada con el DBCA,
permitirá la extensión automática del datafile del tablespace undo con un
maximo de ilimitado. Extension automática puede ser habilitada o des habilitada
en cualquier momento ya que puede ser de cualquier archivo de datos.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Ejercicio
11-3</span></span></b></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Trabajr
con Tablespace Undo.</span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">In this exercise, you will create an
undo tablespace with Database Control, and then verify the configuration with
SQL*Plus.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Connect to your instance as user
SYSTEM with Database Control.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">2. From the Server tab, in the Storage
section take the Tablespaces link.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Click Create.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Enter UNDO2 as the tablespace name,
and set the radio buttons for Locally Managed, Undo, and Read Write.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">5. At the bottom of the screen, click
Add to specify a datafile.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">6. Enter UNDO2-01.DBF as the File
Name, leave everything else on default, and click Continue.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">7. On the Create Tablespace screen,
click Show SQL, and study the statement used to create your undo tablespace.
Click Return to return to the Create Tablespace screen, and click OK to create
the tablespace.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">8. Connect to your instance as user
SYSTEM with SQL*Plus.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">9. Run this query, which will return
one row for each tablespace in your database: select
tablespace_name,contents,retention from dba_tablespaces;<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Note that your new tablespace has
contents UNDO, meaning that it can only be used for undo segments, and that
retention is NOGUARANTEE.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">10. Run this query, which will return
one row for each rollback or undo segment in your database:<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select tablespace_name, segment_name,
status from dba_rollback_segs;<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Note that a number of undo segments
have been created automatically in your new undo tablespace, but that they are
all offline.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">11. Adjust your instance to use the
new undo tablespace. Use a SCOPE clause to ensure that the change will not be
permanent:<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter system set undo_tablespace=undo2
scope=memory;<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">12. Rerun the query from Step 9. You
will see that the undo segments in the new tablespace have bee brought online,
and those in the previously active undo tablespace are offline.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Dentro
del Examen.</span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">La base de datos oracle implementa
atomicidad, aislamiento y lecturas consistentes de transacciones a través del
uso del segmento undo. Los viejos segmentos rollback(y un segmento rollback
siempre existirá, utilizando cuando se crea la base de datos) pueden ser todavía
utilizados, pero esto es muy mala practica.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Segmentos undo son creados
automáticamente en un tablespace undo: un tablespace no puede contener otro
tipo de objeto. La base de datos crea segmentos undo sobre demanda, tratando de
coincidir el numero de segmentos con el
numero de transacciones concurrentes. Cada segmento se expande cuando sea
necesario para dar cabida a su
transacción. Como DBA todo lo que necesita es asegurar que e tablespace undo es
suficientemente grande para la carga de trabajo.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">La gestión automática
del mecanismo undo por default a favor de querys. Si un tablespace undo
es insuficiente, transacciones continuaran incluso hasta que se tiene que
sobrescribir undo expirado, por lo tanto correr el riesgo de fracaso con el
error ora-1555 “snapshot too old”. Este comportamiento puede ser modificado para garantizar qie las
consultas tengan éxito, tal vez el riesgo de fallo de transacciones.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Monitorear el uso de Undo es simple
atraves del database control undo advisor o mediante la vista v$undostat.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Resumen
de Certificación.</span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Undo data se genera para permitir la
atomicidad de transacciones, consistencia en lectura y aislamiento de
transacciones. La base de datos oracle garantiza la integridad transaccional
absoluta, pero no necesariamente una coherencia de lectura. Si el sistema undo
no es apropiadamente configurado, las consultas pueden fallar debido a la falta
de datos undo, pero si una consulta tiene éxito sera coherente.<o:p></o:p></span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Este comportamiento puede ser
modificado, permitiendo la RETENTION GUARANTEE, aunque esto pueda significar
que transacciones fallen. Datos undo son almacenados en un tablespace undo
contiene segmentos undo gestionados y creados automáticamente. Puede haber más
de un tablespaces de deshacer en una base de datos, pero sólo uno estará en uso
en un momento dado, esto es controlado por un parámetro de instancia dinámica,
UNDO_TABLESPACE.<o:p></o:p></span></span></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<br /></div>
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Dos
minutos.</span></span></b></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Explicando el Propósito de Undo</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Todas las sentencias DML generan Datos Undo.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Datos Undo son utilizados para hacer Rollback
a transacciones y aislamiento y para proporcionar lecturas consistentes y
también para consultas Flashback.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Gestión automática de Undo utilizando
Segmentos Undo es por defecto con la versión 11g.</span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Entender como las Transacciones
Generan Undo.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Datos Undo siempre serán mantenidos hasta que
la transacción que los genero sea completada con un COMMIT o un ROLLBACK. Esto
es Undo Activo.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Datos Undo serán retenidos por un periodo
después de convertirse en Inactivo para satisfacer cualquier requisito de
lectura consistente de consultas largar.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Undo Expirado son datos que ya no se
necesitan para lecturas consistentes y puede ser sobrescrito en cualquier
momento como espacio reutilizado en segmentos Undo.</span></span></div>
<div class="Standard">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Gestionar Undo.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Una instancia utilizara segmentos undo en un
tablespace undo.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Mas tablespace undo puede existir, pero solo
uno será utilizado a la vez.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">El tablespace undo deberá ser grande para
almacenar el promedio máximo de undo generado y la consulta mas grande.</span></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">·
</span><!--[endif]--><span lang="ES">Datafiles de Tablespace son datafiles como
cualquier otro.</span></span></div>
<br />
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: "Arial","sans-serif"; font-size: 10.0pt;"><br /></span></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-18614707366101879202012-07-21T08:08:00.001-07:002017-04-06T21:09:44.624-07:0011.02 ENTENDIENDO COMO LAS TRANSACCIONES GENERAN UNDO<span style="font-family: Verdana, sans-serif;"><br /></span><br />
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Cuando una transacción inicia, Oracle
asignara un (y solo uno) Segmento Undo. cualquier transacción solo puede estar
protegida por un Segmento Undo-no es posible para Undo Data generar para una
transacción para cortarla atraves de
múltiples segmentos Undo. Esto no es un problema, porque los segmentos Undo no
son de tamaño fijo. Así si una transacción se las arregla para llenar su
segmento Undo Oracle automáticamente agregara otro Extent al segmento, por lo
que la transacción puede continuar. Es posible para transacciones multiples
compartir un segmento Undo, pero en condiciones normales esto no debería
ocurrir. Un problema común de ajuste con los segmentos Rollback fue estimar
cuantos segmentos rollback sería
necesario para evitar la interpolación excesiva de transacciones dentro de los
segmentos rollback sin crear tantos como para desaprovechar el espacio. Una
característica de la gestión de Undo es
que Oracle automáticamente se generaran nuevos segmentos Undo en demanda, en un
intento para asegurar que nunca es necesaria para las transacciones compartir
segmentos Undo. Si Oracle se ha visto en la necesidad de ampliar sus segmentos
Undo o para generar segmentos adicionales, cuando la carga de trabajo se reduce
y eliminará los segmentos, de nuevo automáticamente.</span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">EXAMEN</span></b></div>
<div class="Standard">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Ninguna
transacción nunca puede abarcar múltiples segmentos Undo, pero un segmento Undo
puede soportar transacciones múltiples.</span></div>
<div class="Standard">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Una transacción actualiza los data
blocks de tablas o índices, la información necesaria para rollback de los
cambios es escrita a los block del segmento Undo asignado. Todo esto sucederá
en el Database Buffer Cache. Oracle garantiza absolutamente la A, para
atomicidad de la prueba ACID, significando que todos los Datos Undo serán
conservados hasta que la transacción sea confirmada. Si es necesario, el DBWn
escribirá los blocks modificados de datos Undo el segmento Undo en los
DataFiles. Por defecto, Oracle no hace, sin embargo, garantiza la C para
consistencia de la prueba ACID. Oracle garantiza consistencia hasta el punto
que si una consulta se realiza tiene éxito, los resultados serán consistentes
con el estado de la base de datos en el momento en que la consulta inicio. Pero
no garantiza que la consulta tenga éxito realmente. Esto significa que los
datos Undo pueden ser clasificados como los diferentes niveles de necesidad.
Active Undo es un Dato Undo que significa que pudieran ser necesarios para
rollback las transacciones en progreso. Estos datos nunca pueden ser
sobrescritos, hasta que la transacción se complete. En el otro extremo, Expired
Undo es un dato Undo de transacciones confirmadas, que oracle no está obligado
a almacenar. Estos datos pueden ser sobrescritos si Oracle necesita espacio
para otra transacción activa. Unexpired Undo es una categoría intermedia; no es
ni Active ni Expired: la transacción fue confirmada, pero los datos Undo pueden
ser necesarios para lecturas consistentes, si hay consultas de larga duración,
Oracle intentara no sobrescribir Undo Unexpired.</span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">EXAMEN</span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Active Undo nunca puede ser
sobrescrito, Expired Undo puede ser sobrescrito. Unexpired Undo puede ser
sobrescrito, pero solo si hay escases de espacio.</span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">El hecho que información Undo llega a
ser inactiva al confirmar significa que los extents de los segmentos Undo
pueden ser utilizados en forma circular. Eventualmente, la totalidad del
espacio del Tablespace Undo se llenara con datos Undo, así cuando una nueva
transacción inicia, o una transacción corriendo genera poco mas Undo. El
segmento Undo “envolverá” alrededor, y el más viejo dato Undo dentro del serán
sobrescrito. Siempre asumiendo que los datos más antiguos no es parte de una
transacción sin confirmar ejecutando de gran tiempo, en cuyo caso sería
necesario extender el segmento Undo en su lugar.</span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Con los viejos segmentos rollback
gestionados manualmente, una parte critica del ajuste fue controlar que las
transacciones fueron protegidas por medio del segmento roll back. Un segmento
roll back podría incluso ser creado y puesto en línea específicamente para una
gran transacción. Administra automáticamente segmento Undo hacen todo eso
innecesario, porque usted como DBA no tiene control sobre lo que el segmento
Undo protegerá, este protegerá cualquier transacción.</span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">No se preocupe acerca de esto. Oracle
hará un mejor trabajo que usted pueda. Pero si usted desea, puede todavía
encontrar a que segmentos ha sido asignada cada transacción consultando las
vistas V$TRANSACCTION, que se ha unido a las columnas de V$SESSION y
DBA_ROLLBACK_SEGS, lo que le permite construir una completa imagen de la
actividad de la transacción en su base de datos: cuantas transacciones allí
están funcionando actualmente, quien la esta ejecutado, que segmento Undo están
protegiendo estas transacciones, cuando inicio la transacción, y el numero de
block Undo de cada transacción se ha generado. Un punto de vista relacionado
con el rendimiento dinámico es V$ROLLSTAT, que proporciona información sobre el
tamaño de los segmentos.</span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">EN
EL TRABAJO.</span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Segmentos Undo no son el mismo que
segmentos RollBack, pero las vistas DBA_ROLLBACK_SEGS y V$ROLLSTAT incluyen
filas de ambos sin alguna bandera para decir de qué tipo son: La convención de
nombres que los distingue: Nombres de segmentos Undo son generados
automáticamente y con un prefijo tal como este _SYSSMU.</span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">La figura 11-2 muestra consultas para
investigar transacciones en progreso. La primera consulta muestra que son dos
transacciones actualmente. Transacción JON ha sido asignada a el segmento con
SEGMENT_ID numero 7 y actualmente está utilizando 277 blocks de espacio Undo.
SCOTT mucho más pequeña transacción está protegida por dos segmentos. El segundo query muestra la información del
segmento. El tamaño de cada segmento dependerá del tamaño de las transacciones
que ocurren haber sido asignado a ellos
previamente. Tenga en cuenta que la combinación de la columna para
DBA_ROLLBACK_SEGS es llamada USN.</span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-WSHCSDb7JDM/UAq6xJRJg6I/AAAAAAAAAls/sVOQAJAeXKk/s1600/11.02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="195" src="http://3.bp.blogspot.com/-WSHCSDb7JDM/UAq6xJRJg6I/AAAAAAAAAls/sVOQAJAeXKk/s400/11.02.jpg" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Ejercicio 11-2.</span></b></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Trabajar con
Transacciones y Consultas Flashback.</span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">En este ejercicio, demostrar la manera
en que Datos Undo se utiliza para proporcionar aislamiento de transacción y
rollback, y para implementar consulta Flashback. Utilice la tabla REGIONS en el
esquema de demostración HR.</span></div>
<div class="Standard" style="text-align: justify;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Conéctese al esquema HR con dos
sesiones concurrentemente. Esto puede ser dos sesiones SQL PLUS o dos sesiones
SQL Developer, o una de cada uno. La tabla que sigue enumera los pasos a seguir
en cada sesión.</span></div>
<span style="font-family: Verdana, sans-serif;"><br /></span><br />
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-sl0f5pe6Z_M/UAq7wd2-QwI/AAAAAAAAAl0/g3c6rPISEHc/s1600/11.03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="167" src="http://3.bp.blogspot.com/-sl0f5pe6Z_M/UAq7wd2-QwI/AAAAAAAAAl0/g3c6rPISEHc/s400/11.03.jpg" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<div class="Standard">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">Demostrar el uso de consulta
flashback, utilizando una sesión conectada al usuario HR.</span></div>
<div class="Standard">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<span style="font-family: Verdana, sans-serif;"><span lang="ES">1.<span style="font-size: 7pt;">
</span></span><span lang="ES" style="font-size: 10pt;">Ajuste si formato de despliegue de hora para
incluir segundos:</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: 9pt;">alter session set nls_date_format='dd-mm-yy
hh24:mi:ss';</span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<span style="font-family: Verdana, sans-serif;"><span lang="ES">2.<span style="font-size: 7pt;">
</span></span><span lang="ES" style="font-size: 10pt;">Consulte y registre la hora actual.</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 9pt;">select
sysdate from dual;</span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<span style="font-family: Verdana, sans-serif;"><span lang="ES">3.<span style="font-size: 7pt;">
</span></span><span lang="ES" style="font-size: 10pt;">Elimine el registro insertado previamente, y
confirme la eliminación:</span></span></div>
<div class="Standard" style="text-indent: 18.0pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: 9pt;">delete
from regions where region_id=100;</span></div>
<div class="MsoListParagraph" style="margin-left: 18pt;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 9pt;">commit;</span></div>
<div class="MsoListParagraph" style="text-indent: 0cm;">
<span style="font-family: Verdana, sans-serif;"><span lang="ES">4.<span style="font-size: 7pt;">
</span></span><span lang="ES" style="font-size: 10pt;">Consulte la tabla como era antes de eliminar
el registro:</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18.0pt;">
<span lang="EN-US" style="font-family: Verdana, sans-serif; font-size: 9pt;">select * from regions</span></div>
<div class="MsoListParagraph" style="margin-left: 18.0pt;">
<span style="font-family: Verdana, sans-serif;"><span lang="EN-US" style="font-size: 9pt;">as of timestamp to_timestamp('</span><i><span lang="EN-US" style="font-size: 9pt;">time_from step_2</span></i><span lang="EN-US" style="font-size: 9pt;">',</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 9pt;">'dd-mm-yy
hh24:mi:ss');</span></div>
<div class="Standard">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="Standard">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;">El registro eliminado de región con Id
100 sera listado, ha sido recuperado de un segmento Undo. La ilustración que
sigue muestra los pasos 1-4 utilizando SQL PLUS.</span></div>
<div class="Standard">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-9zZls85KY0o/UArA5RJOJ4I/AAAAAAAAAmE/sJiCKetqxR0/s1600/11.04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="243" src="http://3.bp.blogspot.com/-9zZls85KY0o/UArA5RJOJ4I/AAAAAAAAAmE/sJiCKetqxR0/s400/11.04.jpg" width="400" /></span></a></div>
<div class="Standard">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;"><br /></span></div>
<span style="font-family: Verdana, sans-serif;"><br /></span><br />
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Verdana, sans-serif; font-size: 10pt;"><br /></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES" style="font-family: Arial, sans-serif; font-size: 10pt;"><br /></span></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-70121213582299677742012-07-21T07:19:00.002-07:002017-04-06T21:09:44.746-07:0011.01.EXPLICANDO EL PROPROSITO DE UNDO.<br />
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Undo Data es la información necesaria
para revertir los efectos de las sentencias DML. A menudo se conoce como Rollback Data, pero trate de evitar ese
término. En versiones anteriores de Oracle, el término Rollback Data y Undo
Data fueron utilizados indistintamente, pero desde 9i en adelante son
diferentes: su función es la misma, pero su gestión no lo es. Cada vez que una transacción cambia datos, la
versión PreUpdate de los datos es escrito a un Segmento Rollback o a un Segmento
Undo. La diferencia es crucial. Segmentos Rollback pueden todavía existir en la
base de datos 11g, pero con la versión 91 de la base de datos, Oracle introdujo
los Segmentos Undo como una alternativa. Oracle aconseja fuertemente que todas
las Bases de Datos deban utilizar Segmentos Undo-Segmentos Rollback se
mantienen por compatibilidad atrás, pero no son referenciados en el examen OCP
y por lo tanto no son cubiertos en este libro. Pero aunque “Rollback” como un
sustantivo no debe dejar de utilizarse en el entorno Oracle, “roll back ” como
verbo es tan relevante como siempre.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Para hacer Rollback a una transacción
significa utilizar datos de los segmentos Undo para construir una imagen de los
datos como fuera antes que la transacción ocurriera. Esto normalmente se hace automáticamente para
satisfacer los requisitos de la prueba ACID, pero la capacidad de consulta
Flashback (introducido con 9i y realzada desde entonces) aprovecha el poder del
mecanismo Undo porque le da opción de consultar la base de datos como fue en
algún momento pasado. Y por supuesto, cualquier usuario puede utilizar el
comando ROLLBACK interactivamente para regresar cualquier sentencia DML
que fue emitida y no confirmada (any
user can use the ROLLBACK command interactively to back out any DML statements
that he/she has issued and not committed).</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">La prueba ACID requiere, primero, que
la base de datos debe mantener versiones
PreUpdate de datos con el fin que transacciones incompletas puedan ser
revertidas-o automáticamente en caso de un error o bajo demanda atraves del uso
del comando ROLLBACK.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Este tipo de Rollback es permanente y
publicado a todos los usuarios. Segundo, para coherencia, la base de datos será
capaz de presentar una consulta con una versión de la Base de datos como fue en el momento de la consulta
comenzó. El proceso servidor ejecutando la consulta ira al Segmento Undo y construirá lo que llama una imagen Read-Consistent (Lectura
Coherente) que son consultados. Si fueron cambiados después que la consulta
inicio. Este tipo de Rollback es temporal y solo visible a la sesión que
ejecuta la consulta. Tercero, los Segmentos Undo también son utilizados para el
Aislamiento de la Transacción. Este es quizás el uso más complejo de Undo Data.
El principio de Aislamiento requiere que ninguna transacción puede ser en
ninguna manera dependiente de otra, incompleta, transacción. En efecto, incluso
aunque una base de datos multiusuarios tendrá muchas transacciones en progreso
a la vez, el resultado final deber ser como su las transacciones fueron
ejecutadas una después de otra. El uso de Undo Data combinado con bloqueo de
fila y tabla (como se describe en el capítulo 10) garantiza transacciones
aisladas: la imposibilidad de transacciones incompatibles. Incluso aunque
varias transacciones pueden estar ejecutándose concurrentemente, aislamiento
requiere que el resultado final debe ser como si las transacciones fueron
serializadas (en serie).</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Desde la versión 9i en adelante, Undo
Data puede también ser utilizado para consultas Flashback. Esta es una
herramienta completamente opcional pero muy poderosa que permite al usuario
consultar una imagen pasada de la base de datos. Para consultas Flashback, Undo
Data es utilizado para construir una versión de una o más tablas como fueron en
algún momento previo mediante la aplicación de Undo Data. Como con Rollback
para los fines de coherencia, Rollback para fines Flashback es solo temporal y
solo visible a la sesión en concreto.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Como palabra final sobre Rollback en
contraposición (comparación) de Undo, observe el resultado de las dos consultas
contra DBA_SEGMENTS, mostrada en la figura 11-1. Esto muestra que dentro de la
base de datos hay un segmento de tipo Rollback, y 10 segmentos de tipo TYPE2
UNDO. Así que Segmentos Rollback todavía
existen en una base de Datos 11g. Segmentos Undo pueden solo existir en un
Tablespace Undo, esto es una de sus características. Pero en el momento de
creación de la Base de Datos. Puede no haber un Tablespace Undo. Por lo tanto,
en tiempo de creación de la Base de Datos, oracle crea un único Segmento
Rollback pasado de moda en el Tablespace SYSTEM, junto con el diccionario de
datos. Este es utilizado durante la creación de la Base de Datos pero nunca es
usado en ejecución normal. Todas las transacciones de usuario utilizaran
Segmentos undo, listado en DBA_SEGMENTS como segmento tipo TYPE2 UNDO.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">El uso de Segmentos Undo es
incompatible con el uso de Segmentos Rollback: es uno o el otro, dependiendo de
la configuración del parámetro UNDO_MANAGEMENT.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN
EL TRABAJO</span></span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Si le preguntas a Oracle Desarrollo de
Producots ¿Qué es un segmento TYPE1 UNDO? La respuesta será, “Que es un
segmento ROLLBACK”.</span></span></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-uvItALAj1u0/UAq6C-dx5LI/AAAAAAAAAlk/C6X1p4ppOS4/s1600/11.01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="201" src="http://3.bp.blogspot.com/-uvItALAj1u0/UAq6C-dx5LI/AAAAAAAAAlk/C6X1p4ppOS4/s400/11.01.jpg" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJERCICIO 11-1</span></span></b></div>
<div class="Standard" style="text-align: justify;">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">USO DE UNDO DATA</span></span></b></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, investigara la
configuración de Undo y el uso en tu base de datos. Utilice SQL*PLUS o SQL
DEVELOPER.</span></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo2; text-align: justify; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">1. </span><span lang="ES">Conéctese a la base de datos como usuario
SYSTEM.</span></span></div>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">2.</span><span lang="ES">Determine si la base de datos está usando
Segmentos Undo o Segmentos Rollback con esta consulta.</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18.0pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select value from v$parameter where
name='undo_management';</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt; text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Este debe regresar el
valor AUTO. Si no es así, emita este comando,
y entonces reinicie la instancia.</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter system set undo_management=auto scope =spfile;</span></span></div>
<div class="MsoListParagraph" style="text-align: justify; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">3. </span><span lang="ES">Determine que Tablespace Undo han sido
creados, y cual se está utilizando con estas dos consultas:</span></span></div>
<div class="Standard" style="text-align: justify; text-indent: 18pt;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select
tablespace_name from dba_tablespaces where</span></span></div>
<div class="Standard" style="text-align: justify; text-indent: 18pt;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">contents='UNDO';</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select value from v$parameter where
name='undo_tablespace';</span></span></div>
<div class="MsoListParagraph" style="text-align: justify; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">4. </span><span lang="ES">Determine que segmento Undo está en uso en la
Base de Datos, y los grande que son:</span></span></div>
<div class="Standard" style="text-align: justify; text-indent: 18pt;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select
tablespace_name,segment_name,segment_id,status from</span></span></div>
<div class="Standard" style="text-align: justify; text-indent: 18pt;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">dba_rollback_segs;</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select usn,rssize from v$rollstat;</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt; text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Tenga en cuenta que
el numero de identificacion para un segment tiene un nombre de columna
diferente en las dos vistas.</span></span></div>
<div class="MsoListParagraph" style="text-align: justify; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">5. </span><!--[endif]--><span lang="ES">Averigüe cuando Undo Data fue generado en su
Base de Datos en el pasado reciente:</span></span></div>
<div class="Standard" style="text-align: justify; text-indent: 18pt;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter
session set nls_date_format='dd-mm-yy hh24:mi:ss';</span></span></div>
<div class="Standard" style="text-align: justify; text-indent: 18pt;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">select
begin_time, end_time,</span></span></div>
<div class="Standard" style="text-align: justify; text-indent: 18pt;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">(undoblks
* (select value from v$parameter where</span></span></div>
<div class="Standard" style="text-align: justify; text-indent: 18pt;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">name='db_block_size'))</span></span></div>
<div class="MsoListParagraph" style="margin-left: 18pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">undo_bytes from v$undostat;</span></span></div>
<br />Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-28453041344374962112012-07-21T07:13:00.003-07:002017-04-06T21:09:44.643-07:0011. Gestionando UNDO DATA.<br />
<div class="Standard">
<b><span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Objetivos de
Certificación</span></span></b></div>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo2; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">1. </span><b><span lang="ES">Explicando el
propósito de UNDO.</span></b></span></div>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo1; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">2. </span><b><span lang="ES">Entender como las
transacciones generan UNDO.</span></b></span></div>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo1; text-indent: 0cm;">
<!--[if !supportLists]--><span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES">3. </span><b><span lang="ES">Gestionar UNDO.</span></b></span></div>
<div class="Standard" style="text-align: justify;">
<br /></div>
<div class="Standard" style="text-align: justify;">
<span lang="ES"><span style="font-family: Verdana, sans-serif; font-size: x-small;">El capitulo 10 describe que pasara en
memoria, y en disc, cuanto usted ejecuta sentencias INSERT, UPDATE o DELETE. La
manera en que los datos modificados son escritos a los block de los segmentos
table y index, y la vieja versión de los
datos se escriben en bloques de un segmento Undo. También cubre la teoría
detrás de esto. Resumiendo como la prueba ACID, que cada base de datos
relacional debe pasar. En este capítulo veremos los aspectos de cómo Indo Data es gestionado.</span></span></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-14724528069850034972012-07-04T19:41:00.000-07:002017-04-06T21:09:44.608-07:0010.3. MONITOREAR Y RESOLVER CONFLICTOS DE BLOQUEOS.<b style="background-color: white; text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">MONITOREAR Y RESOLVER CONFLICTOS DE
BLOQUEOS.</span></b><br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En cualquier aplicación de Base de Datos
multiusuario es inevitable que, eventualmente, dos usuario deseen trabajar
sobre a misma fila al mismo tiempo. Esto es lógicamente imposible, y la Base de
Datos debe asegurarse de que se trata de una imposibilidad física. El principio
de aislamiento de transacción – la I de la prueba ACID – require que la Base de
Datos garantice que una sesión no puede ver o ser afectada por cualquier otra
sesión hasta que la transacción es completada. Para lograr esto, la Base de
Datos debe serializar el acceso simultáneo a los datos; debe asegurarse que
incluso varias sesiones han solicitado acceso a la misma fila, que en realidad
hacen cola y esperar turno.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Serialización de acceso concurrente es lograda
por los mecanismos de bloqueo de registro y tablas. Bloqueo en una Base de
Datos Oracle es completamente automático. En términos generales, los problemas
surgen solamente si el software intenta interferir con el mecanismo de bloqueo
automático con código mal escrito, o si el análisis de negocio es deficiente
y los resultados en un modelo de negocio
donde las sesiones colisionan.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Bloqueos
Compartidos y Exclusivos.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">El nivel estándar de bloqueo en una Base de
Datos Oracle garantiza el nivel más alto posible de la concurrencia. Esto
significa que si una sesión está actualizando una fila, la fila uno es bloqueado,
nada más. Por otra parte, la fila es
bloqueada para prevenir que otras sesiones la actualicen – otras sesiones
pueden leer en cualquier momento. El bloqueo se mantiene hasta que la
transacción es completada, ya sea con un COMMIT o un ROLLBACK. Esto es un
Bloqueo exclusivo: La primera sesión solicita el Bloqueo sobre la Fila
obtenida, y cualquier otra sesión solicita el acceso de escritura pero debe
esperar. Acceso de lectura es permitido – aunque si la fila ha sido actualizada
por la sesión que bloqueo, como usualmente será el caso, entonces cualquier
lectura implica el uso de Datos Undo para asegurarse que las sesiones que leen
no vean cualquier cambio sin confirmar (uncommitted).<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Solo una sesión puede tomar un bloqueo
exclusivo sobre una fila, o una tabla completa, a la vez – pero los bloqueos
compartidos pueden tomar sobre el mismo
objeto por varias sesiones. No tendría ningún sentido tomar un Bloqueo
compartido sobre una fila, porque el único propósito de un bloqueo de fila es
para obtener el acceso exclusivo para modificar la fila. Bloqueos compartidos
son tomados sobre tablas completas, y muchas sesiones pueden tener un bloqueo
compartido sobre la misma tabla. El propósito de tomar un bloqueo compartido
sobre una tabla es para evitar que otra sesión adquiera bloqueo exclusivo sobre
la tabla: usted no puede obtener un bloqueo exclusivo si alguien ya tiene un
bloqueo compartido. Bloqueos exclusivos sobre tablas son requeridos para ejecutar
declaraciones DDL. Usted no puede emitir una declaración que modifique un
objeto (por ejemplo, eliminar una columna de una tabla) si otra sesión ya tiene
un bloqueo compartido sobre la tabla. <o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Para ejecutar DML sobre filas, una sesión debe
adquirir bloqueo exclusivo sobre las filas a ser cambiadas y bloqueo compartido
sobre las tablas que contiene las filas. Si otra sesión ya tiene bloqueo
exclusivo sobre las filas, la sesión se colgara hasta que los bloqueos sean
liberados por un COMMIT o un ROLLBACK. Si otra sesión ya tiene un bloqueo
compartido sobre la tabla y bloqueo exclusivo sobre otras filas, que no es un
problema. Un bloqueo exclusivo sobre la tabla sería, pero el mecanismo de
bloqueo por defecto no bloquea todas las tablas a menos que sea necesario por
declaraciones DDL.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En el
Trabajo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Es posible que la demanda de un bloqueo
exclusivo sobre una tabla completa, pero esto tener que ser solicitado
específicamente y programadores deben tener una buena razón para hacerlo.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Todas las declaraciones DML requieren por lo
menos dos Bloqueos: un bloqueo exclusivo sobre cada fila a afectar y un bloqueo
compartido sobre la tabla que contiene las filas. El bloqueo exclusivo impide
que otra sesión interfiera con la fila, y el bloqueo compartido previene que
otra sesión de cambiar la definición de la tabla con una declaración DDL. Estos
bloqueos son solicitados automáticamente. Si una declaración DML no puede
adquirir el bloqueo exclusivo de la fila que necesita, entonces se colgara
hasta que los obtenga.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Para ejecutar comandos DDL requiere un bloqueo
exclusivo sobre el objeto concerniente. Este no puede ser obtenido hasta que
todas las transacciones DML contra la tabla hayan finalizado. Liberando de esta
manera tanto bloqueo exclusivo y bloqueo compartido. El bloqueo exclusivo
requerido por cualquier declaración DDL es solicitado automáticamente, pero si
no puede ser obtenido – por lo general, debido a que otra sesión ya tiene el
bloqueo compartido concedido por DML – entonces la declaración terminara con un
error inmediatamente.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">El
mecanismo de Encolamiento (Enqueue)<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Solicitudes para bloqueos son encoladas. Si
una sesión solicita un Bloqueo y no puede obtenerlo porque otra sesión ya tiene
la fila o objeto bloqueado, la sesión esperara. Puede ser que varias sesiones
esperen para acceder a la misma fila o objeto – en ese caso, Oracle no perderá
de vista el orden en que las sesiones solicitaron el bloqueo. Cuando la sesión
con el bloqueo libera la siguiente sesión será concedida y así sucesivamente.
Esto es conocido como el mecanismo de <b>enqueue.<o:p></o:p></b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Si usted no quiere una sesión que haga cola,
si no puede obtener un bloqueo, la única forma para evitar esto es el uso de
WAIT o NOWAIT del comando SELECT…FOR UPDATE. Un SELECT normal siempre tendrá
éxito, porque SELECT no requiere bloqueo – pero una declaración DML se
bloqueara. El comando SELECT…FOR UPDATE seleccionara filas y bloquea en modo exclusivo.
Si cualquiera de las filas están
bloqueadas ya, la declaración SELECT…FOR UPDATE será encolada y la sesión se
colgara hasta que el bloqueo sea liberado, al igual que una declaración DML. Para
evitar que la sesión se cuelgue, utilizar
SELECT…FOR UPDATE NOWAIT o SELECT…FOR UPDATE WAIT <n>, donde
<n> es el numero de segundos. Teniendo obtenido los bloqueos con
cualquiera de las opciones de SELECT…FOR UPDATE, usted puede entonces emitir
comandos DML sin posibilidad de colgar la sesión.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En el
Trabajo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Es posible agregar las palabras SKIP LOCKED a
un SELECT FOR UPDATE, que regresara y bloqueara solo las filas que no son
trabadas por otra sesión. Este comando existía con versiones anteriores, pero
solo soportado desde la versión 11g.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Contención
de Bloqueos<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Cuando una sesión solicita un bloqueo sobre
una fila o un objeto y no puede obtenerlo porque otra sesión tiene un bloqueo
exclusivo sobre la fila u objeto, se colgara. Esta es la contención de Bloqueo,
y puede causar que el rendimiento de la base de datos se deteriore
terriblemente como todas las sesiones de la cola están a la espera de los
bloqueos. Alguna contención de bloqueo puede ser inevitable, como resultado de
la actividad normal: la naturaleza de la aplicación puede ser que diferentes usuarios
requieran acceder a la misma información. Pero en muchos casos, la contención
de bloqueos es causada por diseño de programas y sistemas.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">La base de datos Oracle proporciona utilidades
para detectar contención de bloqueos, y también es posible resolver el problema
en una emergencia. Un caso especial de contención de bloqueo es el deadlock
(punto muerto), que siempre se resuelve automáticamente por la misma base de
datos.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En el
Trabajo<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">La contención de Bloqueo es una razón común
para una aplicación que funciona bien bajo pruebas de rutina para detener la
producción cuando se va y el número de sesiones concurrente aumenta, esto no es
culpa del DBA pero estar preparados para detectar tales problemas.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Las causas
de la contención de bloqueo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Puede ser que la naturaleza del negocio es tal
que los usuarios requieren acceso de escritura a las mismas filas, al mismo
tiempo. Si esto es factor limitante en el rendimiento del sistema, la única
solución es una reingeniería de procesos, para desarrollar un modelo más
eficiente. Pero aunque algunos bloqueos es una parte necesaria del
procesamiento de datos del negocio. Hay algunas fallas en el diseño de
aplicaciones que puede agravar el problema.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Transacciones de larga duración causaran esto
problemas. Un caso obvio es donde un usuario actualiza una fila y luego no
confirma el cambio. Tal vez ni siquiera se va a almorzar, deja la transacción
sin terminar. No se puede evitar que esto ocurra si los usuarios tienen acceso
a la base de datos con las herramientas tales como SQL*PLUS, pero nunca debe
ocurrir con un software bien escrito. La aplicación debe tener cuidado que un
bloqueo solo se impone antes que se produzca una actualización y liberar
inmediatamente.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Mal escritos los procesos batch pueden también
causar problemas, si están codificados como transacciones larga. Consideremos
el caso de un libro de contabilidad: es una imposibilidad lógica en términos de
contabilidad para el libro que en parte en un periodo y en parte de otro, para
la renovación de fin de mes para el siguiente periodo es una transacciones de
negocio. Esta transacción puede involucrar millones de actualizaciones de filas de miles de tablas, y tomar horas
para completarse. Si la rutina se codifica como una transacción con un commit
en el fin, millones de registros serán bloqueados por horas – pero en términos
contables esto es lo que debería suceder. Un buen diseño serie evitar el
problema mediante la actualización de filas en grupos, con commit regulares –
pero los programadores también tendrán que hacerse cargo de simular lectura
consistente a través de las transacciones y manejar la situación donde el
proceso falle y partir de allí. Si se trata de una transacción, esto no sería
un problema: la base de datos realizara un rollback. Si se trata de muchas
transacciones pequeñas, tendrá que manejar un libro mayor que es la mitad de un
periodo u la mitad de otro. Estas consideraciones no deben ser un problema los
programadores deben tener en cuenta que las transacciones de largo impacto en
la usabilidad del sistema y el diseño de sus sistemas en consecuencia.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Productos de terceros procesos usuario pueden
establecer un nivel de bloqueo alto. Por ejemplo, hay algunas aplicaciones de
desarrollo que siempre hacen SELECT…FOR UPDATE para evitar la necesidad de
volver a consultar los datos y verificar los cambios. Algunos otros productos
no pueden hacer bloqueo a nivel de fila: si un usuario desea actualizar una
fila, la herramienta bloquea un grupo de filas – tal vez decenas e incluso
centenas. Si su aplicación software es
escrita con herramientas tales como estas, la base de datos Oracle, simplemente
hará lo que le diga que hacer: que impondrá numerosos bloqueos que son
innecesarios en términos de negocio. Si usted sospecha que el software es la
aplicación más seguros de lo necesario, investigar si tiene opciones de
configuración para cambiar este comportamiento.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Por último asegurarse de que los programadores
son conscientes de las capacidades de la base de datos. Un problema común es
repetir lecturas. Considera este ejemplo:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">SQL> select * from regions;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">REGION_ID
REGION_NAME<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">----------
-------------------------<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">1
Europe<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">2
Americas<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">3
Asia<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">4
Middle East and Africa<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">SQL>
select count(*) from regions;<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">COUNT(*)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">----------<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">5<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Como puede ser posible? La primera consulta
(el reporte detallado) muestra cuatro filas, entonces las segunda consulta (el
resumen) muestra cinco. El problema es que durante la ejecución de la primera
consulta, otra sesión inserta y confirma la quinta fila. Una manera de salir de
esto sería bloquear las tablas durante la ejecución de informes, lo que
causaría colgar otras sesiones. Una forma más sofisticada seria utilizar la
declaración SET TRANSACTION READ ONLY. Esto garantiza (sin imponer bloqueos)
que la sesión no vea ningún DML sobre cualquier
tabla, confirmadas o no, hasta que se termina la transacción de sólo lectura
con un COMMIT o ROLLBACK. El mecanismo se basa en el uso de segmentos de
deshacer.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Detectando
y Resolviendo Contención de Bloqueo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Hay vistas que le dirán que está pasando con
los Bloqueos en la Base de Datos, pero en este caso donde incluso los
administradores de Bases de Datos a menudo prefieren utilizar las herramientas
gráficas. Para alcanzar administración de Bloqueos con Database Control, tome
la ficha Performance desde la pagina principal de la Base de Datos, luego el
Link Bloqueos de Instancia de la sección Monitoring. La figura 10-5 muestra la
ventana Database Locks, con Blocking Locks Seleccionado. Puede haber cualquier número
de bloqueos dentro de la Base de Datos, pero generalmente solo los bloqueos que
están causando que las sesiones se cuelguen son de interés. Estos son conocidos
como Blocking Locks.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En la figura 10-5, hay dos problemas. La
sesión numero 116, logueado como usuario SCOTT, se mantiene un bloqueo
exclusivo sobre uno o más filas de la tabla HR.EMPLOYEES. Esta sesión no está
colgada – está operando normalmente. Pero la sesión numero 129, logueada como
usuario MPHO está bloqueada. Está esperando por un bloqueo Exclusivo sobre una
o más filas bloqueadas por la sesión 116. La sesión está colgada en este
momento y continuara colgada hasta que la sesión 116 libere el bloqueo
terminando la transacción con un COMMIT o un ROLLBACK. El segundo problema es
peor. JON está bloqueando dos sesiones, la de ISAAC y ROOP.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">La contención de Bloqueo es una consecuencia
natural de muchos usuarios accediendo la misma información concurrentemente. El
problema puede ser exacerbado por un software mal diseñado, pero en principio
la contención de bloqueo es parte normal de la actividad de la base de datos. Por
lo tanto no es posible para el DBA resolverlo completamente – solo puede
identificar que es un problema, y sugerir a diseñadores de sistemas y
aplicaciones sobre la contención del bloqueo cuando diseñan.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Si los bloqueos se están convirtiendo en un
problema, como en la figura 10-5. Deben ser investigados. Database Control
proporciona la información necesaria. Haga doble clic en la columna “SQL ID” le
permitirá ver qué declaración está siendo ejecutada y es la que está causando
la contención de Bloqueo. En la figura,
SCOTT y MPHO ambos han ejecutado una declaración. JON, ISAAC y ROOP han
ejecutado otra. EL ROWID puede ser utilizado para buscar la fila exacta por la
cual las sesiones están en disputa. No se puede profundizar en la fila desde
esta ventana, pero el ROWID puede ser utilizado en una declaración SELECT para
recuperar la fila en otra sesión. Cuando el código y las filas que están
causando la contención son conocidos, una solución puede ser discutida con los
diseñadores de sistemas y desarrolladores.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En una emergencia, sin embargo, es posible
para el DBA para resolver el problema, terminar la sesión o sesiones que están
colgadas también por el bloqueo.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Cuando una sesión es terminada forzosamente,
cualquier bloqueo que posee serán liberados y la transacción activa será Roll
Back. Las sesiones bloqueadas se liberan y se puede continuar. Para terminar
una sesión, use el Database Control o el comando ALTER SYSTEM KILL SESSION. En
el ejemplo anterior, si usted decidió que la sesión SCOTT es la que mantiene el
bloqueo durante un periodo de tiempo absurdo. Debe seleccionar el botón de
radio para la sesión y clic el botón KILL SESSION. La transacción de HR serán
Roll Back y la sesión de MPHO entonces será capaz de tomar los bloqueos
requeridos y continuar trabajando. En caso del segundo problema en la figura,
matando la sesión de JOB libera a ISAAC que luego sería bloqueado por ROOP.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Dentro del
Examen.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Gestionando
Datos y Concurrencia.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En términos de los comandos mencionados en
este capítulo, hay una coincidencia enorme con el SQL y el programa de PL/SQL. Donde
el objeto es diferente es que este capitulo da detalles de cómo los comandos se
ejecutan: que sucede en disco, en disco y en el diccionario de datos cuando
varias sentencias DML y DDL se ejecutan. <o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Es vital tener una clara visión de los pasos a
seguir involucrados en la ejecución de sentencias SQL. La sentencia debe ser
primero generada por el proceso usuario. Luego enviada al proceso servidor. El proceso
servidor debe buscar la sentencia en la
Library Cache de la Shared Pool u analizarlas. Para ejecutar la sentencia, debe haber entrada y salida de Data Blocks. Si no
están en el Database Buffer Cache, el proceso servidor debe leer en la memoria
cache de los Datafiles. Si se trata de una sentencia SELECT, puede ser procesada en la PGA de la sesión. Si
es una sentencia DML, Change Vectors serán aplicados a los Block, pero primero
los Change Vectors serán escritos al Log Buffer, desde el cual son escritos a
los Onlne Redo Log Files en tiempo casi real (y es tiempo real para un commit).
La etapa final de la ejecución es regresar los resultados de la declaración de
nuevo al proceso usuario. <o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En muchos casos, las sentencias SQL serán
embebidas en bloques PL/SQL, estos bloques pueden estar almacenados o generados
en el lado del cliente (PL/SQL anónimo) o almacenados dentro de tablas del
diccionario de datos(PL/SQL almacenado).<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">El acceso a datos concurrentemente es gestionado a través del
mecanismo enqueue. Este es un medio por el cual sesiones bloquean filas que
serán afectadas por sentencias DML. Sesiones solicitan bloqueos sobre las
mismas filas en estas peticiones, colgándolas hasta que puedan obtener el
bloqueo. El mecanismo enqueue asegura que bloqueos son pasados en orden en que
fueron solicitados.<b><o:p></o:p></b></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">DeadLocks.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Es posible construir una posición donde dos
sesiones se bloquean en tal manera que ambas se cuelgen, cada una esperando a
la otra a liberar el bloqueo. Esto es un deadlock. Deadlock no son problema del
DBA. Son causandos por mal diseño de programas y resueltos automáticamente por
la Base de datos. Información relativa a deadlocks es escrita a los Alert Logs,
con detalle completo en un Trace File-parte de su monitoreo diario se recoge la
ocurrencia de los deadlocks e informar a sus desarrolladores que está
sucediendo.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Si un deadlock ocurren, ambas sesiones se
colgaran, pero solo por un breve momento. Una de las sesiones detectara el
Deadlocks en segundos, y hará un roll back a la sentencia que está causando el
problema. Esto liberara la otra sesión, regresando el mensaje “ORA-00060
Deadlock detected”. Este mensaje será atrapado por los programadores en sus
excepciones, que deben tomar las medidas adecuadas. Hay que destacar que
deadlocks son un fallo en el diseño del programa. Se producen debido a que el
código intenta hacer algo que es lógicamente imposible. Códigos bien escrito
siempre solicitan bloqueos en una secuencia que no puede causar bloqueos que se
produzcan, o pondrá a prueba si los bloqueos incompatibles ya existía antes de
que lo soliciten.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Examen.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Usted no puede hacer nada con deadlocks que se
reporten, serán resueltos automáticamente por la Base de Datos.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Ejercicio
10-3.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Detectar y
Resolver Contención de Bloqueo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">En este
ejercicio, usted primero utiliza SQLPLUS para causar un problema y
detectar y resolver con el Database Control.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">1.Utilizando SQL*PLUS conéctese a su base de
datos en dos sesiones como usuario SYSTEM.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">2.En la primera sesión, bloque todas las filas
en la tabla INTEGERS, que fue creada en el ejecicio 10-1.</span><br />
<span style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> select * from integers for update;</span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">3.En su segunda sesión, intente actualizar una
fila. La sesión de colgara.</span><br />
<div style="text-indent: -24px;">
<span style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: x-small; text-indent: 18pt;"> update
integers set c2=’odder’ where c1=1;</span></div>
</div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">4.Conéctese a su Database Control como usuario
SYSTEM.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">5.Navegue a la ventana Instance Locks, por medio
de la pestaña Perfomance desde la pagina principal y luego Database Locks en la
sesión Monitoring.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">6.Observe que la segunda sesión de SYSTEM
muestra que está en espera por un EXCLUSIVE Lock. Seleccione</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">el radio button
para la primer Blocking Session y dar clic en Kill Session.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">7.En la ventana de confirmación, clic en mostrar
SQL. Mostrara un comando como este:</span><br />
<div style="text-indent: -24px;">
<span style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: x-small; text-indent: 18pt;"> ALTER
SYSTEM KILL SESSION '120,1318' IMMEDIATE</span></div>
</div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">8.Click en regresar y Yes para ejecutar el
commando KILL SESSION.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">9.Regresar a su sesión SQL*PLUS, encontrara que
la segunda sesión está trabajando, pero la primera sesión no</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">puede ejecutar
comandos.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">10.Ordene el entorno:</span><br />
<span style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> Drop table integers;</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Resumen de
Certificación.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Los comandos DML cambian datos. A medida que
se escriben data blocks en el database buffer cache, los change vectors
aplicados son escritos el Redo Log. Eventualmente, el DBWn escribe los buffers
cambiados a Disco. Sobreescribiendo la versión previa del Block, pero esto no
sucede en tiempo real. Por el contrario, los change vectors van a disco casi
inmediatamente. El método de procesamiento de COMMIT asegura que los datos
nunca se perderán, mediante la escritura de los change vectors en tiempo real
cuando un comando COMMIT es emitido. Un ROLLBACK es implementad mediante la
construcción de otra sentencia que revierta los efecos de todo el trabajo hecho
por la transacción. Los principios de aotmicidad, consistencia y aislamiento
son obligatorios el uso de segmentos Undo, que almacenan datos necesarios para
construir sentencias para reversar cambios. Cambios a los Segmentos Undo son
protegidos por el mecanismo Redo.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Bloques PL/SQL pueden ser enviados a
ejecución a la instancia como Bloques
anónimos enviados desde procesos usuarios o recuperados desde block almacenados
en el Diccionario de Daros. Estos bloques usualmente consisten de código
procedureal con SQL embebido.<o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Bloqueo de registro es completamente
automatico. El mecanismo por defecto asegura
el más alto nivel de
concurrencia: bloqueo a nivel de fila y no bloqueo para querys.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Dos
minutos.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Gestionando Datos utilizando DML.</b><o:p></o:p></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Todos los comandos DML generan Undo y Redo.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Redo protege todos los cambios a segmentos –
Segmentos Undo, así como segmentos de Datos.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Procesos Servidor leen desde Data Files; DBWn escribe a Data Files.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Identificando y Administrando objetos PL/SQL.</b><o:p></o:p></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
PL/SQL anónimo es almacenado en el Cliente,
PL/SQL almacenado en el Diccionario de Datos.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Procedimientos y funciones pueden ser
empaquetados, triggers no pueden ser empaquetados.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Código PL/SQL puede llamar código SQL.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>Monitorear y Resolver Conflictos de Bloqueo.</b><o:p></o:p></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
El nivel default de bloqueo es a nivel de fila.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Bloqueos son requeridos para todos los
comandos DML y son opcionales para SELECT.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Una declaración DML requiere bloqueo
compartido sobre el objeto involucrado y bloqueo exclusivo sobre la fila
involucrada.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Una DDL requiere bloqueo un bloqueo exclusivo sobre
el objeto afectado.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">·
Deadlocks son resueltos automáticamente.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-mj7YxYVY8_w/T_T_yx5Ml-I/AAAAAAAAAik/raNVNjNrb2Y/s1600/img1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="http://1.bp.blogspot.com/-mj7YxYVY8_w/T_T_yx5Ml-I/AAAAAAAAAik/raNVNjNrb2Y/s400/img1.jpg" width="400" /></a></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<br /></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com1tag:blogger.com,1999:blog-4112056264242943706.post-88098417596512063372012-07-04T19:39:00.002-07:002017-04-06T21:09:44.803-07:0010.2. IDENTIFICANDO Y ADMINISTRANDO OBJETOS PL/SQL.<b style="background-color: white; text-align: justify;"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">IDENTIFICANDO
Y ADMINISTRANDO OBJETOS PL/SQL.</span></b><br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">PL/SQL es un lenguaje de programación
desarrollado específicamente para la Base de Datos Oracle. Extiende el lenguaje SQL para proporcionar
estructuras procedimentales y características para generar interfaces de
usuario. Teóricamente un administrador de base de datos puede no necesitar ser
un experto en PL/SQL – el trabajo de programación será hecho por los
desarrolladores. Pero en la práctica, el dba conoce más PL/SQL. Por otra parte,
en la mayoría de las instalaciones, el dba se espera que ayude a los programadores
a escribir código cuando sea necesario crear objetos PL/SQL.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">SQL y
Lenguajes procedimentales.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">La base de datos oracle, como todas las bases
de datos relacionales compatibles con ISO, soporta el uso de SQL, SQl. Es un
lenguaje diseñado para recuperar y manipular datos en entornos
cliente-servidor. Es muy eficiente en
esto, pero hay muchas ocasiones cuando programadores desean manipular filas de
uno en uno, en lugar de grupos. SQL por si solo no puede manejar esto. Además,
SQL no tiene capacidad para diseño de interfaces de usuario. Por el contrario,
lenguajes procedimentales pueden manipular filas individuales. Ellos tienen
comandos que permiten navegación de uno en uno, y pueden incluir control del
flujo.<o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Para combinar las ventahas de SQL con
estructuras de control de un lenguaje procedimental, programadores necesitan
utilizar un lenguaje con ambos elementos. El enfoque universal aceptada es la
de insertar comandos SQL en código procedimental. Hay dos métodos para hacer
esto. El cliente-servidor es ejecutar el código del procedimiento en una
maquina cliente (cualquier terminal cliente o aplicación servidor) y enviar los
comandos sql generados al servidor de bases de datos ene ejecución. Una alternativa
es ejecutar el código procedimental, así como el SQL. Dentro de la base de
datos. De alguna manera, el segundo enfoque es más eficiente: no hay sobrecarga
de la red, y todo el código se almacena y gestiona centralmente. Pero esto
significa que el lenguaje es propiedad de: ejecutara dentro de la base de datos
que está diseñado para esto y en ninguna otra. Un segundo problema es que toda
la sobrecarga es concentrada en la base de datos. <o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">PL/SQL es ·GL propiedad de Oracle que se
ejecuta dentro de la Base de Datos. Usted puede utilizarlo para recuperar y
manipular datos con SQL, mientras utiliza construcciones procedimentales tales
como IF THEN ELSE o FOR o WHILE. El código PL/SQL puede ser almacenado en una
maquina cliente y enviado al servidor para su ejecución, o puede ser almacenado
dentro de la base de datos como un block
de código.<o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Desde la versión 8i de la Base de Datos
Oracle, es también posible utilizar java dentro de la Base de Datos. Como
PL/SQL, java puede ser utilizado para una mezcla de código procedimental con
declaraciones SQL. Dado que java puede ejecutarse en su máquina cliente
(típicamente como un servidor de aplicaciones) o dentro de la base de datos, te
da la opción de distribuir la carga de procesamiento –a costa de mayor tráfico
en la red. Y a diferencia de PL/SQL, es un estándar de la industria no
propietario: si la aplicación está escrita en Java, debe ser portable a
cualquier base de datos compatible. Pero
java es mucho menor nivel de lenguaje, con un ciclo de desarrollo de mucho más
tiempo.<o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">La elección de lenguaje depende de muchos
factores, pero PL/SQL debe considerarse
en el entorno Oracle. Es un lenguaje rápido y fácil para trabajar, todo DBA
debería estar familiarizado, aun que sea para ayudar a los programadores.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">Examen.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">PL/SQL siempre se ejecuta dentro de la Base de
Datos donde está almacenado. Java puede ejecutarse dentro de la Base de Datos o
sobre una maquina de usuario.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">PL/SQL
Almacenado o Anonimo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">PL/SQL se ejecuta dentro de la Base de Datos, pero
se puede almacenar en el cliente o en el servidor. El código PL/SQL puede
también ser ingresado interactivamente desde un prompt de SQL*PLUS. PL/SQL
almacenado es cargado en la Base de Datos y almacenado dentro del diccionario
de datos como un objeto llamado PL/SQL. Cuando está guardado en la Base de
Datos. Este compilado: el proceso de compilación comprueba errores sintácticos
y también recoge los errores relacionado a los objetos de datos las direcciones de código. Esto ahorra tiempo
cuando el código se ejecuta realmente, y significa que programadores deben
recoger los errores en tiempo de compilación, antes que los usuarios lo
utilicen. Código almacenado remotamente o ad hoc código emitido en el prompt de
SQL*PLUS, es PL/SQL anónimo, es compilado dinámicamente; este impacta sobre el
rendimiento, y también platea la posibilidad
que errores inesperados ocurran.<o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">La figura 10-2 muestra un ejemplo de la
ejecución de un Block de PL/SQL anónimo y de la creación y ejecución de un
procedimiento almacenado.<o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">El block anónimo en la figura 10-2 crea una
variable llamada INCREASE con la declaración DECLARE y la establece a 10. Entonces el código procedimental (dentro de
las declaraciones BEGIN…END) utiliza la variable dentro de una declaración SQL
que actualiza una columna de una tabla.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-tW83HjnakEk/T_UASgU3s-I/AAAAAAAAAis/1BiN_eKDvsQ/s1600/img2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="165" src="https://4.bp.blogspot.com/-tW83HjnakEk/T_UASgU3s-I/AAAAAAAAAis/1BiN_eKDvsQ/s400/img2.jpg" width="400" /></a></div>
<br />
<div style="text-align: justify;">
<br /></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<div style="text-align: left;">
<span style="background-color: white; font-family: "verdana" , sans-serif; font-size: x-small; text-align: justify;">El segundo ejemplo en la figura crea un
procedimiento llamado INC_SAL, almacenado dentro del diccionario de datos.
Tomara un argumento numérico llamado INCREASE y utilizara este en una
declaración SQL UPDATE. Entonces el procedimiento
es invocado con el comando EXECUTE, pasando un valor para el argumento.</span></div>
<div style="text-align: left;">
<span style="background-color: white; font-family: "verdana" , sans-serif; font-size: x-small; text-align: justify;"><br /></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Este ejemplo es muy simple, pero debería
ilustrar como PL/SQL anónimo se ejecuta
una vez y por lo tanto debe ser compilado en tiempo de ejecución, mientras PL/SQL almacenado puede ser compilado
por adelantado y luego se ejecuta muchas veces.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">En el
trabajo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">PL/SQL anónimo es menos eficiente que PL/SQL
almacenado y también causa problemas con las gestión de código fuente, como el
código puede ser distribuido a través de muchas maquinas.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">OBJETOS
PL/SQL<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Existen seis tipos de objetos PL/SQL.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">·
Procedimientos – Procedure.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">·
Funciones – Function.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">·
Paquetes – Package.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">·
Cuerpo de paquetes – Package Body.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">·
Disparadores – Trigger.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">·
Cuerpos – Type Body.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Todos estos son objetos de esquema almacenados
dentro del Diccionario de Datos. Procedimientos y funciones hacen cosas.
Paquetes son colecciones de procedimientos y funciones, agrupados para la
gestión. Para crear estos objetos PL/SQL usted puede utilizar Enterprise
Manager Database Control, SQL*PLUS, SQL Developer o productos de terceros. Triggger son una categoría de objetos que no
pueden ser empaquetados: ellos están asociados con tablas y corren cada vez que
una sentencia DML es ejecutada contra la tabla. Los otros tipos de objetos no
se cubren para estar certificación.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">En el
Trabajo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">SQL*PLUS y Database Control son solo adecuados
para PL/SQL pequeños. Para trabajo real sus programadores necesitaran un IDE
apropiado que asista con comprobación de sintaxis, debugging y gestión de
código fuente.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">Procedimiento
y Funciones<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Un Procedimiento es un block de código que
ejecuta alguna acción. Puede opcionalmente ser definido con un número de
argumentos. Estos argumentos son remplazados con los parámetros actuales dado
cuando el procedimiento es invocado. Los argumentos puede ser IN, significa que
son utilizados para pasar datos al procedimiento, o argumentos OUT significa
que son modificados por el procedimiento y después de la ejecución los nuevos
valores son pasados fuera del procedimiento. Los argumentos pueden ser IN-OUT, donde
hace las dos cosas antes mencionadas (where the one variable serves both purposes-donde la variable un tanto a
fines de). Dentro de un procedimiento, usted puede definir cualquier número
de variables que, a diferencia de los argumentos, son privados para el
procedimiento. Para ejecutar un procedimiento, llamar desde dentro de un block
de PL/SQL o utilizar el comando interactivo EXECUTE.<o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Una función es similar conceptualmente a un procedimiento,
pero no tiene argumentos OUT y no puede ser invocado con EXECUTE. Regresa un
solo valor, con la declaración RETURN. <o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Cualquier cosas que una función puede hacer,
un procedimiento puede también. Funciones son generalmente utilizadas para
operaciones relativamente simples: pequeños bloques de código que serán
utilizado muchas veces. Procedimientos son más comúnmente utilizados para
dividir código en modulos y pueden mucho y procesos complejos.<o:p></o:p></span><br />
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">La figura 10-3 muestra un ejemplo de la
creación e invocación de una función.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">La primera línea es una instrucción para crear
la función, o si ya existe para sobrescribirla. La función toma un argumento
numérico y retornara un valor varchar2. Dentro el BEGIN…END es el código
procedimental. Que incluye construcciones de flujo de control
IF…THEN…ELSE…END…IF.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-0wWhUr8noSY/T_UAtrH335I/AAAAAAAAAi0/_yS2O97DT7o/s1600/img3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="https://2.bp.blogspot.com/-0wWhUr8noSY/T_UAtrH335I/AAAAAAAAAi0/_yS2O97DT7o/s400/img3.jpg" width="400" /></a></div>
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b style="background-color: white;"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">En el trabajo.</span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Si
usted utiliza CREATE, en lugar que CREATE o REPLACE, usted tendrá que eliminar
el objeto primero si ya existe.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="background-color: white; font-family: "verdana" , sans-serif; font-size: x-small;">La
figura 10-4 muestra un ejemplo de creación e invocación de un procedimiento que
utiliza una estructura de iteración, que llama a una función de usuario.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-7kLo7m9xDBY/T_UA-NO2RAI/AAAAAAAAAi8/k2hmcqkydSI/s1600/img4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="183" src="https://1.bp.blogspot.com/-7kLo7m9xDBY/T_UA-NO2RAI/AAAAAAAAAi8/k2hmcqkydSI/s400/img4.jpg" width="400" /></a></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">En el trabajo<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Algunas personas se ponen molestas por la
terminología. Para resumir, un argumento es la variable definida cuando usted
crea una función o procedimiento; un
parámetro es el valor pasado al argumento cuando usted está ejecutando la
función o procedimiento.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">Paquetes<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Para agrupar procedimiento y funciones
relacionados en conjunto, sus programadores crean paquetes. Un paquete consiste
de dos objetos: una especificación y un cuerpo. Un Package specification lista
las funciones y procedimientos en el paquete, con sus llamadas
especificaciones: los argumentos y sus tipos de datos. Y puede también definir
variables y constantes acesible a todos los procedimientos y funciones en el
paquete. El Package Body contiene el código PL/SQL que implementa el paquete:
el código que crea los procedimientos y funciones.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Para crear una package spacification, utilice
el comando CREATE PACKAGE, por ejemplo:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">SQL>
create or replace package numbers<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">2
as<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">3
function odd_even(v1 number) return varchar2;<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">4
procedure ins_ints(v1 in number);<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">5 end numbers;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">6 /<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Package created.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Entonces para crear el Package Body, utilice
la declaración CREATE O REPLACE PACKAGE BODY para crear los procedimientos y
funciones individuales.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Hay cientos de paquetes proveídos de forma estándar
con la Base de Datos Oracle. Estos paquetes suministrados son, en su mayor
parte, creados cuando usted crea la Base de Datos. Algunos de ellos son para el
uso de los administradores de bases de datos (tales como el
DBMS_WORKLOAD_REPOSITORY package, que permite gestionar el Automatic Workload
Repository) otro para desarrolladores (tal como DBMS_OUTPUT package que permite
escribir a una sesión de proceso usuario). Para invocar un packaged procedure,
usted debe prefijar el nombre del procedimiento con el nombre del paquete:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;"><span lang="EN-US">SQL> exec
numbers.odd_even(5);</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Esto ejecutara el procedimiento ODD_EVEN en el
paquete NUMBERS. El paquete debe existir en el esquema al que el usuario es conectado. O sería
necesario anteponer el nombre del paquete con el nombre del esquema. El usuario
también tendría que tener el privilegio EXECUTE sobre el paquete.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">Database
Triggers<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Database Triggers son una categoría especial
de objetos PL/SQL, ellos no pueden ser invocados manualmente. Un trigger se
ejecuta automáticamente, cuando una acción particular es llevada acado o una situación; este es el triggering event.
Existe un número de posibles triggering events, para muchos de ellos los
trigger pueden ser configurados para dispararse ya sea antes o después del
eventos. Es también posible tener tanto antes como después de la definición de triggers para el mismo
evento. El DML trigger, que se dispara cunado una fila es insertada,
actualizada o eliminada puede ser configurado para dispararse una vez para cada
fila afectada, o una vez por la ejecución de la declaración.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Todos los trigger tienen un factor en común:
su ejecución es completamente fuera del control del usuario que ha causado el
triggering event, no puede incluso conocer que el trigger se disparo. Esto hace
a trigger una herramienta para auditar acciones e implementar seguridad, <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-nMZCec1jOo4/T_UBOxLecrI/AAAAAAAAAjE/Cx9LT8oktjI/s1600/img5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://1.bp.blogspot.com/-nMZCec1jOo4/T_UBOxLecrI/AAAAAAAAAjE/Cx9LT8oktjI/s400/img5.jpg" width="400" /></a></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Tenga en cuenta que ho hay tal cosa como un
trigger sobre SELECT, aunque en el capítulo 14 vera como la auditoria de grano
fino puede ser utilizada para producir un efecto similar. Existen números usos
para los Triggers. Estos pueden incluir:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">· <b>Auditando
acciones de usuario</b>, un trigger puede capturar todos los detalles
de lo que se hizo y quien lo hizo y los escribe a una tabla de auditoría.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">· <b>Ejecutar
ediciones complejas</b>, una acción en una fila puede en términos de
negocio, requiere un número de acciones
asociadas sobre otras tabas. El trigger puede desarrollar estas
automáticamente.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">· <b>Seguridad</b>, un
trigger puede comprobar el tiempo, la dirección ip del usuario, el programa en
ejecución y cualquier otro factor que debe limitar que la sesión pueda hacer.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">· <b>Aplicación
de restricciones complejas, </b>una acción puede estar bien en términos de
restricciones sobre una tabla pero puede tener que ser validado contra el
contenido de varias tablas.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Considere un sistema HR. Antes que un empleado
es eliminado de la tabla de empleados. Es necesario transferir todo su
detalle de un número de tablas a tablas de archivado, esto
puede hacerse mendiante un trigger como sigue:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">create
or replace trigger archive_emp<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">before
delete on current_emps<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">for
each row<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">begin<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: "verdana" , sans-serif; font-size: x-small;">archive_emp(:old.employee_id);<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">end;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">cada vez que una sesión elimine una fila de la
tabla CURRENT_EMPS, antes que cada fila se elimine el procedimiento ARCHIVE_EMP
será ejecutado. Este procedimiento hara lo que sea necesario para archivar los
datos de un empleado. Esto ilustra un punto importante: en general
se considera una buena práctica para mantener activa pequeña, y para hacer la
mayor parte del trabajo con un procedimiento almacenado.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">Examen.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Es imposible ejecutar un trigger por cualquier
otro medio que un triggering event.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">EJERCICIO
10-2<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: "verdana" , sans-serif; font-size: x-small;">Crear
objetos PL/SQL.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">En este ejercicio utilizara el Database
Control para crear objetos PL/SQL y ejecutarlos con SQL*PLUS.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">1.Conectase a su base de datos como usuario
SYSTEM con SQL*PLUS.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">2.Crear una tabla para utilizar en este
ejercicio.</span><br />
<span style="background-color: white; font-family: "verdana" , sans-serif; font-size: x-small; text-indent: 18pt;">create
table integers(c1 number, c2 varchar2(5));</span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">3.Conectarse a su Base de Datos como usuario
SYSTEM con el Database Control.<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">4.Desde la pagina principal de la Base de datos,
tome la pestaña Schema luego el link Packages en la seccion de Programs. Click
Create.</span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">5.En la ventana Create Package, ingrese NUMBERS
como el nombre del paquete, y el código fuente para el paquete como se muestra
en la siguiente ilustración. Clic en OK para crear el paquete.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-9sxLOJbbSBw/T_UBsiu0BoI/AAAAAAAAAjM/hgHCwRWs16Q/s1600/img6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://2.bp.blogspot.com/-9sxLOJbbSBw/T_UBsiu0BoI/AAAAAAAAAjM/hgHCwRWs16Q/s400/img6.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<div style="text-align: left;">
<span style="background-color: white; font-family: "verdana" , sans-serif; font-size: x-small; text-align: justify; text-indent: -18pt;">6.Desde la pagina principal de la base de datos,
tome la pestaña Schema y luego Package Bodies en la sección de programas. Click
Create.</span></div>
</div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<div style="text-align: left;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">7.En la ventana Create Package Body, ingresar
NUMBERS como el nombre del paquete, y el código fuente para el package body
como en la siguiente ilustración. Clic OK para crear el Package Body.</span></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-YQCd04wQ35g/T_UCDr-r8HI/AAAAAAAAAjU/UxedC34hlY0/s1600/img7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="301" src="https://3.bp.blogspot.com/-YQCd04wQ35g/T_UCDr-r8HI/AAAAAAAAAjU/UxedC34hlY0/s400/img7.jpg" width="400" /></a></div>
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">8.
En su sesin de SQL*PLUS, describa el paquete,
ejecute el procedimiento y compruebe resultados, como en la ilustración:<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: center;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-aj9INPw0Oyg/T_UCSiNjxuI/AAAAAAAAAjc/Apy3k_m0A1Q/s1600/img8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="265" src="https://3.bp.blogspot.com/-aj9INPw0Oyg/T_UCSiNjxuI/AAAAAAAAAjc/Apy3k_m0A1Q/s400/img8.jpg" width="400" /></a></div>
<br />
<br /></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">9.
Poner en orden, eliminando el paquete (la
tabla será utilizada en el siguiente ejercicio):<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 18pt;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">drop package numbers;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "verdana" , sans-serif; font-size: x-small;">Tenga
en cuenta este DROP commit los insert de las filas.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-20035289348149866942012-07-04T19:38:00.001-07:002017-04-06T21:09:44.634-07:0010.1. TRANSACCIONES DE BASES DE DATOS<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>TRANSACCIONES EN BASES DE DATOS</b></span><br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small;">Los comandos DML cambian datos en tablas. También
va a cambiar datos en los índices, pero esto es automático y sucederá sin
conocimiento del programador. El paradigma de base de datos relacional define
la manera en que una o más declaraciones DML deben ser agrupadas en
transacciones. Este no es el lugar para entrar en detalles sobre el paradigma
de base de datos relacional. Existes números textos académicos sobre esto. Pero una rápida revisión de la teoría de la
transacción es necesaria antes de mirar la forma en que Oracle ha implementado
la gestión de transacciones y DML.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El mecanismo de Oracle para asegurar la
integridad de transacciones es la combinación de Segmentos Undo y los Redo Log
Files: este mecanismo es sin duda el mejor de cualquier base de datos y se
ajusta perfectamente con los estándares internaciones para procesamiento de
datos. Otros proveedores de bases de datos cumplen con los mismos estándares
con sus propios mecanismos, pero con diferentes niveles de eficiencia. En resumen, cualquier base de datos relacional
debe ser capaz de pasar la prueba ACID. Esta debe garantizar ATOMICIDAD,
CONSISTENCIA, AISLAMIENTO y DURABILIDAD.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">A es para
Atomicidad.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El principio del estado de atomicidad es que todas las partes de una transacción deben
ser completadas o ninguna de ellas. Por ejemplo, si los analistas de negocio
han dicho que cada vez que cambie el salario de un empleado, también debe ser
cambiado su grado, entonces la transacción atómica consiste de dos
actualizaciones. La base de datos debe garantizar que ambas pasan o ninguna. Si
solo una de las actualizaciones fue exitosa, usted tiene un empleado con un
salario que no era compatible con su grado, una corrupción de datos, en
términos de negocio. Si algo va mal antes que la transacción sea completada, la
base de datos misma debe garantizar que cualquier parte llevada a termino se
puede invertir; esto debe suceder automáticamente. Pero aunque una transacción
atómica suene pequeña podría ser muy enorme. Para poner otro ejemplo, es
lógicamente imposible en términos de contabilidad para el libro mayor de una
suite contable estar a la mitad en agosto y mitad de septiembre, la refinación
del fin de mes es por lo tanto en términos de negocio una transacción atómica,
que puede afectar millones de files en miles de tablas, y tomar horas para
completarse (o para hacer roll back si cualquier cosa va mal).<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El roll back de una transacción incompleta es
un proceso inverso y puede ser manual (como cuando emites el comando ROOLBACK),
pero este debe ser automatico e imparable en el caso de un error. Oracle
garantiza la atomicidad absoluta mediante el uso de Segmentos UNDO, esto es tratado en detalle en el capítulo 11.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">C es para
Consistencia.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El principio del estado de consistencia, que
los resultados de una consulta deben ser consistentes con el estado de la base
de datos en el momento que inicio la consulta. Imagine una simple consulta que
promedia los valores de una columna de una tabla. Si la tabla es grande, tomará
muchos minutos en pasar a través de la tabla. Si otro usuario está actualizando
la columna mientras la consulta esta en progreso, debería la consulta incluir
los nuevos o los viejos valores? ¿Debería incluir filas que fueron insertadas o
eliminadas después que la consulta fue iniciada? El principio de consistencia
exige que la Base de Datos asegure que los cambios a valores no sean vistos por
la consulta: que le dará un promedio de la columna como cuando fue iniciada la
consulta. No importa cuánto tiempo tome la consulta o que otra actividad está
ocurriendo sobre las tablas concernientes.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Mediante el uso de Segmentos Undo Oracle
garantiza que si una consulta tiene éxito, el resultado será consistente. Sin
embargo, si su segmento Undo esta incorrectamente configurado, la consulta
puede que no tenga éxito: ha y un famoso error Oracle, ORA-1555 “snapshot too
old” se genera. Este solía ser un problema muy difícil de corregir con las
versiones anteriores de la base de datos, pero desde la versión 9i en adelante
siempre debe ser capaz de evitarlo. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">I es para
Aislamiento<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El principio del estado de aislamiento, que
una transacción incompleta (que es sin confirmar - uncommitted) debe ser
invisible para el resto del mundo. Mientras la transacción este en progreso,
solo la sesión que está ejecutando la transacción está permitida a ver los
cambios. Todas las otras sesiones deben ver los datos sin cambios, no los
nuevos valores. La lógica detrás de esto es, primero, que la transacción
completa no puede ir a través (recuerde el principio de atomicidad) y por lo
tanto ningún otro usuario debería estar permitido ver los cambios que podrían revertirse.
Y segundo, durante el progreso de una transacción los datos son inconsistentes
(en términos de negocio): hay un corto tiempo cuando el empleado tiene el salario cambiado, pero no su grado. El
aislamiento de transacción requiere que la base de datos debe ocultar las
transacciones en curso de otros usuarios: se verá la versión preupdate de los
datos, hasta que se complete la transacción, cuando se podrán ver todos los
cambios como un conjunto consistente.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Oracle garantiza el aislamiento de transacciones
a través del uso de segmentos Undo.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">D es para
Durable<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El principio del estado de durabilidad, que
una vez que una transacción sea completada, debe ser imposible para la base de
datos perderla. Durante el tiempo que la transacción está en curso, el
principio de aislamiento requiere que nadie (a excepción de la sesión en
cuestión) pueda ver los cambios hechos hasta ese momento. Pero en el instante
que la transacción sea completada, debe ser comunicado a todo el mundo, y la
base de datos debe garantizar que el cambio nunca se perderá: en una base de
datos relacional no se permite que se pierdan los datos: oracle llena este
requisito a través del uso de archivos Log. Los Log Files pueden ser de dos formas: Online Redo Log
Files y Archive Redo Log Files. Estos son tratados en detalle en el capítulo
15, por ahora solo recuerde que es imposible que una base de datos configurada
apropiadamente pueda perder datos. Los datos pueden ser perdidos por errores de
usuarios. Inapropiados DML o eliminación de objetos. Pero por lo que respecta a Oracle y Pero por
lo que Oracle DBA y el se refiere, estos eventos son las transacciones como
cualquier otro: de acuerdo con el principio de la durabilidad, son absolutamente
irreversible.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">En el
Trabajo.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si una base de datos nunca pierde datos, la
primera reacción de la administración es a menudo contra el DBA. Todo el mundo
sabe que Oracle no pierde datos. Es por eso que la gente lo compra. Por lo
tanto debe ser error del administrador. Carreras ha sido rotas por estas
razones.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Ejecutando
declaraciones SQL.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El total del lenguaje SQL es solo una docena
de comandos. Los únicos que nos
preocupan aquí son:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">·SELECT<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">·INSERT<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">·UPDATE<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">·DELETE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Recuerde que el standard SQL1999(implementado
con Oracle Database release 9i) introdujo una poderoso comando MERGE, que
combina INSERT e UPDATE. El standard SQL2003 (introducido con Oracle Database
release 10g) MERGE fue mas alla, agregando capacidad DELETE. En cuanto a bases
de datos se refiere, un MERGE no nada más que una combinación de INSERT, UPDATE
y DELETE que pasan a ser ejecutadas con una sola pasada a través de los datos
en lugar de varias. No hay necesidad de considerar por separado aquí.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Ejecutando
una declaración SELECT.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El comando SELECT recupera datos. La ejecución
de una declaración SELECT es un proceso en etapas: El proceso servidor que
ejecuta la declaración primero comprueba si el bloque que contiene los datos
requeridos ya está en memoria, en el Database Buffer Cache. Si ya esta, la
ejecución puede proceder inmediatamente, si no está, el servidor debe
localizarlo en el disco, y copiarlo sobre el Database Buffer Cache.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Examen<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Siempre recuerde que el servidor Lee bloques
desde los Datafiles al Database Buffer Cache, DBwn escribe bloques desde EL
Database Buffer Cache a los Datafiles.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una vez que los bloques requeridos para la
consulta están en el Database Buffer Cache, cualquier futuro procesamiento
(tales como ordenamiento o agrupación) es llevado a cabo en la PGA de la
sesión. Cuando las ejecución es completada, el conjunto de resultados es
regresado al proceso usuario.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Como se relaciona esto con la prueba ACID
descrita? Para mantener la coherencia, si la consulta encuentra un Block que ha
sido cambiado desde el momento que la consulta inicio, el proceso servidor va
al Segmento Undo que protege el cambio, localiza la versión vieja del Dato, y
(para los efectos de la consulta) hace roll back el cambio. Así, cualquier
cambio iniciado después que la consulta comenzó no será visto. Un mecanismo
similar garantiza el aislamiento de la transacción, aunque esto es basado si el
cambio ha sido confirmado (committed), no solo sobre si los datos han sido
cambiados. Claramente, si los datos necesarios para hacert este roll back ya no están en los segmentos Undo, este mecanismo
no funcionara. Que es cuando se obtiene el error “snapshot too old”.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Figura 10-1 muestra una representación de la
forma de procesar una sentencia SELECT. En la figura, en el paso 1 es la
transmisión de la declaración SELECT del proceso usuario al proceso servidor. El
servidor buscará en el database buffer cache para averiguar si los bloques
necesario ya están en memoria, y si ya están, procede el paso 4. Si no están,
el paso 2 que es localizar los bloques en los datafiles, y el paso 3 es
copiarlos en el Database Buffer Cache. El Paso 4 transfiere los datos al
proceso servidor, donde puede haber un futuro procesamiento anterior, el paso 5
regresa los resultados de la consulta al
proceso usuario.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-7Ss4niTQJH4/T_UC6O-rNvI/AAAAAAAAAjk/u8j_vFU-pWA/s1600/img9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="http://4.bp.blogspot.com/-7Ss4niTQJH4/T_UC6O-rNvI/AAAAAAAAAjk/u8j_vFU-pWA/s400/img9.jpg" width="400" /></a></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Ejecutando una Declaración UPDATE.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para
cualquier operación DML, es necesario trabajar en ambos bloques Bloques de
Datos y Bloques Deshacer. Y también genera Redo: el A, C y I de la prueba ACID
requiere generación de UNDO, el D requiere generación de Redo.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El primer paso en la ejecución DML es la misma
como ejecutar un SELECT: los bloques requeridos debe estar en el Database
Buffer Cache, o copiados en el Database Buffer Cache desde los Datafiles. El
único cambio es que un bloque vacio (o experidado) de un Segmento Undo es
necesario también. Desde aquí las cosas son más complicadas.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Primero, deben bloquearse filas y llaves de
índices asociadas que van a ser afectadas por la operación. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Entonces el Redo es Generado: el proceso
servidor escribe al Log Buffer los change vectors que van a ser aplicados a los
bloques de datos. Esta generación de Redo es aplicada tantos cambios en el
bloque de la tabla y cambios en block Undo: si una columna de una fila se va a
actualizar, entonces el rowid y el nuevo valor de la columna son escritos al
Log Buffer (que es el cambio que será aplicado al Bloque de la tabla). Y
también el viejo valor (que es el cambio que será aplicado al Block Undo). Si
la columna es parte de un Index Key. Entonces el cambio que se aplicara en el
índice también se escribe al Log Buffer, junto con un cambio que se aplicara
aun Bloque Undo para proteger el cambio del índice.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="EN-US">Then the
redo is generated: the server process writes to the log buffer the change vectors
that are going to be applied to the data blocks. This generation of redo is
applied both to table block changes and to undo block changes: if a column of a
row is to be updated, then the rowid and the new value of the column are
written to the log buffer (which is the change that will be applied to the
table block), and also the old value (which is the change that will be applied
to the undo block). If the column is part of an index key, then the changes to
be applied to the index are also written to the log buffer, together with a
change to be applied to an undo block to protect the index change.</span><span lang="EN-US"> <o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Teniendo
el Redo generado, la actualización es llevada a cabo en el Database Buffer
Cache: el block de la tabla de datos es actualizado con la nueva versión del
cambio en la columna, y la vieja versión de la columna cambiada es escrito al
Block del Segmento Undo. Desde este punto hasta la actualización es confirmada
(committed), todas las consultas desde otras sesión que tratan la fila cambiada
serán dirigidas a los Datos Undo. Solo la sesión que está haciendo la
actualización vera la versión actual de la fila en el bloque de la tabla. El
mismo principio aplica para cualquier índice cambiado.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Como un
simple ejemplo, considera esta declaración:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="EN-US">Having
generated the redo, the update is carried out in the database buffer cache: the
block of table data is updated with the new version of the changed column, and
the old version of the changed column is written to the block of undo segment.
From this point until the update is committed, all queries from other sessions
addressing the changed row will be redirected to the undo data. Only the
session that is doing the update will see the actual current version of the row
in the table block. The same principle applies to any associated index changes.</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">Update emp
set sal=sal*1.1 where empno=7934;<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para
ejecutar esta declaración, el block de la tabla de datos que contiene la fila
para el numero de empleado 7934 (y posiblemente otras filas también, si las
filas son más pequeñas que el block), es copiado sobre el Database Buffer
Cache, y un Block y un Block de un Segmento Undo es también copiado sobre el
Cache. Entonces sus procesos servidor
escriben al Log Buffer la vieja versión del la columna SAL (Que es el cambio a
ser aplicado al Block Undo) y la nueva versión de la columna SAL (que es el
cambio a ser aplicado al block de la tabla de datos), por último, los mismos
bloques son actualizado en el Database Buffer Cache y recuerda que SQL es un lenguaje orientado a conjunto. Si
hay muchas filas en la tabla EMP con el mismo EMPNO, todos serian actualizadas
por una declaración. Pero debido a EMPNO será la clave principal, esto no va a
suceder.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Ejecutando declaraciones INSERT y DELETE.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Conceptualmente,
INSERT y DELETE son manejados de la misma forma como un UPDATE. El primer paso
es localizar el Block relevante en el Database Buffer Cache, o copiarlo si no está
allí.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La
Generación de Redo es exactamente la misma: Todos los change vectors a ser
aplicados a los datos y Undo Blocks son primero escritos al Log Buffer. Para un
insert, el Change Vector a ser aplicado al bloque de la tabla (y posiblemente
block index) son los bytes que componen la nueva fila (y posiblemente el nuevo
index key). El Vector a ser aplicado al Undo Block es el rowid de la nueva
fila. Para un DELETE, el change vector a ser escrito al Undo Block es la fila
entera.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una
diferencia crucial entre INSERT y DELETE es en la cantidad de Undo generado.
Cuando una fila es insertada, el único Undo generado es escribiendo el nuevo
ROWID al Undo Block. Esto es porque para un Roll Back de un INSERT, la única
información que Oracle requiere es el ROWID, por lo que esta declaración puede
ser construida, como sigue:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">delete from table_name where rowid=rowid_of_the_new_row ;<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Ejecutando esta declaración regresaría al
cambio original. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para un DELETE, toda la fila (que pueden
ser varios kilobytes) debe ser escrita a un Block Undo, de modo que la eliminación
puede revertirse Roll Back mediante la construcción de una declaración que
insertara la fila completa de nuevo a la tabla.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">INSERT genera una cantidad minima de Datos
Undo; DELETE genera mucho más.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Undo
no es lo contrario de Redo. Redo protege todos los cambios en los Bloques, no
importa si es un cambio a un block de un Segmento Tabla, un segmento Index o un
Segmento Undo, en cuanto a Redo se refiere, un Segmento Undo es solo otro
segmento y cualquier cambio debe ser
duradero.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">CONTROL DE TRANSACCIONES: COMMIT, ROLLBACK, SAVEPOINT.<o:p></o:p></span></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Oracle implementa el Paradigma de Base de
Datos relacional iniciando una transaccion implicitamente con la primera
declaracion DMLK ejecutada. La transacción continúa hasta una declaración
COMMIT o ROLLBACK. El comando SAVEPOINT no es parte de SQL standard y es
realmente solo una manera fácil para que los programadores regresen algunas
declaraciones, en orden inverso. No tiene que ser considerado separadamente. Ya
que no termina una transacción.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; text-align: justify;">
<tbody>
<tr>
<td colspan="2" style="border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 505.6pt;" valign="top" width="674"><div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Escenarios
y Soluciones<o:p></o:p></span></b></div>
</td>
</tr>
<tr>
<td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 252.8pt;" valign="top" width="337"><div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si se ejecuta una aplicación lenta y Control
de la base de datos muestra que el bloqueo es el problema, lo que podría
hacer para resolver el problema?<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 252.8pt;" valign="top" width="337"><div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En el corto plazo, puede intentar matar a
las sesiones. Pero eso no es una especie de solución real. La respuesta por
lo general se encuentran ya sea en una mala programación o diseño deficiente
del sistema. Los problemas de programación debe ser discutido con la que los
desarrolladores son<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">tomando más seguros de lo necesario, o no
ponerlos en libertad con la suficiente rapidez? Los problemas de diseño se
debe discutir con los analistas de negocio. Tal vez la estructura de la
transacción entera se podría mejorar.<o:p></o:p></span></div>
</td>
</tr>
<tr>
<td style="border-top: none; border: solid black 1.0pt; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 252.8pt;" valign="top" width="337"><div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si se ejecuta una aplicación lenta y los
administradores del sistema dicen que el sistema es de E / S de la
envolvente, lo que podría hacer para resolver el problema?<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid black 1.0pt; border-left: none; border-right: solid black 1.0pt; border-top: none; mso-border-alt: solid black .5pt; mso-border-bottom-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-right-themecolor: text1; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 252.8pt;" valign="top" width="337"><div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Disco no es un problema. Es sólo un
síntoma de un problema. La pregunta que debemos hacernos no es "¿cómo
puedo mejorar el disco I / O", sino "¿cómo puedo reducir la
necesidad de disco E / S?" Esto a menudo implica el ajuste de SQL y el
uso de memoria de ajuste. Puesta a punto / S de disco es el último recurso.<o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJECUTANDO
UN ROLL BACK</span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Recuerde que si algo sale mal, Roll Back de
transacciones en progreso es completamente automático y es realizado por
procesos background. Por ejemplo, si la sesión que inicio la transacción falla
(tal vez una pc corriedno un proceso usuario se reinicia o la red baja), el
PMON detectara que hay un problema con la sesión, y hará Roll Back de la
transacción. Si el servidor es reiniciado mientras la base de datos esta en
uso, entonces al iniciar SMON detectara el problema e iniciara un Roll Back de
todas las transacciones activas.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Roll Back manual requiere que el usuario
emita el comando ROLLBACK. Pero sin embargo el Roll Back es iniciado, el
mecanismo es idéntico: en el caso de un UPDATE, la versión preupdate
de la columna, como se almacena en el block del segmento Undo, esto es
utilizado para construir otro comando UPDATE que establece la columna de la
fila en el bloque de la tabla a su valor original. Para un Roll Back de un
INSERT, Oracle recupera el rowid de la fila insertada desde el Bloque Undo y lo
utiliza como la llave de una declaración DELETE sobre la tabla. Para hacer u
Roll Back de un DELETE, Oracle construye una declaración completa INSERT desde
los datos en el Block Undo. Por lo tanto. La implementación de Oracle del
comando Roll Back es el uso de Datos Undo para construir y ejecutar otra
declaración que reverse el efecto de la primera declaración. Entonces Oracle
emitirá un COMMIT que confirme ambas el Cambio Original y el cambio Roll back,
como una transacción.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">En el
trabajo<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Roll Back generara mas Redo por lo que
ejecuta, tal vez algo más que la declaración original.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si usted emite un comando DML y omite la
clausula WHERE, como este:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt 35.4pt; text-align: justify; text-indent: -35.4pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">delete from emp;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt 35.4pt; text-align: justify; text-indent: -35.4pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">y así elimina todos los varios millones de
files en la tabla cuando usted pretendía eliminar uno, puede revertir los
cambios. Durante el borrado o eliminación, su proceso servidor copiara las
filas a un segmento Undo borradas entonces de la tabla: ROLL BACK insertara de
nuevo a la tabla, y nadie sabrá que cometió el error. A menos, claro, que
escribió un COMMIT. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJECUTANDO
UN COMMIT<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El proceso COMMIT es donde mucha gente (e
incluso algunos experimentados DBAs) muestran una incompleta, inexacta o
incluso por completo, la comprensión de la arquitectura Oracle. Cuando usted
dice COMMIT, todo lo que sucede físicamente es que LGWR fluye el Log Buffer a
Disco, DBWn no hace absolutamente nada. Este es uno de las mayores importancias
de rendimiento de la Base de Datos Oracle.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para hacer una transacción durable, todo lo
que es necesario es que los cambios que se hicieron la transacción estén sobre
disco: no hay ninguna necesidad de que los datos actuales de la tabla para
estar en disco, en los datafiles. Si los cambios están sobre disco, en la forma
de multiplexar redo log files, entonces, en caso de daño a la base de datos la
transacción puede ser reinstanciada para restaurar los datafiles desde un
backup tomando antes del daño ocurrido y aplicar los cambios desde los logs.
Este proceso se cubre en detalle en capítulos posteriores, por ahora, simplemente no es el hecho que un commit
involucre nada más que fluir el Log buffer a disco y abanderar la transacción
como completa. Este es porque una transacción involucra millones de
actualizaciones en miles de archivos a través de minutos u horas se pueden
confirmar en una fracción de segundo. Porque LGWR escribe en tiempo casi real, prácticamente
todos los cambios de la transacción están en el disco ya. Cuando usted dice
COMMIT, LGWR actualmente escribe en tiempo real: la sesión se bloqueara hasta
que la escritura se complete. Este retraso será el tiempo que toma el ultimo
bit de redo desde el log buffer a disco, que tomara mili segundos. Su sesión es
entonces libre de seguir, y desde entonces todas las otras sesiones ya no serán
redirigidas a los bloques undo cuando la dirige el cambio de tabla, a menos el
principio de consistencia. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span lang="EN-US"><span style="font-family: Verdana, sans-serif; font-size: x-small;">To make a
transaction durable, all that is necessary is that the changes that make up the
transaction are on disk: there is no need whatsoever for the actual table data
to be on disk, in the datafiles. If the changes are on disk, in the form of
multiplexed redo log files, then in the event of damage to the database the
transaction can be reinstantiated by restoring the datafiles from a backup
taken before the damage occurred and applying the changes from the logs. This
process is covered in detail in later chapters—for now, just hang on to the
fact that a COMMIT involves nothing more than flushing the log buffer to disk,
and flagging the transaction as complete. This is why a transaction involving
millions of updates in thousands of files over many minutes or hours can be
committed in a fraction of a second. Because LGWR writes in very nearly real
time, virtually all the transaction’s changes are on disk already. When you say
COMMIT, LGWR actually does write in real time: your session will hang until the
write is complete. This delay will be the<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="EN-US">length of time it
takes to flush the last bit of redo from the log buffer to disk, which will take
milliseconds. Your session is then free to continue, and from then on all other
sessions will no longer be redirected to the undo blocks when they address the
changed table, unless the principle of consistency requires it.</span><span lang="EN-US"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Examen.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Que hace Database Write cuando usted dice
COMMIT? Absolutamente nada.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt 35.4pt; text-align: justify; text-indent: -35.4pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 0.05pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los change vectors escritos al Redo
Log son todos los change vectors: que se aplican a los Data Block (tablas e
indices) y las aplicadas a los segmentos Undo.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 0.05pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 0.05pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Examen.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 0.05pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Redo Log Stream incluye todos los
cambios: aplicados a los Segmentos de Datos y a los Segmentos Undo, para
transacciones committed y uncommitted.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 0.05pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 0.05pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Habiendo dicho eso DBWn no tiene nada
que ver con el proceso de commit, por su puesto escribe cambios o bloques
“sucios” a disco – eventualmente. El algoritmo utilizado está destinado a garantizar que mientras
cambia block se llega a disco. No serán escritos con tanta rapidez como para
impactar en el funcionamiento normal. Si DBWn nunca escribió los Block a disco,
habría una enorme cantidad de trabajo para hacerlo cuando un checkpoint es
finalmente necesario. La excepción es cuando un checkpoint se emite: estas son
las raras ocasiones (típicamente, solo durante un cierre ordenado de la base de
datos e instancia) cuando CKPT instruye al DBWn escribir todos los block sucios
a los datafiles. El proceso checkpoint es cubierto en detalle en capitulo 15.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 0.05pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; text-indent: 0.05pt;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Examen<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En
ejecución normal. DBWn escribe solo pocos buffers sucios a disco; cuando un
checkpoint es señalado, escribe todos los buffer sucios a disco.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Donde a menudo hay confusión es que el stream
de redo es escriben en los archivos log por el LGWR contendrá cambios para ambas transacciones
committed y uncommitted. Por otra parte, en cualquier momento dado DBWn puede o
no puede escribir bloques cambiados de Segmentos de Datos o Segmentos Undo a
los Datafiles para transacciones committed y uncommitted. Por lo tanto, su base
de datos en disco está dañada: los datafiles pueden estar almacenando trabajo
uncommitted, y faltar los cambios committed. Pero en el evento de un accidente,
el stream de redo sobre disco siempre tiene suficiente información para re
instanciar cualquier transacción committed que no está en los Datafiles (por el
uso de cambios aplicados a los data blocks) y para re instanciar los segmentos
undo (por el uso de los cambios aplicados a los block undo) necesarios para
regresar (rollback) cualquier transacción que está en los datafiles.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">DDL y
Control de Transacciones.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Las declaraciones COMMIT y ROLLBACK solo
aplican a DML. Usted no puede hacer rollback a declaraciones DDL: una vez
ejecutada es inmediatamente durable. Si fuera posible ver el código fuente por
ejemplo el comando CREATe TABLE, seria obvio porque. Cuando usted crea una
tabla, usted de hecho está realizando una transacción contra algunas tablas del
diccionario de datos: por lo menos, insertando un registro en SYS.TAB$ que es
una tabla del diccionario de datos con una fila para definir cada tabla en la
base de datos, y una o más filas en la tabla SYS.COL$ una tabla del diccionario
de datos con una fila para la definición de cada columna de cada tabla en la
base de datos. Entonces el comando concluye con un commit. Esto es para
proteger el diccionario de datos: si el commit no fuera incorporado en el
comando CREATE TABLE, la posibilidad de una transacción incompleta surgen y una
transacción incompleta en el diccionario de datos puede tener terribles efectos
secundario. Desde que no es posible anidar las transacciones (el standard sql
no lo permite) la ejecución de uno o más comandos DML seguidos por un comando
DDL commit el lote completo. Las
declaraciones DML asi como las declaraciones DDL.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Examen.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cualquier comando DDL o un GRANT o REVOKE hace
commit a la transacción actual.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">El llamado
“Autocommit”<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para concluir esta discusión del procesamiento
de commit, es necesario eliminar cualquier confusión acerca de lo que llamamos aitocommit, o a veces
commit implícito. Usted a menudo oirá que en algunas situaciones oracle
autocommit. Una de estas situaciones es
cuando se hace un DDL, que es descrito en la sección anterior. Otra es cuando
usted sale de un proceso usuario tales como SQLPLUS. Sencillamente, no hay tal
como un commit automatico. Cuando usted ejecuta una declaración DDL, hay un
commit incluido en el código fuente que implementa el comando DDL. Pero que
cuando usted sale de un proceso usuario? Si está utilizando SQL*PLUS sobre una
terminal Windows (no importa qué sistema operativo del servidor de base de datos esta en ejecución) y se emite una declaración
DML seguida por un EXIT, su transacción será committed. Esto es porque el
comando EXIT de sqlplus tiene una
declaración COMMIT; si pudiéramos ver el código fuente seria obvio. Pero qué
pasa si da click en el botón cerrar de la ventana.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La ventana se cerrara, y si vuelve a iniciar
otra vez, vera que la transacción fue hecha rollback. Esto es porque los
programadores que escribieron SQLPLUS para Windows incluyeron una declaración
ROLLBACK en el código que es ejecutado cuando usted cierra la ventana. El comportamiento de SQLPLUS en otras
plataformas puede ser muy diferente; la única forma de estar seguro es que lo
pruebe. Asi que si usted recibe un autocommit cuando sale de un programa de
varias maneras es totalmente dependiente como los programadores escribieron su
proceso usuario. Oracle server simplmenete hace lo que se le dijo.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay un comando SQLPLUS SET AUTOCOMMIT ON. Esto
hara que SQLPLUS modifique su comportamiento: se añade un commit a cada
declaración DML emitida. Así que todas las declaración son committed
inmediatamente tan pronto son ejecutadas y no pueden ser regresadas. Pero esto
sucederá en lado del proceso usuario, todavía no hay un autocommit en la base
de datos y los cambios realizados por una declaración de larga duración será
aislado de las otras sesiones hasta que la transacción sea completada. Por
supuesto, una salida desordenada de SQLPLUS en esta circunstancias tales como
matar con una utilidad mientras la transacción esta ejecutándose, será
detectada por PMON y la transacción activa siempre se hará rollback.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Ejercicio
10-1<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Gestionando
Datos utilizando DML.<o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio se demostrara el aislamiento
y control de transacciones. Utilice dos sesiones SQLPUS. Cada una conectada con
el usuario SYSTEM. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Av_ZDGAGEcY/T_UDM_hSCyI/AAAAAAAAAjs/h9ZTQSIPAXY/s1600/img10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="397" src="http://1.bp.blogspot.com/-Av_ZDGAGEcY/T_UDM_hSCyI/AAAAAAAAAjs/h9ZTQSIPAXY/s400/img10.jpg" width="400" /></a></div>
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com1tag:blogger.com,1999:blog-4112056264242943706.post-86852371666483094682012-07-04T19:34:00.001-07:002017-04-06T21:09:44.785-07:00Capítulo 10 - Administrando Datos y Concurrencia.<span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small; text-align: justify;">Objetivos de Certificación</span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Manejar Datos con DML.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Identificando y Administrando Objetos PL/SQL.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Monitoreando y Resolviendo Conflictos de Bloqueos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los Datos en una Base de Datos Relacional son gestionados con los comandos DML de SQL (Lenguaje de Manipulación de Datos). Estos son INSERT, UPDATE, DELETE y MERGE (con más recientes versiones de SQL). Asociados con estos están las declaraciones de control de transacciones COMMIT y ROOLBACK. Estos comandos son tratados con detalle en detalle en la prueba de SQL. Pero DML se asume que lo conoce el DBA. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">SQL es una estándar internacional definido por ANSI e ISO. No está diseñado para ser un lenguaje de desarrollo de aplicaciones. Es un lenguaje orientado para gestionar datos con comandos declarativos: usted dice a SQL que quieres que haga, no como hacerlo. Como tal, carece de construcciones procedimentales e interfaces de usuario para un entorno de desarrollo completo. Oracle ha diseñado su propio 3GL para llenar el vacío. Este lenguaje es PL/SQL. PL/SQL incluye características para iteración, bifurcación condicional, variables y desarrollo de interfaces de usuario que desarrolladores de aplicaciones necesitan. Comando SQL deben ser embebidos en el código PL/SQL siempre que el código necesita acceder a datos. PL/SQL tiene la capacidad para gestionar código que se encuentra en cualquier •GL descendiente: procedimientos, funciones y paquetes. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En el Trabajo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Todos los administradores de Bases de Datos deben ser completamente competentes con SQL y PL/SQL. Aparte del uso de estos lenguajes para escribir sus propias rutinas para gestionar el entorno, los DBA generalmente se esperan afinar y depurar SQL y PL/SQL. Ellos a menudo se requiere ser mejores que los programadores.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Muchas aplicaciones de bases de datos son multiusuario. Tal vez puede tener miles de usuarios concurrentes. Esto significa que en momentos dos o más sesiones necesitaran acceder a los mismos datos a la misma vez. La base de datos Oracle tiene mecanismos para bloquear registros y tablas que gestionan esto, para asegurar la integridad de datos. El mecanismo de bloqueo puede ser completamente automático. El administrador de bases de datos debe ser consciente de los conflictos de bloqueo. Y en algunos casos tomar acción para resolver problemas de bloqueo. </span></div>
<div style="text-align: justify;">
<br /></div>
Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-60037960225254586712012-07-04T04:22:00.002-07:002017-04-06T21:09:44.729-07:009.4. CREAR TABLAS TEMPORALES<div style="text-align: justify;">
<b style="background-color: white; font-family: Verdana, sans-serif; font-size: small;">CREAR Y UTILIZAR TABLAS TEMPORALES.</b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Una tabla temporal tiene una definición que es visible a todas las sesiones, pero las filas dentro de ella son privadas a la sesión que la creo. La sintaxis es:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">CREATE GLOBAL TEMPORARY TABLE temp_tab_name</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">(column datatype [,column datatype…] )</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">[ON COMMIT {DELETE | PRESERVE} ROWS] ;</span></div>
<div style="text-align: justify;">
<span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small; white-space: pre;"> </span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-FXTfemh3cQQ/T_UHfdBWD-I/AAAAAAAAAlM/0ahPjgJrLJM/s1600/IMG920.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="http://3.bp.blogspot.com/-FXTfemh3cQQ/T_UHfdBWD-I/AAAAAAAAAlM/0ahPjgJrLJM/s400/IMG920.jpg" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La definición de columnas es la misma como una tabla regular, y pueden ser obtenidas de una consulta. La clausula opcional en el final determina el tiempo de vida útil de cualquiera de las filas insertadas. El valor por default es para eliminar las filas en el momento de la transacción que las inserta completa, pero este comportamiento puede ser cambiado para conservar hasta que la sesión que los inserto finalice. Cualquier opción elegida, los datos serán privados para cada sesión: diferentes usuarios pueden insertar sus propias filas en su propia copia de la tabla, y nunca verán las filas de los demás.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>En muchos sentidos, una tabla temporal es similar a una tabla permanente. Usted puede ejecutar cualquier DML o comando SELECT contra esta. Puede tener índices, Constraints, y Triggers definidos. Puede ser referenciada en vistas y sinónimos o unida con otras tablas. La diferencia es que los datos son transitorios y privados a la sesión, y que todo comando SQL en contra mucho más rápido que comando contra tablas permanentes. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La primera razón por la velocidad es que las tablas temporales no son segmentos en Tablespaces permanentes. Idealmente, solo existen en la PGA de la sesión que está utilizándola. Así no hay actividad en disco o incluso en el Database buffer Cache de actividad en cuestión. Si la PGA no puede crecer suficientemente para almacenar la tabla temporal (que será el caso sí millones de filas están siendo insertadas-no es inusual en la generación de reportes complejos), entonces la tabla consigue ser escrita a un segmento temporal en el Tablespace temporal del usuario. Entrada/Salida sobre Tablespace temporal es mucho más rápido que entrada/salida sobre Tablespace permanentes, porque no va vía Database Buffer Cache. Sino que todo lo realiza directamente sobre el disco por la sesión de proceso servidor.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La segunda razón para la velocidad es que DML contra tablas temporales no genera Redo. Puesto que los datos solo persisten por la duración de una sesión (quizás solamente para la duración de una transacción), no hay un propósito en la generación redo. Esto da un doble beneficio de la rapidez de DML para la sesión de trabajo sobre la tabla, y tomando la tensión del sistema de la tensión de generación de redo, que puede ser un mal punto de contención en las bases de datos multiusuario ocupado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La figura muestra la creación y uso de una tabla temporal con SQL*PLUS. El Database Control Tabla Creation Wizard puede también crear tablas temporales. Un típico uso de las tablas temporales es para los sistemas de reporte que ejecutan en Data Warehouse. Una gran cantidad de datos pueden ser extraídos desde las tablas fuentes y cargados en tablas temporales, donde puede ser manipulado en una forma adecuada para ejecutar reportes. En sistemas tales como estos, las tablas temporales pueden contener billones de filas y ocupar muchos gigabytes de espacio en Tablespaces temporales, pero en el momento de la salida de la sesión, todos los datos serán limpiados.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-w7ZcMqN01OQ/T_UHwa_Sj3I/AAAAAAAAAlU/idAghW3_720/s1600/IMG921.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="http://3.bp.blogspot.com/-w7ZcMqN01OQ/T_UHwa_Sj3I/AAAAAAAAAlU/idAghW3_720/s400/IMG921.jpg" width="400" /></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small;"><b>EJERCICIO 9-4.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CREAR Y UTILIZAR TABLAS TEMPORALES.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>En este ejercicio, creara una tabla temporal para ser utilizada para reportar los actuales empleados. Demostrar, por medio de dos sesiones SQL*PLUS, que los datos son privados para cada sesión.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Conectarse a su Base de Datos con SQL*PLUS como usuario HR.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Crear una tabla temporal como sigue:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create global temporary table tmp_emps on commit preserve</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">rowsas select * from employees where 1=2;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Insertar algunas filas y confirmarla:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">insert into tmp_emps select * from employees where</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">department_id=30;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">commit;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Iniciar una segunda sesión SQL*PLUS como HR.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>En la segunda sesión, confirme que el primer insert no es visible, incluso aun confirmado, e inserte algunas filas diferentes:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select count(*) from tmp_emps;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">insert into tmp_emps select * from employees where</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">department_id=50;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">commit;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6.<span class="Apple-tab-span" style="white-space: pre;"> </span>En la primer sesión, truncar la tabla:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">truncate table tmp_emps;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7.<span class="Apple-tab-span" style="white-space: pre;"> </span>En la segunda sesión, confirmar que todavía hay filas en esa sesión copia de la tabla:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select count(*) from tmp_emps;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8.<span class="Apple-tab-span" style="white-space: pre;"> </span>En la segunda sesión, demostrar que terminando la sesión se borran las filas. Para ello será necesario desconectar y conectar de nuevo:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">disconnect;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">connect hr/hr</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select count(*) from tmp_emps;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9.<span class="Apple-tab-span" style="white-space: pre;"> </span>Ordenar el medio ambiente al dejar caer las tablas, ya sea con SQL * Plus</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">drop table tmp_emps;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">drop table ex_emps;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">o con Database Contro. Los índices y Constraint tiene que se han eliminado también.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>DENTRO DEL EXAMEN</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los objetivos del examen para el primer examen OCP especifica solo el conocimiento de tablas permanentes y temporales, índices y Constraint. Sin embargo, los candidatos también se puede esperar que estén familiarizados con vistas, sequencias y synonymous. Los seis de estos objetos de esquemas son cubiertos en el primer examen SQL: los exámenes DBA asumen que los candidatos tiene ya pasado este.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La sintaxis para la gestión de objetos de esquema puede ser muy incómodo. Por esta razón, puede ser tentador utilizar los asistentes en la base de datos de control para crear y modificar objetos. Esto está bien, si siempre haga clic en el botón Mostrar SQL para ver las instrucciones SQL generadas por los asistentes. La sintaxis se pondrá a prueba, y es vital que esté familiarizado con él.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>RESUMEN DE CERTIFICACION.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los datos son almacenados en tablas. Asociado a las tablas son los Constraints que controlan la estructura relacional de las tablas de la Base de Datos, que son definidas por medio de Constraints Foreign, Unique y Primary Key. Junto con los Constraints Check (incluyendo el Constraint Not Null), estos pueden hacer cumplir las reglas de negocio.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los Constraint puede ser forzadas o en suspendido, y si se aplican hay control sobre el momento que se comprueban. Por defecto, todos los Constraints son forzados y comprueban en tiempo de ejecución de la declaración. Una violación al Constraint por lo tanto causara que la declaración sea regresada.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los índices tienen una doble función: hacer cumplir Constraints Foreign, Unique y Primary Key, y para mejorar el rendimiento de consultas. La creación puede ser automática: provocada por la creación de un Constraint. Sin embargo, si los índices son definidos manualmente hay varias opciones que levan a hacer útiles.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Tablas temporales trabajan en muchas maneras como las tablas temporales. Pero los datos en ellas es privado para la sesión. Debido a que no existen como segmentos en un espacio de tablas permanente, pero sólo en el PGA sesiones y en los segmentos temporales en un espacio de tablas temporales, las operaciones en ellos son mucho más rápidos.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>DOS MINUTOS</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear y Modificar Tablas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Las tablas son objetos de esquema, comparten un namespace con vistas y synonyms.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Después de la creación, definiciones de columnas puede ser agregadas, eliminadas y modificadas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Gestionando Constraints.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Un Constraints puede ser definido en tiempo de creación de la tabla, o agregado posteriormente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Un Primary Key es funcionalmente equivalente a Unique Plus Not Null.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Un Constraints Unique no para la inserción de muchos valores nulos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Constraint Foreign Key define la relación entre dos tablas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear Índices.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Los índices son requisito para hacer cumplir Constraints Unique y Primary Key.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>NULL no son incluidos en un índice B*TREE pero son incluidos en un índice Bitmap.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Índices B*TREE pueden ser Unique o Non-Unique, que determina si puede aceptar valores llaves duplicados.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Índices B*TREE son adecuados para columnas de alta cardinalidad, índices Bitmap para columnas de baja cardinalidad.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Indices Bitmaps pueden ser Compound, function based, or descending; indices B*TREE tambien pueden ser unique, compress y reverse key.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear y Usar Tablas Temporales.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Filas en una tabla temporales son visibles solo a la sesión que los inserto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>DML sobre tablas temporales no generan redo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Tablas temporales existen solo en la PGA de la sesión o en un segmento temporal.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Una tabla temporal puede mantener las filas de la duración de una sesión o de una transacción, dependiendo de cómo se creó.</span></div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-33942196005150582892012-07-04T04:21:00.001-07:002017-04-06T21:09:44.659-07:009.3. CREAR INDICES.<b style="background-color: white; font-family: Verdana, sans-serif; font-size: small; text-align: justify;">CREAR INDICES.</b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los índices tienen dos funciones: hacer cumplir los Constraint Primary Key y Unique, y mejorar el rendimiento. Una estrategia de aplicación de indexación es crítica para el rendimiento. No hay delimitación clara de cuyo dominio de índices se encuentra dentro de administración de índices. Cuando los analistas de negocios especifican reglas de negocio que serán implementadas como restricciones, son en efecto especificaciones de índices. Los administradores de la Base de datos monitorearan la ejecución de código que corre en la Base de datos, y harán recomendación de índices. El desarrollador, que debe tener la mejor idea de lo que está pasando en el código y la naturaleza de los datos, también participará en el desarrollo de la estrategia de indexación</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>POR QUE LOS INDICES SON NECESARIOS</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los índices son parte del mecanismo de los Constraint. Si una columna (o grupo de columnas) son marcados como una llave principal de una tabla, entonces cada vez que una fila es insertada en la tabla, oracle debe comprobar que una fila con el mismo valor en la llave principal no existe. Si la tabla no tiene un índice en la columna, la única manera de hacer esto sería explorar a la derecha atraves de la tabla, comprobando cada fila. Mientras esto puede ser aceptable para una tabla de solo unas pocas filas, para una tabla con miles o millones (o billones) de filas esto no es factible. Un índice da (casi) acceso inmediato a los valores llaves, asi la comprobación de la existencia puede ser hecha virtualmente instantáneamente. Cuando un Constraint Primary Key se define, Oracle automáticamente crea un índice en la columna Llave principal, si uno no existe.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Constraint Unique también requiere un índice. La diferencia de un Constraint Primary Key es que la columna del Constraint Unique puede permitir nulos, tal vez en muchas filas. Esto no afecta a la creación y uso del índice: nulos no van en los índices B*Tree, como es descrito en la siguiente sección tipos de índices.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Constraint Foreign Key son forzados por medio de índices, pero el índice debe existir en la tabla padre, no necesariamente en la tabla para el cuela se define el Constraints. Un Constraint Foreign Key se refiere a una columna en la tabla hija con la llave principal o una Llave Unique en la tabla padre. Cuando una fila es insertado en la tabla hijo, oracle va ha hacer una búsqueda en el índice en la tabla padre para confirmar que hay una fila coincidente antes de permitir insertar. Sin embargo, usted debería siempre crear índices en las columnas Foreign Key en la tabla hijo por razones de rendimiento: un DELETE en la tabla padre será mucho más rápido si Oracle puede utilizar un índice para determinar si hay alguna referencia a las filas en la tabla hijo de la fila que está siendo eliminada. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los índices son críticos para el rendimiento. Cuando ejecutamos cualquier sentencia SQL que incluye una clausula WHERE, Oracle tiene que identificar que filas de la tabla deben ser seleccionadas o modificadas. Si no hay un índice en la columna referenciada en la clausula WHERE, la única manera de hacer esto es con una exploración completa de la tabla. Una Exploración completa de tabla lee cada registro de la tabla, con el fin de encontrar las filas correspondientes. Si la tabla tiene billones de filas, esto puede tomar horas. Si hay un índice en la columna correspondiente, oracle puede buscar en el índice en su lugar. Un índice es una lista ordenada de valores claves, estructurada de una manera que hacer la búsqueda más eficiente. Con cada valor clave es un puntero a la fila en la tabla. La localización de filas relevantes por medio de un índice de búsqueda es mucho más rápido que usar exploración completa de tabla, si la tabla esta sobre cierto tamaño y la proporción de filas a ser recuperadas es por debajo de un cierto valor. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para tablas pequeñas, o para una clausula WHERE que recuperara una gran fracción de las filas de la tabla, una exploración completa será más rápido: usted puede (generalmente) confiar en Oracle para tomar la decisión correcta con respecto a utilizar un índice, basada en la información que recolecta de la base de datos sobre las tablas y las filas dentro de ellas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Una segunda circunstancia donde los índices pueden ser utilizados es para clasificación y ordenamiento. Una sentencia SELECT que incluye palabras como ORDER BY, GROUP BY o UNION (y algunos otros) debe ordenar las filas en orden, a menos que haya un índice, que puede devolver las filas en el orden correcto sin necesidad de ordenar primero. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una tercera circunstancia cuando los índices pueden mejorar el rendimiento es cuando las tablas se unen (join), pero de nuevo Oracle tiene una opción: dependiendo del tamaño de las tablas y los recursos disponibles de memoria, puede ser más rápido escanear las tablas en memoria y unirlas ahí, en lugar del uso de índices. La técnica Nested Loop Join (Bluce Anidado) pasa atraves de una tabla utilizando un índice en la otra tabla para localizar las filas que coincidan: esto es usualmente una operación intensiva de disco. Un técnica hash join (unión de comprobación) lee toda la tabla en memoria, convierte esta en una tabla hash, y utiliza un algoritmo hasging para localizar filas coincidentes; esto es mas memoria y CPU intensivo. Un sort merge joins ordena las tablas sobre la columna JOIN y luego y luego las combina entre si: esto es a menudo en compromiso entre disco, memoria y recursos de CPU. Si no hay índices, a continuación, Oracle es muy limitada en la combinación de técnicas disponibles.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los índices ayudaran a declaraciones SELECT, y también UPDATE, DELETE o MERGER que utilicen clausula WHERE, pero retrasaran a declaraciones INSERT.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>TIPOS DE INDICES</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Oracle soporta varios tipos de índices, que tienen algunas variaciones. Los dos tipos de índices de interés aquí son el Índice B*Tree, que es el tipo de índice por defecto y el índice Bitmap. Como una regla general, los índices mejoran el rendimiento para la recuperación pero reduce el rendimiento de las operaciones DML. Esto se debe a que los índices deben ser mantenidos. Cada vez que una fila es insertada a la tabla, una nueva llave debe ser insertada en todos los índices sobre la tabla, que coloca una tensión adicional sobre la Base de Datos. Por esta razón, en los sistemas de procesamiento de transacciones se acostumbra a mantener el numero de índices lo más bajo posible (quizás nomas que esos necesarios para los Constraints) y en los sistemas de consultas intensivas tales como un Data Warehouse para crear tantos como podría ser útil. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>B*TREE INDEXES</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Un índice B*TREE (la B significa “Balanceado”) es una estructura de árbol. El nodo raíz de del árbol punto de muchos nodos en el segundo nivel, que puede apuntar a muchos nodos en el tercer nivel y así sucesivamente. La profundidad necesaria del árbol será determinado en gran medida por el numero de filas en la tabla y la longitud de los valores de llaves del índice. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La estructura B*TREE es muy eficiente. Si la profundidad es mayor a tres o cuatro, a continuación, o las llaves índices son muy largos o la tabla tiene billones de filas. Si ninguno de estos es el caso, entonces el índice está en la necesidad de una reconstrucción. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Las hojas nodo del árbol del índice almacenan las llaves de las filas, en orden, cada uno con un puntero que identifica la localización física del registro. Así para recuperar una fila con un índice de búsqueda, si la clausula WHERE se utiliza predicado de igualdad en la columna indexada, Oracle navega abajo del árbol al nodo de hoja que contiene el valor llave deseado, y después utiliza el apuntador para encontrar la fila. Si la clausula WHERE se utiliza un predicado noneequality (como cualquiera de los operadores LIKE, BETWEEN, >, o, <) entonces Oracle puede navegar abajo del árbol para encontrar la primera llave coincidente y luego navegar atraves de los nodos hojas del índice para encontrar el resto de valores que emparejan. Como lo hace, recuperara las filas de la tabla en orden.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>El puntero a la fila es el ROWID. El ROWID es una pseudo-columna propiedad de Oracle, que cada fila en cada tabla tiene. Cifrada dentro de la dirección física de la fila. Como ROWID no es parte del estándar SQL, nunca son visibles a una declaración SQL, pero usted puede ver y usar si lo desea. Esto es una muestra en la figura 9-5. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Una fila ROWID es globalmente única. Cada fila en cada tabla en la base de datos completa tendrán ROWID diferentes. El cifrado ROWID da la dirección física de la fila. De ella, Oracle puede calcular que archivo del sistema operativo, y donde en el archivo esta la fila, e ir directamente a ella. </span></div>
<div style="text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-4nfQxh7iXSc/T_UGj992EPI/AAAAAAAAAk0/Gy2MPfD8MOI/s1600/IMG9.9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="http://4.bp.blogspot.com/-4nfQxh7iXSc/T_UGj992EPI/AAAAAAAAAk0/Gy2MPfD8MOI/s400/IMG9.9.jpg" width="400" /></a></div>
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los índices B*Tree son una forma muy eficiente de recuperar filas si el numero de filas necesarias es bajo en proporción al número total de filas en la tabla y si la tabla es grande. Considere esta declaración:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>select count(*) from employees where last_name between 'A%' and 'Z%';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Esta clausula WHERE es lo suficientemente amplia que incluirá todas las filas en la tabla. Sería mucha más lenta para buscar en el índice para encontrar los ROWIDS y luego utilizar los ROWIDS para buscar las filas que explorar la tabla completa. Después de todo. Es la tabla entera que es necesaria. Otro ejemplo seria si la tabla fuera muy pequeña que una lectura de disco podría analizarla completamente; no habría punto en la lectura del primer índice.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Se dice a menudo que si la consulta va a recuperar más de 2 o 4 por ciento de las filas, entonces una exploración completa de tabla será más rápida. Una importante excepción a esto es si el valor especificado en la clausula WHERE es nulo. NULL no van en el índice B*TREE, asi que una consulta tal como esta: </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from employees where last_name is null;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Siempre resultara una exploración complete de la tabla. Hay poco valor crear un índice B*TREE en una columna con pocos valores únicos, no será lo suficiente selectiva: la proporción de la tabla que será recuperada para cada llave distinta será demasiado alto. En general, índices B*TREE debe ser utilizados si:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>La cardinalidad (el numero de valores distintos) en la columna es alta.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>El numero de filas de la tabla es alta, y</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>La columna es utiliza en clausulas WHERE o condiciones JOIN.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>INDICES BITMAP</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En muchas aplicaciones de negocio, la naturaleza de los datos y las consultas es tal que índices B*TREE no son de mucha utilidad. Considere la tabla de ventas para una cadena de supermercados. Almacena un año de datos históricos, que pueden ser analizados en varias dimensiones. La figura 9-6 muestra un simple diagrama entidad relación, que solo cuatro de las dimensiones.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La cardinalidad de cada dimensión puede ser bastante bajo. Hacer estos suuestos:</span></div>
<div style="text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-lrvep9gBCyM/T_UGx4_9z3I/AAAAAAAAAk8/wp-65lrVGGE/s1600/IMG9.10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="81" src="http://2.bp.blogspot.com/-lrvep9gBCyM/T_UGx4_9z3I/AAAAAAAAAk8/wp-65lrVGGE/s400/IMG9.10.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-5VCixblmPpU/T_UG8vgBY0I/AAAAAAAAAlE/-oe1evqvW7M/s1600/IMG9.11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="175" src="http://1.bp.blogspot.com/-5VCixblmPpU/T_UG8vgBY0I/AAAAAAAAAlE/-oe1evqvW7M/s400/IMG9.11.jpg" width="400" /></a></div>
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Suponiendo una distribución uniforme de los datos, solo dos de las dimensiones (producto y fecha) tiene una selectividad que es mejor que el criterio de uso general de 2 por ciento a 4 por ciento, que hace un índice que vale la pena. Pero si consultas utilizan predicados de rango (tales como cantidad de ventas en el mes o de una clase de productos de diez o más), entonces ni siquiera estos se clasificaran. Esto es un simple hecho: los índices B*TREE a menudo son inútiles en una entorno Data Warehouse. Una consulta típica podría ser que desee comparar las ventas entre dos tiendas para atender a clientes de una determinada clase de producto en un mes. Podrían bien haber índices B*TREE en las columnas relevantes, pero Oracle ignora como insuficiente selectivo. Esto es que los índices Bitmap están diseñados para.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Un índice Bitmap almacena los ROWIDS asociado con cada valor llave como un Bitmap. El Bitmap para el índice CHANNEL podría tener este aspecto:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>WALKIN 11010111000101011101011101.....</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">DELIVERY 00101000111010100010100010.....</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esto indica que las dos primeras filas fueron ventas a entrega a los clientes, la tercera venta era una entrega, la cuarta venta fue entrega, y asi sucesivamente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los Bitmaps para índices de SHOP podrían ser.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">LONDON 11001001001001101001010000.....</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">OXFORD 00100010011000010001001000.....</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">READING 00010001000100000100100010.....</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">GLASGOW 00000100100010000010000101.....</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esto indica que las dos primeras ventas fueron en la Tienda de London, la tercera fue en Oxford, la cuarta en Reading, y así sucesivamente. Ahora si esta consulta es recibida;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select count(*) from sales where channel='WALKIN' and shop='OXFORD';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Oracle puede recuperar los dos Bitmaps pertinentes y agregarlas junto con una operación booleana AND:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>WALKIN 11010111000101011101011101.....</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">OXFORD 00100010011000010001001100.....</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">WALKIN & OXFORD 00000010000000010000000000.....</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> </span></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>El resultado de la operación AND muestra que solo el séptima y decima séptima filas califican para la selección. Esta combinación de Bitmaps es muy rápida y puede ser utilizada para implementar complejas operaciones Booleanas con muchas condiciones en muchas columnas utilizando cualquier combinación de operaciones AND, OR y NOT. Una ventaja especial que los índices Bitmaps tienen por arriba que los índices B*TREE es que incluyen valores NULL. En cuanto al índice Bitmap se refiere, NULL es solo otro valor distinto, que tendrá su propio Bitmaps. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>En general, Índices Bitmaps deben ser utilizados si:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>La Cardinalidad (el numero de valores distintos) en la columna es baja.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>El numero de filas en la tabla es alto, y</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>La columna es utilizada en operaciones de algebra Booleana.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Si usted supiera por adelantado cual serian las consultas, entonces usted puede construir Índices B*TREE que trabajarían, tales como un índice compuesto en SHOP y CHANNEL. Pero por lo general no sabe, que es donde la combinación dinámica de Bitmaps da gran flexibilidad.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>TIPOS DE OPCIONES DEL INDICE</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Existen seis opciones utilizadas comúnmente que pueden ser aplicadas cuando creamos un índice.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Unique o Non-Unique.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Reserve Key.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Compressed.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Composite.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Function Based.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Ascending o Descending.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Todas estas seis variaciones aplican a los índices B*TREE, pero solo las últimas tres pueden ser aplicadas a los índices Bitmaps.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Un Índice Unique no permitirá valores duplicados. Non-unique es el default. El atributo unique del índice opera independientemente de un Constraint Unique o Primary Key: la presencia de un Índice Unique no permitirá inserción de valores duplicados incluso si no hay tal Constraint definido. Un Constraint Unique o Primary Key puede utilizar índice Non-Unique; solo sucederá no tener valores duplicados. Esto es, de hecho un requerimiento para un Constraint que es Deferrable (impostergable), ya que puede haber un periodo (antes que las transacciones son confirmadas) cuando los valores duplicados existen.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Un índice reverse key es construido sobre una versión de la columna llave con sus bytes invertidos: en lugar que indexé “John,” indexara “nhoj” cuando un SELECT es hecho. Oracle invertirá automáticamente el valor de la cadena de búsqueda. Esto es una técnica muy útil para evitar la contención de sistemas multiusuario. Por ejemplo, si muchos usuarios están insertando concurrentemente filas con llaves primarias basadas en un numero de incremento secuencial, todos sus índices insertados se concentraran en lo alto (final) del índice. Mediante las llaves invertidas, la llave índice consecutiva insertada tendera a extenderse a lo largo de todo el rango del índice. Incluso aunque “John” y “Jules” están muy juntas, “nhoj” and “seluj” serán muy muy distantes. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Un índice compressed (comprimido) almacena valores llaves repetidos solo una vez. El valor por defecto es no compress, lo que significa que su un valor llave no es único, será almacenado una vez por cada ocurrencia, cada uno tiene un único puntero ROWID. Un índice Compressed almacenara la llave una vez, seguido por una cadena de todos los ROWID coincidentes.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Un índice Composite (compuesto) está basado en la concatenación de dos o más columnas. No hay restricciones sobre los tipos de datos que se mezclan. Si un cadena de búsqueda no incluye todas las columnas, el índice puede todavía ser utilizado-pero si no incluye la extrema columna izquierda, oracle tendrá que utilizar un método skip-scanning que es mucho menos eficiente que si la columnas mas a la izquierda es incluida.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Un índice function-based está basado sobre el resultado de una función aplicado a una o mas columnas, tales como UPPER (last_name) o to_char(startdate,’ccyy-m-dd’). Una consulta tendrá que aplicar la misma función a la cadena de búsqueda, o oracle no puede ser capaz de utilizar el índice.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por defecto, un índice es ascending, significa que la llave es almacenada en orden de menor a mayor valor. Un índice descending invierte esto. De hecho, la diferencia no suele ser importante: las entradas en un índice son almacenadas como una lista doblemente ligada por lo que es posible ir de arriba abajo con igual rapidez, pero esto afectara el orden en el cual las filas son regresadas si son recuperadas con un rango de exploración de índice.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CREANDO U TILIZANDO INDICES.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los índices son creados implícitamente cuando Constraints Primary Key y unique son definidos. Si un índice sobre la columna relevante no existe. La sintaxis básica para crear un índice explícitamente es.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">CREATE [UNIQUE | BITMAP] INDEX [ schema.]indexname</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ON [schema.]tablename (column [, column...] ) ;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>El tipo por defecto de un índice es un non-unique, non-compressed, non-reverse key, índice B*TREE. No es posible crear un índice Bitmap Unique (y usted no le gustaría si pudiera-pensar la cuestión de cardinalidad). Los índices son objetos de esquema, y es posible crear un índice en un esquema sobre una tabla que está en otro esquema. Pero la mayoría de las personas encontrara esto como confuso. Un índice Composite es un índice sobre varias columnas. Índices Composite puede ser sobre columnas de diferentes tipos, y las columnas no tienes que ser adyacentes en la tabla.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Muchos administradores de bases de datos no consideran buena práctica confiarse sobre la creación implícita de índices. Si el índice es creado explícitamente, el creador tiene control completo sobre las características del índice, que puede ser más fácil para el DBA su gestión posterior.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Considera este ejemplo de creación de tabla e índices, y luego la definición de Constraints:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create table dept(deptno number,dname varchar2(10));</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create table emp(empno number, surname varchar2(10),</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">forename varchar2(10), dob date, deptno number);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create unique index dept_i1 on dept(deptno);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create unique index emp_i1 on emp(empno);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create index emp_i2 on emp(surname,forename);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create bitmap index emp_i3 on emp(deptno);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table dept add constraint dept_pk primary key (deptno);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table emp add constraint emp_pk primary key (empno);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table emp add constraint emp_fk</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">foreign key (deptno) references dept(deptno);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los primeros índices creados están marcados como UNIQUE, esto significa que no será posible insertar valores duplicados. Esto no es definido como un Constraint en este punto pero es cierto, sin embargo. El tercer índice no está definió como UNIQUE y por lo tanto, aceptar valores duplicados; este es un índice Composite sobre dos columnas. El cuarto índice es definido como un Índice Bitmap, porque la cardinalidad de la columna es probable que sea baja en proporción a el numero de filas en la tabla.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Cuando los dos primero Constraints Primary Key son definidos, Oracle detectara los índices pre creados y los utilizaran para hacer cumplir las restricciones. Tenga en cuenta que el índice sobre DEPT.DEPTNO no tiene propósito para rendimiento porque la tabla con toda probabilidad sea tan pequeño que el índice nunca será utilizado para recuperar filas (una exploración será más rápida), pero es todavía esencial tener un índice para hacer cumplir el Constraints Primary key. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Una vez que se crean, el uso de índice es completamente transparente y automático. Antes de ejecutar una declaración SQL, el servidor Oracle evaluara todas las formas posibles de ejecutarlo. Algunas de estas formas pueden implicar el uso cualquiera que sea índices que están disponibles; otros no pueden. Oracle hará uso de la información recolectada sobre las tablas y el entorno para tomar la decisión acerca de los índices a usar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>El servidor Oracle debe hacer la mejor decisión acerca del uso de índices, pero si está obteniendo errores, es posible para un programador embeber instrucciones, conocido como sugerencias de optimizador, en el código que obligara a utilizar de ciertos índices.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>MODIFICANDO Y ELIMINADO INDICES.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Hay un comando ALTER INDEX…, pero no puede ser utilizados para cambiar cualquier de las características descritas en este capítulo: el Tipo (B*TREE o Bitmap) de índice, las columnas, o si es unique o non-unique. El comando ALTER INDEX se encuentra (miente) en el dominio de la administración de la Base de datos y por lo general se utiliza para ajustar las propiedades físicas del índice, no las propiedades lógicas que son de interés para los desarrolladores. Si es necesario cambiar alguna de estas propiedades, el índice debe ser eliminado y crearlo nuevamente. Continuando con el ejemplo en el sección anterior, para cambiar el índice EMP_12 para incluir los cumpleaños de los empleados, </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">drop index emp_i2;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create index emp_i2 on emp(surname,forename,dob);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Este Índice Composite (compuesto) ahora incluye columnas con diferentes tipos de datos. Las columnas pasaran a ser enumeradas en el mismo orden que son definidas en la tabla, pero esto es de ninguna manera necesaria.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Cuando una tabla es eliminada, todos los índices y Constraints definidos para la tabla se eliminan también. Si un índice fue creado implícitamente mediante la creación de un Constraints, entonces Eliminar el Constraints también eliminara el índice. Si el índice se había creado explícitamente y el Constraint creado posteriormente, entonces si el Constraint fuera eliminado el índice sobrevivirá. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EJERCICIO 9-3</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CREAR INDICES.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>En este ejercicio, agregara algunos índices a la tabla EX_EMPS, y modificar el índice creado cuando el Constraints Primary Key fue agregado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Conectarse a su base de datos con SQL*PLUS como usuario HR.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Determine el nombre y algunas otras características del Índice Primary Key ejecutando esta cosulta:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select index_name,column_name,index_type,uniqueness</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">from user_indexes natural join user_ind_columns</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">where table_name='EX_EMPS';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Crear un indice compuesto B*TREE sobre el nombre de empleados:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create index ex_name_i on ex_emps (last_name,first_name);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Crear indices Bitmap en algunas columnas de baja cardinalidad:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create bitmap index ex_dept_i on ex_emps(department_id);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create bitmap index ex_mgr_i on ex_emps (manager_id);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>Con el Database Control, mire los índices. La ruta de navegación desde la pagina principal del Database Control tome la ficha Esquema, y entonces dar clic en el link Índices sobre la sección Database Objects. Ingresar HR como el nombre del esquema y EX_EMPS como el nombre del objeto, y dar clic en Go. Los índices serán (cuatro, incluyendo los índices Primary Key creados automáticamente) mostrados.</span></div>
<div style="text-align: justify;">
<br /></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-1745312921648725022012-07-04T04:19:00.001-07:002017-04-06T21:09:44.619-07:009.2. GESTIONAR CONSTRAINT<b style="background-color: white; font-family: Verdana, sans-serif; font-size: small; text-align: justify;">GESTIONAR CONSTRAINTS</b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Constraint de la Tabla son un medio por el cual la Base de Datos puede hacer cumplir reglas de negocio y garantizar que los datos se ajustan al modelo entidad relación determinado por el análisis que define las estructuras de datos de la aplicación. Por ejemplo, los analistas de negocio de su organización pueden haber decidido que cada cliente y cada factura debe ser únicamente identificado por su número, facturas que no pueden emitir a un cliente antes que el cliente se ha creado, y que cada factura debe tener una fecha valida y un valor mayor a cero. Esto sería implementado por medio de la creación de Constraints (Restricción) de llave primaria en la columna CUSTOMER_NUMBER de la Tabla CUSTOMERS y la columna INVOICE_NUMBER de la tabla INVOICES, un Constraints (Restricción) de llave foránea (Foreign Key) en la tabla INVOICES referenciando la tabla CUSTOMERS, un Constraint (Restricción) de NOT NULL en la columna DATE de la tabla INVOICES (el tipo de dato DATE si mismo se asegurara de que cualquier fecha son automáticamente validas-no acepta fechas invalidas) y un Constraint (Restricción) de CHECK (comprobación) en la columna AMOUNT de la tabla INVOICES. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Cuando cualquier DML es ejecutado contra la tabla con Constraints definidos, si el DML viola un Constraints entonces la declaración completa será regresada automáticamente. Recuerde que una declaración DML que afecta muchas filas podría parcialmente tener éxito antes de que llegue un problema de Constraints con una fila en particular. Si la declaración es parte de una transacción de varias declaraciones, entonces la declaración que ya tuvo éxito se mantendrán intactos, pero Uncommitted (no confirmada).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EXAMEN</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Una violación de Constraint forzara automáticamente a un Roll Back de la declaración completa que llego al problema, no solo la acción individual dentro de la declaración y no la transacción completa.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>TIPOS DE CONSTRAINTS</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los tipos de CONSTRAINTS soportados por la Base de Datos Oracle son:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>UNIQUE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>NOT NULL.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>PRIMARY KEY.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>FOREIGN KEY.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>CHECK.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los Constraints tienen nombres, es buena práctica especificar los nombres con una convención de nombres estándar, pero si estos no son explícitamente nombrados, Oracle generara nombres.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>UNIQUE CONSTRAINTS.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Un Constraint UNIQUE nomina a una columna (o combinación de columnas) para que el valor debe ser diferentes por cada fila en la tabla. Si el Constraints es basado en una única columna, esto es conocido como Columna Clave (Key Column – Llave primaria). Si el Constraints es compuesto de mas que una columna (conocido como Constraints UNIQUE llave compuesta), las columnas no tienes por qué ser el mismo tipo de dato o ser abjacentes en la definición de la tabla.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Una rareza de Constraints UNIQUE es que es posible ingresar valores NULL en las Columnas llaves. Es de hecho posible tener cualquier número de filas con valores NULL en su columna clave-llave. Así que la selección de filas en una columna clave garantizara que solo uno fila es regresada-a menos que la búsqueda por NULL, en los que pueden todas las filas en la que las columnas son NULL será devuelto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Constraints Unique se hacen cumplir por un Índice. Cuando un Constraints Unique es definido, Oracle buscará un índice en las columnas claves y si uno no existe, será creado. Entonces cada vez que se inserta una fila, Oracle buscara en el índice para ver si el valor de la columna clave ya está presente; si este ya existe, rechazara el insert. La estructura de estos índices (conocido como índices B*Tree) no incluye los valores nulos, razón por el cual muchas files con NULL son permitidos: no existen simplemente en el índice. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Mientras que el primer objetivo del Idice es hacer cumplir el Constraints (Restricción), tiene un segundo efecto: mejora el rendimiento si las columnas claves son utilizadas en la clausula WHERE de declaraciones SQL. Sin embargo, la selección WHERE Key_Column IS NULL no puede utilizar el índice (porque no incluye NULL) y por lo tanto siempre resulta en una exploración de la tabla completa. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small;"><b>EXAMEN</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Es posible insertar muchas filas con NULL en una columna con Constraints Unique. Esto no es posible para una columna con un Constraint Primary Key.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CONSTRAINTS NOT NULL</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>El Constraints NOT NULL forzara valores que deben ingresarse en la columna clave. Constraints NOT NULL se definen por columna; si el requerimiento de negocio es que un grupo de columnas todos deben tener valores, usted no puede definir un Constraints NOT NULL para todo el grupo, debe definir un Constraints NOT NULL para cada columna.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Cualquier intente para insertar una fila sin especificar valores para las columnas con Constraints NOT NULL resultara en un error. Es posible pasar por alto la necesidad de especificar un valor mediante la inclusión de una clausula DEFAULT en la columna cuando se crea la tabla, como se explica en la sección previa “Creación de Tablas”.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CONSTRAINTS PRIMARY KEY</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La llave principal es el medio de localización de una fila única en una tabla. El paradigma de Base de Datos Relacional incluye un requisito que cada Tabla debería tener una Llave principal: una columna (o combinación de columnas) que pueden ser utilizados para distinguir cada fila. La base de Datos Oracle se desvía del paradigma (al igual que algunas otras implementaciones RDBMS) porque permite tablas sin llaves principales.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Tablas sin llave principal son posibles, pero no es una buena idea. Incluso si las reglas de negocio no requieren la capacidad para identificar cada fila, llaves principales son a menudo necesarias para trabajos de mantenimiento.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La implementación del Constraint Primary Key es hecho de la unión del Constraints Unique y el Constraints NOT NULL. La columna clave debe tener valores únicos (Unique), y no puede ser NULL. Como con Constraints Unique, un índice debe existir en las columnas Restringidas (Constrained). Si uno no existe, un índice será creado cuando el Constraints se define. Una tabla puede tener solo una llave principal. Trate de crear un segundo, y obtendrá un error. Una tabla puede, sin embargo, tener cualquier número de columnas con Constraints Unique y NOT NULL, asi que si hay varias columnas que los analistas de negocio han decidió deben ser únicos y pobladas, uno de estos puede ser designado a la Llave principal, y los otros hechos Unique y NOT NULL. Un ejemplo puede ser una tabla de Employees, donde la dirección e-mail, número de seguro social y numero de empleado deberían todos ser requeridos y únicos.</span></div>
<div style="text-align: justify;">
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> </span></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EXAMEN</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Constraints Unique y Primary Key necesitan un índice. Si uno no existe, uno será creado automáticamente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CONSTRAINTS FOREIGN KEY</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Un Constraints Foreign Key es definido en la tabla hijo de una relación padre-hijo. El Constraints nomina una columna (o columnas) en la tabla hijo que corresponde a la columna llave primaria de la tabla padre. Las columnas no tienen que tener el mismo nombre, pero deben ser del mismo tipo de dato. Constraint Foreign Key define la estructura relacional de la Base de Datos: las relaciones muchos a uno que conectan la tabla, en su tercera forma normal. Si la tabla padre tiene Constraints Unique aso como (o en lugar de) un Constraints Primary Key, estas columnas pueden ser utilizadas como base de Constraints Foreign Key, incluso si aceptan valores NULL. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Así como un Constraints Unique permite valores NULL en la columna restringida, también lo hace un Constraint Foreign Key. Usted puede insertar filas en la tabla hijo con NULL en las columnas Foreign Key-incluso si no hay una fila en la tabla padre con un valor NULL. Esto crea filas huérfanas y puede causar confusión terrible. Como una regla general, todas las columnas en un Constraints Unique y todas las columnas en un Constraints Foreign Key se defininen mejor con Constraints NOT NULL, suele ser un requisito empresaria. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EXAMEN</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Un Constraint Foreign Key se define en la Tabla hijo, pero un Constraint Unique o Primary Key debe ya existir en la tabla Padre.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Intente insertar una fila en la tabla hijo para el cual no hay fila coincidente en la tabla padre dará un error. Similarmente, elimine una fila en la tabla padre obtendrá un error si ya hay filas refiriéndose a esta en la tabla hijo. Hay dos técnicas para cambiar este comportamiento. Primero, el Constraints puede ser creado como ON DELETE CASCADE. Esto significa que su una fila en la tabla padre es eliminada, oracle buscara en la tabla hijo todas las filas coincidentes y eliminarlos también. Esto sucederá automáticamente. Una técnica menos drástica es crear un Constraints como ON DELETE SET NULL. En este caso, si una fila en la tabla padre es eliminada, oracle buscara en la tabla hijo todas las filas coincidentes y establecerá la columna Foreign Key a NULL. Esto significa que las filas hijas serán huérfanas pero existirán todavía. Si la columna en la tabla hijo también tiene un Constraint NOT NULL, entonces la eliminación de la tabla padre fallará. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>No es posible eliminar o truncar la tabla padre en una relación Foreign Key, incluso si no hay registros en la tabla hijo. Esto todavía aplica si las clausulas ON DELETE SET NULL o ON DELETE CASCADE fueron utilizados.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Una variación en el Constraints Foreign Key es el Constraint Foreign Key auto referenciado. Esto defina una condición donde las filas padres e hijo existen en la misma tabla. Un ejemplo sería una tabla de Employees, que incluye una columna para los empleados manager. El manager es un empleados y debe existir en la tabla. Asi que si la clave principal es la columna EMPLOYEE_NUMBER, y el manager es identificado por una columna MANAGER_NUMBER, entonces el Constraint Foreign Key indicara que el valor de la columna MANAGER_NUMBER debe referirse a un NUMBER_EMPLOYEE valido. Si un empleado es su propio manager, la fila se referirá al mismo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CONSTRAINTS CHECK</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Un Constraint Check puede ser utilizado para hacer cumplir reglas simples. Tales como que el valor ingresado en una columna deber estar dentro de un rango de valores. La regla debe ser una expresión que evaluara si es TRUE o FALSE. Las reglas pueden referirse a valores absolutos ingresados como Literales, o para otras columnas en la misma fila, y pueden hacer uso de algunas funciones. Muchos Constraints Check como usted dese puede aplicarse a una columna. Pero no es posible utilizar un subquery para evaluar si un valor es permisible, o para usar funciones tales como SYSDATE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>El Constraint NOT NULL es de hecho, implementado como un Constraint Check pre configurado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>DEFINIENDO CONSTRAINTS.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los Constraints pueden ser definidos cuando se crea una Tabla, o agregados a la tabla posteriormente. Cuando es definido un Constraints en el tiempo de creación de la tabla, el Constraint puede ser definido en la línea con la columna a la cual se referirá, o en el final de la definición de la tabla. Es más flexible utilizar la última técnica. Por ejemplo, es imposible definir un Constraint Foreign Key que referencia dos columnas o un Constraint Check que referencia a cualquier otra columna que está siendo limitada si el Constraint es definido en la línea, pero ambos son posibles si los Constraint son definidos en el final de la tabla.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Para los Constraints que requieren un índice (los Constraints Unique y Primary Key), el índice será creado con la tabla si el Constraint es definido en tiempo de creación de la tabla.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Considere estos dos declaraciones de creación de tablas (a los cuales los números de línea se han agregados).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1 create table dept(</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2 deptno number(2,0) constraint dept_deptno_pk primary key</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3 constraint dept_deptno_ck check (deptno between 10 and 90),</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4 dname varchar2(20) constraint dept_dname_nn not null);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5 create table emp(</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6 empno number(4,0) constraint emp_empno_pk primary key,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7 ename varchar2(20) constraint emp_ename_nn not null,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8 mgr number (4,0) constraint emp_mgr_fk references emp (empno),</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9 dob date,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">10 hiredate date,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">11 deptno number(2,0) constraint emp_deptno_fk references dept(deptno)</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">12 on delete set null,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">13 email varchar2(30) constraint emp_email_uk unique,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">14 constraint emp_hiredate_ck check (hiredate >= dob + 365*16),</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">15 constraint emp_email_ck</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">16 check ((instr(email,'@') > 0) and (instr(email,'.') > 0)));</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Tomando estas declaraciones línea por línea:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>La primera tabla creada es DEPT, destinado a tener una fila por cada departamento.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>DEPTNO es numérico, dos dígitos, sin decimales. Esto es la llave principal de la tabla. El Constraints es llamado DEPT_DEPTNO_PK.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Un segundo Constraint aplicado a DEPTNO es un CHECK limitando a números en el rango de 10 a 90. El Constraint es llamado DEPT_DEPTNO_CK.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>La columna DNAME es caracteres de longitud variable, con un Constraint DEPT_DNAME_NN haciendo NOT NULLABLE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>La segunda tabla creada es EMP, destinada a tener una fila por cada empleado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6.<span class="Apple-tab-span" style="white-space: pre;"> </span>EMPNO es numérico, de hasta cuatro dígitos sin decimales. Constraints EMP_EMPNO_PK marca esta como la llave principal.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7.<span class="Apple-tab-span" style="white-space: pre;"> </span>ENAME es caracteres de longitud variables, con un Constraint EMP_ENAME_NN haciendo NOT NULLABLE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8.<span class="Apple-tab-span" style="white-space: pre;"> </span>MGS es Employees Manager, que debe ser el mismo un empleado, la columna se define en la misma forma que la columna de clave principal de la tabla de EMPNO. El Constraint EMP_MGR_FK define estas columna como auto referencia de Foreign Key, asi cualquier valor ingresado deber hacer referencia a una fila ya existente en EMP (aunque no está obligado a no ser nula, por lo que se puede dejar en blanco).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9.<span class="Apple-tab-span" style="white-space: pre;"> </span>DOB, la fecha de nacimiento de empleado, es un DATE y no hay Constraint.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">10.<span class="Apple-tab-span" style="white-space: pre;"> </span>HIREDATE es la fecha de contratación del trabajador y no está restringido. Al menos, no todavía.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">11.<span class="Apple-tab-span" style="white-space: pre;"> </span>DEPTNO es el departamento con el cual el empleado está asociado. La columna es definida en la misma forma como la columna de llave principal de la tabla DEPT, y el Constraints EMP_DEPTNO_FK hace cumplir una relación FOREIGN KEY, no es posible asignar un empleado a un Departamento que no existe. Esto es NULLABKE, por lo tanto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">12.<span class="Apple-tab-span" style="white-space: pre;"> </span>El Constraints EMP_DEPTO_FK se define como ON DELETE SET NULL, asi si el registro padre en DEPT es eliminado, todos los coincidentes registros hijos en EMPNO tendrán en DEPTNO establecido a NULL.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">13.<span class="Apple-tab-span" style="white-space: pre;"> </span>EMAIL es carácter de Longitud variable y debe ser único si ingresa.(aunque puede ser vacio).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">14.<span class="Apple-tab-span" style="white-space: pre;"> </span>Este define un nivel adicional de tabla Constraint EMP_HIREDATE_CK. El Constraints Check para el uso de labor infantil, al rechazar las filas cuando la fecha de contratación no es por lo menos dieciséis años más tarde que el cumpleaños. Esta restricción no puede ser definido de acuerdo con HIREDATE, porque la sintaxis no permite las referencias a otras columnas en ese punto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">15.<span class="Apple-tab-span" style="white-space: pre;"> </span>Un Constraint adicional EMP_EMAIL_CK agregado a la columna EMMAIL, que hace 2 comprobaciones en la dirección EMAIL. La función INSTTR busca caracteres “@” y “.” (que siempre estará presente en una dirección válida de correo electrónico) y si no puede encontrar tanto de ellos, la condición de verificación devolverá FALSE y la fila será rechazada.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los ejemplos anteriores muestran varis posibilidades para definir Constraints en una tabla en tiempo de creación. Otras posibilidades que no son cubiertas son:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Controlar la creación del índice para los Constraint UNIQUE y PRIMARY KEY.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Definir si el Constraint se debe comprobar en el momento de insertar (que es po defecto) o posteriormente, cuando la transacción es COMMITTED.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Indicando si el Constraint de hecho se está haciendo cumplir en absoluto (que es el defecto) o es lisiado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Es posible crear tablas sin restricciones y entonces agregar posteriormente con un comando ALTER TABLE. Al final el resultado será el mismo, pero esta técnica tiene el código de menos auto-documentado, como la definición de la tabla completa entonces, se extenderá durante varias declaraciones en lugar de uno.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>ESTADO DEL CONSTRAINT</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>En cualquier momento, cada Constraint es activado o desactivado, y validado o no validado. Cualquier combinación de estos es sintácticamente posible.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>ENABLE VALIDATE no es posible ingresar filas que violarían el Constraint, y todas las filas en la tabla se ajustan al Constraint.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>DISABLE NOVALIDATE Cualquier dato (que conforma o no) puede ser ingresado, y ya puede datos no conformes en la tabla.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>ENABLE NOVALIDATE puede ya haber datos no conformes en la tabla, pero todos los datos ingresado ahora deben conformar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>DISABLE VALIDATE una situación imposible: todos los datos en la tabla se ajusta a la restricción, pero las nuevas no es necesario. El resultado final es que la tabla está bloqueada contra los comandos DML.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La situación ideal (y el valor por default cuando un Constraints es definido) es ENABLE VALIDATE. Esto garantizara que todos los datos son validos, y ningún dato inválido puede ser ingresado. En el otro extremo, DISABLE NOVALIDATE, puede ser muy útil cuando carga grandes cantidades de datos en la Tabla. Es muy posible que los datos que se cargan no se ajusten a las reglas de negocio. Pero en lugar de tener una gran carga fallida debido a unas malas pocas filas, poner el Constraints es este estado permitirá que la carga de tener éxito. Inmediatamente después de la carga, la transición del Constraints en estado ENABLE NOVALIDATE. Esto evitara que la situación se deteriore aun mas mientras que los datos se comprueba antes de la transición del Constraint a el estado ideal. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Como ejemplo, considere este script, cual lee datos desde una tabla fuente de datos vivos en una tabla de datos del archivo. El supuesto es que hay un Constraint NOT NULL en una columna de la tabla de destino que no puede haber hecho cumplir en la tabla fuente:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table sales_archive modify constraint sa_nn1 disable novalidate;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">insert into sales_archive select * from sales_current;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table sales_archive modify constraint sa_nn1 enable novalidate;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">update sales_archive set channel=’NOT KNOWN’ where channel is null;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table sales_archive modify constraint sa_nn1 enable validate;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>COMPROBANDO CONSTRAINT</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Los Constraints pueden ser comprobados como una declaración es ejecutada (un IMMEDIATE CONSTRAINT) o cuando una transacción es COMMITTED (un DEFERRED CONSTRAINT). Por default, todos los Constraints son IMMEDIATE y NOT DEFERRABLE. Un acercamiento alternativo al ejemplo previo habría sido posible si el Constraint se ha creado como DEFERRABLE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">set constraint sa_nn1 deferred;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">insert into sales_archive select * from sales_current;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">update sales_archive set channel='NOT KNOWN’ where channel is null;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">commit;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">set constraint sa_nn1 immediate;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para el Constraint sea DEFERRABLE, debe haber sido creado con la sintaxis apropiada:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table sales_archive add constraint sa_nn1</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">check (channel is not null) deferrable initially immediate;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">No es posible hacer un Constraint DEFERRABLE mas tarde, sino se ha creado de esa manera. El Constraint SA_NN1 por defecto se aplica cuando una fila es insertada (o actualizada), pero el CHECK puede ser post puesto hasta que la transacción sea COMMITS. Un uso común para los Constraint DEFERRABLE está con FOREIGN KEY. Si un proceso inserta o actualiza filas en ambas tablas el padre y el hijo, si el Constraints Foreign Key no se difiere el proceso puede fallar si las filas no se procesan en el orden correcto. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cambiando el estatus de un Constraint entre ENABLED/DISABLED y VALIDATE/NOVALIDATE es una operación que afectara todas las sesiones. El estado es una actualización del diccionario de datos. Cambiando un Constraint deferrable entre IMMEDIATE y DEFERRED es especifico de la sesión, aun que el estado inicial se aplicara a todas las sesiones.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EJERCICIO 9-2.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>GESTIONAR CONSTRAINTS</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, utilice Database Control y SQL PLUs para definir y ajustar algunos Constraints en la tabla creada en el ejercicio 9-1.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>En Database Control, navegue a la lista de tablas HR, como en el ejercicio 9-1, paso 5 y 6.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Seleccione el radio Botón para la tabla EX_EMPS y dar clic en el Botón Editar. Esto le llevara a una ventana que muestra las definiciones de columnas de la tabla EX_EMPS.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Tomar la Ficha Constraints para ver los tres Constraints NOT NULL que se crearon con la tabla. Tenga en cuenta que si nombres no son útiles-esto será solucionado en el paso 10.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>En la lista desplegable Constraint, seleccione Primary y dar clic al botón Agregar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>En la ventana Constraints Agregar PRIMARY, elija la columna EMPLOYEE_ID y dar clic en continuar, como en la siguiente ilustración, para volver a la ventana Editar Tabla.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-kVnVdlWYtio/T_UGFW2JJpI/AAAAAAAAAkk/4J2AODPTAxE/s1600/IMG9.7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="301" src="http://4.bp.blogspot.com/-kVnVdlWYtio/T_UGFW2JJpI/AAAAAAAAAkk/4J2AODPTAxE/s400/IMG9.7.jpg" width="400" /></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small;">6.</span><span class="Apple-tab-span" style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small; white-space: pre;"> </span><span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small;">Dar clic en el botón Mostrar SQL para ver la declaración de creación de Constraint, y entonces el botón Regresar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7.<span class="Apple-tab-span" style="white-space: pre;"> </span>Dar clic al botón aplicar para ejecutar la declaración.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8.<span class="Apple-tab-span" style="white-space: pre;"> </span>Conéctese a su base de datos como usuario HR con SQL PLUS.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9.<span class="Apple-tab-span" style="white-space: pre;"> </span>Ejecute esta consulta para encontrar los nombres de los Constraints.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select constraint_name,constraint_type,column_name</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">from user_constraints natural join user_cons_columns</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">where table_name='EX_EMPS';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">10.<span class="Apple-tab-span" style="white-space: pre;"> </span>Renombre el Contraints a algo mas significativo, utilizando los nombres de restricción original recuperado en el paso 9, con los comandos ALTER TABLE:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER TABLE ex_emps RENAME CONSTRAINT old_name TO new_name ;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La ilustración que sigue muestra este proceso, utilizando una convención de nombres basada en un sufijo para Constraint de llave Primary “_PK” y “_NN” para el Constraint Check NOT NULL.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-U8IpAlJeRBQ/T_UGQr1hkDI/AAAAAAAAAks/re9Bm3DaV0g/s1600/IMG9.8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="http://2.bp.blogspot.com/-U8IpAlJeRBQ/T_UGQr1hkDI/AAAAAAAAAks/re9Bm3DaV0g/s400/IMG9.8.jpg" width="400" /></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<br /></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-46929526058251394752012-07-04T04:15:00.005-07:002017-04-06T21:09:44.704-07:009.1. CREAR Y MODIFICAR TABLAS<b style="background-color: white; font-family: Verdana, sans-serif; font-size: small; text-align: justify;">CREAR Y MODIFICAR TABLAS.</b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La Base de Datos Oracle soporta varios tipos de Tablas Permanentes: Heap Tables, Indexorganized Tables, Partitioned Tables y Clustered Tables. Este capítulo solo trata con la Básica Heap Table. La Tablas existen dentro de los esquemas y deben ajustarse a las reglas para nombrar objetos de esquema. Las columnas de una tabla son definidas como ciertos Tipos de Datos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>USUARIOS, CUENTA DE USUARIO, ESQUEMAS Y OBJETOS DE ESQUEMA.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Un usuario es una persona que se conecta a la Base de Datos de un proceso usuario y se conecta a una cuenta de usuario. El capitulo 8 cubre las técnicas para crear cuentas de usuario y darles los privilegios que permitan a ellos conectarse a la Base de Datos, y entonces crear y usar objetos. Cuando una cuenta de usuario es creada, un esquema es creado también. Un esquema consiste de los objetos propiedad de la cuenta. Inicialmente, va estar vacio, un esquema es un contenedor para tablas, vistas, código y otros objetos de base de datos. Mucha gente utiliza los términos “User”, “User account” y “Schema” de manera intercambiable. En el entorno Oracle, usted puede salirse con la suya (aunque no necesariamente con otros sistemas de bases de datos).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Algunos esquemas siempre estarán vacios: el usuario nunca creara cualquier objeto, porque él no necesita hacer y (si se configura correctamente) no tendrá los privilegios necesarios de todos modos. Usuarios como estos se han concedido permisos, ya sea atraves de privilegios directos o por medio de roles, para usar Código y acceso a datos en otros sistemas, pertenecientes a otros usuarios. Otros usuarios pueden ser el revés de esto: poseerán muchos objetos pero nunca abrirán una sesión en la Base de Datos. Ni siquiera se han concedido el privilegio de CREATE SESSION, por lo que la cuenta esta deshabilitada efectivamente (o de hecho puede ser bloqueada). Estos esquemas son usados como Repositorios de código y datos, accedidos por otros. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Objetos de Esquemas son objetos con un propietario. El identificador único para un objeto de un tipo particular no es su nombre-esto es su nombre, prefijado con el nombre del esquema al cual pertenece este. Así, la Tabla HR.REGIONS es una tabla llamada REGIONS que es propiedad del usuario HR. Podría haber otra tabla SYSTEM.REGIONS, que sería una tabla completamente diferente propiedad del usuario SYSTEM, y (tal vez diferentes en estructura y contenido) residente en ese esquema de usuario. Una serie de usuarios ( y sus esquemas asociados) son creados automáticamente en tiempo de creación de la Base de Datos. Principal entre estos son SYS y SYSTEM. El usuario SYS propietario del Diccionario de Datos: un conjunto de tablas (en el Esquema SYS) que definen la Base de Datos y su contenido. SYS también es propietario de varios cientos de paquetes PL/SQL: código que se proporciona para el uso de los Administradores de Bases de Datos y Desarrolladores. Los objetos en el Esquema SYS nunca deberían ser modificados con comandos DML. Si fueron ejecutados DML contra las Tablas del Diccionario de Datos, se correría el riesgo de corromper el diccionario de datos, con resultados desastrosos. Actualizar el Diccionario de Datos ejecutando comandos DDL (tales como CREATE TABLE), que proporciona una capa de abstracción entre el usuario y el diccionario de Datos. El esquema SYSTEM almacena varios objetos adicionales utilizados para administración y supervisión.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Dependiendo de las opciones seleccionadas durante la Creación de la Base de Datos, puede haber más usuarios creados-quizás hasta treinta en total. Estos otros son utilizados para almacenar código y datos requeridos por varias opciones. Por ejemplo, el usuario MDSYS almacena los objetos utilizados por Oracle Spatial, una opción que amplía las capacidades de la Base de Datos Oracle para gestionar Información Geográfica.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">NOMBRAR OBJETOS DE ESQUEMA.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Un objeto de esquema es un objeto que es propietario de un usuario. La Base de Datos también contiene objetos non_schema (que no son de esquema); estos pueden ser objetos que no tienen que ver con los usuarios, tales como Tablespace, o en algunos casos son objetos propiedad de SYS y directamente accesible por todos los usuarios; ejemplo de estos últimos incluyen los sinónimos públicos y los public Database Links que pueden ser utilizados por todos los usuarios independientemente de los privilegios. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Para ver los objetos de esquema atreves del Database Control, tome el link apropiado por el tipo de objeto de interés, la ficha de Esquema en la Pagina principal del Database Control, como lo muestra la figura 9-1, y se le pedirá a los criterios de búsqueda diferentes. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Todos los nombres de Objetos de Esquema deben ajustarse por ciertas reglas:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>El nombre puede ser de uno a treinta caracteres de longitud, con excepción de los nombres de los Database Link, que pueden ser hasta 128 caracteres de longitud.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Palabras reservadas (tales como SELECT) no pueden ser utilizadas en nombres de objetos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Todos los nombres deben iniciar con una letra de la A a la Z.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Los nombres solo pueden usar letras, números, guion bajo, el signo de dólar ($), o el signo de numero (#).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Letras minúsculas serán convertidas a mayúsculas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-mZLb95l_QMs/T_UEII3VSRI/AAAAAAAAAj0/7wsbq4OWwJs/s1600/IMG9.1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="http://2.bp.blogspot.com/-mZLb95l_QMs/T_UEII3VSRI/AAAAAAAAAj0/7wsbq4OWwJs/s400/IMG9.1.jpg" width="400" /></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Al encerrar el nombre dentro de comillas dobles, todas estas reglas (con la excepción de la Longitud) se puede romper, pero para obtener el objeto posteriormente debe siempre ser especificado con doble comillas, como en el ejemplo de la Figura 9-2. Tenga en cuenta que algunas restricciones se aplican a los nombres de columnas. Aunque las herramientas tales como SQL*Plus automáticamente se convertirán las letras de minúsculas a mayúsculas, a menos que el nombre sea incluido dentro de comillas dobles, recuerde que nombres de objetos son siempre case sensitive. En este ejemplo, las dos tablas son completamente diferentes:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ocp10g> create table lower(c1 date);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Table created.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ocp10g> create table "lower"(col1 varchar(2));</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Table created.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ocp10g> select table_name from dba_tables where</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2 lower(table_name) = 'lower';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">TABLE_NAME</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">------------------------------</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">lower</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">LOWER</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EXAMEN</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Las Tablas no pueden utilizar palabras reservadas en sus nombres; deben iniciar con una letra; y pueden incluir solo de letras, dígitos y guion bajo, signo de dólar, y signo numeral.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-9I1oTo_9VbQ/T_UEZ1HJEAI/AAAAAAAAAj8/XGoI52iPpFM/s1600/IMG9.2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="http://4.bp.blogspot.com/-9I1oTo_9VbQ/T_UEZ1HJEAI/AAAAAAAAAj8/XGoI52iPpFM/s400/IMG9.2.jpg" width="400" /></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Mientras es posible utilizar nombres en minúsculas y caracteres non-standard (incluso espacios), es considerado mala práctica debido a la confusión que esto puede causar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>OBJECT NAMESPACES.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>A menudo se dice que el identificador único para un objeto es el nombre de objeto, con el prefijo del nombre de esquema. Mientras esto es generalmente cierto, para una comprensión completa de nombres es necesario introducir el concepto de namespace. Un namespace define un grupo de tipos de objetos, dentro del cual todos los nombres deben ser identificados de forma univoca, por esquema y nombre. Objetos en diferentes namespaces pueden compartir el mismo nombre. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Estos tipos de objetos todos comparten el mismo namespace:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Tablas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Vistas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Secuencias.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Private synonyms</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Stand-alone Procedures.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Stand-alone stored functions</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Packages.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Materialized views.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>User-definied types.</span></div>
<div style="text-align: justify;">
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"> </span></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por lo tanto, es imposible crear una vista con el mismo nombre que una tabla-al menos, es imposible si están en el mismo esquema. Y una vez creado, las sentencias SQL pueden direccionar una vista como si fuera una tabla. El hecho que las tablas, vistas y prívate synonyms comparten el mismo namespace significa que usted puede configurar varias capas de abstracción entre lo que los usuarios ven y las tablas reales. Que pueden ser muy valiosas para seguridad y para simplificar el desarrollo de aplicaciones. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Estos tipos de objetos cada uno tiene su propio namespace:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Indexes.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Constraints.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Clusters.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Database Triggers.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Private Database Links.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>Dimensions.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por lo tanto, es posible (aunque tal vez no es una buena idea) para un índice tener el mismo nombre como una tabla, incluso dentro del mismo esquema.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EXAMEN</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Dentro de un esquema, Tables, views y synonyms no pueden tener el mismo nombres.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>TIPOS DE DATOS.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Cuando creamos Tablas, cada columna se debe asignar un tipo de datos, que determina la naturaleza del valor que puede ser insertado en la columna. Estos tipos de datos son también utilizados para especificar la naturaleza de los argumentos de los Store Procedures y functions. Cuando seleccionamos un tipo de datos, usted debe considerar los datos que usted necesita almacenar y las operaciones que usted desarrollara sobre ellos. Puede ser posible cambiar una columna a un diferente tipo de dato después de la creación. Pero esto no es siempre fácil. El espacio es también una consideración: algunos tipos de datos son de longitud fija, teniendo el mismo número de bytes sin importar lo que actualmente este en ellos; otros son variables. Si una columna no es llenada, entonces oracle no le dará ningún espacio en lo absoluto; si usted más tarde actualiza e registro para llenar la columna, entonces, la fila se hace más grande, no importa si el tipo de datos es longitud fija o variable.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Tipos de Datos para Datos Alfanuméricos:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>VARCHAR2 Dato de longitud variable de caracteres, de 1 byte a 4kb. Los datos son almacenados en la base de datos en conjunto de caracteres. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>NVARCHAR2 Como VARCHAR2, pero los datos son almacenados en un juego de caracteres alternativo de la lengua nacional: uno de los permitidos es el juego de caracteres Unicode.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>CHAR Dato de longitud fija de carácter, de 1 byte a 2 kb, en el juego de caracteres de la base de datos. Si los datos no son la longitud de la columna, después serán rellenados con los espacios.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>RAW Dato de longitud variable Binario, desde 1 byte a 2kb. A diferencia de los tipos de datos CHAR y VARCHAR, Los datos RAW no son convertidos por Oracle Net del juego de caracteres de la base de datos al juego de caracteres del proceso de usuario de seleccionar, o la otra forma de insertar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Tipos de Datos para Datos Numéricos, todas las de longitud variable:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>NUMBER Dato numérico, para cual usted puede especificar la precisión y la escala. La precisión puede variar de 1 a 38; la escala puede variar de -84 a 127.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>FLOAT Este es un tipo de dato del ANSI, numero de punto flotante con precisión de 126 binario (o 36 decimal).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>INTEGER Equivalente a NUMBER, con escala cero.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Tipos de Datos para Fecha y Tiempo, todos de longitud fija:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>DATE este puede ser longitud Cero, si la columna esta vacía, o 7 Bytes. Todos los datos de la Fecha incluye siglo, año, mes, día, hora, minuto y segundo. El rango valido es de 1 Enero 4712 AC a 31 diciembre de 9999 DC.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>TIMESTAMP este es de longitud cero si la columna esta vacía, o hasta 11 bytes, dependiendo de la precisión especificada. Similar a DATE, pero con una precisión de hasta nueve decimales para los segundos, seis lugares por defecto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>TIMESTAMP WITH TIMEZONE como TIMESTAMP, pero los datos se almacenan con un registro guardando de la zona horaria a la que se refiere. La longitud puede ser hasta 13 Bytes, dependiendo de la precisión. Este tipo de dato permite a Oracle determinar la diferencia entre dos horas por la normalización de ellos a la hora UTC. Incluso si los tiempos son para zonas horarias diferentes.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>TIMESTAMP WITH LOCAL TIMEZONE como TIMESTAMP, pero los datos se normalizan a la zona horaria de la Base de Datos, cuando se recupera, se normaliza a la zona horaria del proceso usuario seleccionado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>INTERVAL YEAR TO MONTH se utiliza para la grabación de un periodo de años y meses entre dos DATE o TIMESTAMPs.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>INTERVAL DAY TO SECOND utilizado para guardar un periodo de días y segundos entre dos DATES o TIMESTAMPs.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Tipos de Datos de Objetos Grandes:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>CLOB los Datos de carácter almacenados en el juego de caracteres de la Base de Datos, tamaño prácticamente ilimitado: 4GB multiplicado por el tamaño de Database Block.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>NCLOB como CLOB, pero los datos son almacenado en un juego de caracteres alternativo: uno de los juego de caracteres Unidode permitidos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>BLOB como CLOB, pero datos binarios que no se someterán a la conversión del juego de caracteres por Oracle Net.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>BFILE un localizador que apunta a un archivo almacenado en el sistema operativo del servidor de base de datos. El tamaño de los archivos está limitado a 4 GB.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>LONG Datos carácter en el juego de caracteres de la Base de Datos, hasta 2 GB. Toda la funcionalidad de LONG es proporcionada por CLOB, LONG no debe ser utilizada en una Base de Datos moderna, y si su Base de Datos tiene columnas de este tipo, debe ser convertido a CLOB.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">•<span class="Apple-tab-span" style="white-space: pre;"> </span>LONG RAW como LOG, pero datos binarios que no serán convertidos por Oracle Net cualquier columna LONG RAW debe ser convertida a BLOB.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Para la conformidad ISO/ANSI, usted puede especificar un tipo de Dato VARCHAR cuando creas Tablas, pero cualquier columna de este tipo será automáticamente convertida a VARCHAR2.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Oracle provee un rango de typecasting para conversión entre tipos de datos, y en algunas circunstancias hará typecasting automáticamente, la figura 9-3 ilustra ambas técnicas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>En la figura, el primer insert utiliza funciones typecasting para convertir los datos carácter introducidos a el tipo de dato de la columna de la Tabla. El segundo insert intenta insertar cadena de caracteres en las tres columnas, pero el insert todavía tiene éxito porque Oracle puede convertir tipos de datos automáticamente si es necesario, y si el formato de los datos es adecuado. Tenga en cuenta que la exactitud del typecasting puede ser dependiente de los datos. En este ejemplo, la fecha es interpretada como una fecha estilo europea (dia-mes-año), cuál no pudo ser pensado si los usuarios suceden utilizar estilos americanos (mes-dia-año) que emite un error, o estilo africano (año-mes-día), que iba a funcionar, pero no pretende ser.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EN EL TRABAJO</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>No confié en el Typecasting automático, puede impactar en le rendimiento y no siempre funciona. El entorno Oracle es inflexible de tipos, y sus programadores deberían respetar esto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-GkyKwzXn4hA/T_UEvjqk34I/AAAAAAAAAkE/zZNs4DI65jI/s1600/IMG9.3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="http://1.bp.blogspot.com/-GkyKwzXn4hA/T_UEvjqk34I/AAAAAAAAAkE/zZNs4DI65jI/s400/IMG9.3.jpg" width="400" /></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CREANDO TABLAS</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>La sintaxis para crear una tabla requiere dar el Nombre de la Tabla (Cual debe ser único dentro del namespace en el esquema al cual la tabla pertenece) y especificar una o más columnas, cada una con un tipo de dato. También es posible especificar Constraints (restricciones) cuando crea una Tabla; alternativamente, los Constraints puede ser añadidos posteriormente. Hay muchos ejemplos en este libro de creación de tablas desde la línea de comandos de SQL PLUS (ha habido ya dos ejemplos en este capítulo), pero también puede ser hecho atraves del Database Control. Database Control provee una interfaz completamente funcional basada en menús para la creación y edición de estructuras de tablas. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Todas las tablas requieren de almacenamiento. A menos que se especifique lo contrario, las tablas serán creadas con un Extent en el Tablespaces por default del creador. Cualquier otro Tablespace en cual el usuario tiene una cuota puede ser especificado en el tiempo de creación. O una tabla puede ser movida a un Tablespace diferente posteriormente. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Para llegar a la ventana de gestión de Tablas de Database Control, desde la pagina principal del Database Control tome la ficha Esquema, luego el Link Tablas en la sección de Objetos de Base de Datos, como se muestra en la figura 9-4. Ingrese cualquier criterio de búsqueda necesarios para localizar una tabla de interés; tome en cuenta que comillas dobles pueden ser utilizados para encontrar tablas con nombre no estándar y el comodín %. Dar clic en la lista desplegable de acciones para ver qué posibilidades están disponibles.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Las acciones son:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-MRXe4jbX3XM/T_UFOOBz8tI/AAAAAAAAAkM/4ax7ynfAW74/s1600/IMG9.4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="432" src="http://3.bp.blogspot.com/-MRXe4jbX3XM/T_UFOOBz8tI/AAAAAAAAAkM/4ax7ynfAW74/s640/IMG9.4.jpg" width="640" /></a></div>
<br /></div>
<div style="text-align: justify;">
<span class="Apple-tab-span" style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small; white-space: pre;"> </span><span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small;">El botón Edit va a un ventana que desplegara la estructura de columnas de la Tabla. Desde aquí, columnas pueden ser agregados, eliminados y modificados. Por ejemplo SQL para hacer esto son:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table dept add (started date);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table dept modify (started timestamp);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table dept drop column started;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>En este ejemplo, el primer comando agrega una columna STARTED a la Table, tipo de dato DATE. El segundo comando modifica el tipo de dato a TIMESTAMP. El tercer comando elimina la columna.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-q5DAQZv_S3Y/T_UFeVtmbEI/AAAAAAAAAkU/C6YTwwh0hdI/s1600/IMG9.5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="http://2.bp.blogspot.com/-q5DAQZv_S3Y/T_UFeVtmbEI/AAAAAAAAAkU/C6YTwwh0hdI/s400/IMG9.5.jpg" width="400" /></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Para eliminar una tabla, utilice el comando DROP TABLE. Sintácticamente, esto es muy simple:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">DROP TABLE table_name [CASCADE CONSTRAINTS] ;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Cuando una table es Eliminada, todos los índices y trigers asociados serán eliminados también. Los Constraint serán eliminados. Aunque si la tabla es la tabla padre en un Constraint de clave externa (Foreign Key Constraint), la eliminación fallara a menos que sea especificado la palabra CASCADE CONSTRAINT.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>EJERCICIO 9-1.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>CREAR Y MODIFCAR TABLAS.</b></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, utilice SQL PLUS para crear y modificar una simple tabla, y luego utilice el Database Control para extraer el DDL necesario para recrear esto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Conéctese a su Base de Datos con SQL PLUS como usuario HR.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Crear una tabla como sigue:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create table ex_emps as select * from employees where 1=2;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esto creara una table vacia, en el Tablespace default de HR, destinada a almacenar los detalles del persona que han sido despedidos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Remover las columnas no relevantes para exemployees:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table ex_emps drop column email;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table ex_emps drop column phone_number;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Agregar columnas necesarias en la nueva Tabla:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table ex_emps add (fire_date date);</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table ex_emps add(reason varchar2(20));</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>Conectarse a la Base de datos con Database Control como usuario SYSTEM.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6.<span class="Apple-tab-span" style="white-space: pre;"> </span>Localice la nueva tabla Creada. La ruta de navegación es tomar la ficha Esquema de la página principal de la Base de Datos. Y dar clic en el Link Tables en la sección Objetos de Base de Datos. Ingrese HR como criterio de búsqueda en dar clic en seguir. Esto localizara todas las tablas de HR.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7.<span class="Apple-tab-span" style="white-space: pre;"> </span>Seleccione el Radio Button de la Tabla EX_EMPS, generar DDL en la lista de acciones, y dar clic en Ir. El DDL generados se parecerá a la que se muestra en la ilustración:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-x9t4RQPHONg/T_UFt4PhJYI/AAAAAAAAAkc/D3iy8SEB3f4/s1600/IMG9.6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="263" src="http://3.bp.blogspot.com/-x9t4RQPHONg/T_UFt4PhJYI/AAAAAAAAAkc/D3iy8SEB3f4/s400/IMG9.6.jpg" width="400" /></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="background-color: white;">8.</span><span class="Apple-tab-span" style="background-color: white; white-space: pre;"> </span><span style="background-color: white;">Estudie el DDL generado. Tenga en cuenta que no es nada como la especificada en el paso 2: dobles comillas son utilizados alrededor de todos los nombres, Constraints NOT NULL han sido copiados, pero no a otros; por defecto se han aplicado para Tablespaces, almacenamiento y la LOGGING y COMPRESS opciones.</span></span></div>
<div style="text-align: justify;">
<br /></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-44134482041131701102012-07-04T04:12:00.004-07:002017-04-06T21:09:44.687-07:009. Gestión de Objetos de Esquema<span style="background-color: white; font-family: Verdana, sans-serif; font-size: x-small; text-align: justify;"><b>GESTIÓN DE OBJETOS DE ESQUEMA.</b></span><br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Objetivos de Certificación</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1.Crear y Modificar Tablas.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2.Gestionar Constraint.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3.Crear Índices.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4.Crear y Usar Tablas Temporales.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los Datos en una Base de Datos Oracle son almacenados en Tablas. Constraint (Restricciones), son aplicados a las Tablas, son el medio por el cual la Base de Datos puede implementar algunas de las reglas de negocio definidas por los Analistas de Negocios. Los índices son necesarios para hacer cumplir algunas restricciones y necesarios por razones de rendimiento. Tablas, Constraint, e Índices son objetos de esquema: no pueden existir independientemente de los usuarios a quien pertenecen. </span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La parte Final del capítulo se ocupa de las Tablas Temporales (a menudo denominado como Tablas Temporales Globales). El contenido de una tabla temporal es visible solo en una sesión y es limpiada cuando la sesión termina. El rendimiento de DML y consultas contra las Tablas Temporales puede ser muchas veces más rápido que contra las Tablas permanentes. Las tablas temporales son una capacidad muy útil que todos los desarrolladores y administradores deben tener en cuenta.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El diseño de la Estructura de Tablas, Índices y Constraint debe ser un ejercicio cooperativo entre varias partes:</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Analistas de Negocio, que modelan los procesos de negocio que el sistema debe implementar.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Analistas de sistemas, que normalizan los Datos en una forma ideal.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Diseñadores de Sistemas, que adaptan la forma ideal a la realidad del entorno.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Diseñadores de Aplicaciones, que escriben el SQL para implementar el diseño.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Administradores de Bases de Datos, que tienen que hacer el trabajo de diseño.</span></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-36612626154622435402012-07-02T19:45:00.004-07:002017-04-06T21:09:44.666-07:008.4. CREAR Y UTILIZAR PERFILES.<br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREAR Y UTILIZAR PERFILES.</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, crear, asignar, y comprobar un Perfil que obligará a un cierto Control de Password.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Conectarse a su Base de Datos con SQL*PLUS como usuario SYSTEM.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Crear un Perfil que se bloqueara las cuentas después de dos contraseñas incorrectas.</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create profile two_wrong limit failed_login_attempts 2;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Asignar este Nuevo Perfil a ALOIS:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user alois profile two_wrong;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Deliberadamente ingrese una contraseña incorrecta para ALOIS unas pocas veces.</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect alois/wrongpassword</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5. Como usuario SYSTEM, desbloque la cuenta ALOIS:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user alois account unlock;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6. Compruebe que ALOIS puede ahora conectarse:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect alois/oracle</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La siguiente ilustración muestre la secuencia de eventos.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Quq3NiSfrmM/Ty3nG3c6sfI/AAAAAAAAAaU/ggdH5ouEPTw/s1600/cap+8+-+img+16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="321" src="http://3.bp.blogspot.com/-Quq3NiSfrmM/Ty3nG3c6sfI/AAAAAAAAAaU/ggdH5ouEPTw/s400/cap+8+-+img+16.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7. Poner en orden para Eliminar el Perfil, Los Roles y los usuarios. Observe el uso del CASCADE al eliminar el Perfil para quitarlo de ALOIS, y en el comando DROP USER para eliminar su tabla también. Los Roles pueden ser eliminados incluso si se les ha asignado a los usuarios. Las privilegios otorgados sobre la Tabla serán revocados como la Tabla es Eliminada.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect system/oracle</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">drop profile two_wrong cascade;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">drop role usr_role;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">drop role mgr_role;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">drop user alois cascade;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">drop user anja;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">drop user afra;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">RESUMEN DE CERTIFICACION.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Las cuentas de usuario definen los usuarios que pueden conectarse a la Base de Datos y se asocian con un esquema que almacena objetos propiedad de la cuenta. Privilegios deben ser otorgados a una cuenta (directamente o vía Roles) antes de que la cuenta se usable de cualquier manera. Los privilegios viene en dos formas: Privilegios del Sistema que controlan ciertas acciones dentro de la Base de Datos (típicamente, las acciones que cambios al Diccionario de Datos) y Privilegios de Objetos que controlan acceso a los Datos. Un Rol es un paquete de privilegios. A diferencia de un privilegio (que siempre es posible cuando se ha concedido), un Rol puede ser habilitado o deshabilitado dentro de una sesión. Los perfiles dan control sobre las contraseñas de las cuentas y uso de los recursos. Todas la cuentas de usuarios tiene un perfil, por defecto el perfil es llamado DEFAULT. El perfil DEFAULT se puede ajustar, y el cambio inmediatamente se aplicara a todos los usuarios con el perfil DEFAULT. O perfiles adicionales pueden ser creados y asignados explícitamente a ciertos usuarios.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">DOS MINUTOS</span></b><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear y Gestionar Cuentas de Usuarios de Base de Datos.</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los usuarios se conectan a una cuenta de usuario, que está conectada a un Esquema.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Todos los usuarios deben ser autenticados antes de que puedan conectarse.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un usuario debe tener una Quota en un Tablespace antes que pueda crear cualquier objeto.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un usuario que es dueño de los objetos no puede ser Eliminado, a menos con las palabra CASCADE.</span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Otorgando y Revocar Privilegios</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Por Default, un usuario no puede hacer nada, incluso no puede Log On.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los privilegios Directos son siempre habilitados.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Una revocación de un Privilegio de Sistema no en cascada; una revocación de un privilegio de Objeto se.</span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear y Gestionar Roles.</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los Roles no son Objetos de Esquema.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los Roles pueden contener ambos privilegios de sistema y de objeto, y otros roles.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un Rol puede ser habilitado o deshabilitado para una sesión.</span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear y Gestionar Perfiles.</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los Perfiles pueden gestionar Passwords y limites de recursos.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los límites de Password se hacen cumplir; los límites de los recursos dependen de un parámetro de instancia.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Cada usuario siempre tiene un Perfil, Por default el perfil es DEFAULT.</span><br />Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-9112965280857535932012-07-02T19:45:00.000-07:002017-04-06T21:09:44.810-07:008.3. CREAR Y GESTIONAR ROLES.<br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREAR Y GESTIONAR ROLES.</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Administrar la seguridad con privilegios otorgados directamente funciona, pero tiene dos problemas. Primero, puede ser una enorme carga de trabajo: una aplicación con miles de tablas y los usuarios pueden necesitar millones de GRANT. Segundo, si un privilegio ha sido otorgado a un usuario, ese usuario lo tiene en todas las circunstancias: no es posible hacer un privilegio activo solo en ciertas circunstancias. Ambos problemas se resuelven utilizando roles. Un rol es un paquete o conjunto de privilegios de sistemas y de objetos que pueden ser otorgados y revocados como una unidad, y habiendo sido concedidos pueden ser temporalmente activados o desactivados dentro de una sesión.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREANDO Y OTORGANDO ROLES.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los roles no son esquemas de objetos: no son propiedad de nadie y así que no pueden ser prefijados con un username. Sin embargo, comparten el mismo namespace como usuarios: no es posible crear un rol con el mismo nombre que un usuario ya existente o un usuario con el mismo nombre de un rol ya existente.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear un rol con el comando CREATE ROLE:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREATE ROLE rolename ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">A continuación otorgue privilegios al Rol con la sintaxis usual, incluyendo WITH ADMIN o WITH GRANT OPTION deseada.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por ejemplo, suponer que el esquema HR se utiliza como un repositorio de Datos para ser utilizado por tres grupos de personal: Managerial staff tiene acceso completo, Senior Clarical Staff tiene acceso limitado, Junio Clerical staff tiene acceso muy restringido. Primero crear un Rol que podría ser adecuado para Junior Clerk; todo lo que puede hacer es responder a las preguntas de ejecución de consultas:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create role hr_junior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant create session to hr_junior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.regions to hr_junior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.locations to hr_junior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.countries to hr_junior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.departments to hr_junior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.job_history to hr_junior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.jobs to hr_junior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.employees to hr_junior;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-align: justify;">Cualquiera que otorga este roll sera capaz para conectarse a la Base de Datos y ejecutar sentencias SELECT contra las tablas de HR. Luego crear un Rol para el senior Clerks, que también puede escribir datos a las tablas EMPLOYEES y JOB_HISTORY:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create role hr_senior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant hr_junior to hr_senior with admin option;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant insert, update, delete on hr.employees to hr_senior;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant insert, update, delete on hr.job_history to hr_senior;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">A este roles primero otorgado el rol HR_JUNIOR (no hay problemas otorgar un rol a otro) con la sintaxis que permitirá a los usuarios senior asignar el rol junior a otros. A continuación se otorgan privilegios DML a solo dos tablas. A continuación crear el Rol Managers, que puede actualizar todas las otras tablas:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create role hr_manager;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant hr_senior to hr_manager with admin option;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on hr.regions to hr_manager;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on hr.locations to hr_manager;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on hr.countries to hr_manager;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on hr.departments to hr_manager;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on hr.job_history to hr_manager;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on hr.jobs to hr_manager;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on hr.employees to hr_manager;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El tercer rol se da el Rol de HR_SENIOR con la capacidad de transmitirlo, y luego toma el control total sobre el contenido de todas la Tablas. Pero tenga en cuenta que el único privilegio de este rol sea CREATE_SESSION, adquiridos atraves de HR_SENIOR, que adquirió a través de HR_JUNIOR. Ni siquiera este rol puede crear o eliminar tablas; que se debe hacer por sí mismo, o un administrador con CREATE ANY TABLE o DROP ANY TABLE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Tenga en cuenta la sintaxis WITH ADMIN OPTION, que es la misma como para otorgar privilegios de sistemas. Como con privilegios de sistema, la revocación de un rol no en cascada. No hay ningún registro guardado de que se ha concedido un rol a quien.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Finalmente, conceder los roles al personal relevante, si SCOTT es un Administrador, SUe es un senior clerk y JON y ROOP es un junior clerks.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-xSplVF9IYnQ/Ty3kTjG_GyI/AAAAAAAAAZs/eWn21rn8-Yk/s1600/cap+8+-+img+11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="172" src="http://4.bp.blogspot.com/-xSplVF9IYnQ/Ty3kTjG_GyI/AAAAAAAAAZs/eWn21rn8-Yk/s400/cap+8+-+img+11.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">ROLES PREDEFINIDOS</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay al menos 50 roles predefinidos en una Base de Datos Oracle (posiblemente muchos más, dependiendo sobre que opciones han sido instaladas). Unos que un DBA debe estar consciente son:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• CONNECT Este únicamente existe por compatibilidad atrás. En previas versiones, tenia los privilegios de sistema necesarios para crear objetos de almacenamiento de datos, tales como tablas; con las actuales versiones, solo tiene CREATE SESSION.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• RESOURCE también por compatibilidad atrás, este rol puede crear ambos objetos, objetos de datos (tales como tablas) y objetos de procedimientos (tales como procedimientos PL/SQL). También incluye UNLIMITED TABLESPACE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• DBA tiene la mayoría de los privilegios de sistemas, y varios privilegios de objetos y roles. Cualquier usuario con DBA puede gestionar prácticamente todos los aspectos de la Base de Datos, excepto para inicio y parada.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• SELECT_CATALOG_ROLE tiene más de 2000 privilegios de objetos contra el diccionario de datos de objetos, pero no privilegios de sistema o privilegios contra datos del usuario. Útiles para administradores junior que deben monitorear y reportar sobre la Base de Datos pero no ser capaz de ver los datos de los usuarios.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• SCHEDULER_ADMIN tiene los privilegios necesarios para gestionar el servicio de programación e Jobs.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay también predefinido un Rol público, que siempre es otorgado a cada cuenta de usuario de Base de Datos. Sigue que si un privilegio es otorgado a PUBLIC, estará disponible para todos los usuarios. Así pues siguiendo este orden:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.regions to public;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Todos los usuarios serán capaces de consultar la Tabla HR.REGIONS.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Rol PUBLIC es tratado diferente de cualquier otro Rol. No hace, por ejemplo, aparezca en la vista DBA_ROLES. Esto se debe a que el código fuente de DBA_ROLES, que se puede ver en el script cdsec.sql llamado por el script catalog.sql, la excluye específicamente.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">HABILITACION DE ROLES</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por default, si un usuario se le ha concedido un Rol, entonces el rol se habilitara. Esto significa que el momento que una sesión establece una conexión a la cuenta de usuario, todos los privilegios (y otros Roles) otorgados al Rol se activarán. Este comportamiento puede ser modificado haciendo el Rol non-default. Siguiendo el ejemplo dado en la sección precedente, esta consulta muestra que Roles han sido concedidos a JON:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">SQL> select * from dba_role_privs where grantee='JON';</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">GRANTEE GRANTED_ROLE ADM DEF</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">----------------------------- --------------- --- ---</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">JON HR_JUNIOR NO YES</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">A JON ha sido otorgado HR_JUNIOR. El no tiene la administración en el ROL (así que él no puede pasarlo a cualquier persona), pero es un Rol default, el tendrá este Rol cada vez que se conecta. Esta situación no bien puede ser lo que usted quiere. Por ejemplo, JON tiene que ser capaz para ver las Tablas de HR (en su trabajo) pero eso no significa que usted quiera que él sea capaz marcar desde casa, a media noche, y hackear a las tablas con SQL * Plus. Usted quiere arreglar las cosas de tal manera que él pueda sol ver las tablas cuando se encuentra en una terminal en la oficina de personal, ejecutando la aplicación de HR, en horas de trabajo. Para cambiar el comportamiento por defecto:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user jon default role none;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-align: justify;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small; text-align: justify;">Ahora cuando JON inicie sesión, no tendrá ningún rol habilitado. Desafortunadamente, esto significa que no puede iniciar sesión en lo absoluto, porque solo HR_JUNIO da privilegio de sistema CRETA_SESSION. Puede arreglar fácilmente.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">SQL> grant connect to jon;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">Grant succeeded.</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">SQL> alter user jon default role connect;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">User altered.</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">SQL> select * from dba_role_privs where grantee='JON';</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">GRANTEE GRANTED_ROLE ADM DEF</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">------------------------------ --------------- --- ---</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">JON HR_JUNIOR NO NO</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">JON CONNECT NO YES</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Ahora cuando JON se conecte, solo el Rol CONNECT es habilitado. Y la versión actual de CONNECT no es peligrosa en lo absoluto. Dentro de la aplicación, los comandos de software puede ser integrados para que el Rol HR_JUNIO. El comando básico para habilitar un Rol dentro de una sesión es:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">SET ROLE rolename ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Que puede ser emitido por el usuario en cualquier momento. Así que no hay seguridad todavía. Pero si el rol es creado con esta sintaxis:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREATE ROLE rolename IDENTIFIED USING procedure_name ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Entonces, el rol solo puede ser habilitado mediante la ejecución del procedimiento PL/SQL nominado por procedure_name. Esto procedimiento puede hacer cualquier numero de controles, tales como que el usuario está trabajando en una determinada subred TCP/IP; que se está ejecutando un procedo de usuario en particular (probablemente no en SQL*PLUS); que el tiempo está en un cierto rango; y así sucesivamente. Incorporación de las llamadas a los procedimientos que habilitan en los lugares adecuados en una aplicación puede cambiar de rol dentro y fuera como sea necesario, mientras que los deja inhabilitados siempre cuando una conexión se hace con una herramienta ad hoc del SQL tal como SQL*Plus.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Puede ser muy difícil resolver como un usuario puede ver ciertos datos. Puede haber sido concedido un SELECT específico; puede haber sido concedido ALL; puede tener SELECT ANY; SELECT puede haber sido concedido a PUBLIC; puede tener un rol al que SELECT ha sido concedido. Puede tener todos estos, en el que todos tendrían que revocados para detener para que vea sus datos.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJERCICIO 8-3.</span></b><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREAR Y OTORGAR ROLES.</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, creará algunos roles, otorgará ellos a los usuarios, y demostrar su eficacia.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Conéctese a su Base de Datos con SQL*PLUS como usuario SYSTEM.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Cree dos roles como sigue:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create role usr_role;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create role mgr_role;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Conceda algunos privilegios a los Roles, y conceda USR_ROLE a MGR_ROLE:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant create session to usr_role;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on alois.t1 to usr_role;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant usr_role to mgr_role with admin option;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on alois.t1 to mgr_role;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Como usuario SYSTEM, conceda los roles a AFRA y ANJA:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant mgr_role to AFRA;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5. Conectse a la Base de Datos como AFRA:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect afra/oracle;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6. Conceda el USR_ROLE a ANJA, e inserte una fila en ALOIS.T1:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant usr_role to anja;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">insert into alois.t1 values(sysdate);</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">commit;</span></i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7. Confirme a ANJA se puede conectar y consulte ALIOS.t1 pero no hacer nada mas:</span></div>
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect anja/oracle</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from alois.t1;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">insert into alois.t1 values(sysdate);</span></i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8. Como usuario SYSTEM, modifique ANJA asi que por defecto se puede iniciar la session pero no hacen nada mas:</span></div>
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect system/oracle</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant connect to anja;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user anja default role connect;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9. Mostrar la habilitación y des habilitación de los roles.</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect anja/oracle</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from alois.t1;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">set role usr_role;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from alois.t1;</span></i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">10. Utilice el Database Control para inspeccionar los roles. La ruta de navegación es: en la ficha Server dar clic en el link Roles en la sección de Security. Haga clic en los enlaces para las dos nuevas funciones para ver a sus privilegios. Esta ilustración muestra la MGR_ROLE:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-_1pRqnEpEi0/Ty3kldH76UI/AAAAAAAAAZ0/qLZqoMKIZe0/s1600/cap+8+-+img+12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="281" src="http://1.bp.blogspot.com/-_1pRqnEpEi0/Ty3kldH76UI/AAAAAAAAAZ0/qLZqoMKIZe0/s400/cap+8+-+img+12.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">11. Para considerar a quien un Rol ha sido concedido, en el cuadro desplegable Acciones se muestra en la ilustración anterior, seleccione Mostrar los concesionarios y haga clic en el botón Go. Esta ilustración muestra el resultado de USR_ROLE:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/--sWKoSpHBdw/Ty3k4cxThLI/AAAAAAAAAZ8/yR2sfN-mVBk/s1600/cap+8+-+img+13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="283" src="http://2.bp.blogspot.com/--sWKoSpHBdw/Ty3k4cxThLI/AAAAAAAAAZ8/yR2sfN-mVBk/s400/cap+8+-+img+13.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">12. Obtener la misma información recuperada en los pasos 10 y 11 con estos querys.</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from dba_role_privs where granted_role in ('USR_ROLE','MGR_ROLE');</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select grantee,owner,table_name,privilege,grantable from dba_tab_privs where grantee in ('USR_ROLE','MGR_ROLE')</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">union all</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select grantee,to_char(null),to_char(null),privilege,admin_</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">option from dba_sys_privs where grantee in ('USR_ROLE','MGR_ROLE')</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">order by grantee;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">OBJETIVO DE CERTIFICACION 8.04.</span></b><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREAR Y GESTIONAR PERFILES.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un perfil tiene una doble función: para obligar una política de contraseñas y para restringir los recursos de una sesión pueda tomar. Los controles de contraseñas se hacen cumplir siempre; los límites de recursos se hacen cumplir solamente si el parámetro de instancia RESOURCE_LIMIT es verdadero. Por defecto, está en falso. Los perfiles son utilizados de forma automática, pero el perfil DEFAULT (aplicado por default a todos los usuarios, incluyendo SYS y SYSTEM) hace muy poco.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Perfil limite contraseña siempre se hacen cumplir, Perfil limite de recursos son obligados únicamente si el parámetro de instancia RESOURCE_LIMIT es verdadero.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">GESTION DE CONTRASEÑAS</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los límites que pueden ser aplicados a las contraseñas son:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• FAILED_LOGIN_ATTEMPTS especifica el número de errores consecutivos en una contraseña antes de que la cuenta está bloqueada. Si la contraseña es correcta antes este límite es alcanzado, el contador se ajustara a cero.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• PASSWORD_LOCK_TIME el número de días para Bloquear una cuenta después que FAILED_LOGIN_ATTEMPTS es alcanzado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• PASSWORD_LIFE_TIME el número de días antes que una contraseña expire. Puede todavía ser usable después de este tiempo, dependiendo de PASSWORD_GRACE_TIME.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• PASSWORD_GRACE_TIME El número de días después de la primea conexión exitosa después que el Password ha caducado que le pide cambiar la contraseña será generada. El viejo Password es todavía usable durante este tiempo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• PASSWORD_REUSE_TIME el número de días antes que una contraseña pueda ser reutilizada.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• PASSWORD_REUSE_MAX a continuación, el número de veces que una contraseña puede ser reutilizado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• PASSWORD_VERIFY_FUNCTION el nombre de una función para ejecutar cada vez que una contraseña es modificado. El propósito de la función se asume para comprobar la nueva contraseña para requerir un grado de complejidad, pero puede hacer bastante mucho cualquier cosa que usted quiere.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-LiXJxQTLB_A/Ty3mMlf3qgI/AAAAAAAAAaE/34Gwl9CI72o/s1600/cap+8+-+img+14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="166" src="http://3.bp.blogspot.com/-LiXJxQTLB_A/Ty3mMlf3qgI/AAAAAAAAAaE/34Gwl9CI72o/s400/cap+8+-+img+14.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">LIMITES DE RECURSOS</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los límites que pueden ser aplicados al uso de recursos (también conocido como Kernel Limits) son:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• SESSIONS_PER_USER el número de conexiones concurrentes que puede ser hechas a la misma cuenta de usuario. Las sesiones intentan iniciar una sesión con el mismo nombre de usuario cuando este límite es alcanzado será bloqueado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• CPU_PER_SESSION el tiempo de CPU (en centisegundos) que un proceso de servidor de una sesión está permitido a utilizar antes que la sesión es terminada por la fuerza.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• CPU_PER_CALL el tiempo de CPU (en centisegundos) que un proceso servidor de una sesión está permitido a utiliza para ejecutar una sentencia SQL antes que la sentencia sea forzada a terminar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• LOGICAL_READS_PER_SESSION el numero de Blocks que pueden ser leídos por una sesión (Independientemente de si estaban en la caché del búfer de base de datos o leer desde el disco) antes que la sesión es forzada a terminar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• LOGICAL_READS_PER_CALL el número de Blocks que pueden ser leídos por una única sentencia (independientemente de si están en el Database Buffer Cache o leídos desde disco) antes que la sentencia sea forzada a terminar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• PRIVATE_SGA para sesiones conectadas atraves de la arquitectura Servidor compartido, el número de kilobytes que la sesión se le permite tomar en el SGA para los datos de la sesión.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• CONNECT_TIME en minutos, la duración máxima de una sesión antes que la sesión sea forzada a terminar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• IDLE_TIME en minutos, el tiempo máximo de una sesión que puede estar ociosa antes de que la sesión se termine forzadamente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• COMPOSITE_LIMIT una suma ponderada de CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION, y PRIVATE_SGA.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los límites de recursos no se aplicaran a menos que un parámetro de instancia se ha establecido.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter system set resource_limit=true;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Este por default es FALSE.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cuando una sesión es terminada porque un límite de recursos ha sido alcanzado, si había una transacción en progreso será hecha roll back. Si una sentencia es terminada, el trabajo realizado por la sentencia sera Roolled back, pero cualquier declaración anterior seguirá siendo intacta y sin compromiso.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los perfiles pueden ser utilizados para limitar el uso de recursos, pero una herramienta mucho más sofisticada es el Recource Manager.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">DENTRO DEL EXAMEN</span></b><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Administración de la Seguridad del Usuario.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La seguridad por defecto en una Base de Datos Oracle es de 100 porciento. Usted no puede incluso abrir una sesión sin el otorgamiento del permiso para hacerlo. No hay manera de conectase de forma anónima, aun que hay varias maneras de autentificarse. Una vez conectado a una cuenta de usuario, están limitadas por privilegiados y roles que han sido otorgados. Y por su cuota en Tablespace. Un rol es solo un conjunto de privilegios de objeto y sistema, pero a diferencia un privilegio otorgado directamente, un rol puede ser habilitado o deshabilitado dentro de una sesión.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Otorgar privilegios de sistema, privilegios de objetos y roles es similar en concepto, pero requiere una sintaxis ligeramente diferentes. La sintaxis para un REVOKE es idéntica. La revocación de un privilegio de objeto caerá en cascada, pero la revocación de un rol o un privilegio de sistema no lo harán.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los perfiles pueden ser utilizados para obligar normas en Passwords y para control de los usuarios de los recursos se les permite tomar posesión en la Base de Datos.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREANDO Y ASIGNANDO PERFILES.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los perfiles pueden ser gestionados a través del Database Control o desde SQL*PLUS. Para mirar que perfil está asignado actualmente a cada usuario, ejecute esta consulta:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select username,profile from dba_users;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por default , todos los usuarios (con la excepción de dos usuarios Internos, DBSNMP y WKSYS) tendrán asignado el Perfil llamado DEFAULT. Entonces las vista que mostrará los perfiles de ellos mismos es DBA_PROFILES:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from dba_profiles where profile='DEFAULT';</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">O con el Database Control, desde la pagina principal de la Base de Datos tomar la Ficha Server, y a continuación dar clic al Link Users en la sección de Seguridad para ver que Perfil cada usuario tiene. Seleccione un usuario y dar clic en el Botón Edit para asignar un Perfil diferente. Para ver como el Perfil está configurado. Dar clic en el Link Perfiles en la sección de Seguridad.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El perfil DEFAULT no tiene límites en recursos en los Absoluto, pero hay algunos límites en Password:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/--vyGuTz4yY8/Ty3mhK2q4zI/AAAAAAAAAaM/rQqCXIJJKyU/s1600/cap+8+-+img+15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="50" src="http://2.bp.blogspot.com/--vyGuTz4yY8/Ty3mhK2q4zI/AAAAAAAAAaM/rQqCXIJJKyU/s400/cap+8+-+img+15.png" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Estas restricciones no son muy estrictas: un Password puede ser ingresado incorrectamente diez veces consecutivas antes de que la cuenta sea bloqueada por un día, y un Password caducará después de seis meses con un periodo de gracia de una semana para cambiarlo después de eso.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La manera más simple para permitir una gestión más sofisticada de la contraseña es ejecutando un script proporcionado. En Unix o Linux es.</span></div>
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">$ORACLE_HOME/rdbms/admin/utlpwdmg.sql</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En Windows es.</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">%ORACLE_HOME%\rdbms\admin\utlpwdmg.sql</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En cualquier plataforma, el script crea dos funciones llamadas VERIFY_FUNCTION y VERIFY_FUNCTION_11G, y se ejecuta este comando:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER PROFILE DEFAULT LIMIT</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">PASSWORD_LIFE_TIME 180</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">PASSWORD_GRACE_TIME 7</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">PASSWORD_REUSE_TIME UNLIMITED</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">PASSWORD_REUSE_MAX UNLIMITED</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">FAILED_LOGIN_ATTEMPTS 10</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">PASSWORD_LOCK_TIME 1</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">PASSWORD_VERIFY_FUNCTION verify_function_11G;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El comando ajustará el perfil llamado DEFAULT. Cualquier usuario con el perfil DEFAULT (que son todos los usuarios por default) inmediatamente recoger los nuevos valores. Despues de una creación de Base de Datos estándar, el único cambio será la especificación del PASSWORD_VERIFY_FUNCTION. La función nominada, VERIFY_FUNCTION_11G, hace un conjunto de pruebas simples y rechazará un cambio de Password sino pasa todos.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• El nuevo Password debe tener al menos ocho caracteres de Longitud.</span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• El nuevo Password no puede ser el mismo como el username (deletreado adelante o atrás) o el nombre de la Base de Datos, en mayúsculas o minúsculas.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un poco simple y Password utilizados comúnmente (tales como oracle) serán rechazada.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• El nuevo Password debe tener al menos una letra y por lo menos un digito.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• El Password debe diferir en al menos tres caracteres del Password anterior.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El script debe ser visto como un script de ejemplo (sin duda la función es muy elemental) y debe ser editado a las necesidades de la organización. La mayoría de las organizaciones necesitarán ir más allá que esto y crear un conjunto de perfiles para ser aplicados a diferentes usuarios.</span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para crear un perfil con SQL*PLUS, utilice el comando CREATE PROFILE, establecer los límites de los que se requiere. Cualquier limite no especificado será cogido de la versión actual del perfil DEFAULT. Por ejemplo, podría ser que las normas de la organización indican que ninguno usuario debería ser capaz de iniciar sesión en más de una vez. Excepto para el personal de administración, quien puede iniciar sesión tantas sesiones concurrentes como ellos quieren y deben cambiar sus Password cada semana con un día de gracia. Y los programadores, que pueden conectarse dos veces. Para hacer esto, primero modifique el perfil DEFAULT:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter profile default limit sessions_per_user 1;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear un Nuevo Perfil para los DBAs, y asignarle:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create profile dba_profile limit sessions_per_user unlimited</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">password_life_time 7 password_grace_time 1;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user sys profile dba_profile;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user system profile dba_profile;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear un perfil para los programadores, y asignarle:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create profile programmers_profile limit sessions_per_user 2;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user jon profile programmers_profile;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user sue profile programmers_profile;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para permitir limitar los recursos tome efecto, modifique el parámetro de Instancia:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter system set resource_limit=true;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Suponiendo que la instancia está utilizando un SPFILE, este cambio será propagado al archivo de parámetros y por lo tanto será permanente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un perfil no puede ser eliminado si se ha asignado a los usuarios. Debe ser alterado a un perfil diferente, una vez hecho, eliminar el perfil con:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">DROP PROFILE profile_name;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Alternativamente, utilice esta sintaxis:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">DROP PROFILE profile_name CASCADE;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Que automáticamente reasignará todos los usuarios con el profile_name de nuevo al perfil DEFAULT.</span><br />
<br class="Apple-interchange-newline" />Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-48160967277429592572012-07-02T19:43:00.002-07:002017-04-06T21:09:44.712-07:008.2. CONCEDER Y REVOCAR PRIVILEGIOS<br />
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CONCEDER Y REVOCAR PRIVILEGIOS</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por default, nadie puede hacer nada en una Base de Datos Oracle. Como usuario no puede incluso conectarse sin el otorgamiento de un privilegio. Y una vez hecho esto, todavía no puede hacer nada útil (o peligroso) sin haber dado más privilegios. Los privilegios son asignados a las cuentas de usuarios con el comando GRANT y retirados con un REVOKE. Sintaxis adicional puede dar a usuario capacidad para conceder privilegios a otros usuarios. Por defecto sol el DBA (SYS y SYSTEM) tiene el derecho para conceder</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los privilegios vienen en dos grupos: Privilegios de sistemas que (generalmente hablando) permite a a los usuarios desarrollar acciones que afecten el diccionario de datos y privilegios de objeto que permiten a los usuarios desarrollar acciones que afectan los datos.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">PRIVILEGIOS DE SISTEMA.</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay cerca de dos cientos privilegios de sistema. La mayoría aplica para acciones que afectan el diccionario de datos, tales como creación de tablas o usuarios. Otros afectan la Base de Datos o la Instancia, tales como creación de Tablespaces, modificar valores de los parámetros de instancia, o el establecimiento de una sesión. Algunos de los más comúnmente utilizados son:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• CREATE SESSION este permite a los usuarios conectarse, sin este, no puede incluso loguearse en la Base de Datos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• RESTRICTED SESSION si la Base de Datos es iniciada con STARTUP RESTRICT, o modificada con ALTER SYSTEM ENABLE RESTRICTED SESSION, solo los usuarios con este privilegio serán capaz de conectarse.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• ALTER DATABASE da acceso a muchos comandos necesarios para modificar estructuras físicas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• ALTER SYSTEM Da control total sobre parámetros de instancia y estructuras de memoria.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• CREATE TABLESPACE con los privilegios ALTER TABLESPACE y DROP TABLESPACE, este permitirá a los usuarios gestionar Tablespaces.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• CREATE TABLE permite al concesionario crear tablas en su propio esquema; incluso la capacidad para alterar y eliminarlos, para ejecutar SELECT y comandos DML sobre ellos, y para crear, alterar o eliminar índices sobre ellos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• GRANT ANY OBJECT PRIVILEGE permite al concesionario conceder permisos de objetos sobre objetos que él no posee a otros pero no para si misma.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• CREATE ANY TACLE el concecionario puede crear tablas que pertenecen a otros usuarios.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• DROP ANY TABLE. El concesionario puede eliminar tablas pertenecientes a otros usuarios.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE el concesionario puede ejecutar estos commandos DML contra tablas propiedad de todos los demas usuarios.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• SELECT ANY TABLE el concesionarios puede SELECT cualquier tabla en la Base de Datos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La sintaxis para otorgar privilegios de sistema es:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">GRANT privilege [, privilege...] TO username ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Despues de crear una cuenta de usuario, un comando tal como este otorgará los privilegios de sistema comúnmente asignado a usuario que estarán involucrados en el desarrollo de aplicaciones:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant create session, alter session,</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create table, create view, create synonym, create cluster,</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create database link, create sequence,</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create trigger, create type, create procedure, create operator</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">to username ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Estos privilegios le permiten al usuario conectarse y configurar su sesión, y entonces crear objetos para almacenar datos y objetos PL/SQL. Estos objetos solo pueden existir en su propio esquema; no tendrá privilegios contra cualquier otro esquema. La creación de objetos también se verá limitada por la cuota puede haber sido asignado en varios Tablespaces.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una variación en la sintaxis le permite pasar sus privilegios a otros terceros. Por ejemplo:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect system/oracle;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant create table to scott with admin option;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect scott/tiger;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant create table to jon;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Este da a SCOTT la capacidad para crear tablas en su propio esquema, y también para emitir el mismo el comando GRANT. En este ejemplo. Se le permite a JON crear tablas también. Pero JON solo será capaz para crear en su propio esquema. La figura 8-5 muestra el resultado de los otorgamientos según lo presentado por el Database Control. La misma información puede ser recogida por una consulta a la vista DBA_SYS_PRIVS.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La revocación de unos privilegios de sistema no es en cascada (a diferencia de una revocación de privilegio de objeto)</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si un privilegio es revocado de un usuario, cualquier acción realizada que se realiza con ese privilegio (tales como crear tablas) permanecerá intacta. También, si ha sido otorgado y había utilizado el ADMIN OPTION, cualquier usuario a quien le paso el privilegio lo retendrá. Hay registro guardado del otorgante de un privilegio de sistema, por lo que no es posible un REVOKE en cascada.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La figura 8-6 ilustra esto. El privilegio ANY da permiso contra todos los objetos relevantes en la Base de Datos.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por lo tanto,</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select any table to scott;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-9Q5TPglJZ00/Ty3Y2oKUPwI/AAAAAAAAAZE/wVN5xzjzmJc/s1600/cap+8+-+img+6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="233" src="http://4.bp.blogspot.com/-9Q5TPglJZ00/Ty3Y2oKUPwI/AAAAAAAAAZE/wVN5xzjzmJc/s400/cap+8+-+img+6.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-UlMPQXsMxhQ/Ty3ZCGSy3sI/AAAAAAAAAZM/8m7zKr7M7IQ/s1600/cap+8+-+img+7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="225" src="http://4.bp.blogspot.com/-UlMPQXsMxhQ/Ty3ZCGSy3sI/AAAAAAAAAZM/8m7zKr7M7IQ/s400/cap+8+-+img+7.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Permitirá a SCOTT consultar cualquier tabla en cualquier esquema en la Base de Datos. Es a menudo considerado mala práctica otorgar el privilegio ANY a cualquier otro usuario que el administrador de sistemas.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En realidad, no es tan peligroso ahora como con versiones anteriores. Ya no se incluyen tablas en el esquema SYS, por lo que el diccionario de datos esta todavía protegido. Pero ANY debe ser utilizado con extrema precaución, ya que elimina toda la protección de las tablas de usuarios.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">PRIVILEGIOS DE OBJETOS</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los privilegios de objeto dan la capacidad para realizar los comandos SELECT, INSERT, UPDATE y DELETE contra tabla y objetos relacionados, y para ejecutar objetos PL/SQL. Estos privilegios no existen para los objetos propios en el esquema del usuario.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si un usuario tiene el privilegio de sistema CRETA TABLE, puede realizar operaciones SELECT y DML contra las tablas que el crea sin la necesidad de adicionar permisos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El privilegio ANY, que concede permisos contra objetos en cualquier cuenta de usuario en la Base de Datos, no es privilegio de objeto, son privilegios de sistemas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los privilegios de objetos aplicados a los diferentes tipos de objetos</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-VBHuOqVLmG0/Ty3ZYqYnnZI/AAAAAAAAAZU/vKu7acckufI/s1600/cap+8+-+img+8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="85" src="http://3.bp.blogspot.com/-VBHuOqVLmG0/Ty3ZYqYnnZI/AAAAAAAAAZU/vKu7acckufI/s400/cap+8+-+img+8.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La sintaxis es.</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">GRANT privilege ON schema.object TO username [WITH GRANT OPTION] ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Por ejemplo:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.regions to scott;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Las variaciones incluyen el uso de ALL, que aplicará todos los permisos relevantes al tipo de objeto, y nombramiento de columnas particulares de vistas y tablas.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.employees to scott;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant update (salary) on hr.employees to scott;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on hr.regions to scott;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Este código permitirá a SCOTT consultar todas las columnas de la tabla HR EMPLOYEES pero solo escribir a una columna nominada, SALARY. Luego SCOTT da tolos los privilegios (SELECT y DML) de objeto sobre la tabla HR REGIONS. La figura 8-7 muestra el resultado de esto, como vista en el Database Control.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Otorgar privilegios a nivel de columna es a menudo ser una mala práctica debido a la carga de trabajo masivo que involucra. Si es necesario restringir el acceso a algunas personas a ciertas columnas, creando una vista que muestra solo las columnas a menudo será buena alternativa.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Utilizando WITH GRANT OPTION (o con el Database Control, seleccionado el Check Box GRANT OPTION como se muestra en la figura 8-7) permite a un usuario pasar sus privilegios de objeto sobre un tercer usuario. Oracle mantiene un registro de quien otorgo privilegios de objeto a quien. Esto permite un REVOKE sobre un objeto en cascada para todos estos en la cadena. Considere esta secuencia de comandos:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-Vvv5c9K82Go/Ty3jqcHAl8I/AAAAAAAAAZc/wcHUeNGwtiY/s1600/cap+8+-+img+9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="248" src="http://2.bp.blogspot.com/-Vvv5c9K82Go/Ty3jqcHAl8I/AAAAAAAAAZc/wcHUeNGwtiY/s400/cap+8+-+img+9.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect hr/hr;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on employees to scott with grant option;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect scott/tiger;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.employees to jon with grant option;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">conn jon/jon;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on hr.employees to sue;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect hr/hr;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">revoke select on employees from scott;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En la conclusión de este comando, ni SCOTT ni JON ni SUE tiene el privilegio SELECT contra HR.EMPLOYEES.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La revocación de un privilegio de objeto es en cascada (a diferencia de un privilegio de sistema)</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJERCICIO 8-2.</span></b><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">OTORGANDO PRIVILEGIOS DIRECTOS.</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, usted otorgará algunos privilegios a los usuarios creados en el ejercicio 8-1 y probar que funcionan.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Conéctese a su Base de Datos como usuario SYSTEM con SQL*PLUS.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Otorgue CREATE SESSION al usuario ALOIS:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant create sessions to alois;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Abrir otra sesión SQL*PLUS, y conéctese como ALOIS. Esta vez, el Login tendrá éxito.</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect alois/oracle</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Como ALOIS, intente crear una Tabla:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create table t1 (c1 date);</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esta fallara con el mensaje “ORA-01031: insufficient privileges”</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5. En la sesión SYSTEM, otorgue a ALOIS el privilegio CREATE TABLE:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant create table to alois;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6. En la sesión ALOIS, intente nuevamente:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create table t1 (c1 date);</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Este fallará con el mensaje “ORA-01950: no privileges on Tablespace ‘EXAMPLE’.”</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7. En la sesión de SYSTEM, dar a ALOIS una quota en el Tablespace EXAMPLE:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user alois quota 1m on example;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8. En la session ALOIS, intente nuevamente, esta vez, la creación tendrá éxito.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9. Como ALOIS, conceda privilegios de objeto sobre la nueva Tabla:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant all on t1 to afra;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant select on t1 to anja;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">10. Conectese al Database Control como SYSTEM.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">11. Confirme que los privilegios de objeto han sido otorgados. </span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La ruta de navegación desde la página principal del Database Control es: sobre la ficha Schema dar clic al link Table en la sección Database Objects. Ingrese ALOIS cono el esquema y T1 como la tabla y dar clic en el botón Go. En la lista de Accions, seleccione Objects Privileges. Como lo muestra la siguiente ilustración, ANJA solo tiene SELECT, pero AFRA tiene todo. Tenga en cuenta que la ventana también muestra por quien los privilegios fueron concedidos, y que ninguno de ellos fue concedido con WITH GRANT OPTION</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-XF2xjY3q2O0/Ty3j8gSX0aI/AAAAAAAAAZk/IY7pfJbyGYU/s1600/cap+8+-+img+10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="224" src="http://1.bp.blogspot.com/-XF2xjY3q2O0/Ty3j8gSX0aI/AAAAAAAAAZk/IY7pfJbyGYU/s320/cap+8+-+img+10.png" width="320" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">12. Con el Database Control, confirme que privilegios tiene otorgado ALOIS. La ruta de navegación desde la pagina principal de la Base de Datos es: sobre la ficha Server dar clic al link Users en la sesión de Seguridad, seleccione el Radio Button para ALOIS, dar clic al View Botón. Usted vera que tiene dos privilegios de sistema (CREATE SESSION y CREATE TABLE)sin la opción ADMIN OPTION, un 1MB de quota en EXAMPLE y nada más.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">13. Recupere la misma información mostrada en los pasos 11 y 12 con SQL*PLUS. Como SYSTEM ejecute esta consulta:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select grantee,privilege,grantor,grantable from dba_tab_privs</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">where owner='ALOIS' and table_name='T1';</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select * from dba_sys_privs where grantee='ALOIS';</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">14. Revoque los privilegios concedidos a AFRA y ANJA:</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">revoke all on alois.t1 from afra;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">revoke all on alois.t1 from anja;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Confirme las revocaciones mediante el primer query del paso 13.</span><br />Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-75278941063013504202012-07-02T19:42:00.002-07:002017-04-06T21:09:44.768-07:008.1. CREAR Y GESTIONAR CUENTAS DE USUARIO DE BASE DE DATOS.<br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para establecer una sesión contra una Instancia y una Base de Datos, un usuario debe conectarse a una cuenta de usuario. La cuenta debe ser especificada por su nombre y autentificada por algún medio. La manera que la cuenta fue creada fijara un rango de atributos para la sesión, algunos de los cuales puede ser cambiado posteriormente mientras la sesión está en curso. Existe una serie de cuentas creadas en el momento de creación de la Base de Datos y el DBA generalmente creara muchas más posteriormente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En algunas aplicaciones, cada usuario tendrá su propia cuenta de usuario de Base de Datos. Esto significa que la Base de Datos es plenamente consciente a quien pertenece cada sesión realmente. Este modelo de seguridad funciona bien para pequeñas aplicaciones pero es a menudo impráctico para grandes sistemas con muchas cientos o miles de usuarios. Para grandes sistemas, muchos usuarios se conectarán con la misma cuenta de usuario. Este modelo se basa en la aplicación para asignar el usuario final real a una cuenta de usuario de Base de Datos, y se puede hacer de la seguridad a nivel usuario y auditoria más complejo. Este capítulo se asume que conocen a cada usuario a la Base de Datos; todos ellos tienen su propia cuenta de usuario.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">ATRIBUTOS DE LAS CUENTAS DE USUARIO.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una cuenta de usuario tiene una serie de atributos definido en la cuenta en tiempo de creación. Estos serán aplicados a las sesiones que se conectan a la cuenta, aunque algunos puede ser modificados por la sesión o el DBA mientras la sesión esta ejecutándose, estos atributos son:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Username.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Authentication Method.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Default Tablespace.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Tablespace Quotas.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Temporary Tablespace.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• User profile.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Account Status.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Todos esto debe ser especificado al crear el usuario, aunque sólo nombre de usuario y métodos de autenticación son obligatorios, los demás tienen valores por defecto.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">USERNAME</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El username debe ser único en la Base de Datos y debe ajustarse por ciertas reglas. Un username debe iniciar con una Letra, debe ser no más de 30 caracteres, y consiste de solo letras, dígitos y el carácter dólar ($) y guion bajo (_). Un username no puede ser una palabra reservada. Las letras son case sensitive pero serán convertidas automáticamente a mayúsculas. Todas estas reglas (con la excepción de la longitud) puede ser evadidas sin el username es especificado dentro de comillas dobles, como lo muestra en la Figura 8-1.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En el primer ejemplo de la figura, un username JOHN es creado. Este fue ingresado en minúsculas, pero se han convertido a mayúsculas, como puede verse en la primera consulta. El segundo ejemplo utiliza doble comillas para crear el usuario con un nombre en minúsculas. El tercer y cuarto ejemplo utilizada doble comillas para eludir las reglas en caracteres y palabras reservadas; ambos fallarían sin las comillas dobles. Si un username incluye letras en minúsculas o caracteres no validos o una palabra reservada, entonces las comillas dobles deben ser siempre utilizadas para conectarse a la cuenta posteriormente.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-yU54L2ZoNQY/Ty1iiGLu45I/AAAAAAAAAYc/lkJgtfleTaM/s1600/cap+8+-+img+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="186" src="http://3.bp.blogspot.com/-yU54L2ZoNQY/Ty1iiGLu45I/AAAAAAAAAYc/lkJgtfleTaM/s400/cap+8+-+img+1.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Es posible el uso de usernames no estándares, es esto puede causar confusión terrible. Algunas aplicaciones se basan en la conversión del caso; otras siempre utilizan comillas dobles. Puede ser considerado buena práctica siempre usar mayúsculas y solo caracteres estándar. Esto significa que comillas dobles puede ser utilizadas o no.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un username nunca puede ser cambiado después de su creación. Si es necesario cambiarlo, la cuenta debe ser eliminada y otra cuenta creada. Esta es una acción drástica, porque todos los objetos en el esquema del usuario serán eliminados con el usuario.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">TABLESPACE DEFAULT Y QUOTAS.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cada cuenta de usuario tiene un Tablespace por defecto, este es el Tablespace donde todos los objetos de esquema (como tablas o índices) creados por el usuario residirán. Es posible para un usuario tener objetos propios en cualquier Tablespaces en el cual ha sido dada una Quota. Pero a menos que otro Tablespace se especifique cuando se crea el objeto, entrara en Tablespace por defecto del usuario.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay un Tablespace por default de Base de Datos grande que será aplicado a todas las cuentas de usuario si un Tablespace default no se especifica cuando se crea el usuario. El valor por defecto puede ser establecido cuando se crea la Base de Datos y cambiarlo posteriormente con.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER DATABASE DEFAULT TABLESPACE tablespace_name ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">FIGURE 8-1</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si un Tablespace por defecto no es especificado cuando se crea la Base de Datos, se establecerá el Tablespace SYSTEM.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Despues de crear una Base de Datos, no deje el Tablespace SYSTEM por default; esto es muy mala práctica. O bien el cambio tan pronto como se haya creado otro Tablespace, o después del comando CREATE DATABASE de hecho le permite crear un Tablespace por defecto.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una Quota es la cantidad de espacio en el Tablespace que un usuario está permitido a ocupar. El puede crear objetos y asignar extents a los mismos hasta que la cuota es alcanzada. Si él no tiene una Quota en un Tablespace, el no puede crear objetos en los absoluto. Las Quotas pueden ser cambiadas en cualquier momento. Si la Quota de un usuario es reducida por debajo del tamaño de los objetos que ya posee (o incluso reducida a cero), los objetos sobrevivirán y todavía serán utilizables, pero no se le permitirá hacerse más grandes.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La figura 8-2 muestra como investigar y establecer Quotas.</span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La primera consulta en la figura es contra DBA_USERS y determina los Tablespace default y temporal para el usuario JOHN, creado en la figura 8-1. DBA_USERS tiene una fila por cada cuenta de usuario en la Base de Datos. El usuario JHON ha cogido los default de la Base de Datos para default y temporal Tablespaces, que se muestran en la última consulta contra DATABASE_PROPERTIES.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/--3MaC9a9sF4/Ty1rhinFzAI/AAAAAAAAAYk/dNfZdWrbxGo/s1600/cap+8+-+img+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="196" src="http://1.bp.blogspot.com/--3MaC9a9sF4/Ty1rhinFzAI/AAAAAAAAAYk/dNfZdWrbxGo/s400/cap+8+-+img+2.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Antes de crear una Tabla, usted debe tener permiso para ejecutar CREATE TABLE y una Quota en un Tablespace en la que puede crearlo.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El dos comandos ALTER USER en la figura 8-2, da a JOHN la capacidad para tomar 10 MB de espacio en el Tablespace USERS y una cantidad ilimitada de espacio en el Tablespace EXAMPLE. La consulta contra DBA_TS_QUOTAS confirma esto la figura “-1” es la forma “ilimitada” está representado. En el momento de la consulta se ejecuto JOHN no tenia creado ningún objeto, por lo que las cifras bytes son ceros, lo que indica que el no está utilizando espacio en ese Tablespace.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La mayoría de usuarios no necesitarán las Quotas, porque ellos nunca crearán objetos. Tendrán solamente permisos contra los objetos poseídos por otros esquemas. Los pocos esquemas de objetos poseídos probablemente tendrán QUOTA UNLIMITED en los Tablespaces donde residen sus objetos.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">TABLESPACE TEMPORALES.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Objetos permanentes son almacenados en Tablespaces permanentes, objetos temporales son almacenados en Tablespace temporales. Una sesión necesitara espacio en un Tablespace temporal, si necesita espacio para ciertas operaciones que exceden el espacio disponible en la PGA de la sesión. Recuerde que la PGA es la Program Global Area, la memoria privada a la sesión. Operaciones que necesitan espacio temporal (en memorial si es posible, en un Tablespace temporal si es necesario) incluye ordenación de filas, unión de tablas, construcción de índices y utilización de tablas temporales. Cada cuenta de usuario es asignada a un Tablespace temporal, y todas las sesiones de usuario conectadas a la cuenta compartirán este Tablespace temporal.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La consulta contra DBA_USERS en la figura 8-2 muestra el Tablespace temporal del usuario JOHN, que es el Tablespace Temporal default de la Base de Datos. Esto es mostrado por la última consulta en la figura 8-2, contra DATABASE_PROPERTIES.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Objetos temporales son creados y eliminados según sea necesario por la Base de Datos. Un usuario no es necesario otorgar una cuota en un Tablespace Temporal. Esto es porque los objetos no son en realidad propiedad de él, sino son propiedad del usuario SYS, que tiene una cuota limitada en todos los Tablespaces.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los usuarios no necesitan una cuota en sus Tablespace temporal.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para cambiar el Tablespace Temporal de un usuario (que afectara a todas las futuras sesiones que se conecten a la cuenta), utilice el comando ALTER USER:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER USER username TEMPORARY TABLESPACE tablespace_name;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si muchos usuarios se conectan a la misma cuenta de usuario, ellos compartirán el uso de un Tablespace temporal. Esto puede ser un cuello de botella de rendimiento, que puede evitarse mediante el uso de grupos de Tablespaces temporales.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">PERFILES (PROFILE)</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un perfil de usuario controla su configuración de la contraseña y le da una cantidad limitada de control sobre su uso de recursos. El uso de perfiles es detallado en la sección Create y Gestionar Perfiles.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los perfiles son una manera útil de gestionar Passwords y recursos, pero en realidad solo puede aplicarse en un entorno donde cada usuario de aplicación tiene su propia cuenta de usuario de base de datos. Por ejemplo, si muchos usuarios conectados a la misma cuenta de usuario de base de datos, usted no desea que la contraseña sea invalidado para uno de ellos, porque eso bloquearía todos los demás. Similarmente, el uso de los recursos a menudo necesita ser gestionados en función de cada sesión en lugar de para la cuenta en total.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">ESTADO DE LA CUENTA.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cada cuenta de usuario tiene un cierto estatus, como se indica en la colunma ACCOUNT_STATUS de DBA_USERS. Estos son nueve posibles:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• OPEN la cuenta está disponible para su uso.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• LOCKED esto indica que el DBA deliberadamente bloqueo la cuenta. El usuario no puede conectarse a una cuenta bloqueada.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• EXPIRED esto indica que el tiempo de visa ha caducado. Los Password pueden tener un tiempo de vida limitado. Ningún usuario puede conectarse a una cuenta EXPIRED hasta que el Password sea reseteado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• EXPIRED & LOCKED no solo ha sido bloqueada la cuenta, pero su contraseña también ha expirado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• EXPIRED (GRACE) esto indica que el periodo de gracia está en vigor. Un Password no necesita expirar inmediatamente cuando su curso de vida termina; puede ser configurado con un periodo de gracia durante el cual los usuarios pueden conectarse a la cuenta de tener oportunidad para cambiar el Password.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• LOCKED (TIMED) esto indica que la cuenta está bloqueada porque el numero de intentos de Login fallo. Una cuenta puede ser configurada para bloquearse automáticamente por un periodo después de una Password incorrecto se presenta un número determinado de veces.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• EXPIRED & LOCKED (TIMED)</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• EXPIRED (GRACE) & LOCKED</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• EXPIRED (GRACE) & LOCKED (TIMED)</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para bloquear y desbloquear una cuenta, utilice estos comandos:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER USER username ACCOUNT LOCK ;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER USER username ACCOUNT UNLOCK ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para obligar al usuario a cambiar su Password, utilice este comando:</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER USER username PASSWORD EXPIRE;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esto inmediatamente iniciara el periodo de gracia, obligando al usuario a cambiar su password en el siguiente intento de Login. No hay comando como “alter … unexpire”. La única manera de hacer la cuenta es totalmente funcional otra vez para restablecer su contraseña;</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">METODOS DE AUTENTIFICACION</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una cuenta de usuario debe tener un método de autentificación: algún medio por el cual la Base de Datos pueda determinar su el usuario intenta crear una sesión conectándose a la cuenta se le permite hacerlo. La técnica más sencilla es mediante la presentación de una contraseña que será comparada contra una contraseña almacenada dentro de la Base de Datos, pero hay alternativas. Las posibilidades son:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Operating System Authentication.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Password File Authentication.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Password Authetication.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• External Authentication.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Global Authentication.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Las primeras dos técnicas son utilizadas solo por administradores; las ultimas requieren un Servidor de Directorio LDAP. El servidor de directorio LDAP es el Oracle Internet Directory, enviadas como parte de Oracle Application Server.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">OPERATING SYSTEM AND PASSWORD FILE AUTHENTICATION</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para habilitar autentificación de Sistema Operativo y Archivo de Password (los dos van juntos) para una cuenta, usted debe otorgar al usuario o SYSDBA o el privilegio SYSOPER:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">GRANT [sysdba | sysoper ] TO username ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La concesión de uno o ambos de estos privilegios copiara el Password de usuario del Diccionario de Datos en el archivo externo de Password. Donde este puede ser leído mediante la instancia incluso si la Base de Datos no está abierta. También permite que la instancia autentifique a usuario comprobando si el usuario del sistema operativo es un miembro del grupo de sistema operativo que posee la instalación de Oracle Home.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Después de la creación de la Base de Datos, el único usuario con estos privilegios s SYS.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para utilizar la autentificación de archivo de Password, el usuario puede conectarse con esta sintaxis con SQL PLUS.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">CONNECT username / password [@db_alias] AS [ SYSOPER | SYSDBA ] ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Tenga en cuenta que la autentificación de archive de password puede ser utilizada para una conexion a una Base de Datos Remota sobre Oracle Net.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para utilizar la autentificación de sistema operativo, el usuario puede conectarse con esta sintaxis con SQL PLUS:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">CONNECT / AS [ SYSOPER | SYSDBA ] ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Password de sistema operativo no es almacenado por Oracle, y por lo tanto no hay ediciones con contraseñas cambiantes.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El equivalente de estas sintaxis está disponible cuando se conecta con el Database Control, mediante la selección de SYSDBA desde la conexión en la lista desplegable en la ventana de Logindel Database Control. Para determinar a quien el rpivilegio SYSDBA y el SYSOPER se han concedido, consulte la vista V$PWFILE_USERS. La conexión con la autentificación de sistema operativo o archivo de Password siempre es posible, no importa en qué estado la Instancia y Base de Datos se encuentren, y es necesario para emitir comandos STARTUP o SHUTDOWN. Un privilegio tercero que opera de la misma manera como SYSDBA y SYSOPER es SYSASM. Este es un privilegio que sólo es aplicable a los casos de ASM.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Todas las sesiones de usuario debe ser autenticado. No hay tal cosa como un "anónimo" de inicio de sesión, y algún método de autenticación se debe utilizar.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">PASSWORD AUTHENTICATION</span></b><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La sintaxis para una conexión con autentificación Password utilizando SQL PLUS es</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">CONNECT username / password [@db_alias] ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">O con Database Control, selección NORMAL de la lista desplegable.</span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cuando se conecta con autentificación de Password, la instancia validara el Password dada contra esa que esta almacenada con la cuenta de usuario en el diccionario de datos. Para que esto funcione, la Base de datos debe estar abierta; es lógicamente imposible emitir un comando STARUP o SHUTDOWN cuando se conecta con autentificación Password. El usuario SYS no está permitido para conectarse con la autentificación Password; solo autentificación Archivo de contraseñas, sistema operativo o autentificación LDAP como posibles para SYS.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los nombres de usuario distinguen entre mayúsculas y minúsculas, pero son convertidos automáticamente a mayúsculas a menos que especifique con comillas dobles. En versiones previas de la Base de Datos, Los Passwords no distinguían mayúsculas y minúsculas en lo absoluto. Con la versión 11g, los Passwords son sensibles a mayúsculas y no hay ningún caso de conversión automática. No es necesario el uso de comillas dobles; el Password siempre será leído exactamente como se escribió.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cuando una conexión es realizada atraves de una red, la versión 11g siempre encriptara utilizando el algoritmo AES antes de su transmisión. Para utilizar encriptamiento para el tráfico en curso entre procesos usuarios y procesos servidor requiere la opción de Seguridad Avanzada, pero el encriptamiento de Password es un estándar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cualquier usuario puede cambiar su Password de su cuenta de usuario en cualquier momento, o un usuario con muchos privilegios (tal como SYSTEM) puede cambiar cualquier Password de la cuenta de usuario. La sintaxis (si va a cambiar su propia contraseña u otro) es:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER USER username IDENTIFIED BY password ;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si su cuenta de usuario es creada con autentificación externa, Oracle delegara la autentificación a un Servicio Externo; no le pedirá una contraseña. Si la opción de Seguridad Avanzada ha sido licenciada, entonces el servicio externo puede ser un Servidor Kerberos, un Servidor Raduis, o el servicio nativo de autentificación (en el entorno Windows) de Windows. Cuando un usuario intenta una conexión a la cuenta de usuario, en lugar de la autentificación del mismo usuario, la instancia de Base de Datos aceptara o rechazara la autentificación en función a si el servicio externo de autentificación autentifico al usuario. Por ejemplo, si utilizas Kerberos, la Base de datos comprobara que el usuario tiene un token valido de Kerberos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Sin la opción de seguridad avanzada, la única forma para autentificación externa puede ser utilizando la autentificación del sistema operativo. Esto es un requerimiento para la cuentas SUSDBA y SYSOPER (como ya hemos comentado) pero puede también ser utilizado por usuarios normales.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La técnica es crear una cuenta de usuario Oracle con el mismo nombre como la cuenta de usuario de sistema operativo pero procedido con una cadena especificada por el parámetro de instancia OS_AUTHENT_PREFIX. Este valor predeterminado de parámetro a la cadena OPS$. Para comprobar su valor, utiliza la consulta tal como esta:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select value from v$parameter where name='os_authent_prefix';</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Sobre Linux o Unix, autentificación externa con sistema operativo es muy simple. Suponiendo que el OS_AUTHENT_PREFIX está predeterminado y que hay un usuario del sistema operativo llamado jwatson, entonces crear un usuario Oracle y otorgar el privilegio de crear sesión:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create user ops$jwatson identified externally;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">grant create session to ops$jwatson;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cualquier usuario Logeado sobre Unix como jwatson será capaz de emitir este comando:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">sqlplus /</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Desde un prompt de sistema operativo, será conectado a la Base de Datos con la cuenta de usuario ops$jwatson. Debajo de Windows, cuando Oracle consulta el sistema operativo para encontrar la identidad del usuarios, Windows Usualmente regresa (depending on details of Windows security configuration) el nombre de usuario prefijado con el Dominio Windows. Suponiendo que el Id de inicio de sesión de Windows es John Watson (incluyendo un espacio) y que el dominio es JWACER (que pasa a ser el nombre de la maquina) y que el OS_AUTHENT_PREFIX es un valor por default, el comando será:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create user "OPS$JWACER\JOHN WATSON" identified externally;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Tenga en cuenta que el nombre de usuario deber en mayúsculas, y debido a los caracteres ilegales (una barra invertida y un espacio) debe ir entre comillas dobles.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Utilizar autentificación externa puede ser muy útil, pero solo si el usuario realmente inicia sesión en la maquina host de la Base de Datos. Los usuarios rara vez lo hará, por lo que la técnica es más probable que sea de valor para las cuentas utilizadas para ejecutar trabajos de mantenimiento o por lotes.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">AUTENTIFICACION GLOBAL</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un nuevo estándar para la gestión de identidad es el uso de servidores LDAP. Un directorio compatible con un servidor LDAP, el Oracle Internet Directory, es distribuido por Oracle Corporation como parte del Servidor de aplicaciones Oracle. Un usuario global es un usuario que se define en el directorio LDAP y autentificación global es una forma de delegar la autentificación de usuarios en el directorio.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay dos técnicas para autentificación global:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los usuarios pueden ser definidos en el directorio, y también en la Base de Datos. Un usuario se conecta a una cuenta de usuario con el mismo nombre que el nombre común del usuario en el directorio.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los usuarios pueden ser definidos solo en el directorio. La base de datos se dará cuenta de los nombres de los usuarios globales, pero se conecta a todos los usuarios a la misma cuenta de usuario.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Ninguna de estas técnicas requiere que el usuario presente una contraseña para la base de datos. La conexión va a pasar sin ningún mensaje si las cuentas de la guía y las cuentas de usuario de base de datos están configuradas correctamente.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREANDO CUENTAS.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El comando CREATE USER solo tiene dos argumentos necesarios: un nombre de usuario y un método de autentificación. Opcionalmente. Puede aceptar una clausula para especificar un Tablespace por default y un Tablespace temporal. Una o más clausulas de Quota, un nombre de perfil, y comandos para bloquear la cuentas y caducar el Password. Un típico ejemplo sería.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">1 create user scott identified by tiger</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">2 default tablespace users temporary tablespace temp</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">3 quota 100m on users, quota unlimited on example</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">4 profile developer_profile</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">5 password expire</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">6 account unlock;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Solo la primera línea es requerida, hay valores por default para todos lo demás. Tomando el comando línea por línea.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Proporciona el username, y una contraseña para autentificación con contraseña.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Proporciona los Tablespaces Default y Temporal.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Establece Quotas sobre el Tablespace Default y otros.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Designa un Perfil para contraseña y gestión de recursos.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5. Obliga al usuario cambiar su Password inmediatamente.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6. Hace la cuenta disponible para usarla (que habría sido el valor por default.).</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cualquier atributo de una cuenta puede ser modificado posteriormente con el comando ALTER USER. Con la excepción del nombre. Para cambiar el Password,</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user scott identified by lion;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para cambiar los Tablespaces Default y temporal.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user scott default tablespace hr_data temporary tablespace hr_temp;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para cambiar Quotas.</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user scott quota unlimited on hr_data, quota 0 on users;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para cambiar el Perfil.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user scott profile prod_profile;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para obligar cambiar su password,</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user scott password expire;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para bloquear la cuenta,</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">alter user scott account lock;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Teniendo creada una cuenta de usuario, puede ser necesario eliminarla.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">drop user scott;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Este comando únicamente funcionará si el usuario no posee ningún objeto: si el esquema esta vacio. Si usted no quiere identificar todos los objetos propios y eliminarlos primero, puede eliminarlos con el usuario pero especificando CASCADE:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">drop user scott cascade;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para gestionar las cuentas con el Database Control, desde la pagina principal del Database Control tome la ficha Schema y luego el Link Users en la sección de seguridad. Esto mostrará las cuentas de usuario en la Base de Datos. La figura 8-3 las muestra ordenadas en orden inverso de su fecha de creación. Para cambiar el orden haga clic en el encabezado de la columna correspondiente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El primer “usuario” es la imagen es el PUBLIC. Este es un usuario ficticio a quien los privilegios pueden ser otorgados si usted desea concederlos a cada usuario. El botón Crear presentará una ventana solicitando todos los atributos de la cuenta de usuario. El botón Delete eliminará una cuenta, con la opción CASCADE si es necesario. Pero le dará un “Estas seguro de” antes de proceder.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-o7844w7gKJY/Ty3YFAjAVrI/AAAAAAAAAYs/ct08V8pWBVQ/s1600/cap+8+-+img+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="222" src="http://4.bp.blogspot.com/-o7844w7gKJY/Ty3YFAjAVrI/AAAAAAAAAYs/ct08V8pWBVQ/s400/cap+8+-+img+3.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para modificar los atributos de una cuenta, seleccione y dar clic en Edit. Esto lo llevará a la ventana Editar Usuario. Como lo muestra la figura 8-4. Esta ventana puede ser utilizado para cambiar todos los aspectos de la cuenta excepto para Quotas de Privilegios, que tienen sus propias fichas. También cuenta con etiquetas para Grant y Revoking privilegios y roles.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJERCICIO 8-1.</span></b><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREAR USUARIOS.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, usted creara algunos usuarios para ser utilizados por los ejercicios restantes en este capítulo. Se asume que hay un Tablespace permanente llamado EXAMPLE y un Tablespace temporal llamado TEMP. Si estos no existen, o crearlos o utilizar cualquier Tablespace adecuado.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-AOBSJ5ByWw4/Ty3YV63Wa1I/AAAAAAAAAY0/5aqf3XWnzKM/s1600/cap+8+-+img+4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="262" src="http://3.bp.blogspot.com/-AOBSJ5ByWw4/Ty3YV63Wa1I/AAAAAAAAAY0/5aqf3XWnzKM/s400/cap+8+-+img+4.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Conéctese a su Base de Datos con SQL*PLUS como un usuario de privilegios altos, tales como SYSTEM o SYS.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Crear tres usuarios:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create user alois identified by alois</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">default tablespace example password expire;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create user afra identified by oracle;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">default tablespace example quota unlimited on example;</span></i><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">create user anja identified by oracle;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Confirme que los usuarios han sido creados con el Database Control. Desde la página principal de la Base de Datos, la ruta de navegación es la Ficha Server y el link Users en la sección Security. Que debe ser parecido a los que se muestran en esta ilustración:</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-2AuOn5gpQSw/Ty3Yi-WshhI/AAAAAAAAAY8/L5kR84ZTTGw/s1600/cap+8+-+img+5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="265" src="http://2.bp.blogspot.com/-2AuOn5gpQSw/Ty3Yi-WshhI/AAAAAAAAAY8/L5kR84ZTTGw/s400/cap+8+-+img+5.png" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Desde el SQL*PLUS, intente conectarse como usuario ALOIS:</span></div>
<div style="text-align: justify;">
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">connect alois/alois</span></i></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5. Cuando se le solicite, seleccione un nuevo Password (tales como “oracle”). Pero no va a servir de algo, porque ALOIS no tiene el rpivilegio CREATE SESSION.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6. Refrescar la ventana del Database Control, y note el status de la cuenta ALOIS ya no es EXPIRED pero abierto, porque su contraseña ha cambiado.</span></div>
<br class="Apple-interchange-newline" />Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-13963475446247343472012-07-02T19:40:00.002-07:002017-04-06T21:09:44.602-07:007.3. GESTIONANDO ESPACIO EN TABLESPACES<br />
<div style="text-align: justify;">
<b style="background-color: white; font-family: Verdana, sans-serif; font-size: small;">GESTIONANDO ESPACIO EN TABLESPACES</b></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><div style="text-align: justify;">
<span style="background-color: white;">La gestión del espacio se produce en varios niveles. Primero, el espacio se asigna a un Tablespace. Esto es hecho por el tamaño asignado a los DataFiles, como ya se ha descrito. Segundo, el espacio dentro de un Tablespace es asignado a los Segmentos. Esto es hecho por la asignación de Extents. Tercero, el espacio dentro de los segmentos es asignado a las Filas. Esto es hecho mediante el mantenimiento de Bitmaps que dan seguimiento cuanto espacio está libre en cada Bloque.</span></div>
</span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXTENT MANAGEMENT</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Método Extent Management se establece por Tablespace y se aplica a todos los Segmentos en el Tablespace. Hay dos técnicas para el Uso de Extent Management: Dictionary Management o Local Management. La diferencia es clara: La Local Management siempre debería ser utilizada; El Dictionary Management nunca debe ser utilizado. Extent Management Dictionary-Managed todavía es soportada, pero muy poco. Esto es un vestigio de versiones anteriores.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Dictionary Extent Management utiliza dos Tablas en el Diccionario de Datos. SYS.UET$ tiene filas que describen las extensiones utilizadas, y SYS.FET$ tiene filas que describen las extensiones libres. Cada vez que la Base de Datos necesita asignar un Extent a un Segmento, se debe buscar FET$ para encontrar un poco de espacio libre apropiado, y luego llevar a cabo operaciones DML contra FET$ y UET$ para asignar a el segmento. Este mecanismo causa problemas de mal rendimiento, porque todas las operaciones de gestión de espacio en la Base de Datos (Muchos de los cuales podrían serializarse al mismo tiempo) debe serializarse en el Código que construye las transacciones.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Local Extent Management se introdujo con la Versión 8i y se convirtió el default para la versión 9i. Utiliza Bitmaps almacenados en cada DataFiles. Cada Bit en el Bitmap cubre un rango de Blocks, y cuando el espacio es asignado, los bits apropiados son cambiados de cero a uno. Este mecanismo es mucho más eficiente que el mecanismo Basa en transacciones de Dictionary Management. El costo de la asignación de Extent es amortizado atraves de Bitmaps en cada DataFile que se puede actualizar concurrentemente, en lugar de estar concentrado en dos tablas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cuando creas un Tablespace Locally Managed, una importante opción es Uniform Size. Si se especifica uniform, entonces cada Extent cada vez asignado en el Tablespace será de ese tamaño. Esto puede hacer que la gestión de especio sea de alta eficiencia, porque el rango de Blocks cubiertas por cada bit pueden ser mas grande: Solo un Bit por Extent. Considerando la siguiente declaración:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">create tablespace large_tabs datafile 'large_tabs_01.dbf' size 10g</span></i></div>
<i><div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">extent management local uniform size 160m;</span></i></div>
</i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cada Extent asignado a este Tablespace sera de 160 Mb, habrá cerca de 64 de ellos. El Bitmap necesita solo 64 bits, y 160 MB de espacio puede ser asignado por la actualización de un solo bit. Esto va a ser muy eficiente-siempre y cuando los Segmentos en el Tablespace son grandes. Si un segmento fue creado que solo el espacio necesario para unas pocas filas (tal como la tabla HR.REGIONS), todavía tendría un Extent de 160 MB Los objetos pequeños necesitan su propio Tablespace:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">create tablespace small_tabs datafile 'small_tabs_01.dbf' size 1g</span></i></div>
<i><div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">extent management local uniform size 160k;</span></i></div>
</i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La alternative sintaxis seria:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">create tablespace any_tabs datafile 'any_tabs_01.dbf' size 10g</span></i></div>
<i><div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">extent management local autoallocate;</span></i></div>
</i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cuando los Segmentos son creados en este Tablespace, Oracle signará 64KB a un Extent. Como un Segmente que crece y requerirá mas Extents, Oracle asignará Extents de 64 KB hasta los 16 Extent, de la que asignará Extents cada vez mayores. Por lo tanto los segmentos de crecimiento rápido tienden a tener espacio en trozos cada vez mayor.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Oracle Corporation recomienda AUTOALLOCATE, pero si usted conoce los Segmentos Grandes posibilidades de ser y los puede colocar en consecuencia, UNIFORM SIZE bien puede ser la mejor opción. Muchas aplicaciones so en diseñado de esta manera.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Es posible que si una Base de Datos ha sido actualizada desde una versión previa, se incluyen Tablespace Dictionary Managed. Comprueba esto cn esta consulta:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select tablespace_name, extent_management from dba_tablespaces;</span></i></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cualquier Tablespace Dictionary-Managed se conviertan a Local Management con este Procedimiento PL/SQL:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">execute dbms_space_admin.tablespace_migragte_to_local('tablespacename');</span></i></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO.</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Conversión de Tablespaces a Local Management es fácil y rápido, excepto del Tablespace SYSTEM, donde algunos pasos extras son requeridos. Estos están bien documentadas en la guía del administrador del sistema de la documentación del producto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">SEGMENT SPACE MANAGEMENT</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Método de gestión de espacio en Segmentos es establecido por Tablespace y aplicado a todos los Segmentos en el Tablespace. Existen dos técnicas para administración de espacio en Segmentos. Manual o Automática. La diferencia es clara: Automatic Management debería siempre ser utilizada; Manual Management debería nunca ser utilizada. Manual Segment Space Management es todavía soportada pero nunca recomendada. Esto es una reliquia de versiones anteriores.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Automatic Segment Space Management fue introducido con la versión 9i y se ha convertido default con la versión 11g. Cada segmento creado en un Tablespace Automatic Management tiene un conjunto de Bitmaps que describen como es llenado cada Block. Hay cinco Bitmaps por cada segmento, y cada Block van aparecer en exactamente un Bitmap. Los Bitmaps dan un seguimiento del espacio utilizado en las bandas: hay un Bitmap para los Block completos; y hay Bitmaps para Bloques que están a 75% a 100% utilizado, 50& a 75% utilizado, 25% a 50% utilizado y 0% a 25% utilizado. Durante la búsqueda de un Block en el insertara una Fila, el proceso servidor de la sesión vera el tamaño de la fila para determinar que Bitmap buscar. Por ejemplo, si el tamaño de Block es 4 KB y la fila que se insertara es 1500 bytes, un block apropiado se encuentra buscando el Bitmap de 25% a 50%. Cada Block en este Bitmap garantiza que tiene al menos 2KB de espacio libre. En las filas se inserta, se borran o cambian de tamaño a través de actualizaciones, los mapas de bits se actualiza en consecuencia.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Viejo método Manual Space Management utilizaba una simple lista, conocido como el Free List, que se afirma que los bloques estaban disponibles para insertar, pero sin ningún tipo de información sobre la forma completa que eran. Este método podría causar un exceso de actividad, como bloques tuvo que ser probado por el espacio a la hora de insertar y, a menudo resultó en una gran proporción de espacio desperdiciado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para ver si alguno de tablas se utiliza la administración manual, ejecute esta consulta:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select tablespace_name,segment_space_management from dba_tablespaces;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si no es possible convertir Tablespace de Manual a Automatic Segment Space Management. La unica solucion esc rear un Nuevo Tablespace utilizando Automatic Segment space Management, moverlos los segmentos en él, y eliminar el viejo Tablespace.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<b style="background-color: white; font-family: Verdana, sans-serif; font-size: small;">EJERCICIO 7-3.</b></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><div style="text-align: justify;">
<b style="background-color: white;">CAMBIANDO LAS CARACTERISTICAS DE UN TABLESPACE.</b></div>
<div style="text-align: justify;">
<span style="background-color: white;">En este ejercicio, creara un Tablespace utilizando el Manual Space Management, para simular la necesidad de convertir a Automatic Segment Space Management después de una actualización.</span></div>
</span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Conectarse a su Base de Datos como usuario SYSTEM.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Crear un Tablespace utilizando Segment Space Management. Como OMF se ha habilitado en el ejercicio 7-2, no hay necesidad de cualquier clausula de DataFile:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create tablespace manualsegs segment space management manual;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Confirme que el Nuevo Tablespace es de hecho utilizando la Tecnica Manual:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select segment_space_management from dba_tablespaces where tablespace_name='MANUALSEGS';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Crear una Tabla y un Indice en el Tablespace:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create table mantab (c1 number) tablespace manualsegs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create index mantabi on mantab(c1) tablespace manualsegs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Estos segmentos serán creados con Freelist, no con Bitmaps.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5. Crear un nuevo Tablespace que utilizará Automatic Segment Space Management:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create tablespace autosegs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6. Mueva los objetos al nuevo Tablespace:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table mantab move tablespace autosegs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter index mantabi rebuild online tablespace autosegs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7. Confirme que los objetos están el Tablespace correcto:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select tablespace_name from dba_segments where segment_name like 'MANTAB%';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8. Elimine el Tablespace original:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">drop tablespace manualsegs including contents and datafiles;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9. Renombre el Nuevo Tablespace con el nombre original. Esto es a menudo necesario, porque algunas aplicaciones comprueba el nombre del Tablespace:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter tablespace autosegs rename to manualsegs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">10. Ponga en orden eliminando el Tablespace, primero con este commando:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">drop tablespace manualsegs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">11. Tenga en cuenta el error provocado por el Tablespace no está vacio, y solucionarlo con esto:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">drop tablespace manualsegs including contents and datafiles;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<b style="background-color: white; font-family: Verdana, sans-serif; font-size: small;">DENTRO DEL EXAMEN.</b></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><div style="text-align: justify;">
<b style="background-color: white;">GESTIONANDO ESTRUCTURAS DE ALMACENAMIENTO DE BASE DE DATOS.</b></div>
<div style="text-align: justify;">
<span style="background-color: white;">Es esencial ser absolutamente claro en el Modelo de Almacenamiento Oracle: La Abstracción del almacenamiento lógico del físico, lo que significa que no hay una relación directa entre una Tabla (o cualquier tipo de segmento) y un DataFile. La gestión del espacio es mucho más sencillo con la versión actual que con versiones anteriores y, de hecho puede ser completamente automatizado utilizando OMF. Todo lo que es siempre necesario, una vez que los parámetros se han establecido, es el simple comando:</span></div>
</span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREATE TABLESPACE tablespacename;</span></i></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">y luego dejar que Oracle manos a la obra. El uso de Bitmaps para Extent Management y de gestión de espacios dentro de los segmentos es una gran mejora de rendimiento respecto a las versiones anteriores. Las técnicas anteriores sólo son compatibles con la compatibilidad hacia atrás, la conversión de las estructuras existentes de almacenamiento de los nuevos métodos es posible. El Database Control incluye excelentes herramientas graficas para administrar Tablespace y DataFiles, pero para efectos de información por lo general será necesario consultar el diccionario de datos y vistas dinámicas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">RESUMEN DE CERTIFICACION</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El paradigma de Base de Datos Relacional requiere una separación del Almacenamiento Lógico, según los visto por los programadores, del almacenamiento físico visto por los Administradores de sistema. Oracle implementa esto con los Tablespace. Dentro de un Tablespace, los Segmentos están conformados por Extents que con conformados por Oracle Blocks.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La actual técnica de gestión de espacio es con Bitmaps, tanto para la asignación de Extents a los Segmentos y para identificar Blocks dentro de Segmentos que son adecuados para inserción de filas. son muy superiores a las técnicas anteriores y siempre debe ser utilizado. Combinado con OMF y ASM, pueden hacer la gestión del espacio totalmente automático.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">DOS MINUTOS</span></b></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Comprendiendo Tablespace y DataFiles.</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un Tablespace puede estar conformado por Muchos DataFiles.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un Tablespace puede tener muchos Segmentos</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un Segmento es uno o más Extents.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un Extents son muchos Blocks consecutivos, en un DataFile.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un Oracle Block debe ser uno o más Blocks de sistema operativo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los Oracle Block es la Granularidad de la Entrada Salida de la Base de Datos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Crear y Gestionar Tablespace</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Tablespaces SMALLFILE pueden tener muchos DataFiles, pero un Tablespace BIGFILE puede tener uno solamente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• El Tablespace por Default usa Local Extent Management, Automatic Segment Space Management, pero no para un Uniform Extent Size (Tablespaces default to local extent management, automatic segment space management, but not to a uniform extent size.).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• OMF nombra automáticamente DataFiles, inicialmente de 100MB, y puede AUTOEXTENT sin limite.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Un Tablespace que contiene segmentos no puede ser eliminado, a menos que se incluya la clausula. UNCLUDING DATAFILES.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los Tablespace puede ser online o offline, read-write o read-only.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Los Tablespace pueden almacenar tres tipos de objetos: Objetos permanentes, objetos temporales o Segmentos Undo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">Gestionar espacio en los Tablespace.</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Local Extent Management da seguimiento en la Asignación de Extent con Bitmaps en cada DataFile.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• La clausula UNIFORM SIZE cuando creas un Tablespace obliga a todos los Extent a ser del mismo Tamaño.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• La clausula AUTOALLOCATE permite a Oracle determinar el Tamaño del siguiente Extent, que se basa en cómo las extensiones están siendo asignados a un segmento.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Automatic Segment Space Management da seguimiento al espacio libre en cada block de un Extent utilizando Bitmaps.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Es posible convertir un Tablespace de Dictionary Extent Management a Local Extent Management, pero no de Freelist Segment Management a Automatic Management.</span></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-71418511829407712342012-07-02T19:39:00.002-07:002017-04-06T21:09:44.751-07:007.2. CREAR Y ADMINISTRAR TABLESPACES<br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los Tablespace son repositorios para los esquemas de Datos, incluyendo el Diccionario de Datos (Que es el esquema SYS). Todas las Bases de Datos deben tener un Tablespace SYSTEM y un Tablespace SYSAUX, y (Para efectos prácticos) un Tablespace Temporal (temporary) y un Tablespace Undo. Estos cuatro generalmente han sido creados cuando la Base de Datos fue creada. Posteriormente, el DBA puede muchos más Tablespace para datos del usuario, y Tablespaces Adicionales posibles para Undo y Datos Temporales.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">CREACION DE UN TABLESPACE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para crear un Tablespace con Enterprise Manager Database Control, desde la pagina principal del Database tome la ficha Server y luego el Link Tablespaces en la sección Storage. La Figura 7-4 muestra los resultados para la Base de Datos Default.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://1.bp.blogspot.com/-KlkF4soz6S0/Tx43H7jiV9I/AAAAAAAAAXE/P9nshNfJd-E/s1600/cp+7+-+fig+4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="238" src="http://1.bp.blogspot.com/-KlkF4soz6S0/Tx43H7jiV9I/AAAAAAAAAXE/P9nshNfJd-E/s400/cp+7+-+fig+4.PNG" width="400" /></span></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay seis Tablespace que se muestran en la figura. Para cada Tablespace, identificado por su nombre, la ventana muestra:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• ALLOCATED SIZE Este es el tamaño actual de los DataFile (s) asignados al Tablespace. Se basa en el tamaño actual, no el tamaño máximo a el cual puede ser permitido ampliarse.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• SPACE USED Este es el espacio ocupado por segmentos en el Tablespace que no puede ser reclamado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• ALLOCATED SPACE USED (%) Una representación gráfica de las últimas dos figuras.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• ALLOCATED FREE SPACE El espacio actualmente disponible dentro del Tablespace.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• STATUS Una marca verde indica que el Tablespace está en línea, y por lo tanto que los objetos dentro del Tablespace, deben ser accesibles. Un Tablespace fuera de línea sería indicado con una cruz roja.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• DAFILES El numero de DataFiles (O tempfiles para Tablespace temporales, si uno se precisa) que conforman el Tablespace.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• TYPE Los tipos de objetos que se pueden almacenar en el Tablespace. Un Tablespace permanente almacena objetos de esquema regulares, tales como Tablas e Índices. Un Tablespace temporal almacena solamente segmentos temporales de la administración de sistema, y un Tablespace Undo almacena solamente Segmentos Undo de Administración de Sistemas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• EXTENT MANAGEMENT La técnica utilizada para la asignación de Extents a los Segmentos. LOCAL es la de default y debe ser utilizado siempre.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• SEGMENT MANAGEMENT La técnica utilizada para la localización de Block en los cuales las inserciones pueden ser hechas. AUTO es default y se recomienda para todos los Tablespace de los datos del usuario.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esta información puede también ser obtenida al consultar las vistas del diccionario de datos DBA_TABLESPACES, DBA_DATA_FILES, DBA_SEGEMTS, y DB_FREE_SPACE como este ejemplo:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">SQL> select t.tablespace_name name, d.allocated, u.used, f.free,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2 t.status, d.cnt, contents, t.extent_management extman,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3 t.segment_space_management segman</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4 from dba_tablespaces t,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5 (select sum(bytes) allocated, count(file_id) cnt from dba_data_files</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6 where tablespace_name='EXAMPLE') d,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7 (select sum(bytes) free from dba_free_space</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8 where tablespace_name='EXAMPLE') f,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9 (select sum(bytes) used from dba_segments</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">10 where tablespace_name='EXAMPLE') u</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">11 where t.tablespace_name='EXAMPLE';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">NAME ALLOCATED USED FREE STATUS CNT CONTENTS EXTMAN SEGMAN</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">------- ---------- --------- --------- ------ ---- --------- ------ ------</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMPLE 104857600 81395712 23396352 ONLINE 1 PERMANENT LOCAL AUTO</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Haga Clic en el Botón Crear para crear un Tablespace. La Ventana Crear Tablespace solicita un nombre para el Tablespace, y el valor para Extents Management, Type, y Status. En la mayoría de circunstancias, el valor predeterminado será el correcto: Local, Permament, y Read-Write. A continuación el Botón Agregar le permite especificar uno o más DataFiles para el nuevo Tablespace. Cada Archivo debe tener un nombre y un tamaño, y opcionalmente puede ser establecido en AUTOEXTENT hasta un tamaño máximo de archivo. El AUTOEXTENT permitirá incrementar el tamaño de los DataFiles cuando sea necesario, que puede evitar errores de falta de espacio.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La figura 7-5 y 7-6 muestra las ventanas para crear un Tablespace NEWTS con un DataFile.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Al hacer clic en el Botón Mostrar SQL mostraría este comando (los números de línea se han añadido manualmente).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1 CREATE SMALLFILE TABLESPACE "NEWTS"</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2 DATAFILE 'D:\APP\ORACLE\ORADATA\ORCL11G\newts01.dbf'</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3 SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 200M</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4 LOGGING</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5 EXTENT MANAGEMENT LOCAL</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">6 SEGMENT SPACE MANAGEMENT AUTO</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7 DEFAULT NOCOMPRESS;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://1.bp.blogspot.com/-D86Ha9WtYzk/Tx43j8FCbzI/AAAAAAAAAXM/y5gEx3MPpdE/s1600/cp+7+-+fig+5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="271" src="http://1.bp.blogspot.com/-D86Ha9WtYzk/Tx43j8FCbzI/AAAAAAAAAXM/y5gEx3MPpdE/s400/cp+7+-+fig+5.PNG" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://3.bp.blogspot.com/-QfgrHopyEys/Tx43yv2f6MI/AAAAAAAAAXU/zfFbqZxzUvM/s1600/cp+7+-+fig+6.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="271" src="http://3.bp.blogspot.com/-QfgrHopyEys/Tx43yv2f6MI/AAAAAAAAAXU/zfFbqZxzUvM/s400/cp+7+-+fig+6.PNG" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://2.bp.blogspot.com/-rOc1nUj-HPI/Tx44J3Ig3VI/AAAAAAAAAXc/VdqyKPd5290/s1600/cp+7+-+fig+7.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="163" src="http://2.bp.blogspot.com/-rOc1nUj-HPI/Tx44J3Ig3VI/AAAAAAAAAXc/VdqyKPd5290/s400/cp+7+-+fig+7.PNG" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Tomando la Fecha Almacenamiento se muestra la figura 7-5 permite acceso a opciones para Extent Management y compession, como en la Figurar 7-7.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cuando se utiliza Local Extent Management (como todos los Tablespace deberían), es posible hacer cumplir una regla que todos los Extents en el Tablespace deben ser del mismo tamaño. Esto se discute en la siguiente sección. Si habilita compresión, entonces puede ser aplicado a los datos cuando se carga a granel, o como parte de todas las operaciones de DML. Si Logging es deshabilitado, esto proporciona una valor por default para las muy pocas operaciones donde la generación de Redo puede ser deshabilitada, tales como creación de índices. Si elije este ajuste. Todas las operaciones DML siempre generaran Redo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Todos los Tablespace deben ser Locally Managed. El viejo mecanismo, conocido, como Dictionary Managed, era muchos menos eficiente y solo soportado (y apenas) para versiones anteriores. Ha sido posible crear Tablespace Locally Managed, y para convertir Tablespace Dictionary-Managed a Locally Managed, desde la versión 8i.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://4.bp.blogspot.com/-WDeQc09W4Fc/Tx44bXV6ERI/AAAAAAAAAXk/bqGI-mqaauI/s1600/cp+7+-+fig+8.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="263" src="http://4.bp.blogspot.com/-WDeQc09W4Fc/Tx44bXV6ERI/AAAAAAAAAXk/bqGI-mqaauI/s400/cp+7+-+fig+8.PNG" width="400" /></span></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una declaración típica de la creación de un Tablespace ejecutada desde la línea de comandos SQL PLUS se muestra en la figura 7-8, con una consulta de confirmación de resultados.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Tablespace GLTABS consiste de dos Tablespace, ninguno de los cuales se Autoxtend. La única desviación de valores predeterminados ha sido especificar un Uniform Extent Size de 5 Mb. La primera consulta en la figura muestra que el Tablespace no es un Tablespace BigFile; si lo fuera, ha habría sido posible definir dos DataFiles.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La segunda consulta es la figura investiga el Tablespace TEMP, utilizado por la Base de Datos para almacenar objetos temporales. Es importante señalar que Tablespace Temporales utilizan TempFiles, no DataFiles. Tempfiles se enumeran en las vistas V$TEMPFILE y DBA_TRMP_FILES, condiderando que los DataFiles son listados en V$DATAFILE y DBA_DATA_FILES. También tenga en cuenta que las vistas V$ y vistas DBA dan información diferente. Como muestra la consulta, puede consultar V$TABLESPACE para encontrar si un Tablespace es un Table Bigfile y V$TEMPFILE (o V$DATAFILE) para encontrar lo grande que era el archivo en su creación. Esta información no se muestra en las vista DBA. sin embargo, las Vistas DBA dan el Detalle de Extent Management y Segment Space Management. La información disponible en diferentes los puntos de vista se debe a que cierta información se almacena sólo en el controlfile (y por lo tanto visible solo en vistas V$) y algunos sólo se almacena en el diccionario de datos (Y por tanto sólo visibles en las vistas de DBA). Otra información se duplica.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://2.bp.blogspot.com/-wdPFKJdqcR0/Tx44v3KgzSI/AAAAAAAAAXs/XCRJvZdqcsU/s1600/cp+7+-+fig+9.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="183" src="http://2.bp.blogspot.com/-wdPFKJdqcR0/Tx44v3KgzSI/AAAAAAAAAXs/XCRJvZdqcsU/s400/cp+7+-+fig+9.PNG" width="400" /></span></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTERANDO TABLESPACES</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los cambios realizados a los Tablespaces después de su creación son comúnmente:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Renombrar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Ponerlo Online y Offline.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Marcar como Lectura-Escritura y Solo Lectura.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Cambiar Tamaño.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">• Cambiar Alertas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">RENOMBRAR UN TABLESPACE Y SUS DATAFILES</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La sintaxis es</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER TABLESPACE tablespaceoldname RENAME TO tablespacenewname;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esto es muy simple pero puede causar problemas más adelante. Muchos sitios se basan en convenciones nombramientos para relacionar Tablespace a sus DataFiles. Todos los ejemplos en este capítulo hacen eso: embeben en nombre del Tablespace en los nombres de los DataFiles. A Oracle no le importa: internamente, mantiene las relaciones utilizando el número de Tablespaces (o archivo Tempfiles) y el número de DataFile. Estos son visibles como las columnas V$TABLESPACE#.TS y V$DATAFILE.FILE#. Si su sitio se basa en convenciones de nombres, entonces será necesario renombrar los archivos también. Un Tablespace puede ser renombrado mientras esta en uso, pero para renombrar un DataFile, los DataFiles deben estar Offline. Esto se debe el archivo debe ser renombrado a nivel sistema operativo, así como dentro del Ambiente Oracle, y esto no puede ser hecho si el archivo está abierto: todos los identificadores de archivo se convertirían en inválidos. La Figura 7-9 es un ejemplo de todo el proceso, utilizando el Tablespace creado en la Figura 7-8.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En la figura, el primer comando renombra el Tablespace. Esa es la parte fácil. Luego el Tablespace es tomado Offline (como se describe en la siguiente sección), y dos los comandos de sistema operativo renombran los DataFiles en el Sistema de Archivos. Dos el Comando ALTER DATABASE cambia los nombres de archivos como se registro dentro del ControlFile, por lo que Oracle será capaz de encontrarlo. Finalmente, el Tablespace se vuelve a conectar.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">TABLESPACE ONLINE O OFFLINE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Tablespace o DataFile Online está disponible para su uso, un Tablespace o un DataFile offline existe como una definición en el Diccionario de Datos y el ControlFile pero no puede ser utilizado. Es posible para un Tablespace estar online pero uno o más de sus DataFiles estar offline.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://1.bp.blogspot.com/-1Ab4IGk7i-M/Tx45Cd3AWXI/AAAAAAAAAX0/eaTh2EdFxpg/s1600/cp+7+-+fig+0.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="167" src="http://1.bp.blogspot.com/-1Ab4IGk7i-M/Tx45Cd3AWXI/AAAAAAAAAX0/eaTh2EdFxpg/s320/cp+7+-+fig+0.PNG" width="320" /></span></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esta es una situación que puede producir resultados interesantes y en general se debe evitar. La sintaxis pata tomar una Tablespace offline es.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER TABLESPACE tablespacename OFFLINE [NORMAL | IMMEDIATE | TEMPORARY];</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Offline NORMAL (Que es el Default) obligara a un CheckPoint para los DataFiles de todos los Tablespaces. Cada Buffer sucio en el Database Buffer Cache que contiene un Block del Tablespace escribirán en su archivo de datos, y luego el Tablespace y los DataFiles son hechos Offline.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En el otro extremo es IMMEDIATE. Estos Tablespace y DataFiles OFFLINES IMMEDIATE, sin volcar ningún buffer sucio. Después de esto, los DataFiles serán dañados (pueden faltar cambios confirmados) y tendrán que ser recuperados mediante la aplicación de Change Vectors desde el Redo Log antes que el Tablespace pueda ser regresado a online. Claramente, esta es una operación drástica. Normalmente se haría solo si un archivo se ha dañado de forma que el CheckPoint no puede ser completado. El proceso de recuperación es detallado en el Capitulo 17.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un online TEMPORARY CheckPoint a todos los archivos que pueden ser CheckPoint, y entonces tome los y el Tablespace fuera de línea en una manera ordenada. Cualquier archivo dañado será offline inmediatamente. Si solo uno de las DataFiles de los Tablespace ha sido dañado, esto limitará el número de archivos que necesitan ser recuperados.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">MARCAR UN TABLASPACE COMO READ ONLY.</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para ver el efecto de hacer un Tablespace Read Only, estudie la Figura 7-10.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La sintaxis es completamente auto-explicativa:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER TABLESPACE tablespacename [READ ONLY | READ WRITE];</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Despues de hacer un Tablespace Read-Only, ninguno de los objetos dentro puede ser cambiado con instrucciones DML, como se demuestra en la Figura. Pero puede ser eliminado. Esto es un poco desconcertante pero tiene sentido perfecto cuando usted lo piensa. Quitar una Tabla no afecta realmente la Tabla. Es una transacción contra el Diccionario de Datos, que elimina las filas que describen la tabla y sus columnas; el diccionario de dato esta en el Tablespace SYSTEM, y que no es de Solo Lectura.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hacer un Tablespace Read Only puede tener ventajas para Backup y operaciones de Restauración. Oracle será consiente que el contenido del Tablespace no puede cambiar, y que por lo tanto no puede ser necesario una copia de seguridad en varias ocasiones.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">CAMBIAR EL TAMAÑO DE UN TABLESPACE:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Tablespace puede ser cambiado de tamaño mediante la adición de DataFiles o ajustando el tamaño de los DataFiles existentes. Los DataFiles pueden ser cambiados de tamaño hacia arriba de forma automática según sea necesario si la sintaxis de AUTOEXTENTD fue utilizado en el momento de creación. De lo contrario, usted tiene que hacerlo manualmente con el comando ALTER DATABASE:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER DATABASE DATAFILE filename RESIZE n[M|G|T];</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://1.bp.blogspot.com/-p_QVbDCkewQ/Tx45RM12QLI/AAAAAAAAAX8/0wUeTT87e2w/s1600/cp+7+-+fig+11.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="186" src="http://1.bp.blogspot.com/-p_QVbDCkewQ/Tx45RM12QLI/AAAAAAAAAX8/0wUeTT87e2w/s400/cp+7+-+fig+11.PNG" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La M, G o T se refiere a la unidad de Tamaño para el archive: megabytes, gigabytes o terabytes. Por ejemplo:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter database datafile '/oradata/users02.dbf' resize 10m;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Desde la sintaxis, usted no sabe si el archive se está hacienda más grande o más pequeño. Un cambio de tamaño hacia arriba puede solo tener éxito si hay suficiente espacio en el sistema de archivos, un cambio de tamaño hacia abajo puede tener éxito si el espacio en el archivo no está ya en uso por extents asignados a un segmento.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para agregar otro DataFiles de tamaño de dos gigabytes a un Tablespace:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter tablespace gl_large_tabs</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">add datafile 'D:\ORADATA\GL_LARGE_TABS_03.DBF' size 2g;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Las clausulas para la extensión automática pueden ser incluidos o para permitir extensión automática utilice un comando como este:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter database datafile 'D:\ORADATA\GL_LARGE_TABS_03.DBF'</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">autoextend on next 100m maxsize 4g;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Esto permitirá que el archive duplique su tamaño, aumentando 100mb cada momento.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">CAMBIANDO ALERT THRESHOLDS</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El uso de sistema de alerta generado por el servidor será descrito en el capítulo 13. Por ahora solo es necesario saber que el proceso MMON del monitoreo de la instancia, es casi en tiempo real, como se llena cada Tablespace. Si un Tablespace se llena mas allá de cierto punto, MMON lanzara una alerta. El nivel de alerta predeterminado son levantar una alerta warning cuando un Tablespace es mas de 85 porciento de capacidad. Y una alerta critica cuando es más de 97 porciento de lleno. Las alertas pueden ser vistas de varias maneras, pero la más fácil es mirar la Página principal del Database Control, donde se despliega la sección de alertas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para ver o cambiar los niveles de alerta, seleccione el Tablespace y de clic en el botón Edit, visible en la figura 7-4, luego en la ventana edición Tablespace tome la ficha Thresholds figura 7-11 muestra ejemplo de un Tablespace.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En la figura, El “Espacio Disponible” en el Tablespace es reportado como 32 GB. Esto es claramente incorrecto, por el espacio asignado, como se muestra en la Figura 7-4, está a solo 100 MB. La respuesta miente en la Auto extensión del DataFile. si AUTOEXTEND está habilitada para un DataFile y no se especifica ningún MAXSIZE, entonces el Archivo puede crecer hasta un límite dependen de la plataforma, en este caso 32GB. Por supuesto, esto no dice nada acerca de si el sistema de archivos tiene espacio para un archivo de ese tamaño. El sistema de alerta utiliza el tamaño máximo posible de los Tablespace como base para sus cálculos, cual es sin sentido si los DataFiles del Tablespace fueron creados con la sintaxis AUTOEXTENTD ON MAXISIZE UMLIMITED, o si un MAXSIZE no fue especificado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Debe ser evidente que cuando se utiliza una Automatic Extensión, es una buena práctica para establecer un límite máximo. Esto se puede hacer desde la línea de comandos con un ALTER DATABASE o atraves del Database Control.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Que habiéndose llevado a cabo, el uso del Database Control para establecer Thresholds (alerta) se auto explica.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://3.bp.blogspot.com/-YTiFQr0efSk/Tx45fvJI0PI/AAAAAAAAAYE/8CDeFcUew7k/s1600/cp+7+-+fig+12.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="193" src="http://3.bp.blogspot.com/-YTiFQr0efSk/Tx45fvJI0PI/AAAAAAAAAYE/8CDeFcUew7k/s320/cp+7+-+fig+12.PNG" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">ELIMINANDO TABLESPACES.</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para eliminar un Tablespace, utilice el comando DROP TABLESPACE. La sintaxis es.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">DROP TABLESPACE tablespacename</span></i></div>
<i><div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">[INCLUDING CONTENTS [AND DATAFILES]];</span></i></div>
</i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si la palabra clave INCLUDING CONTENTS no es especificada, la eliminación fallará, si hay algún objeto en el Tablespace. Usando estas palabras claves da instrucciones a Oracle para eliminar los objetos primero, y luego eliminar el Tablespace. Incluso esto fallara en algunas circunstancias, tales como el Tablespace que contiene una Tabla que es el padre de una relacion Foreing Key con una Tabla en otro Tablespace.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Si las palabras claves AND DATAFILES no se especifican, el Tablespace y su contenido será eliminado pero el DataFiles continuara existiendo en el Disco. Oracle no sabe nada acerca de ellos nunca más, y que tendrá que ser eliminado con los comandos del sistema operativo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO.</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Sobre el Sistema Operativo Windows, usted puede encontrar los DataFiles todavía después de usar la clausula INCLUDING CONTENTS AND DATAFILES. Esto es debido a la manera que Windows señala archivos por medio de una bandera como “Locked”. Puede que sea necesario detener el Servicio Windows Oracle (algo llamado como OracleServiceORCL) antes de poder eliminar manualmente el archivo.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">ORACLE-MANAGED FILE (OMF)</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El uso de OMF es destinado a remover la necesidad para el DBA tenga cualquier conocimiento de los sistemas de ficheros. La creación de archivos de Bases de Datos puede ser completamente automatizada. Para habilitar OMF, establezca algunos o todos estos parámetros de instancia.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">DB_CREATE_FILE_DEST</span></i></div>
<i><div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">DB_CREATE_ONLINE_LOG_DEST_1</span></i></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">DB_CREATE_ONLINE_LOG_DEST_2</span></i></div>
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">DB_CREATE_ONLINE_LOG_DEST_3</span></i></div>
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">DB_CREATE_ONLINE_LOG_DEST_4</span></i></div>
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">DB_CREATE_ONLINE_LOG_DEST_5</span></i></div>
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">DB_RECOVERY_FILE_DEST</span></i></div>
</span></i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El parámetro DB_CREATE_FILE_DEST especifica la localización por default para todos los DataFiles. El parámetro DB_CREATE_ONLINE_LOG_DEST especifica la localización por default para los Online Redo Log Files. DB_RECOVERY_FILE_DEST establece la localización default para los archivos Redo Log Files y Backup Files. Así como el establecimiento de localizaciones de archivos default, OMF va a generar nombres de archivo y (por default) establecer el tamaño de los archivos. La configuración de estos parámetros puede simplificar las operaciones relacionadas con archivos. Permitiendo OMF, siempre se puede anular mediante la especificación de un DataFile en el comando CREATE TABLESPACE.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<b style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJERCICIO 7-2.</span></b></div>
<b><div style="text-align: justify;">
<b style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">CREAR, ALTERAR Y ELIMINAR TABLESPACES.</span></b></div>
</b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, usted creará Tablespace y cambiar sus características. Luego habilitara y utilizará OMF. Este ejercicio puede ser hecho atraves del Database Control, pero si es así, asegúrese de hacer clic en el Botón Show SQL en todas las etapas para observar las instrucciones SQL que sean generadas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Conéctese a la Base de Datos como usuario SYSTEM.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Crear un Tablespace en un directorio adecuado-cualquier directorio en el cual Oracle tenga permisos para escribir.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<br />
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">create tablespace newtbs</span></i></div>
<i><div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">datafile '/home/db11g/oradata/newtbs_01.dbf' size 10m</span></i></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">extent management local autoallocate</span></i></div>
<div style="text-align: justify;">
<i style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">segment space management auto;</span></i></div>
</span></i><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Este comando especifica las opciones que son por defecto. Sin embargo, puede considerar buena práctica hacer esto, hacer la declaración de auto documentación.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Crear una Tabla en el nuevo Tablespace, y determinar el tamaño del primer Extent:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create table newtab(c1 date) tablespace newtbs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select extent_id,bytes from dba_extents</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">where owner='SYSTEM' and segment_na me='NEWTAB';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Agregar Extents manualmente, y observar el tamaño de cada nuevo Extent repetidamente ejecutando este comando,</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter table newtabs allocate extent;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Seguido por la consulta del paso 3. Tenga en cuenta el punto en que el tamaño del extents aumenta.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">5. Tome el Tablespace offline, observe el efecto y traerlo de nuevo online. Esto es mostrado en la ilustración.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://3.bp.blogspot.com/-FvcpLPiJPWg/Tx45xm4QwAI/AAAAAAAAAYM/dy25ekKqJb8/s1600/cp+7+-+fig+13.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="194" src="http://3.bp.blogspot.com/-FvcpLPiJPWg/Tx45xm4QwAI/AAAAAAAAAYM/dy25ekKqJb8/s320/cp+7+-+fig+13.PNG" width="320" /></span></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span lang="ES-MX">6. </span><span lang="ES-MX">Haga el Tablespace Read Only, observe el efecto, y hágalo Read Write otra vez, esto es mostrado en la siguiente ilustración.</span></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span lang="ES-MX" style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<a href="http://3.bp.blogspot.com/-wJ44JXLoKsc/Tx45-6gjUNI/AAAAAAAAAYU/HhIrxapzbxQ/s1600/cp+7+-+fig+14.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="197" src="http://3.bp.blogspot.com/-wJ44JXLoKsc/Tx45-6gjUNI/AAAAAAAAAYU/HhIrxapzbxQ/s320/cp+7+-+fig+14.PNG" width="320" /></span></a></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 0.0001pt 18pt; text-align: justify; text-indent: -18pt;">
<span lang="ES-MX" style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">7. Habilite OMF para creación de DataFile:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter system set db_create_file_dest='/home/db11g/oradata';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">8. Cree un Tablespace, utilizando la minima sintaxis ahora possible:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">create tablespace omftbs;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">9. Determine las características del Archivo OMF:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">select file_name,bytes,autoextensible,maxbytes,increment_by</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">from dba_data_files where tablespace_name='OMFTBS';</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Nota el archivo es inicialmente de 100 MB, autoextensible, sin límite superior.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">10. Modifica el archivo OMF para tener características más sensible. Use cualquier nombre de archivo generado por el sistema fue devuelto por el Paso 9:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter database datafile</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">' /oradata/ORCL11G/datafile/o1_mf_omftbs_3olpn462_.dbf'</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">resize 500m;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">alter database datafile</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">'/home/db11g/oradata/ORCL11G/datafile/o1_mf_omftbs_3olpn462_.dbf'</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">autoextend on next 100m maxsize 2g;</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">11. Elimine el Tablespace, y utilice un comando del sistema operativo para confirmar que el archiva ha desaparecido.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">drop tablespace omftbs including contents and datafiles;</span></div>Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0tag:blogger.com,1999:blog-4112056264242943706.post-67566002247336379372012-07-02T19:38:00.000-07:002017-04-06T21:09:44.737-07:007.1. COMPRENDIENDO TABLESPACES Y DATAFILES.<br />
<b style="background-color: white;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">COMPRENDIENDO TABLESPACES Y DATAFILES.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los datos son almacenados Lógicamente en Segmentos y físicamente en DataFiles. La entidad Tablespace abstrae los dos, un Tablespace puede contener muchos segmentos y estar conformado de muchos DataFiles. No hay una relación directa entre un segmento y un DataFile. Los DataFiles pueden existir como archivos en un Sistema de Archivos o (desde la versión 10g en adelante) sobre dispositivos Automatic Storage Management (ASM).</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EL MODELO DE ALMACENAMIENTO DE DATOS ORACLE.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La separación del almacenamiento lógico del físico es una parte necesaria del paradigma de Base de Datos Relacional. Esto significa que los programadores no tienen posibilidad de encontrar donde, físicamente, un ítem de dato se encuentra. Si pudieran encontrar, su software estaría atado a la maquina en el que fue escrito. E incluso así, algo tan trivial como renombrar o mover un archivo rompería la aplicación. El paradigma relacional indica que programadores deben dirigirse solo a las estructuras lógicas y dejar a la Base de Datos gestione la asignación de estructuras físicas. Esto significa que el almacenamiento físico puede ser reorganizado, o la Base de Datos entera movida completamente a un hardware diferente y sistema operativo diferente, y la aplicación no estará consciente de cualquier cambio.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La figura 7-1. Muestra el modelo de almacenamiento Oracle esbozado como un diagrama entidad relación, con las estructuras lógicas a la izquierda y las estructuras físicas a la derecha.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hay una relación dibujada como una línea de puntos: una relación muchos-a-muchos entre Segmentos y DataFiles. Esta relación es de puntos, porque no debe estar allí. Como bueno ingenieros relacionales, DBAs no permiten relaciones de muchos-a-muchos. La resolución de esta relación en una estructura normalizada en la que está todo el modelo de almacenamiento. Tomando las entidades en la figura uno por uno.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La entidad Tablespace resuelve la relación muchos-a-muchos entre Segmentos y DataFiles. Un Tablespace puede contener muchos segmentos y puede estar conformado de muchos DataFiles. Esto significa que cualquier Segmento puede ser propagado atraves de múltiples DataFiles, y cualquier DataFiles puede contener todos o parte de muchos segmentos. Esto resuelve muchos problemas de almacenamiento. Algunos viejos sistemas de administración de Bases de Datos utilizan una relación uno-a-uno entre segmentos y archivos: cada Tabla o Índice se almacena como un archivo separado. Esto plantea dos problemas terribles para sistemas grandes. Primero, en una aplicación podría tener miles de tablas e índices e incluso más; la gestión de muchos miles de archivos es una tarea terrible para los administradores de sistemas. Segundo, el tamaño máximo de una tabla está limitado por el tamaño máximo de un archivo. Incluso si el sistema operativo moderno no tiene límites prácticos, bien puede haber limitaciones impuestas por el ambiente de hardware subyacente. El uso de Tablespace pasa por alto ambos problemas. Los Tablespace son identificados por nombres, único en la Base de Datos.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-JPpY6iadi7M/Tx40ACzyfFI/AAAAAAAAAWs/-lnt37e8scg/s1600/cp+7+-+fig+1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="247" src="http://1.bp.blogspot.com/-JPpY6iadi7M/Tx40ACzyfFI/AAAAAAAAAWs/-lnt37e8scg/s400/cp+7+-+fig+1.PNG" width="400" /></span></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La entidad Segmento representa cualquier objeto de Base de Datos que almacena datos y por lo tanto requiere espacio en un Tablespace. Su segmento típico es una Tabla, pero hay otros tipos de segmentos, en particular los segmentos Índice (descritos en el Capitulo 9) y los segmentos Undo (descritos en el Capitulo 11). Cualquier segmento puede existir en un solo Tablespace, pero el Tablespace puede propagarse atraves de todos los archivos que conforman el Tablespace. Esto significa que el tamaño de las Tablas no está sujeto a las limitaciones por el entorno en el tamaño máximo de archivo. Como muchos segmentos pueden compartir un único Tablespace, es posible tener poco más segmentos que DataFiles existentes. Los segmentos son objetos del esquema, identificados por el nombre del segmento calificado con el nombre de propietario del esquema. Tenga en cuenta que los objetos de esquema de programación (tales como procedimientos PL/SQL, vistas o secuencias) no son segmentos: ellos no almacenan datos, y existen dentro del Diccionario de Datos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El Oracle Block es la unidad de E/S para la Base de Datos. Los DataFiles son formateados en Oracle Blocks, numerados consecutivamente. El tamaño de los Oracle Blocks es fijo para un Tablespace (hablando en general, es lo mismo para todos los Tablespace en la Base de Datos). Por defecto (con la versión de 11g) es 8 KB. Una fila puede ser solo un par de cientos de bytes, y así podría haber muchas filas almacenadas en un Block, pero cuando una sesión quiere una fila, el bloque completo será leído desde disco en el Database Buffer Cache. Similarmente, si solo una columna de una fila se ha modificado en el Database Buffer Cache, El DBWn (eventualmente) escribe el Block completo de nuevo en el DataFile de donde vino, sobrescribirá la versión anterior. El tamaño de un Oracle Block puede variar de 2KB a 16 KB en Linux o Windows, hasta 32 KB en otros Sistemas Operativos. El tamaño del Block es controlado por el parámetro DB_BLOCK_SIZE. Esto nunca será cambiado después de la creación de la Base de Datos, porque es utilizado para dar formato a los DataFiles que conforman el Tablespace SYSTEM. Si llega a ser evidente después que el tamaño del Block es inapropiado, el único curso de acción es crear una nueva Base de Datos y transferir todo en ella. Un Block se identifica por su número dentro de un DataFile: el número de Block solamente no es suficiente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">El manejo de espacio un Block a la vez sería una tarea agobiante, así que los Blocks son agrupados en Extents. Un Extents es un conjunto de Oracle Block numerados consecutivamente dentro de un DataFile. cada segmento consistirá en uno o más Extents, numerados consecutivamente. Estos Extents pueden estar en cualquier y todos los DataFiles que conforman el Tablespace. Un Extents puede ser identificado de la dimensión del Segmento (Los Extents son numerados consecutivamente por segmento, iniciando desde cero) o la dimensión del DataFile (cada segmento esta en un archivo, comenzando en cierto número de bloque de Oracle).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un DataFile es, físicamente, compuesto de un número de Blocks de Sistema Operativo. Como se estructuran los DataFiles y los Blocks de sistema operativo son enteramente dependientes del Sistema de Archivos del Sistema Operativo. Algunos sistema de archivos tienen limitaciones conocidas y por lo tanto no se utilizan para sistemas modernos (Por ejemplo el Viejo MSDOS el sistema de archivos FAT podría manejar archivos solo de 4GB y solo 512 de ellos por directorio). La mayoría de las Bases de Datos serán instaladas en sistemas de archivos sin límites prácticos, tales como NTFS en Windows o ext3 en Linux. Las alternativas a los sistemas de archivos para almacenamiento de DataFiles son Dispositivos en Crudo o ASM. Dispositivos en Crudo son ahora muy rara vez utilizados para almacenamiento de DataFiles debido a cuestiones de gestión (Problemas). ASM se describe brevemente en la sección posterior de este capítulo, Automatic Storage Management (ASM).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Block de Sistema operativo es la Unidad E/S para su Sistema de Archivos. Un proceso puede leer solo un byte de disco, pero el Sistema de E/S tiene que leer un Block de Sistema Operativo. El tamaño del Block de sistema operativo es configurable para algunos Sistemas de Archivos. (Por ejemplo, cuando formateas un sistema de archivo NTFS usted puede elegir de 512 Byte a 64 KB). Pero típicamente el Administrador de Sistemas lo dejara en el predeterminado (512 B para NTFS o 1 KB para ext3). Esto es porque la relación entre Oracle Blocks y Blocks de sistema operativo es usualmente uno a muchos. No hay razón para no coincidir con el tamaño de block de sistema operativo al tamaño de oracle block si su sistema de archivo le permite hacer esto. La configuración que se debe evitar siempre estaría donde los bloques del sistema operativo eran más grandes que los bloques de Oracle.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">SEGMENTOS, EXTENTS, BLOCKS Y FILAS.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los Datos se almacenan en Segmentos. La vista de Diccionario de Datos DBA_SEGMENTS describe cada segmento en la Base de Datos. Esta consulta muestra los tipos de segmentos en una Base de Datos simple. Los contadores son bajos porque no hay una aplicación real instalada.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">SQL> select segment_type,count(1) from dba_segments group by<br />segment_type<br />2 order by segment_type;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">SEGMENT_TYPE COUNT(1)</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">------------------ ----------</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">CLUSTER 10</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">INDEX 3185</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">INDEX PARTITION 324</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">LOB PARTITION 7</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">LOBINDEX 760</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">LOBSEGMENT 760</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">NESTED TABLE 29</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ROLLBACK 1</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">TABLE 2193</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">TABLE PARTITION 164</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">TYPE2 UNDO 10</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">11 rows selected.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">SQL></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En resumen, y en el orden en que es más probable que se refieren a un DBA, estos tipos son los segmentos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• TABLE.</b> Estas son las Tablas Heap-Estructuradas: Filas de longitud variable, en orden aleatorio. A pesar que un segmento típico es una Segmento Tabla, nunca olvide que la tabla no es el segmento, y que hay organizaciones de tablas más complejas que utilizan otros tipos de segmentos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• INDEX.</b> Los índices son listas ordenadas de valores claves, cada uno con un puntero, El ROWID, a la localización física de la fila. El ROWID específica que Oracle Block de que DataFile la Fila es, y el número de fila dentro del Block.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• TYPE2 UNDO.</b> Estos son los segmentos UNDO (nadie se refiere a ellos como segmentos TYPE2 UNDO) que almacenan las versiones anteriores al cambio de los datos que son necesarios para proporcionar integridad transaccional: RollBack, Consistencia de Lectura y Aislamiento (rollback, read consistency, and isolation.).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• ROLLBACK.</b> Los Segmentos Rollback no se deben utilizar el funcionamiento normal desde la versión 9i en adelante. La versión 9i se introdujeron gestión automática de UNDO, que se basa en los Segmentos UNDO. Habrá siempre un Segmento RollBack que protege las transacciones utilizadas parea crear la Base de Datos, pero no debe de usarse posteriormente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• TABLE PARTITION.</b> Una Tabla puede ser Dividida en muchas particiones. Si se hace esto, entonces las particiones serán Segmentos Individuales, y la propia Tabla no será un Segmento en Absoluto: existe solo como el total de sus particiones. Cada partición de la Tabla de una Heap Table está estructurada como una Heap Table, en su propio segmento. Estos segmentos pueden estar en diferentes Tablespace, esto significa que es posible extender una tabla atraves de múltiples Tablespace.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• INDEX PARTITION.</b> Un índice por default estará en un Segmento, pero los índices pueden ser particionados. Si usted esta particionado sus Tablas, generalmente particionara los índices de las tablas también.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• LOBSEGMENT, LOBINDEX, LOB PARTITION.</b> Si una columna se define como un Tipo de Objeto de Objeto Grande, entonces solo un puntero se almacena en la propia Tabla: un puntero a una entrada en un segmento separado donde las columnas de datos residen actualmente. LOBs puede tener índices creados en ellos para el acceso rápido a los datos dentro de los objetos, y LOBs puede también ser particionado.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• CLUSTER.</b> Un Cluster es un segmento que pueden contener varias tablas. En contraste con particionamiento, que permite propagar una tabla atraves de muchos segmentos, Cluster permite des normalizar muchas tablas en un segmento.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• NESTED TABLE.</b> Si una columna de una Tabla se define como un tipo de objeto definido por el usuario que si mismo tenga columnas, si una columna, entonces la columna puede ser almacenada en su propio segmento, como una Tabla anidada (NESTED TABLE).</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cada segmento tiene uno o más Extents. Cuando se crea un segmento, Oracle asignará un Extent a este, en cualquier Tablespace se especifica. Eventualmente, como los datos se introducen, el Extent se llenará. Oracle entonces asignará un segundo Extent, en el mismo Tablespace pero no necesariamente en el mismo DataFile. si sabe que un segmento va a necesitar más espacio, usted puede manualmente asignar un Extent, La figura 7-2 muestra como identificar con precisión donde esta un segmento.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-tixiHrOltZw/Tx403Xf7ICI/AAAAAAAAAW0/N5Kk0iANSBo/s1600/cp+7+-+fig+2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="222" src="http://4.bp.blogspot.com/-tixiHrOltZw/Tx403Xf7ICI/AAAAAAAAAW0/N5Kk0iANSBo/s400/cp+7+-+fig+2.PNG" width="400" /></span></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En la figura, el primer comando crea la Tabla HR.NEWTAB, confiar totalmente en los valor predeterminados para el almacenamiento. Entonces, una consulta contra DBA_EXTENTS muestra que el segmento consiste de solo un Extent, Extent número cero. Este Extents está en el archivo 4 y es 8 block de largo. El primero de los 8 Blocks es en el Block numero 1401. El tamaño del Extent es 64 KB, que muestra que el tamaño del Block es 8 KB. El siguiente comando obligará a Oracle a asignar otro Extent en el Segmento, incluso también si el primer Extent no está lleno. La siguiente consulta muestra que este nuevo Extent, numero 1, está también en el Archivo numero 4 y inicia inmediatamente después del Extent Cero. Observe que no está claro de este ejemplo sí o no el Tablespace consiste de varios DataFiles. Porque el Algoritmo de Oracle que utiliza para calcular donde asignar el siguiente Extent no utiliza simplemente DataFiles alternadamente. Si el Tablespace consiste de múltiples DataFiles, puede anular la elección de Oracle con esta sintaxis:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">ALTER TABLE tablename ALLOCATE EXTENT STORAGE (DATAFILE 'filename');</span></i></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Pre asignar espacio agregando Extent manualmente puede proporcionar un beneficio en rendimiento pero es una enorme cantidad de Trabajo. No lo hará por más que muy pocas tablas o índices que tengan excepcionalmente una tasa de crecimiento alta. O tal vez antes de operaciones de carga.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La última consulta en la figura 7-2 va a la vista DBA_DATA_FILES para determinar el nombre del archivo en el cual los Extents fueron asignados, y el nombre del Tablespace a cual el DataFile pertenece. Para identificar las Tablas en el Tablespace, uno puede también consultar DBA_SEGMENTS.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO.</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Usted puede consultar DBA_TABLES para encontrar en que Tablespace una Tabla reside, pero esto solo funcionará para Tabla sin particiones- no para tablas particionadas, donde cada partición en su propio segmento y puede estar en un diferente Tablespace. Particionamiento permite una Tabla (almacenar como múltiples segmentos) abarca un Tablespace.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Extent consiste de un conjunto de Block numerado consecutivamente. Cada Block tendrá un Área de Header y un Área Data. El Header es de tamaño variable y crece hacia debajo de la parte superior del Block. Entre otras cosas, contiene un directorio de filas (que muestra en que parte del Block cada fila inicia) y bloque de información de la fila. El área de datos se llena de abajo hacia arriba. Entre las dos puede (o no puede) haber un área de espacio libre. Los eventos que hará que el encabezado de un bloque de crecer incluir la inserción de filas y bloqueo. El área de datos inicialmente estará vacio y se llenará con filas que son insertadas (o claves de índices son insertados, en el caso de un block de un segmento de índice). El espacio libre consigue hecho fragmentos mientras que se insertan, se suprimen, y se ponen al día las filas (que pueden hacer el tamaño de una fila cambiar), pero eso no tiene importancia porque todo esto sucede en la memoria, después el Block ha sido copiado en un Buffer en el Database Buffer Cache. El espacio libre. El espacio libre se une en un área contigua cuando es necesario, y siempre antes de que el DBWn escriba el bloque de nuevo a su datafile.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">AUTOMATIC STORAGE MANAGEMENT (ASM)</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los DataFiles puede existir en cuatro tipos de dispositivos: Local File Systems, Clustered File Systems, Asm Disk Groups y Raw Devices:</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• Archivos sobre un File Local System</b> Estos son los simples DataFiles; existen como archivos normales del sistema operativo en una estructura de directorios sobre el disco directamente conectados a la computadora que ejecuta la instancia. En un Windows o Linux, estos pueden ser internos IDE o DATA. En un Hardware más sofisticado, generalmente serian discos SCSI o unidades externas.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• Archivos sobre un Clustered File System</b> Un Clustered File System son discos externos, montados concurrentemente en más de una computadora. El Clustered File System media el acceso a los discos de los procesos que funcionan en todas las computadoras en el cluster. Utilizando el Clustered File Systems en una forma de implementación RAC: La Base de Datos debe de residir en discos accesibles a todas las instancias que la van abrir. Clustered File Systems se pueden comprar a vendedores del Sistema Operativo o Oracle Corporation’s OCFS (Oracle Clustered File System) es una excelente alternativa. OCFS fue primero escrito para Linux y Windows y viene con la versión de la Base de Datos 9i; con 10 g que fue portado a todos los otros sistemas principales de funcionamiento.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• Archivos en Raw Devices</b> Es posible crear DataFiles sobre discos sin Sistema de archivos en absoluto. Esto todavía soportado pero en realidad es solo una anomalía histórica. En los malos viejos tiempos antes de los sistemas de archivos en clúster (o ASM) existía, dispositivos en bruto fueron la única forma de implementar una base de datos de servidor paralelo. Parallel Server se fue reemplazado por 9i RAC en la liberación de bases de datos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><b>• Archivos sobre ASM Devices ASM</b> es una instalación introducida con la versión 10g. Este es una alternativa a Sistemas de Archivos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Algunas personas afirman que Raw Devices dan mejor rendimiento. Con el disco contemporáneo y la tecnología de sistemas de archivos, esto no es casi cierto. E incluso si era verdad, son tan difíciles de manejar que ningún DBA sano quiere utilizarlos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En resumen, ASM es un Gestor de Volúmenes Lógicos proporcionado por Oracle y viene con la Base de Datos. La idea general es que usted tome un montón de discos sin formato, darles a Oracle, y deje a Oracle con ella. Los administradores de sistema no tienen la necesidad de preocuparse sobre la creación de sistemas de archivos en absoluto.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un Gestor de volúmenes Lógicos proporcionados por el Sistema Operativo, o tal vez por un tercero tales como Veritas, tomará un conjunto de volúmenes físicos y presentara al sistema operativo como volúmenes lógicos. Los volúmenes Físicos podrían ser discos completos, o podrían ser particiones de discos. Los volúmenes lógicos se verán con la aplicación software como discos, pero el almacenamiento subyacente de cualquier volumen lógico no puede ser un volumen físico sino varios. En estos volúmenes lógicos que los sistemas de archivos entonces están creados.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Un volumen lógico puede ser mucho mayor que cualquiera de los volúmenes físicos de lo que la componen. Por otra parte, el volumen lógico puede ser creado con características que exploten el rendimiento y seguridad de uso de múltiples volúmenes físicos. Estas características son striping y la duplicación (mirror) de datos. Striping Data atraves de múltiples volúmenes físicos da enormes ganancias de rendimiento. En principio, si un archivo se distribuye atraves de dos discos, debería ser posible leerlo en la mitad de tiempo que tomaría si se tratara todo en un disco. El rendimiento mejorará geométricamente, en proporción al número de discos asignado al volumen lógico. Mirroring da seguridad. Si un volumen lógico consiste de dos o más volúmenes físicos, entonces cada Block de sistema operativo escrito a un volumen puede ser escrito simultáneamente al otro volumen. Si una copia es dañada, el administrador de volúmenes lógicos leerá del otro. Si hay más de dos volúmenes físicos, un grado mayor de reflejo a ser posible, proveyendo tolerancia a fallo en los eventos de fallos a múltiples discos. Entonces, cada Block de sistema operativo escrito a un volumen puede ser escrito simultáneamente a otro volumen.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Algunos Sistemas Operativos (tales como AIX) incluyen un Administrador de Volúmenes Lógicos como standard, con otros sistemas operativos esto es opcional (y con cargo) extra. Históricamente, algunos de los sistemas operativos más simples (tales como Windows y Linux) no tenían mucho apoyo para los gestores de volúmenes lógicos en los absoluto. Si un administrador de volúmenes lógico está disponible, puede requerir considerable tiempo y habilidad para configurarlo óptimamente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ASM es un gestor de volúmenes lógicos diseñado para archivos de Bases de Datos Oracle. La definición de archivo de bases de datos es amplia. Además de los verdaderos archivos de Bases de Datos (controlfile, online redo log files y datafiles) ASM puede también almacenar archivos Backup, archivos archived redo log y archivos Datapump (Todos estos archivos serán detallados en los capítulos siguientes). No puede ser utilizado para el Oracle Home, o para el Alert Log y Trace Files.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ASM puede almacenar solo archivos de Bases de Datos, no los binarios. El Oracle Home debe siempre ser sobre en sistemas de archivos convencionales.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Para configurar ASM, los administradores de sistemas deben proporcionar los volúmenes físicos. Estos pueden ser los discos actuales, particiones de discos o dispositivos establecidos por una SAN (storage area network) o alguna forma de almacenamiento conectado a red.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Las normas sobre qué tipo de dispositivo puede ser usado y como deben ser configurados son estrictas pero no inusual. El DBA entonces agrupa estos volúmenes físicos (conocido como Discos ASM) en volúmenes lógicos (conocidos como Grupos de Discos ASM). Los grupos de discos son formateados en allocation units (unidades de asignación), que son Block contiguos de espacio sobre un volumen físico. El tamaño por default de una allocation unit es 1MB, pero este puede ser incrementado hasta 64 MB si la naturaleza de la aplicación es tal (por lo general, un Data Warehouse) que se benefician de esto. El nivel más bajo de almacenamiento es el Block físico. Este será determinado por la geometría de los discos.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Cada archivo creado sobre un Grupo de Discos ASM será siempre stripes atraves de todos los discos del ASM que componen el grupo. Esto no es configurable; se trata de una ventaja de rendimiento con ningún inconveniente y se aplica siempre. Mirroring es configurable pero no está activado por defecto. En términos generales, ASM da ahora un rendimiento superior a cualquier gestor de volúmenes lógicos de terceros. Esto es porque es un sistema Oracle consciente que puede stripes archivos inteligentemente.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Los diferentes tipos de archivos tienen diferentes patrones de acceso que hagan diferente striping y estrategias de Mirroring apropiadas, porque stripes ASM en el nivel del archivo (algo que el nivel volumen, la manera un sistema RAID hace), que puede manejar está mucho mejor que un administrador de volumen del sistema operativo dependiente de lógica. Los striping de nivel archivo y el Mirroring también significa que los discos adicionales se pueden agregar o quitar de un grupo uno a la vez en caso de ser necesario. Por ejemplo, si un grupo de volumen se compone de dos discos y un tercero se añade, ASM se iniciará automáticamente una operación de reequilibrio para ponerla en uso por restriping los archivos ASM: moverá una mezcla de primaria y refleja las extensiones de los discos existentes en el nuevo disco. Semejantemente, si un disco sale del grupo (debido a un comando de la administración o una falta), el grupo del disco se reequilibrará inmediatamente a los espejos perdidos reinstantiate. Reequilibrando operaciones ocurra en el fondo, mientras que la base de datos es funcionando.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Una característica clave de la ASM es que puede funcionar como un sistema de archivos en clúster. Históricamente, muchos sistemas operativos tenido problemas con la fabricación de un sistema de archivos disponibles en dos o más nodos al mismo tiempo (esto no es lo que los archivos a través de un archivo del servidor que está conectado directamente de almacenamiento), que sea necesario para base de datos de CCR. Para los sistemas operativos que son compatibles con sistemas de archivo cluster, a menudo son una opción del impuesto. ASM es un sistema de archivos en clúster disponibles en todas las plataformas principales y viene con la licencia de base de datos Oracle.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">A key feature of ASM is that it can work as a clustered file system. Historically, many operating systems had problems with making a file system available on two or more nodes concurrently (this is not making files available through a file server—it is directly attached storage), as is necessary for RAC database. For operating systems that do support clustered file systems, often they are a chargeable option. ASM is a clustered file system available on all mainstream platforms and bundled with the Oracle database license.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EXAMEN</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Archivos ASM stripes, no volúmenes, El Mirroring es opcional, striping no es.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EN EL TRABAJO</span></b></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ASM obtiene fantástico rendimiento. Funciona para Bases de Datos Single-Instance, así como Bases de Datos RAC.</span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-S6BcOJD3LWA/Tx411Ya2xSI/AAAAAAAAAW8/kIdYBieXdM8/s1600/cp+7+-+fig+3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif; font-size: x-small;"><img border="0" height="161" src="http://2.bp.blogspot.com/-S6BcOJD3LWA/Tx411Ya2xSI/AAAAAAAAAW8/kIdYBieXdM8/s400/cp+7+-+fig+3.PNG" width="400" /></span></a></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">La figura 7-3 bosqueja la estructura ASM como un diagrama entidad-relación. Tenga en cuenta la asignación uno a uno de un Archivo ASM a un Archivo de Base de Datos, que podría ser cualquiera de los tipos de archivos que soporta ASM. Uno podría dibujar una relación muchos a muchos entre Archivos ASM y Discos ASM, pero esto se resuelve vía los grupos de discos ASM o las unidades de asignación.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<b><span style="font-family: Verdana, sans-serif; font-size: x-small;">EJERCICIO 7-1.<br />INVESTIGANDO LAS ESTRUCTURAS DE ALMACENAMIENTO DE DATOS EN LA BASE DE DATOS.</span></b><br />
<div style="text-align: justify;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">En este ejercicio, usted ejecutar consultas para documentar la estructura física de una Base de Datos. Los comandos deben ser ejecutados interactivamente desde SQL PLUS o Database Control, pero tendrían sentido guardarlos como un script que pueden ser ejecutados contra cualquier Base de Datos como parte de reportes regulares sobre uso del espacio en la Base de Datos.</span></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Conéctese a la Base de Datos como usuario SYSTEM.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Determine el nombre y tamaño de los ControlFiles:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select name,block_size*file_size_blks bytes from v$controlfile;</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">3. Determine el nombre y tamaño de los miembros Online Redo Log Files:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select member,bytes from v$log join v$logfile using (group#);</span></i><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">4. Determine el nombre y tamaño de los DataFiles y TempFiles:</span><br />
<i><span style="font-family: Verdana, sans-serif; font-size: x-small;">select name,bytes from v$datafile union all select name,bytes from v$tempfile;</span></i><br />
<br class="Apple-interchange-newline" />Santiago de la Cruz de los Santoshttp://www.blogger.com/profile/08859194864243153028noreply@blogger.com0