Mostrando entradas con la etiqueta SQL*Plus. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL*Plus. Mostrar todas las entradas

miércoles, 5 de diciembre de 2018

SET EDITFILE

Hice un login en un servidor UNIX con el usuario oracle:

UNIX: who -m
oracle     pts/42       Dec  5 11:53    (10.80.14.246)
UNIX:


Sin darme cuenta, me moví a un directorio donde no tenía permisos para crear archivos:

UNIX: cd /
UNIX: pwd
/
UNIX: touch andrew
touch: cannot create andrew: Permission denied
UNIX:

Hice un login en una base de datos y escribí SQL que no fue corecto:

UNIX: sqlplus /

SQL*Plus: Release 11.2.0.1.0 Production on Wed Dec 5 18:11:55 2018

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from dba_tabbles
  2  /

select count(*) from dba_tabbles
                     *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL>

Intenté a cambiar el SQL pero no podía crear el archivo necesario:


SQL> ed
SP2-0110: Cannot create save file "afiedt.buf"
SQL>

Me serví de la comanda SET EDITFILE para crear el archivo en otro directorio:

SQL> set editfile /tmp/andrew
SQL>

Luego podía crear mi archivo y cambiar mi SQL: 


 

viernes, 9 de agosto de 2013

Como se Puede Limitar la Duración de una Sesión Oracle

Tenía que limitar la duración de una sesión Oracle mientras preparaba un entorno nuevo. Así decidí documentar lo que hice. Probé el ejemplo bajo estas líneas en una base de datos Oracle 11.2.0.2.7. Para empezar conecté como SYS y limité CONNECT_TIME a un minuto el el perfil DEFAULT: 

SQL> conn / as sysdba
Conectado.
SQL> alter profile default
  2  limit connect_time 1
  3  /
 
Perfil modificado.

SQL>

Luego cambié RESOURCE_LIMIT a TRUE para hacer cumplir los límites: 

SQL> alter system set resource_limit = true
  2  /
 
Sistema modificado.

SQL>

Creé un usuario con el perfil DEFAULT. Entonces me conecté a la base de datos como este usuario, miré CONNECT_TIME en USER_RESOURCE_LIMITS y comprobé la hora cada diez segundos:

SQL> create user andrew
  2  identified by reid
  3  profile default
  4  /
 
Usuario creado.
 
SQL> grant create session to andrew
  2  /
 
Concesion terminada correctamente.
 
SQL> conn andrew/reid
Conectado.
SQL> select limit from user_resource_limits
  2  where resource_name = 'CONNECT_TIME'
  3  /
 
LIMIT
----------------------------------------
1
 
SQL> select to_char(sysdate,'hh24:mi:ss')
  2  time_now from dual
  3  /
 
TIME_NOW
--------
18:29:42
 
SQL> host sleep 10
 
SQL> select to_char(sysdate,'hh24:mi:ss')
  2  time_now from dual
  3  /
 
TIME_NOW
--------
18:29:52
 
SQL> host sleep 10
 
SQL> select to_char(sysdate,'hh24:mi:ss')
  2  time_now from dual
  3  /
 
TIME_NOW
--------
18:30:02
 
SQL> host sleep 10
 
SQL> select to_char(sysdate,'hh24:mi:ss')
  2  time_now from dual
  3  /
 
TIME_NOW
--------
18:30:12
 
SQL> host sleep 10
 
SQL> select to_char(sysdate,'hh24:mi:ss')
  2  time_now from dual
  3  /
 
TIME_NOW
--------
18:30:22
 
SQL> host sleep 10
 
SQL> select to_char(sysdate,'hh24:mi:ss')
  2  time_now from dual
  3  /
 
TIME_NOW
--------
18:30:32
 
SQL> host sleep 10

Después de un minuto, la consulta siguiente fracasó y la sesión terminó con un ORA-02399:

SQL> select to_char(sysdate,'hh24:mi:ss')
  2  time_now from dual
  3  /
select to_char(sysdate,'hh24:mi:ss')
*
ERROR en linea 1:
ORA-00604: se ha producido un error a nivel 1 de SQL
recursivo
ORA-02399: ha excedido el tiempo maximo de conexion,
desconectando
ORA-02399: ha excedido el tiempo maximo de conexion,
desconectando

SQL>

... y una nueva tentativa a emplear la consulta probó que la sesión no estaba conectada a la base de datos: 

SQL> select to_char(sysdate,'hh24:mi:ss')
  2  time_now from dual
  3  /
select to_char(sysdate,'hh24:mi:ss')
*
ERROR en linea 1:
ORA-01012: no esta conectado
Identificador de Proceso: 6736
Identificador de Sesion: 36 Numero de Serie: 9
 

viernes, 19 de abril de 2013

SELECT ... INTO

Leí este ejemplo aquí Luego decidí traducirlo para los hispanohablantes. Tanel Poder buscaba un error en una fila de SQL. Entonces se dio cuenta que había escrito SELECT…INTO en SQL*Plus. No funcionó pero no le dio ningún error: 

SQL> var tanel_poder varchar2(10)
SQL> select dummy into :tanel_poder from dual
  2  /

D
-
X

SQL> 

Tras hacerlo, la variable estaba vacía: 

SQL> print tanel_poder

TANEL_PODER
--------------------------------


SQL> 

Repitió la petición en PL/SQL y funcionó: 

SQL> begin
  2  select dummy into :tanel_poder from dual;
  3  end;
  4  /

Procedimiento PL/SQL terminado correctamente.

SQL>

Esta vez, el contenido de DUAL estaba en la variable TANEL_PODER:

SQL> print tanel_poder

TANEL_PODER
--------------------------------
X

SQL>