<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Administración de ORACLE en Español &#187; utl_file_dir</title>
	<atom:link href="http://colacios.es/blog/WordPress3/tag/utl_file_dir/feed/" rel="self" type="application/rss+xml" />
	<link>http://colacios.es/blog/WordPress3</link>
	<description>Administración de Base de datos ORACLE en español</description>
	<lastBuildDate>Tue, 11 Mar 2014 12:56:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Configurar el paquete (package) UTL_FILE en el init.ora en 10G</title>
		<link>http://colacios.es/blog/WordPress3/configurar-el-paquete-package-utl_file/</link>
		<comments>http://colacios.es/blog/WordPress3/configurar-el-paquete-package-utl_file/#comments</comments>
		<pubDate>Mon, 19 Aug 2013 10:19:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Administración Oracle]]></category>
		<category><![CDATA[alter system]]></category>
		<category><![CDATA[init.ora]]></category>
		<category><![CDATA[ORA-02095]]></category>
		<category><![CDATA[UTL_FILE]]></category>
		<category><![CDATA[utl_file_dir]]></category>

		<guid isPermaLink="false">http://colacios.es/blog/WordPress3/?p=422</guid>
		<description><![CDATA[Oracle ofrece el paquete UTL_FILE para usar/manipular archivos de PL/SQL.  UTL_FILE es un conjunto de procedimientos y funciones simples para procesar archivos del sistema de archivos del sistema operativo, de Oracle, utilizando PL / SQL. En la siguiente entrada de &#8230; <a href="http://colacios.es/blog/WordPress3/configurar-el-paquete-package-utl_file/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Oracle ofrece el paquete <em><strong>UTL_FILE</strong></em> para usar/manipular archivos de PL/SQL.  <em><strong>UTL_FILE</strong></em> es un conjunto de procedimientos y funciones simples para procesar archivos del sistema de archivos del sistema operativo, de Oracle, utilizando PL / SQL.</p>
<p style="text-align: justify;">En la siguiente entrada de blog explicaré cómo modificar el init&lt;XXX&gt;.ora para poder utilizar el paquete UTL_FILE y que consideraciones debemos tener en cuenta.</p>
<p style="text-align: justify;">Puedes ampliar información en la documentación oficial de Oracle:<br />
<a href="http://docs.oracle.com/cd/B14117_01/appdev.101/b10802/u_file.htm">http://docs.oracle.com/cd/B14117_01/appdev.101/b10802/u_file.htm</a></p>
<p style="text-align: justify;">Comenzamos &#8230;.</p>
<p style="text-align: justify;">En primer lugar me conecto al UNIX con el usario <em>oracle</em> y posteriormente a sqlplus con el usuario <em>SYS</em> &#8230;</p>
<pre style="text-align: justify;">(oracle) $ whoami
 oracle
 $ sqlplus /nolog</pre>
<pre style="text-align: justify;">SQL*Plus: Release 10.2.0.4.0 - Production on Lun Ago 19 09:47:28 2013
 Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
 SQL&gt; show user
 USER is ""</pre>
<pre style="text-align: justify;">SQL&gt; connect /as sysdba
 Connected.</pre>
<p style="text-align: justify;">Compruebo que soy SYS &#8230;<em></em></p>
<pre style="text-align: justify;"> SQL&gt; show user USER is "SYS"</pre>
<p style="text-align: justify;">Compruebo el valor que contiene utl_file_dir y veo que está vacio&#8230;<em></em><em> </em></p>
<pre style="text-align: justify;">SQL&gt; select name,value from v$parameter where name='utl_file_dir';</pre>
<p style="text-align: left;"><em>NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
VALUE<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
</em><em>utl_file_dir</em></p>
<p style="text-align: left;">Compruebo que tipo de parámetro es utl_file_dir para ver si lo puedo modificar en caliente o deberé bajar la base de datos &#8230; <em></em></p>
<pre style="text-align: left;">SQL&gt;
col NAME format a50
col ISSYS_MODIFIABLE format a20;
SELECT NAME, ISSYS_MODIFIABLE FROM V$PARAMETER
WHERE name='utl_file_dir' ORDER BY 1;</pre>
<p style="text-align: left;"><em>NAME                                               ISSYS_MODIFIABLE</em><br />
<em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</em></p>
<p style="text-align: left;"><em>utl_file_dir    </em>                                   FALSE</p>
<p style="text-align: justify;"><em><strong>FALSE</strong></em>: Indica que obligatoriamente la base de datos debe bajarse para poder efectuar el cambio. Por tanto, se trata de un parámetro estático y se puede modificar, pero su modificación implica cerrar la base de datos y volverla a abrir para que los lea del fichero de inicialización y pueda realizar el cambio. Por eso en <em>scope</em> ponemos <strong>spfile</strong> y no <em>both</em>.</p>
<p style="text-align: justify;">Si usamos both nos dará el siguiente error:</p>
<p style="text-align: justify;">SQL&gt; alter system set utl_file_dir=&#8217;&lt;directorio_o_ruta&gt;&#8217; scope=<strong>both</strong><br />
*<br />
ERROR at line 1:<br />
ORA-02095: specified initialization parameter cannot be modified</p>
<p style="text-align: justify;">Puedes ampliar información de los parámetros de Oracle en esta otra entrada de blog (<a title="Parámetros de Oracle" href="http://colacios.es/blog/WordPress3/tipos-de-parametros-en-oracle/" target="_blank">http://colacios.es/blog/WordPress3/tipos-de-parametros-en-oracle/</a>).</p>
<p style="text-align: justify;">Se hace así:</p>
<pre style="text-align: left;">SQL&gt; alter system set utl_file_dir='&lt;directorio_o_ruta&gt;' scope=spfile</pre>
<p style="text-align: left;"><em><br />
Ejemplo:<strong> </strong></em></p>
<pre style="text-align: left;"><strong>SQL&gt; alter system set utl_file_dir='/users/oracle/usuarioftp' scope=spfile</strong>
System altered.</pre>
<p>Ahora debo bajar la base de datos y volverla a levantar para que los cambios tengan efecto&#8230;<em><br />
</em>Primero pararé el listener para evitar conexiones &#8230;<em><br />
</em></p>
<pre>$ lsnrctl stop<em> </em></pre>
<p>&nbsp;</p>
<p>Ahora me conecto a sqlplus para bajar y levantar la base de datos &#8230;<em><br />
</em></p>
<pre>$ sqlplus /nolog
SQL&gt; show user USER is ""
SQL&gt; connect /as sysdba;
Connected.</pre>
<p style="text-align: justify;">Bajarla &#8230;<em> </em></p>
<pre style="text-align: justify;">SQL&gt; shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.</pre>
<p style="text-align: left;">Levantarla &#8230;<em><br />
</em></p>
<pre style="text-align: left;">SQL&gt; startup
ORACLE instance started. 

Total System Global Area 1442840576 bytes
Fixed Size                  2069240 bytes
Variable Size             738200840 bytes
Database Buffers          687865856 bytes
Redo Buffers               14704640 bytes
Database mounted.
Database opened.</pre>
<p style="text-align: left;">Compruebo que se ha levantado &#8230;<em><br />
</em></p>
<pre style="text-align: left;"> SQL&gt; show sga 

Total System Global Area 1442840576 bytes
Fixed Size                  2069240 bytes
Variable Size             738200840 bytes
Database Buffers          687865856 bytes
Redo Buffers               14704640 bytes</pre>
<p style="text-align: left;">Compruebo que el parámetro ha cogido el valor correspondiente &#8230;<em> </em></p>
<pre style="text-align: left;">SQL&gt; select name,value from v$parameter where name='<strong>utl_file_dir</strong>'; <em> </em></pre>
<p style="text-align: left;"><em>NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
VALUE<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
</em></p>
<p style="text-align: left;"><em>utl_file_dir</em></p>
<p><strong>/users/oracle/usuarioftp</strong></p>
<div style="text-align: justify;">
<p style="text-align: left;">Ahora levanto el listener:</p>
<pre style="text-align: left;">$ lsnrctl start</pre>
<p style="text-align: left;"><span style="text-decoration: underline;">Nota:<br />
</span>Si se tienen que añadir más directorios se debe especificar como sigue en la sentencia alter system:<br />
<em><strong></strong></em></p>
</div>
<p style="text-align: left;"><em><strong>utl_file_dir</strong> = &#8216;/ora102/log&#8217;, &#8216;/escherdata/carbono/archivos&#8217;,'/cherdata/operational_reports/datos&#8217;, &#8216;/rdata/plata/static/log&#8217;</em></p>
<p style="text-align: justify;">o bien puedes agregar el valor &#8220;<strong>*</strong>&#8221;<br />
<em><strong>utl_file_dir</strong> = *</em></p>
<p style="text-align: justify;"><strong>Evidentemente, antes de modificar todo lo anterior, previamente se han tenido que hacer los siguientes pasos:</strong></p>
<p style="text-align: justify;">Para usar paquete UTL_FILE, que es propiedad de SYS, tienes que conceder el privilegio EXECUTE para el usuario. Dale privilegio EXECUTE para el usuario requerido o público (todos los usuarios) de la siguiente manera:</p>
<pre style="text-align: justify;">grant execute on UTL_FILE to public;</pre>
<p style="text-align: justify;">El siguiente paso y no por ello menos importante es crear un directorio lógico (alias del directorio) de Oracle que apunte a un directorio físico en el sistema de archivos. Sin embargo, el alias del directorio sólo puede sercreado por el DBA (SYS o SYSTEM). Así que después de iniciar sesión como SYS, crear el alias de directorio para la carpeta de ORACLE y conceder permisos de lectura y escritura a PUBLIC como sigue:</p>
<pre style="text-align: justify;">create directory filesdir as '<strong>/users/oracle/usuarioftp</strong>';
grant read on directory filesdir to public;
grant write on directory filesdir to public;</pre>
]]></content:encoded>
			<wfw:commentRss>http://colacios.es/blog/WordPress3/configurar-el-paquete-package-utl_file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
