<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ronal Mejía</title>
    <description>The latest articles on DEV Community by Ronal Mejía (@zr33_lanor).</description>
    <link>https://dev.to/zr33_lanor</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1878860%2F01abc765-8132-4cfb-850a-549aa6514084.jpg</url>
      <title>DEV Community: Ronal Mejía</title>
      <link>https://dev.to/zr33_lanor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zr33_lanor"/>
    <language>en</language>
    <item>
      <title>Recuperar una Base de Datos Oracle Después de un Error en el Archivo spfile.ora</title>
      <dc:creator>Ronal Mejía</dc:creator>
      <pubDate>Sun, 06 Oct 2024 02:47:35 +0000</pubDate>
      <link>https://dev.to/zr33_lanor/recuperar-una-base-de-datos-oracle-despues-de-un-error-en-el-archivo-spfileora-55a5</link>
      <guid>https://dev.to/zr33_lanor/recuperar-una-base-de-datos-oracle-despues-de-un-error-en-el-archivo-spfileora-55a5</guid>
      <description>&lt;p&gt;El archivo &lt;code&gt;spfile.ora&lt;/code&gt; (Server Parameter File) en Oracle es crucial para la configuración y arranque de la base de datos, ya que contiene todos los parámetros de inicialización necesarios para su funcionamiento. Sin embargo, a veces, al realizar ajustes en este archivo (por ejemplo, aumentar el tamaño del SGA o el &lt;code&gt;memory_target&lt;/code&gt;), podemos cometer errores que impidan que la base de datos se inicie correctamente. Esto puede ser un problema crítico, ya que no podremos arrancar la instancia, ni siquiera en modo &lt;code&gt;NOMOUNT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;En este artículo, te mostraré cómo recuperar una base de datos Oracle cuando un cambio erróneo en el &lt;code&gt;spfile.ora&lt;/code&gt; impide su arranque. ¡Vamos a solucionarlo con ejemplos prácticos!&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Escenario: Error al Modificar el Tamaño de Memoria del SGA&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Imagina que modificaste el parámetro &lt;code&gt;sga_target&lt;/code&gt; en el &lt;code&gt;spfile&lt;/code&gt; y le asignaste un valor mayor al disponible en el servidor. Al intentar iniciar la base de datos, se muestra el siguiente error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este error indica que Oracle no puede asignar la cantidad de memoria solicitada y, como resultado, la base de datos no puede arrancar en cualquier modo.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Solución Paso a Paso&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Para resolver este problema siguiendo uno de los métodos más seguros, es el convertir el archivo &lt;code&gt;spfile&lt;/code&gt; a un &lt;code&gt;pfile&lt;/code&gt;, editar el &lt;code&gt;pfile&lt;/code&gt;, y luego volver a crear el &lt;code&gt;spfile&lt;/code&gt;. Te lo explico a continuación.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Paso 1: Convertir el &lt;code&gt;SPFILE&lt;/code&gt; a un &lt;code&gt;PFILE&lt;/code&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Incluso si la base de datos no puede iniciarse, aún es posible convertir el archivo binario &lt;code&gt;spfile&lt;/code&gt; a un archivo &lt;code&gt;pfile&lt;/code&gt; (archivo de texto) utilizando &lt;code&gt;sqlplus&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;1) Accede a &lt;code&gt;sqlplus&lt;/code&gt; con el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sqlplus / as sysdba
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Convierte el &lt;code&gt;spfile&lt;/code&gt; a un &lt;code&gt;pfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE PFILE='$ORACLE_HOME/dbs/pfile.ora' FROM SPFILE;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto generará un archivo &lt;code&gt;pfile.ora&lt;/code&gt; en la ubicación especificada (&lt;code&gt;$ORACLE_HOME/dbs/pfile.ora&lt;/code&gt;) que contendrá todos los parámetros de inicialización. Se considera que los archivos de configuración están en $ORACLE_HOME, de no ser así debe de especificar la ruta del archivo&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Paso 2: Editar el &lt;code&gt;PFILE&lt;/code&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ahora que tenemos el &lt;code&gt;pfile&lt;/code&gt; generado, abre el archivo con un editor de texto (por ejemplo, &lt;code&gt;vi&lt;/code&gt; o &lt;code&gt;nano&lt;/code&gt; en Linux, o &lt;code&gt;Notepad&lt;/code&gt; en Windows) y busca el parámetro incorrecto.&lt;/p&gt;

&lt;p&gt;Por ejemplo, si el problema es con el tamaño del &lt;code&gt;sga_target&lt;/code&gt;, verás algo como esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.sga_target=8192M
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Supongamos que el servidor solo tiene 4 GB de RAM. Este valor es demasiado alto, así que cámbialo a algo más razonable, como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.sga_target=2048M
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Guarda los cambios y cierra el archivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Paso 3: Crear un Nuevo &lt;code&gt;SPFILE&lt;/code&gt; a Partir del &lt;code&gt;PFILE&lt;/code&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Vuelve a &lt;code&gt;sqlplus&lt;/code&gt; y crea un nuevo &lt;code&gt;spfile&lt;/code&gt; usando el &lt;code&gt;pfile&lt;/code&gt; modificado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE SPFILE='$ORACLE_HOME/dbs/spfile.ora' FROM PFILE='$ORACLE_HOME/dbs/pfile.ora';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no especificas una ruta, el &lt;code&gt;spfile&lt;/code&gt; se creará en la ubicación predeterminada de Oracle (&lt;code&gt;$ORACLE_HOME/dbs&lt;/code&gt; en Linux o &lt;code&gt;ORACLE_HOME\\\\database&lt;/code&gt; en Windows).&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Paso 4: Iniciar la Base de Datos con el Nuevo &lt;code&gt;SPFILE&lt;/code&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ahora intenta iniciar la base de datos con el nuevo &lt;code&gt;spfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;STARTUP;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si todo salió bien, la base de datos debería iniciar sin problemas.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Método Alternativo: Iniciar la Base de Datos con un &lt;code&gt;PFILE&lt;/code&gt; Temporal&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Si por alguna razón no puedes crear el &lt;code&gt;pfile&lt;/code&gt; a partir del &lt;code&gt;spfile&lt;/code&gt; (por ejemplo, si el &lt;code&gt;spfile&lt;/code&gt; está corrupto), puedes crear un &lt;code&gt;pfile&lt;/code&gt; desde cero con los parámetros mínimos necesarios:&lt;/p&gt;

&lt;p&gt;1) Crea un archivo &lt;code&gt;pfile&lt;/code&gt; en la ubicación predeterminada de Oracle. Por ejemplo, en Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vi $ORACLE_HOME/dbs/initORCL.ora
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Y agrega parámetros básicos como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.db_name='ORCL' *.memory_target=500M
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) Inicia la base de datos especificando el &lt;code&gt;pfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;STARTUP PFILE='$ORACLE_HOME/dbs/initORCL.ora';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4) Si la base de datos arranca correctamente, crea un nuevo &lt;code&gt;spfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5) Reinicia la base de datos para confirmar que el &lt;code&gt;spfile&lt;/code&gt; se ha generado correctamente y realizar las configuraciones requeridas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SHUTDOWN IMMEDIATE;
STARTUP;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  &lt;strong&gt;Consideraciones Finales&lt;/strong&gt;
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Realiza siempre un respaldo del &lt;code&gt;spfile&lt;/code&gt;&lt;/strong&gt; antes de realizar cualquier modificación.&lt;/li&gt;
&lt;li&gt;Si no estás seguro del valor de un parámetro, realiza pruebas en una base de datos de desarrollo antes de aplicarlo en producción.&lt;/li&gt;
&lt;li&gt;Para las rutas se menciona $ORACLE_HOME, para esto se debe de especificar el directorio donde se encuentran los archivos de configuración.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>oracle</category>
      <category>database</category>
    </item>
  </channel>
</rss>
