Home Assistant Fácil

Curso de Home Assistant y domótica

  • Blog
  • Soy un pardillo
  • Podcast
  • Curso Arduino
  • Curso Domótica
  • Acceder
Usted está aquí: Inicio / Tutoriales / Fragmentos / Oracle / Nuestro primer Shell Script con Oracle

Nuestro primer Shell Script con Oracle

Luis del Valle Hernández

En muchas ocasiones tenemos que automatizar, de alguna manera, alguna tarea de mantenimiento o actualización en nuestra base de datos. Cuando trabajamos con Oracle, muy recomendable la versión Express de esta base de datos, tenemos a nuestra disposición Shell Scripting para ejecutar comandos a través de un archivo de procesamiento por lotes (batch) para Windows. Nos vamos a centrar en este sistema operativo ya que es actualmente el sistema operativo más utilizado en todo el mundo. Vamos a implementar nuestro primer Shell Script con Oracle que nos permita guardar en un fichero txt una copia de seguridad de una tabla.

Lo primero que tenemos que tener en cuenta es crear la tabla, aquí os dejamos como podéis crear la tabla de prueba.

CREATE TABLE NESTUSE.TABLA1
(
 ID NUMBER NOT NULL,
 NOMBRE VARCHAR2(150),
 APELLIDOS VARCHAR2(150),
 FECHA DATE
)
RESULT_CACHE (MODE DEFAULT)
STORAGE (
 BUFFER_POOL DEFAULT
 FLASH_CACHE DEFAULT
 CELL_FLASH_CACHE DEFAULT
 )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
NOMONITORING;


ALTER TABLE NESTUSE.TABLA1 ADD (
 CONSTRAINT TABLA1_PK
 PRIMARY KEY
 (ID)
 ENABLE VALIDATE);

Una vez creada la rellenamos con datos, aquí también os dejamos los inserts necesarios para tener algo de datos.

INSERT INTO TABLA1 (ID,NOMBRE,APELLIDOS,FECHA)
VALUES (1,'Luis', 'del Valle',SYSDATE);
INSERT INTO TABLA1 (ID,NOMBRE,APELLIDOS,FECHA)
VALUES (2,'Alfonso', 'Contreras',SYSDATE-1);
INSERT INTO TABLA1 (ID,NOMBRE,APELLIDOS,FECHA)
VALUES (3,'Juan', 'Añón',SYSDATE-2);
INSERT INTO TABLA1 (ID,NOMBRE,APELLIDOS,FECHA)
VALUES (4,'Luis Fernando', 'Valera',SYSDATE-3);
commit;

Por lo tanto ya tenemos nuestra tabla y también tenemos nuestros datos así que vamos a crear un archivo en cualquier editor de textos que se va a llamar backup_tabla1.bat. Dentro de este archivo copiamos el siguiente texto y guardamos.

sqlplus /nolog @C:\backup_tabla1_inserts.sql

En el archivo batch lo que estamos haciendo es decir al sqlplus, el programa que permite ejecutar SQL y PL/SQL por línea de comandos de Oracle, que se conecte con cualquier usuario (/nolog) y ejecute el script que está en C:\backup_tabla1_inserts.sql. Hay que remarcar que todavía no nos hemos conectado. La conexión se realiza en el propio script que ahora veremos.

Ahora creamos el archivo backup_tabla1_inserts.sql, comiámos el siguiente código y guardamos en C:\. Es importante guardarlo en la raíz de C: debido a que en el archivo batch estamos haciendo referencia a este archivo .sql que está en C:\backup_tabla1_inserts.sql. Si lo guardamos en otra ubicación deberíamos cambiar el batch y poner la nueva ubicación.

-- Conectamos con nuestra base de datos, ya estamos dentro del sqlplus
-- Hay que escribir el usuario y contraseña
CONNECT usuario/contraseña

-- Activamos la salida por el output para poder capturar dbms_output.put_line
set serveroutput on
-- Marcamos que no nos notifique de las acciones que va ejecutando para no ensuciar
-- el resultado como por ejemplo "PL/SQL procedure successfully completed"
SET FEEDBACK OFF

-- Activamos el SPOOL que permite capturar lo que enviamos al output
-- y almacenarlo en un archivo
SPOOL C:\backup_tabla1.sql

-- Cramos un bloque de PL/SQL que nos pinte las inserts
DECLARE
   sentencia   VARCHAR2 (20000) := '';
BEGIN
   -- Comenzamos creando nuestro script de recuperación será
   -- un bloque de PL/SQL
   sentencia := 'DECLARE' || CHR (13);
   sentencia := sentencia || 'BEGIN' || CHR (13);

   --Recorremos la tabla1
   FOR xx IN (  SELECT ID, NOMBRE, APELLIDOS, FECHA
                  FROM tabla1
              ORDER BY 1 ASC)
   LOOP
      -- Creamos la sentencia insert y las vamos almacenando en la variable setencia
      -- Hay que concatenar cada insert
      -- Para que quede más ordenado al final de cada línea hacemos un salto de línea CHR (13)
      sentencia :=
            sentencia
         || 'Insert into tabla1(ID, NOMBRE, APELLIDOS, FECHA) Values ';
      sentencia :=
            sentencia
         || '('''
         || xx.ID
         || ''', '''
         || xx.NOMBRE
         || ''', '''
         || xx.APELLIDOS
         || ''', '''
         || xx.FECHA
         || ''');'
         || CHR (13);

   END LOOP;

   -- Finalizamos nuestro bloque de PL/SQL
   sentencia := sentencia || 'END;' || CHR (13);

   -- Mostramos por el output el resultado
   DBMS_OUTPUT.put_line (sentencia);
END;
-- Esta barra ejecuta el bloque de PL/SQL que hemos creado

/

-- Salimos
EXIT;

Pues ya tenemos todo lo necesario y si lo hemos configurado bien al ejecutar el archivo backup_tabla1.bat tendremos de resultado otro archivo que está en C:\backup_tabla1.sql con las inserts de esa tabla.

Esto puede ser muy útil cuando tenemos que migrar de un modelo de datos a otro y necesitamos insertar ciertos datos en tablas de diferentes modelos, también nos sirve para automatizar copias de seguridad de algunos datos mediante el gestor de tareas de Windows por ejemplo y, en definitiva, para cualquier tarea que se os ocurra.

slzb-06

SLZB-06U: migrar coordinador Zigbee desde Sonoff Dongle P (y por qué el Dongle E es diferente)

Vale, lo confieso: no hay nada que me dé más pereza en domótica que tener que migrar toda la red Zigbee. El típico momento en el que tu viejo … [+ info...]

Home Assistant 2026.6

Home Assistant 2026.6: dashboard inteligente, IR bidireccional y automatizaciones más claras

Llevas meses peleándote con el dashboard de Home Assistant: añadir una tarjeta requería saber de memoria el nombre de cada tipo de bloque, y al final … [+ info...]

MATTER HOME ASSISTANT

Matter Home Assistant: Thread local sin nube

Hay automatizaciones que parecen una chorrada hasta que las vives todos los días. Sesenta minutos después del amanecer, los toldos de mi terraza bajan … [+ info...]

Copyright © 2026 · Programar Fácil · Aviso legal