una todas tablas tabla registros objetos numero maximo las esquema eliminar datos conexiones como borrar 11g oracle session sqlplus kill database-administration

registros - eliminar todas las tablas oracle 11g



¿Cómo puedo eliminar todas las sesiones que se conectan a mi base de datos Oracle? (10)

Antes de matar sesiones, si es posible, hazlo

ALTER SYSTEM ENABLE RESTRICTED SESSION;

para evitar que nuevas sesiones se conecten

Necesito matar (y forzar) rápidamente todas las sesiones externas que se conectan a mi base de datos Oracle sin la supervisión y el administrador.

No quiero simplemente bloquear la base de datos y dejar que los usuarios salgan con elegancia.

¿Cómo puedo escribir esto?


Como SYS:

startup force;

Brutal, pero elegante.


Encontré el siguiente fragmento útil. Tomado de: http://jeromeblog-jerome.blogspot.com/2007/10/how-to-unlock-record-on-oracle.html

select owner||''.''||object_name obj , oracle_username||'' (''||s.status||'')'' oruser , os_user_name osuser , machine computer , l.process unix , s.sid||'',''||s.serial# ss , r.name rs , to_char(s.logon_time,''yyyy/mm/dd hh24:mi:ss'') time from v$locked_object l , dba_objects o , v$session s , v$transaction t , v$rollname r where l.object_id = o.object_id and s.sid=l.session_id and s.taddr=t.addr and t.xidusn=r.usn order by osuser, ss, obj ;

Luego corrió:

Alter System Kill Session ''<value from ss above>'' ;

Para matar sesiones individuales.


Esta respuesta está muy influenciada por una conversación aquí: http://www.tek-tips.com/viewthread.cfm?qid=1395151&page=3

ALTER SYSTEM ENABLE RESTRICTED SESSION; begin for x in ( select Sid, Serial#, machine, program from v$session where machine <> ''MyDatabaseServerName'' ) loop execute immediate ''Alter System Kill Session ''''''|| x.Sid || '','' || x.Serial# || '''''' IMMEDIATE''; end loop; end;

Me salteo las sesiones asesinas que se originan en el servidor de la base de datos para evitar matar las conexiones de Oracle consigo mismo.


He estado usando algo como esto por un tiempo para matar mis sesiones en un servidor compartido. La primera línea del ''dónde'' se puede eliminar para eliminar todas las sesiones que no sean ''sys'':

BEGIN FOR c IN ( SELECT s.sid, s.serial# FROM v$session s WHERE (s.Osuser = ''MyUser'' or s.MACHINE = ''MyNtDomain/MyMachineName'') AND s.USERNAME <> ''SYS'' AND s.STATUS <> ''KILLED'' ) LOOP EXECUTE IMMEDIATE ''alter system kill session '''''' || c.sid || '','' || c.serial# || ''''''''; END LOOP; END;


Para responder a la pregunta, este es el SQL más preciso para realizar el trabajo, puede combinarlo con un bucle PL / SQL para ejecutar realmente sentencias kill:

select ses.USERNAME, substr(MACHINE,1,10) as MACHINE, substr(module,1,25) as module, status, ''alter system kill session ''''''||SID||'',''||ses.SERIAL#||'''''';'' as kill from v$session ses LEFT OUTER JOIN v$process p ON (ses.paddr=p.addr) where schemaname <> ''SYS'' and not exists (select 1 from DBA_ROLE_PRIVS where GRANTED_ROLE=''DBA'' and schemaname=grantee) and machine!=''yourlocalhostname'' order by LAST_CALL_ET desc;


Si Oracle se ejecuta en Unix / Linux, podemos grep para todas las conexiones de clientes y matarlo

grep todo el proceso del cliente de Oracle:

ps -ef | grep LOCAL = NO | grep -v grep | awk ''{print $ 2}'' | wc -l

Matar a todos los procesos del cliente de Oracle:

matar -9 ps -ef | grep LOCAL=NO | grep -v grep | awk ''{print $2}'' ps -ef | grep LOCAL=NO | grep -v grep | awk ''{print $2}''


Si desea evitar que nuevos usuarios se conecten, pero permite que las sesiones actuales continúen hasta que estén inactivas, puede poner la base de datos en modo QUIESCE:

ALTER SYSTEM QUIESCE RESTRICTED;

De la Guía del administrador de la base de datos Oracle :

Las sesiones activas que no son DBA continuarán hasta que se vuelvan inactivas. Una sesión activa es aquella que se encuentra actualmente dentro de una transacción, una consulta, una búsqueda o una instrucción PL / SQL; o una sesión que actualmente tiene recursos compartidos (por ejemplo, enqueues). No se permite que ninguna sesión inactiva se active ... Una vez que todas las sesiones que no son de DBA se vuelven inactivas, la instrucción ALTER SYSTEM QUIESCE RESTRICTED se completa y la base de datos se encuentra en estado inactivo.


información adicional

Cambios importantes de Oracle 11g para alterar la sesión de muerte de la sesión

El autor de Oracle Mladen Gogala señala que ahora se requiere un signo @ para matar una sesión cuando se usa la columna inst_id:

alter system kill session ''130,620,@1'';

http://www.dba-oracle.com/tips_killing_oracle_sessions.htm


Intente desencadenar al iniciar sesión

Insistido en intentar desconectar a los usuarios, no debes permitir que se conecten.

Hay un ejemplo de tal disparador.

CREATE OR REPLACE TRIGGER rds_logon_trigger AFTER LOGON ON DATABASE BEGIN IF SYS_CONTEXT(''USERENV'',''IP_ADDRESS'') not in (''192.168.2.121'',''192.168.2.123'',''192.168.2.233'') THEN RAISE_APPLICATION_ERROR(-20003,''You are not allowed to connect to the database''); END IF; IF (to_number(to_char(sysdate,''HH24''))< 6) and (to_number(to_char(sysdate,''HH24'')) >18) THEN RAISE_APPLICATION_ERROR(-20005,''Logon only allowed during business hours''); END IF; END;