terça-feira, 18 de janeiro de 2011

Habilitando o “archivelog” no Oracle RAC


O presente artigo apresenta os passos de como ativar o processo de "archivelog" no Oracle RAC, parte-se do pressuposto que já existe um "Disk Group" no ASM montado para alocação dos "archives".

1º) Alterar parâmetros de configuração no banco de dados:

Habilitar o parâmetro "log_archive_des_1" para indicar onde os "archives" serão armazenados

alter system set log_archive_dest_1='LOCATION=+DGARCH1/' scope=both sid='*' ;

Desabilitar o parâmetro "cluster_database".

alter system set cluster_database=FALSE scope=SPFILE;

2º) Baixar o banco de dados, usar:

srvctl stop database -d prd1

3º) Iniciar a instância num dos servidores,utilizar o modo "MOUNT".

    startup mount

4º) Habilitar o "Archive Log".

alter database archivelog;

5º) Retornar o parâmetro "cluster_database" e baixar a instância, usar:

alter system set cluster_database=TRUE scope=SPFILE;

shutdown immediate;

6º) Levantar o banco de dados (todas as instâncias do RAC) e também os serviços do banco.

srvctl start database -d prd1

srvctl start service -d prd1

7º) Verificar configuração do banco de dados.

archive log list;

A partir desse passo o RAC já está em modo "archive log".

Não se esqueça de incluir as rotinas de backup para garantir a segurança do banco.

segunda-feira, 10 de janeiro de 2011

O que é o “Recyclebin” e como desabilitá-lo


O "RECYCLEBIN" é uma funcionalidade que permite recuperar o conteúdo de tabelas ou índices no banco de dados de maneira instântanea. Funciona como uma "lixeira" onde os dados podem ser armazenados e reutilizados conforme a necessidade.
Para tanto é necessário que esse dispositivo esteja habilitado para todo o banco de dados permitindo a utilização de todos os usuários.


O presente artigo apresentará os detalhes desta funcionalidade.

Descrição da view "RECYCLEBIN"


SQL> desc recyclebin


 Name                                      Null?    Type
 ----------------------------------------- -------- ------------
 OBJECT_NAME                               NOT NULL VARCHAR2(30)
 ORIGINAL_NAME                                      VARCHAR2(32)
 OPERATION                                          VARCHAR2(9)
 TYPE                                               VARCHAR2(25)
 TS_NAME                                            VARCHAR2(30)
 CREATETIME                                         VARCHAR2(19)
 DROPTIME                                           VARCHAR2(19)
 DROPSCN                                            NUMBER
 PARTITION_NAME                                     VARCHAR2(32)
 CAN_UNDROP                                         VARCHAR2(3)
 CAN_PURGE                                          VARCHAR2(3)
 RELATED                                   NOT NULL NUMBER
 BASE_OBJECT                               NOT NULL NUMBER
 PURGE_OBJECT                              NOT NULL NUMBER
 SPACE                                              NUMBER 

A view "RECYCLEBIN" é um sinônimo público possui como base a view USER_RECYCLEBIN que por sua vez basea-se na tabela "SYS.RECYCLEBIN$".

Objetos relacionados ao "RECYCLEBIN":

SQL> SELECT SUBSTR(object_name,1,50),
object_type,owner
FROM dba_objects
WHERE object_name LIKE '%RECYCLEBIN%';



SUBSTR(OBJECT_NAME,1,50)         OBJECT_TYPE         OWNER
---------------------------      ------------------- ----------
RECYCLEBIN$                      TABLE               SYS
RECYCLEBIN$_OBJ                  INDEX               SYS
RECYCLEBIN$_TS                   INDEX               SYS
RECYCLEBIN$_OWNER                INDEX               SYS
USER_RECYCLEBIN                  VIEW                SYS
USER_RECYCLEBIN                  SYNONYM             PUBLIC
RECYCLEBIN                       SYNONYM             PUBLIC
DBA_RECYCLEBIN                   VIEW                SYS
DBA_RECYCLEBIN                   SYNONYM             PUBLIC



9 rows selected. 

O QUE É O "RECYCLEBIN"

O "RECYCLEBIN" é um contentor virtual onde ficam armazenados todos os objetos que foram removidos da base de dados. O objeto removido continua ocupando o mesmo espaço em que foram criados.

Por exemplo, se a tabela EMP foi criada na "tablespace" USERS, e a mesma são removidas o conteúdo permanece na "tablespace" USERS. A remoção de quaisquer objetos associados, tais como índices, "constraints", tabelas aninhadas (nested tables) e outros objetos dependentes não são removidos, eles são simplesmente renomeados com o prefixo "BIN$$".

O usuário poderá acessar os dados da tabela removida utilizando o "Flashback Query". Todos os usuários têm os mesmos direitos e privilégios em objetos que estão no "RECYCLEBIN". Podem-se visualizar as tabelas removidas consultando a "view" RECYCLEBIN. Os objetos permanecem na "lixeira" até que o dono "owner" dos objetos decida remover permanentemente, utilizando o comando PURGE.

Os objetos armazenados na "lixeira" são contabilizados nas quotas de cada usuário. Os objetos na "lixeira" serão automaticamente removidos se o usuário cria uma nova tabela ou acrescentam dados que faz com que a sua quota a seja ultrapassada.



Exemplos utilizando o "RECYCLEBIN"








SQL> sho user
USER is "BH"


SQL> SELECT object_name,original_name,operation,type,dropscn,droptime
  2  FROM user_recyclebin
  3  /
no rows selected


SQL> CREATE TABLE t1(a NUMBER);
Table created.


SQL> DROP TABLE t1;
Table dropped.


SQL> SELECT object_name,original_name,operation,type,dropscn,droptime
  2  FROM user_recyclebin
  3  /


OBJECT_NAME                    ORIGINAL_NAME    OPERATION TYPE DROPSCN    DROPTIME
------------------------------ ---------------- -------------- ---------- -------------------
BIN$1Unhj5+DSHDgNAgAIKds8A==$0 T1               DROP TABLE     8.1832E+12 2004-03-10:11:03:49


SQL> sho user
USER is "SYS"



SQL> SELECT owner,original_name,operation,type
  2  FROM dba_recyclebin
  3  /



OWNER                          ORIGINAL_NAME                  OPERATION TYPE
------------------------------ ------------------------------ --------- ------
BH                             T1                             DROP      TABLE 


Podemos também criar uma nova tabela com o mesmo nome neste momento.


Expurgando dados

Para remover completamente a tabela do banco de dados e liberar o espaço deve-se utilizar o comando PURGE.


Exemplo:

Usuário BH: 


SQL> PURGE TABLE t1;

Table purged.


ou



SQL> PURGE TABLE "BIN$1UtrT/b1ScbgNAgAIKds8A==$0";

Table purged.



Usuário SYSDBA:

SQL> SELECT owner,original_name,operation,type
  2  FROM dba_recyclebin
  3  /

no rows selected

Usuário BH:


SQL> SHOW recyclebin

Existem várias maneiras de expurgar os objetos, abaixo algumas variações:










PURGE TABLE t1;Expurga a tabela t1
PURGE INDEX ind1;Expurga o índice ind1
PURGE recyclebin;Expurga todos os objetos no "Recyclebin"
PURGE dba_recyclebin;Expurga todos os objetos /usar somente com usuários que possuam o privilégio "SYSDBA"
PURGE TABLESPACE users;Expurga todos os objetos de uma "tablespace"
PURGE TABLESPACE users USER bh;Expurga todos os objetos das tablespaces pertencentes ao usuário BH



Para o expurgo de um objeto, o dono (owner) ou usuário deverá ter o privilégio de SYSDBA ou um privilégio de sistema "DROP ANY..." para que o tipo de objeto a ser expurgado.


Desabilitanto o "RECYCLEBIN" 


Pode também utilizar o comando "DROP" associado ao comando "PURGE" para remover uma tabela, conforme exemplo.

Usuário BH:



SQL> DROP TABLE t1 PURGE;
Table dropped.


SQL> SELECT * FROM recyclebin;
no rows selected



Não é necessário utilizar o comando "PURGE".












Para desabilitar o "RECYCLEBIN" em versões anteriores ao Oracle 10gR2 o parâmetro "_recyclebin" deve ser configurado para FALSE, até esta versão este parâmetro não era documentado (undocumented parameter) e a partir da versão 10gR2 o parâmetro passou a ser documentado, tendo um outro mecanismo de desabilitação.


Abaixo a configuração para desabilitar o "RECYCLEBIN" antes e depois do 10gR2.

Para a versão 10gR1

Verificando os valores do parâmetro "RECYCLEBIN" antes dos ajustes, usuário SYSDBA:

SQL> SELECT a.ksppinm, b.ksppstvl, b.ksppstdf
FROM x$ksppi a, x$ksppcv b
WHERE a.indx = b.indx
AND a.ksppinm like '%recycle%'
ORDER BY a.ksppinm
/          


Parameter                    Value                                    Default?
---------------------------- ---------------------------------------- --------
_recyclebin                 
TRUE                                     TRUE


Usuário BH: 



SQL> CREATE TABLE t1(a NUMBER);
Table created.


SQL> DROP TABLE t1;
Table dropped.



SQL> SELECT original_name FROM user_recyclebin;
ORIGINAL_NAME
--------------
T1 


Desabilitando o "RECYCLEBIN", usuário SYSDBA:



SQL> ALTER SYSTEM SET "_recyclebin"=FALSE SCOPE = BOTH;
System altered.


Para a versão 10gR1

Verificando os valores do parâmetro "RECYCLEBIN" após dos ajustes, usuário SYSDBA:

SQL> SELECT a.ksppinm, b.ksppstvl, b.ksppstdf
FROM x$ksppi a, x$ksppcv b
WHERE a.indx = b.indx
AND a.ksppinm like '%recycle%'
ORDER BY a.ksppinm



Parameter                    Value                                    Default?
---------------------------- ---------------------------------------- --------
_recyclebin                 
FALSE                                    TRUE



Usuário BH: 


SQL> CREATE TABLE t1(a NUMBER);
Table created.



SQL> DROP TABLE t1;
Table dropped.



SQL> SELECT original_name
FROM user_recyclebin;


no rows selected 

A partir da versão 10gR2 o parâmetro "RECYCLEBIN" é inicializado como "ON".

Para desabilitar utilizar os procedimentos abaixo:




SQL> ALTER SESSION SET recyclebin = OFF;
SQL> ALTER SYSTEM SET recyclebin = OFF;




Rubens Oliveira 

DBA Oracle Consultor 
olivert.dba@consultant.com