Tópico atualizado em:
http://sites.google.com/site/universodobraga/oracle/movendo-um-controlfile
[]'s
Braga
3 de out. de 2008
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
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.
:)
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;
:)
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.
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
Recriando índices em outra tablespace
:)
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:
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:
Linux:
5. Altere o nome do spfile:
6. Crie um novo arquivo de senhas:
7. Inicie a instância e verifique se o nome da instância mudou:
8. Verifique se o sistema está funcionando normalmente com o novo SID
Alterando o nome do banco de dados
1. Force um checkpoint
- 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:
- Certifique-se de não existir um arquivo ccf.sql antes deste passo.
3. Crie um pfile para edição:
4. Finalize a instância:
- 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:
PARA:
- Altere a paralavra 'REUSE' para 'SET' e 'OLDDBNAME' para 'NEWDBNAME'.
--
É possível recriar o controlfile utilizando a sintaxe:
Mas esta sintaxe substituirá o controlfile existente sem mostrar erros.
--
DE:
O último comando do arquivo ccf.sql deverá ser:
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
9. Execute o arquivo 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:
Após este processo, finalize a instância e inicie novamente para verificar se tudo está correto.
--
DATABASE NAME CHANGED!
--
:)
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 CONTROLFILEPARA:
-- 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!
--
:)
Assinar:
Postagens (Atom)