quarta-feira, 18 de janeiro de 2012

Aprimoramentos da tablespace TEMP no Oracle 11g


Neste artigo  estou apresentando os aprimoramentos para a tablespace TEMP, na versão 11g. Apartir da versão 11g, a  Oracle criou uma nova “view” chamada DBA_TEMP_FREE_SPACE que exibe as informações sobre o uso do espaço da tablespace TEMP.

SQL> SELECT * FROM dba_temp_free_space;

TABLESPACE_NAME                TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP                                  56623104        56623104   55574528

1 row selected.

Com essa nova “view” o DBA poderá executar uma redução em modo “on-line”  da  tablespace TEMP usando o comando ALTER TABLESPACE, conforme apresentado abaixo.
SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP 40M;

Tablespace altered.

SQL> SELECT * FROM dba_temp_free_space;

TABLESPACE_NAME                TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP                                  42991616         1048576   41943040

1 row selected.

A redução “shrink” também pode ser executado para um arquivo de “tempfile” específico,  usando a cláusula TEMPFILE.

SQL> ALTER TABLESPACE temp SHRINK
     TEMPFILE '/u01/app/oracle/oradata/DB11G/temp01.dbf' KEEP 30M;

Tablespace altered.

SQL> SELECT * FROM dba_temp_free_space;

TABLESPACE_NAME                TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP                                  31522816           65536   31457280

1 row selected.


A cláusula “keep” especifica o tamanho mínimo da tablespace TEMP ou do “tempfile”. Se o parâmetro for omitido, o banco de dados irá diminuir a tablespace TEMP ou tempfile para o menor tamanho possível.


SQL> ALTER TABLESPACE temp SHRINK SPACE;

Tablespace altered.

SQL> SELECT * FROM dba_temp_free_space;

TABLESPACE_NAME                TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE
------------------------------ --------------- --------------- ----------
TEMP                                   1114112           65536    1048576

1 row selected.



Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com

segunda-feira, 2 de janeiro de 2012

Senhas com “case sensitive” no Oracle 11g

Esse artigo abordará o recurso de senhas com “case sensitives” disponível para o banco de dados Oracle na versão 11g.


No Oracle 11g é possível diferenciar senhas maiúsculas de minúsculas, esse recurso é “default” para o banco de dados Oracle 11g durante a criação. Se durante a criação do banco de dados, o DBA estiver utilizando o DBCA, ele poderá everter essa configuração, permitindo trabalhar como nas versões anteriores ao 11g (10g, 9i, 8i, entre outros).


Abaixo a tela que permite alterar a configuração do banco para aceitar ou não senhas em “case sensitive”.


O parâmetro de inicialização SEC_CASE_SENSITIVE_LOGON permite o controle sobre senhas diferenciando senhas maiúsculas de senhas minúsculas. Se os aplicativos existentes utilizam autenticação no 11g, o DBA pode utilizar o comando ALTER SYSTEM para desativar esta funcionalidade.


SQL> SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON

NAME                       TYPE      VALUE
-------------------------- --------- ------
sec_case_sensitive_logon   boolean   TRUE


O código abaixo demonstra a funcionalidade de senha que diferencia maiúsculas de minúsculas. Em primeiro lugar, o parâmetro de inicialização SEC_CASE_SENSITIVE_LOGON é redefinido para TRUE e é criado um novo usuário com uma senha caso mista.

SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
System altered.


SQL> CONN / AS SYSDBA
Connected.


SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;
System altered.


SQL> CREATE USER test2 IDENTIFIED BY Test2;
User created.


SQL> GRANT CONNECT TO test2;
User granted.

Na sequência é demonstrada a funcionalidade da senha diferenciando maiúsculas de minúsculas será testado a conexão com o novo usuário com senha digitada corretamente e incorretamente.

SQL> CONN test2/Test2
Connected.


SQL> CONN test2/test2
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.

Alterando o parâmetro de inicialização SEC_CASE_SENSITIVE_LOGON como FALSE pode-se conectar no banco de dados usando as duas variantes da senha (maiúsculas ou minúsculas), conforme demonstrado abaixo.

SQL> CONN / AS SYSDBA
Connected.


SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
System altered.


SQL> CONN test2/Test2
Connected.


SQL> CONN test2/test2
Connected.

Se o parâmetro for habilitado novamente o banco de dados irá diferenciar maiúsculas de minúsculas, a autenticação é feita contra a senha, neste caso que está cadastrada de modo misto (maiúsculas e minúsculas).

SQL> CONN / AS SYSDBA
Connected.


SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;
System altered.


SQL> CONN test3/Test3
Connected.


SQL> CONN test3/test3
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.

A visão DBA_USERS inclui uma coluna chamada “PASSWORD_VERSIONS” que indica qual a versão do banco de dados em que a senha foi criada ou modificada.

SQL> SELECT username, password_versions FROM dba_users;


USERNAME                       PASSWORD
------------------------------ --------
TEST                           10G 11G
SPATIAL_WFS_ADMIN_USR          10G 11G
SPATIAL_CSW_ADMIN_USR          10G 11G
APEX_PUBLIC_USER               10G 11G
.
.
.
SYSTEM                         10G 11G
SYS                            10G 11G
MGMT_VIEW                      10G 11G
OUTLN                          10G 11G


32 rows selected.

Usuários importados de um banco de dados 10g têm um valor PASSWORD_VERSIONS de "10G" e mantém as senhas sem diferenciação de maiúsculas e minúsculas independente da configuração do parâmetro SEC_CASE_SENSITIVE_LOGON. As senhas poderão diferenciar maiúsculas de minúsculas, assim que os usuários alterarem a mesma, supondo que o parâmetro SEC_CASE_SENSITIVE_LOGON esteja ativado, definido como TRUE.

O parâmetro “ignorecase” do utilitário orapwd permite controle sobre maiúsculas e minúsculas de senhas no arquivo de senhas. O valor “default” é "n", que significa que as senhas serão diferenciadas de maiúsculas e de minúsculas. Quando usuários que possuem os privilégios (SYSDBA e SYSOPER) forem importados de uma versão anterior de banco de dados, suas senhas estarão incluídas no arquivo de senhas. Esses usuários irão funcionar sem o modo “case sensitive” até que a senha do usuário seja modificada.

Para criar senhas sem utilizar o modo de “case sensitive” no arquivo de senhas, deve-se recriar o arquivo de senha usando a opção “ignorecase = y “, conforme demonstrado abaixo.

$orapwd file=orapwDB11Gb entries=100 ignorecase=y password=mypassword

As senhas associadas com “database links” também podem diferenciar maiúsculas de minúsculas, porém, podem apresentar alguns problemas ao conectar-se entre diferentes versões de banco de dados:
  • De 11g para 11g: O “database link” deve ser criado com a mesma senha do banco de dados remoto.
  • De 11g para 10g: O “database link” deve ser criado de qualquer modo não obedecendo (maiúsculas ou minúsculas), pois o banco de dados remote irá ignorar.
  • De 10g para 11g: O usuário remoto deve ter sua senha modificada para ser totalmente em letras maiúsculas.



Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com