O Oracle Database oferece uma infinidade de recursos que permitem aos administradores de banco de dados um controle fino sobre a utilização de recursos. Entre esses recursos, os ‘Profiles’ se destacam como uma maneira poderosa de gerenciar e limitar a utilização de recursos por um usuário ou um conjunto de usuários. Neste artigo, mergulharemos mais profundamente no conceito de profiles e exploraremos todos os recursos que podem ser limitados usando profiles no Oracle através de exemplos práticos.

Criando um Profile

A criação de um profile é feita utilizando o comando CREATE PROFILE. Vamos criar um profile chamado limited_user que limita o tempo de sessão ociosa para 30 minutos e permite no máximo 3 sessões simultâneas por usuário:

CREATE PROFILE limited_user LIMIT 
  IDLE_TIME 30 
  SESSIONS_PER_USER 3;

Utilizando os recursos do Profile

A seguir, detalharei cada recurso que pode ser controlado por um profile, fornecendo exemplos práticos para ilustrar sua utilização:

  1. COMPOSITE_LIMIT: Define um limite de uso geral de recursos do sistema. No exemplo abaixo, definimos esse limite como 5000 para o profile composite_limit_profile:
CREATE PROFILE composite_limit_profile LIMIT 
  COMPOSITE_LIMIT 5000;
  1. SESSIONS_PER_USER: Define o número máximo de sessões que um usuário pode ter ao mesmo tempo. No exemplo abaixo, definimos esse limite como 3 para o profile sessions_profile:
CREATE PROFILE sessions_profile LIMIT 
  SESSIONS_PER_USER 3;
  1. CPU_PER_SESSION: Define o número máximo de centissegundos de CPU que uma sessão pode consumir. No exemplo abaixo, definimos esse limite como 10000 para o profile cpu_per_session_profile:
CREATE PROFILE cpu_per_session_profile LIMIT 
  CPU_PER_SESSION 10000;
  1. CPU_PER_CALL: Define o número máximo de centissegundos de CPU que uma chamada (uma única solicitação SQL) pode consumir. No exemplo abaixo, definimos esse limite como 3000 para o profile cpu_per_call_profile:
CREATE PROFILE cpu_per_call_profile LIMIT 
  CPU_PER_CALL 3000;
  1. CONNECT_TIME: Define o número máximo de minutos que uma sessão pode durar. No exemplo abaixo, definimos esse limite como 120 para o profile connect_time_profile:
CREATE PROFILE connect_time_profile LIMIT 
  CONNECT_TIME 120;
  1. IDLE_TIME: Define o número máximo de minutos que uma sessão pode permanecer ociosa antes de ser encerrada. No exemplo abaixo, definimos esse limite como 30 para o profile idle_time_profile:
CREATE PROFILE idle_time_profile LIMIT 
  IDLE_TIME 30;
  1. LOGICAL_READS_PER_SESSION: Define o número máximo de leituras lógicas (do buffer de banco de dados ou do disco) que uma sessão pode executar. No exemplo abaixo, definimos esse limite como 100000 para o profile reads_per_session_profile:
CREATE PROFILE reads_per_session_profile LIMIT 
  LOGICAL_READS_PER_SESSION 100000;
  1. LOGICAL_READS_PER_CALL: Define o número máximo de leituras lógicas que uma chamada pode executar. No exemplo abaixo, definimos esse limite como 1000 para o profile reads_per_call_profile:
CREATE PROFILE reads_per_call_profile LIMIT 
  LOGICAL_READS_PER_CALL 1000;
  1. PRIVATE_SGA: Define o tamanho máximo (em bytes) da área global do sistema (SGA) que pode ser alocada a uma sessão. No exemplo abaixo, definimos esse limite como 5000000 para o profile private_sga_profile:
CREATE PROFILE private_sga_profile LIMIT 
  PRIVATE_SGA 5000000;
  1. FAILED_LOGIN_ATTEMPTS: Define o número máximo de tentativas de login falhas antes que a conta do usuário seja bloqueada. No exemplo abaixo, definimos esse limite como 3 para o profile failed_logins_profile:
CREATE PROFILE failed_logins_profile LIMIT 
  FAILED_LOGIN_ATTEMPTS 3;
  1. PASSWORD_LIFE_TIME: Define o número de dias antes que a senha do usuário expire e precise ser alterada. No exemplo abaixo, definimos esse limite como 60 para o profile password_life_profile:
CREATE PROFILE password_life_profile LIMIT 
  PASSWORD_LIFE_TIME 60;
  1. PASSWORD_GRACE_TIME: Define o número de dias após a expiração da senha durante os quais o usuário ainda pode fazer login. No exemplo abaixo, definimos esse limite como 10 para o profile password_grace_profile:
CREATE PROFILE password_grace_profile LIMIT 
  PASSWORD_GRACE_TIME 10;
  1. PASSWORD_REUSE_TIME: Define o número mínimo de dias antes que uma senha possa ser reutilizada. No exemplo abaixo, definimos esse limite como 30 para o profile password_reuse_time_profile:
CREATE PROFILE password_reuse_time_profile LIMIT 
  PASSWORD_REUSE_TIME 30;
  1. PASSWORD_REUSE_MAX: Define o número mínimo de senhas únicas que o usuário deve usar antes de poder reutilizar uma senha. No exemplo abaixo, definimos esse limite como 10 para o profile password_reuse_max_profile:
CREATE PROFILE password_reuse_max_profile LIMIT 
  PASSWORD_REUSE_MAX 10;
  1. PASSWORD_LOCK_TIME: Define o número de dias que uma conta permanece bloqueada após o número máximo de tentativas de login falhas ser atingido. No exemplo abaixo, definimos esse limite como 1 para o profile password_lock_profile:
CREATE PROFILE password_lock_profile LIMIT 
  PASSWORD_LOCK_TIME 1;
  1. PASSWORD_VERIFY_FUNCTION: Define uma função PL/SQL que é usada para verificar a complexidade da senha quando uma senha é alterada ou criada. No exemplo abaixo, estamos utilizando a função padrão de verificação de senha do Oracle verify_function:
CREATE PROFILE verify_func_profile LIMIT 
  PASSWORD_VERIFY_FUNCTION verify_function;

Alterar um profile

O comando ALTER PROFILE é utilizado para modificar um profile existente.

Vamos supor que você tenha um profile chamado limited_user que já foi criado, e você queira alterar o IDLE_TIME para 60 minutos e o SESSIONS_PER_USER para 5. Você faria isso da seguinte maneira:

ALTER PROFILE limited_user LIMIT 
  IDLE_TIME 60 
  SESSIONS_PER_USER 5;

Este comando modifica o profile limited_user, atualizando o IDLE_TIME e o SESSIONS_PER_USER para os novos valores fornecidos.

Lembre-se de que qualquer alteração feita a um profile afetará todos os usuários aos quais o profile está atribuído. Além disso, as alterações feitas a um profile só entrarão em vigor na próxima vez que o usuário iniciar uma sessão; elas não afetarão as sessões já existentes.

Limitação

Um usuário só pode ter um profile atribuído a ele por vez. Entretanto, você pode alterar o profile de um usuário a qualquer momento usando o comando ALTER USER.

Por exemplo, se você tiver um usuário chamado usuario1 e quiser alterar o profile dele de profile1 para profile2, você faria isso da seguinte maneira:

ALTER USER usuario1 PROFILE profile2;

Lembre-se de que o novo profile deve já existir antes de você poder atribuí-lo a um usuário. Caso contrário, o Oracle retornará um erro.

Embora um usuário só possa ter um profile de cada vez, lembre-se de que os profiles são muito flexíveis. Você pode configurar um profile com qualquer combinação de limites de recursos que se adequar às suas necessidades.

Conclusão

Os Profiles no Oracle são uma ferramenta extremamente útil que pode ser utilizada para manter um controle preciso sobre a utilização de recursos do banco de dados. Através dos exemplos acima, você pode perceber como cada recurso pode ser limitado de maneira granular para se adequar às suas necessidades específicas.

Sobre o autor

Pós graduado em Gestão de Projetos em Tecnologia da Informação pela UNIASSELVI.
Esposo e Pai, curto atividades ao ar livre (Bike, SUP, Natação, Caminhar, Brincar no campo)

Atua com Banco de Dados Oracle desde de 2007. Atualmente é DBA Senior na FLUIDATA Serviços em Banco de dados (www.fluidata.com.br)

Principais atividade Banco de dados:

Implementação, migração, gerenciamento e suporte a produtos Oracle (8i, 9i, 10g, 11g, 12c, 18c, 19c RAC), multiplataforma;
Implementação, migração, gerenciamento e suporte a produtos Microsoft SQL Server (2008 - 2019);
Implementação, migração, gerenciamento e suporte a produtos PostgreSQL (9.3 - 14);
Monitoramento de ambientes 24×7;
Backup e Recovery;
Performance e Tuning;
Alta disponibilidade (HA);
EM database/grid/cloud control;
Conversão de databases;
Standby database / Oracle Data Guard;

Certificações:

Oracle Cloud Infrastructure 2019 Certified Architect AssociateOracle Cloud Infrastructure 2019 Certified Architect Associate
Oracle Database 12c Administrator Certified ProfessionalOracle Database 12c Administrator Certified Professional
Exadata Database Machine Models X2-2 and X2-8 Technology Support SpecialistExadata Database Machine Models X2-2 and X2-8 Technology Support Specialist
Oracle Database 11g Support SpecialistOracle Database 11g Support Specialist
OCP 11g - Oracle Certified Professional AdministratorOCP 11g - Oracle Certified Professional Administrator
OPN Certified Specialist 10g - PartnerNetwork Certified SpecialistOPN Certified Specialist 10g - PartnerNetwork Certified Specialist
Oracle Database 10g Real Applications Clusters AdministratorCertified ExpertOracle Database 10g Real Applications Clusters AdministratorCertified Expert
Oracle Database 10g: Managing Oracle on Linux Certified ExpertOracle Database 10g: Managing Oracle on Linux Certified Expert
OCP 10g - Oracle Certified Professional AdministratorOCP 10g - Oracle Certified Professional Administrator

Principais atividades DEVOPS:

PHP
ASP.net
C#
Docker
Golang
C++
Delphi
Python
HTML5
JavaScript

Você também pode gostar: