Usando profiles para eliminar sessões que ficam inativas por um longo tempo
consumindo recursos do servidor Oracle.
1). Altere o parâmetro de inicialização RESOURCE_LIMIT para TRUE, vem default FALSE
ALTER SYSTEM SET RESOURCE_LIMIT=TRUE SCOPE=BOTH;
2). Crie um profile com um nome desejado por você
Create profile Meu_profile
limit idle_time 1 — Tempo em Minutos (1 minuto)
;
3). Crie um usuário ou associe um pré-existente
create user teste identified by teste
profile meu_profile;
grant create session to teste;
4. Conecte-se ao Oracle com este usuário
Connect teste/teste@ORCL
SELECT SYSDATE FROM DUAL
SYSDATE
——————–
09-MAR-2009 10:39:43
> /
SELECT SYSDATE FROM DUAL
*
ERRO na linha 1:
ORA-02396: tempo inativo máximo excedido; conecte-se novamente
5). Verifique o que ocorreu na sessão do usuário Teste com outro usuário (SYSTEM)
SQL> select username,status
2 from v$session
3* where username is not null
USERNAME STATUS
—————————— ——–
TESTE SNIPED
SYSMAN ACTIVE
SYSMAN INACTIVE
SYSMAN INACTIVE
SYSMAN INACTIVE
DBSNMP ACTIVE
SYSMAN INACTIVE
DBSNMP INACTIVE
SYSTEM ACTIVE
9 linhas selecionadas.
Neste ponto sua sessão inativa foi morta pelo Oracle. Também podemos controlar diversos outros recursos de CPU e senha como mostrado abaixo:
RESOURCE_PARAMETERS
SESSIONS_PER_USER
Especifica o número de sessões concorrentes por usuário.
CPU_PER_SESSION
Especifica o tempo limite de CPU para uma sessão dada em milissegundos
CPU_PER_CALL
Especifica o tempo limite de CPU para uma chamada (parse, execute, fetch), dado em milissegundo.
CONNECT_TIME
Especifica o tempo limite de uma sessão expressado em Minutos (Mesmo se ela estiver ativa).
IDLE_TIME
Foi o do nosso teste, especifica o tempo limite de inatividade para uma sessão dado em minutos.
LOGICAL_READS_PER_SESSION
Número máximo de blocos lidos em uma sessão, tanto para memória como em disco.
LOGICAL_READS_PER_CALL
Número máximo de blocos lidos em uma sessão, tanto para memória como em disco para um processo SQL (parse, execute, fetch).
PRIVATE_SGA
Especifica a quantidade de espaço que uma sessão pode alocar na shared pool.
Obs.: Esse só se aplica se estiver usando Shared Server.
COMPOSITE_LIMIT
Este é um total de recursos que o Oracle calcula em unidades de serviço que é a soma de CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION e PRIVATE_SGA.
PASSWORD_PARAMETERS
Como os parâmetros de senha normalmente são expressados em dias, podemos usar em Minutos (x/1440) ou em segundos (x/86400).
FAILED_LOGIN_ATTEMPTS
Especifica o número de vezes que uma conta pode tentar logar e não conseguir antes de a mesma ser travada (locked) automaticamente pelo Oracle.
PASSWORD_LIFE_TIME
Especifica o número de dias que a mesma senha pode ser utilizada, em conjunto você também deve configurar um valor para PASSWORD_GRACE_TIME para que a senha expire se não for trocada no tempo exato, pois isso pode causar um erro no sistema deixando o usuário conectando indefinidamente.
PASSWORD_REUSE_TIME e PASSWORD_REUSE_MAX
Eles devem ser usados em conjunto, PASSWORD_REUSE_TIME para especificar o número de dias em que a senha não possa ser reutilizada. PASSWORD_REUSE_MAX para especificar o número de vezes que precisa colocar outras senhas antes de utilizar uma senha já informada anteriormente.
PASSWORD_LOCK_TIME
Especifica o número de dias que conta será bloqueada depois de algumas tentativas erradas (no 10g isso vem default como 10), depois desse período o Oracle desbloqueia a conta novamente.
PASSWORD_GRACE_TIME
Especifica o número em dias para que o usuário possa trocar a senha antes de ela expirar, o Oracle dá uma mensagem para o usuário mas permite o logon.
PASSWORD_VERIFY_FUNCTION
Uma função pl/sql que para controlar os requisitos de senha no seu banco de dados, o oracle já fornece uma com implementação de travas bem comuns as senhas de usuário como mesmo nome, abc e etc. O script para criar a função está em:
@?/rdbms/admin/utlpwdmg.sql
Podemos combinar vários desses recursos, ou utilizar somente os que desejarmos, cabe a cada DBA julgar o que será necessário para cada ambiente.
Os valores permitidos são DEFAULT, UNLIMITED e os configuráveis, sejam em dias ou milissegundos de acordo com o que está escrito acima.