usuario salida restaurar recuperar procedimiento privilegios parametros ejemplos ejecutar developer desde datos consultar con archivos almacenado 11g oracle

salida - restaurar backup oracle



Dejar caer usuarios conectados en la base de datos Oracle (9)

Así es como "automatizo" la caída de usuarios conectados en la base de datos Oracle:

# A shell script to Drop a Database Schema, forcing off any Connected Sessions (for example, before an Import) # Warning! With great power comes great responsibility. # It is often advisable to take an Export before Dropping a Schema if [ "$1" = "" ] then echo "Which Schema?" read schema else echo "Are you sure? (y/n)" read reply [ ! $reply = y ] && return 1 schema=$1 fi sqlplus / as sysdba <<EOF set echo on alter user $schema account lock; -- Exterminate all sessions! begin for x in ( select sid, serial# from v/$session where username=upper(''$schema'') ) loop execute immediate ( ''alter system kill session ''''''|| x.Sid || '','' || x.Serial# || '''''' immediate'' ); end loop; dbms_lock.sleep( seconds => 2 ); -- Prevent ORA-01940: cannot drop a user that is currently connected end; / drop user $schema cascade; quit EOF

Quiero eliminar algunos usuarios en Oracle DB usando sqlplus pero obtengo un error:

SQL> DROP USER test CASCADE; DROP USER test CASCADE * ERROR at line 1: ORA-01940: cannot drop a user that is currently connected

Seguí el enlace en SO para descubrir las sesiones: descartar un usuario conectado de un esquema de base de datos de Oracle 10g

Pero cuando ejecuté el comando no obtengo ningún resultado:

SQL> select sid,serial# from v$session where username = ''test''; no rows selected

Por favor, ayúdenme a dejar caer a los usuarios en este caso.


Básicamente, creo que matar a todas las sesiones debería ser la solución, pero ...

Encontré una discusión similar - https://community.oracle.com/thread/1054062 a mi problema y era que no tenía sesiones para esos usuarios, pero igual recibí el error. Traté también en segundo lugar la mejor respuesta:

sql>Shutdown immediate; sql>startup restrict; sql>drop user TEST cascade;

Lo que funcionó para mí al final fue iniciar sesión como usuario, soltar todas las tablas de forma manual: seleccionar para crear declaraciones de soltar es

select ''drop table '' || TABLE_NAME || '';'' from user_tables;

(Necesita volver a ejecutarse varias veces debido a referencias)

No tengo idea de cómo está relacionado eso, dejé también funciones y secuencias (porque eso era todo lo que tenía en el esquema)

Cuando lo hice y me desconecté, tuve varias sesiones en la tabla v$session y cuando las maté, pude descartar usuarios.

Mi DB aún se inició en modo restringido (no estoy seguro de si es importante o no).

Podría ayudar a alguien más.

Por cierto: mi versión de Oracle es Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production


El problema se ha solucionado mediante el siguiente procedimiento:

DECLARE v_user_exists NUMBER; user_name CONSTANT varchar2(20) := ''SCOTT''; BEGIN LOOP FOR c IN (SELECT s.sid, s.serial# FROM v$session s WHERE upper(s.username) = user_name) LOOP EXECUTE IMMEDIATE ''alter system kill session '''''' || c.sid || '','' || c.serial# || '''''' IMMEDIATE''; END LOOP; BEGIN EXECUTE IMMEDIATE ''drop user '' || user_name || '' cascade''; EXCEPTION WHEN OTHERS THEN IF (SQLCODE = -1940) THEN NULL; ELSE RAISE; END IF; END; BEGIN SELECT COUNT(*) INTO v_user_exists FROM dba_users WHERE username = user_name; EXIT WHEN v_user_exists = 0; END; END LOOP; END; /


Haz una consulta:

SELECT * FROM v$session s;

Encuentra a tu usuario y haz la siguiente consulta (con los parámetros adecuados):

ALTER SYSTEM KILL SESSION ''<SID>, <SERIAL>'';


Solución:

sql>Shutdown immediate; sql>startup restrict; sql>drop user TEST cascade;

Si quiere reactivar DB, normalmente reinicie el servidor o:

sql>Shutdown immediate; sql>startup;

:)


Trataba de seguir el flujo que se describe aquí, pero no tengo suerte de matar por completo la sesión ... Entonces me gusta dar un paso adicional aquí:
http://wyding.blogspot.com/2013/08/solution-for-ora-01940-cannot-drop-user.html

Lo que hice:
1. select ''alter system kill session '''''' || sid || '','' || serial# || '''''';'' from v$session where username = ''<your_schema>''; select ''alter system kill session '''''' || sid || '','' || serial# || '''''';'' from v$session where username = ''<your_schema>''; - como se describe abajo.
El resultado será algo como esto:
alter system kill session ''22,15'' immediate;
2. alter system disconnect session ''22,15'' IMMEDIATE ; - 22-sid, 15-serial - repite el comando para cada sesión devuelta del comando anterior
3. Repite los pasos 1-2 mientras select... no devuelves una tabla vacía
4. Llamada drop user...

Lo que se perdió - llamada al alter system disconnect session ''22,15'' IMMEDIATE ; para cada una de las sesiones devueltas por select ''alter system kill session ''..


Tuve el mismo problema, la configuración de Oracle por defecto afecta el registro de letras. En el exacto mi Scheme_Name fue escrito todas las mayúsculas. Puede ver su Scheme_Name en la pestaña "Otros usuarios", si está utilizando Oracle S


vaya a servicios en herramientas administrativas y seleccione oracleserviceSID y reinícielo


SELECT s.sid, s.serial#, s.status, p.spid FROM v$session s, v$process p WHERE s.username = ''TEST'' --<<<-- AND p.addr(+) = s.paddr /

Pase los valores reales de SID y SERIAL # para la prueba del usuario y luego suelte al usuario ...:

ALTER SYSTEM KILL SESSION ''<SID>, <SERIAL>'' /