3 de out. de 2008

Movendo um controlfile

Tópico atualizado em:

http://sites.google.com/site/universodobraga/oracle/movendo-um-controlfile

[]'s
Braga

Movendo um datafile

Exemplo prático para mover ou renomear datafiles.


Dica
A maneira ideal de mover um datafile é com o banco de dados em estado mount, porém é possível mover um datafile com o banco de dados no estado open e a tablespace que deseja mover o datafile no modo offline.


Mãos a obra

Suponhamos que o nosso datafile alvo está em:
/u01/oradata/datafiles/orcl/datafile01.dbf

Pretendemos movê-lo para:
/u01/oradata/datafiles/xe/datafile01.dbf


Procedimento

SQL> shutdown immediate;
SQL> startup mount
SQL> select name from v$dbfile;
/u01/oradata/datafiles/orcl/datafile01.dbf
SQL> host mv /u01/oradata/datafiles/orcl/datafile01.dbf /u01/oradata/datafiles/xe/datafile01.dbf
SQL> alter database rename file '/u01/oradata/datafiles/orcl/datafile01.dbf' to '/u01/oradata/datafiles/xe/datafile01.dbf';
SQL> select name from v$dbfile;
/u01/oradata/datafiles/xe/datafile01.dbf
SQL> alter database open;

Se nenhum erro ocorrer neste momento o processo foi bem sucedido.

[]'s Braga

29 de jun. de 2008

Archive Mode

Para verificar o modo de archive que o banco está, execute o seguinte comando:


SQL> archive log list
Modo log de banco de dados Modo Sem Arquivamento
Arquivamento automatico Desativado
Destino de arquivamento /u01/oradata/archives/
A sequencia de log on-line mais antiga 1
Sequencia de log atual 1
SQL>


:)

14 de jun. de 2008

ORA-01110

Se por algum motivo, apagar um datafile propositalmente querendo mesmo que ele não faça mais parte do banco de dados e esqueceu que o banco de dados está ativo, assim que precisar do datafile ocorrerá erros e tudo se tornará um caos...

Bom, após se acalmar, resolva o problema da seguinte maneira.


SQL> shutdown abort
SQL> startup
ERROR at line 1:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5:
'/u01/oracle/oradata/datafiles/file01.db'
SQL> alter database datafile '/u01/oracle/oradata/datafiles/file01.db' offline drop;



Após este processo é possível iniciar o banco sem erros.

:)

22 de mai. de 2008

Encontrando Controlfiles, Datafiles, Redolog e Tempfiles

Sempre preciso encontrar os datafiles de um banco de dados e, normalmente, não lembro dos comandos, vou postá-los para melhorar minha memória.

Existem formas diferentes de efetuar essas consultas, para simplificar esse processo, efetuarei tudo pelo sqlplus.

SQL> select value from v$parameter where name = 'control_files';
SQL> select member from v$logfile;
SQL> select name from v$dbfile;
SQL> select name from v$tempfile;

:)

14 de mai. de 2008

Consultando Jobs no Oracle 10 e 11

O sistema de Job, a partir da versão 10 do Oracle está melhorando e para gerenciar os jobs é necessário a utilização do pacote DBMS_SCHEDULER, o qual faz o gerenciamento completo dos mesmos.

Para consultar os jobs existentes, consulte a view DBA_SCHEDULER_JOBS.

Para consultar o log dos jobs que já executaram, consulte a view DBA_SCHEDULER_JOB_RUN_DETAILS.

2 de mar. de 2008

Recriando Índices

A necessidade de recriar índices deu-se quando otimizei o banco e utilizei o move para isso. Quando utilizamos o move, os índices são danificados, necessitando de recriação.

Para recriar índices, utilizo os seguintes métodos.

Recriando índices na mesma tablespace
SQL> set pagesize 0
SQL> set linesize 0
SQL> select 'alter index ' || owner || '.' || index_name
|| ' rebuild nologging;' from dba_index
where tablespace_name = 'TABLESPACENAME';
SQL> spool x.sql
SQL> r
SQL> @x


Recriando índices em outra tablespace
SQL> set pagesize 0
SQL> set linesize 0
SQL> select 'alter index ' || owner || '.' || index_name
|| ' rebuild nologging tablespacename NEWTABLESPACE;'
from dba_index where tablespace_name = 'TABLESPACENAME';
SQL> spool x.sql
SQL> r
SQL> spool off
SQL> @x



:)

3 de fev. de 2008

Alterando o nome do Banco de Dados

Essa dica foi baseada no Metalink Note 15390.1

Após algumas tentativas, concluí que a melhor maneira consiste em dois passos: o primeiro é alterar o nome da instância e o segundo passo é alterar o nome do banco de dados.

Alterando o nome da instância

1. Finalize a instância:
SQL> shutdown immediate;
- Obrigatoriamente deve-se finalizar a instância em modo NORMAL ou IMMEDIATE

2. É recomendável uma cópia de todo o banco (arquivos de controle, redo e dados).

3. Altere a variável ORACLE_SID onde está configurada em seu servidor:
Windows:
Arquivos de registro ou em variáveis de ambiente.
Linux:
/etc/profile ou .bash_profile do usuário oracle.

4. Altere a variável ORACLE_SID atual:
Windows:
set ORACLE_SID=NEWSID

Linux:
export ORACLE_SID=NEWSID

5. Altere o nome do spfile:
$ mv $ORACLE_HOME/dbs/spfileOLDSID.ora $ORACLE_HOME/dbs/spfileNEWSID.ora

6. Crie um novo arquivo de senhas:
$ orapwd file=$ORACLE_HOME/dbs/orapwNEWSID password=PASSWORD entries=5

7. Inicie a instância e verifique se o nome da instância mudou:
SQL> show parameter instance_name;

8. Verifique se o sistema está funcionando normalmente com o novo SID



Alterando o nome do banco de dados

1. Force um checkpoint
SQLP> alter system checkpoint;
SQLP> alter system switch logfile;

- Faça esse segundo passo umas 3 vezes para forçar a gravação de todos os redolog.

2. Grave um controlfile para edição:
SQL> alter database backup controlfile to trace as 'ccf.sql' resetlogs;

- Certifique-se de não existir um arquivo ccf.sql antes deste passo.

3. Crie um pfile para edição:
SQL> create pfile='pfile.ora' from spfile;

4. Finalize a instância:
SQL> shutdown immediate

- Obrigatoriamente deve-se finalizar a instância em modo NORMAL ou IMMEDIATE

5. Edite o pfile salvo e altere as opções:
db_name=NEWDBNAME
db_unique_name=NEWDBNAME

6. Edite o controlfile salvo (ccf.sql) e efetue as seguintes alterações:

DE:
CREATE CONTROLFILE REUSE DATABASE "OLDDBNAME" RESETLOGS
...
PARA:
CREATE CONTROLFILE SET DATABASE "NEWDBNAME" RESETLOGS ...

- Altere a paralavra 'REUSE' para 'SET' e 'OLDDBNAME' para 'NEWDBNAME'.

--
É possível recriar o controlfile utilizando a sintaxe:
CREATE CONTROLFILE REUSE SET DATABASE "NEWDBNAME" RESETLOGS ...

Mas esta sintaxe substituirá o controlfile existente sem mostrar erros.
--

DE:
RECOVER DATABASE USING BACKUP CONTROLFILE
PARA:
-- RECOVER DATABASE USING BACKUP CONTROLFILE
- Comente esta linha

O último comando do arquivo ccf.sql deverá ser:
ALTER DATABASE OPEN RESETLOGS

Na edição do arquivo, lembre-se de retirar todas as linhas sem conteúdo que encontrar.

--
Grave e saia do ccf.sql, ele está pronto para o propósito

7. Altere o nome dos controlfiles atuais para evitar problemas no momento de gerar os novos controlfiles.

8. Conecte no banco e grave o novo arquivo de parametros
$ sqlplus / as sysdba
SQL> create spfile from pfile='pfile.ora';

9. Execute o arquivo ccf.sql:
SQL> @ccf.sql

Este arquivo criará novamente os controlfiles alterando o nome do banco de dados para o novo nome.

Verifique os nomes para verificar se tudo foi mudado realmente:
SQL> show parameter name;

Após este processo, finalize a instância e inicie novamente para verificar se tudo está correto.

--
DATABASE NAME CHANGED!
--

:)