BLOG RODRIGO ALMEIDA

Tag: 10g

Técnica de hack em senhas armazenadas pelo Oracle

by Rodrigo Almeida on fev.05, 2010, under Administração

Olá,

Uma das táticas mais “sujas”, diga-se de passagem, é a alteração de senha do usuário sem a sua permissão, pois pode ocorrer em diversos momentos do dia-a-dia, por exemplo:

  • O cara saiu de férias, é deixou algum objeto no owner dele.
  • Preciso pegar algumas informações da tabela do FULANO.
  • É necessário fornecer algumas permissões do usuário X para Y.
  • Ou a MELHOR! Existe um owner na aplicação que foi criado em 1900 e bolinhas, e agora, precisa de manutenção e ninguém tem acesso a esse usuário, porque ninguem sabe a senha.

Bom, para resolver esses “probleminhas”, existe uma técnica no Oracle que podemos utilizar para ter acesso completo a um específico usuário, um pequeno “hack” no dicionário Oracle, mas para conseguir a façanha, é necessário que tenha acesso a view DBA_USERS, que foi utilizado nesse exemplo.

LEMBRANDO

Lógicamente, que todos os exemplos que citei acima, poderiam ser feitos pelo DBA da empresa ou alguém que tenha acesso a usuários gerenciais do banco de dados, como SYSTEM, usuários com role de DBA e etc. Isso é apenas um exemplo de como se aplicar a técnica.

Agora, vou passar o exemplo prático de como funciona.

1) Vamos criar um usuário.

@id
HORA EXECUTADA ------------------- 09-09-2008 11:45:57 INSTANCE_NAME HOST_NAME STATUS --------------- -------------------- ---------- xe DBARODRIGO OPEN USER IS "SYS"
create user RODRIGO
identified by rodrigo;

Usuário criado.

grant create session to RODRIGO;

Concessão bem-sucedida.

disco

Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

2) Teste a conexão do novo usuário no banco de dados.

conn rodrigo/rodrigo

Conectado.

disco

Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

3) Conectado com um usuário administrativo, faça um select básico na view DBA_USERS.

conn system

Informe a senha:

Conectado.

select username, account_status, password
    from dba_users
    where username = 'RODRIGO';

USERNAME ACCOUNT_STATUS PASSWORD

—————————— ——————————– ——————————

RODRIGO OPEN F697FBF0BB2DA2EC

4) Altere a senha do usuário desejado, no exemplo, vou alterar a senha para FERNANDA.

alter user RODRIGO identified by FERNANDA;

Usuário alterado.

5) Pegue o valor gerado para a nova senha.

select username, account_status, password
  from dba_users
  where username = 'RODRIGO';

USERNAME ACCOUNT_STATUS PASSWORD

—————————— ——————————– ——————————

RODRIGO OPEN FB34D454E9FFDE18

Observação
Pode parecer confuso, mais vamos recapitular os valores que são equivalentes as senhas:
F697FBF0BB2DA2EC = RODRIGO
FB34D454E9FFDE18 = FERNANDA

6) Para voltar a senha anterior, apenas utilize a opção VALUES junto com IDENTIFIED BYcom o valor da coluna password.

conn system

Informe a senha:

Conectado.

alter user RODRIGO identified by values 'F697FBF0BB2DA2EC';

O valor F697FBF0BB2DA2EC (gerado por um algoritmo HASH), é equivalente ao valor RODRIGO.
Agora, veja os testes.

conn rodrigo/fernanda

Conectado.

disco

Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

conn system

Informe a senha:

Conectado.

alter user RODRIGO identified by values 'F697FBF0BB2DA2EC';

Usuário alterado.

disco

Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

conn rodrigo/rodrigo

Conectado.

disco

Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Como eu não alterei o valor para a senha FERNANDA, se eu tentar logar com essa senha, terei erros, veja.

conn rodrigo/fernanda

ERROR:

ORA-01017: invalid username/password; logon denied

FINISH!

Uma técnica de hack bem conhecida entre os DBAS, que até a versão 10gR2 (no Patchset 10.2.0.4) ainda continua, eu não sei ainda se nas versões 11g já possui algum tipo de segurança nesse ponto, então aprecie com moderação.

ATUALIZAÇÃO

Para as versões 11g essa técnica não é mais aplicada devido as alterações estruturais no banco de dados por parte de segurança, que ficou muito mais confiável. Então, essa técnica se aplica até a versão Oracle Database 10g Release 2.

Abraços,

  • Share/Bookmark
2 Comments :, , , , , , , , , , , more...

Diminuindo físicamente um banco de dados Oracle

by Rodrigo Almeida on jan.29, 2010, under Administração

Olá,

Vou mostrar uma tática bem legal de diminuir um banco de dados Oracle físicamente, sem mexer em extents (por shrink table), rebuild de índices ou realizar desfragmentação de segmentos (por Export\Import Utility) no banco de dados.

O principal ponto que iremos atacar será os espaços livres desnecessários alocados na tablespace, que consomem espaços em disco preciosos no sistema operacional, toda essa tarefa será guiada atráves da marca d’água (HWM - High Water Mark) dos datafiles onde podemos realizar um RESIZE no datafile para um valor menor sem a perda de dados.

Lembrete

Essa tarefa envolve alguns conceitos de Oracle, como os de Marca D’água, ou HWM - High Water Mark, esse tema eu vou abordar em outro post para melhor entendimento. OK!

Para iniciarmos os trabalhos, vamos analisar o tamanho do nosso banco de dados e quanto ele está ocupando em disco, abaixo, vou fazer dois SELECTS que passa essas informações para nós e depois um print da quantidade em disco utilizado e livre no sistema operacional.

select sum(bytes)/1024/1024 as "TamanhoFisico(MB)" from dba_data_files;

TamanhoFisico(MB)
—————–
76000

col "FileSystem" format a12
select substr(file_name,1,4) as "FileSystem", sum(bytes)/1024/1024 as "Tamanho(MB)"
from dba_data_files
group by rollup(substr(file_name,1,4))
order by substr(file_name,1,4);

FileSystem Tamanho(MB)
———— ———–
/u01 25800
/u02 50200
76000

Percebemos, que no meu banco de dados, tenho quase 26GB de datafiles no FileSystem /u01 e mais 50GB no FileSystem /u02, totalizando os 76GB que é o tamanho total do meu banco de dados. O importante é saber o que esse valor representa na minha máquina, em questão de consumo e escabilidade, veja o que a máquina ainda pode oferecer.

[oracle@pelspos18 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.9G 3.2G 6.3G 34% /
/dev/sda1 190M 13M 168M 8% /boot
none 2.0G 0 2.0G 0% /dev/shm
/dev/sda5 2.0G 36M 1.9G 2% /tmp
/dev/sda6 114G 51G 58G 48% /u01
/dev/sdb1 134G 50G 78G 40% /u02

Para o FileSystem /u01, representa 48% de utilização, já para o FileSystem /u02, representa 40% de utilização. Claro, que tudo isso, irá depender de como o aplicativo e banco de dados se comporta, se é um banco de dados com crescimento acentuado diário, mensal ou semestral, tudo isso influência. Mas, no exemplo que estou utilizando, o banco de dados tem um crescimento em média de 3GB por mês, então, está adequado.

Mas, eu preciso liberar mais espaço em disco para fazer alguns backups em disco, exports e etc. Então, vou diminuir meu banco de dados físicamente de forma segura, como eu disse no início do post.

Para fazer isso, preciso da mais algumas informações como, Tamanho Físico e Livre das tablespace, que pode ser pego facilmente pelos SELECTS abaixo.

select tablespace_name, sum(bytes)/1024/1024 as "TAMANHO(MB)"
from dba_data_files
group by tablespace_name
order by sum(bytes);

TABLESPACE_NAME TAMANHO(MB)
——————– ———–
FIN_CPAG 400
FIN_CEXT_IDX 800
USERS 800
TOOLS 1500
SYSAUX 2000
SYSTEM 2000
FIN_CORP 3500
FIN_CORP_IDX 5000
FIN_CPAG_IDX 8000
UNDOTBS 10000
FIN_CREC_IDX 12000
FIN_CREC 30000

12 linhas selecionadas.

Bom, as tablespaces SYSTEM e SYSAUX não é novidade para ninguem, então, elas vou deixar-las de fora da atividade, para não ocorrer nenhum tipo de problema. Vou apenas pensar nas demais, inclusive na de UNDO. Perceba que esse é apenas um SELECT para ver o tamanho total das tablespaces, agora, quero saber quanto cada uma tem livre, para poder direcionar os RESIZES. Abaixo segue o tamanho livre por tablespace.

select tablespace_name, sum(bytes)/1024/1024 as "TAMANHO(MB)"
from dba_free_space
group by tablespace_name
order by sum(bytes);

TABLESPACE_NAME TAMANHO(MB)
——————– ———–
FIN_CREC_IDX 2,1875
FIN_CPAG 398,5625
USERS 642,5625
FIN_CEXT_IDX 799,5625
TOOLS 1495,3125
SYSTEM 1738,8125
SYSAUX 1869,125
FIN_CORP_IDX 2456,4375
FIN_CORP 3259,6875
FIN_CPAG_IDX 5289,375
FIN_CREC 8625,125
UNDOTBS 9865,375
12 linhas selecionadas.

Apenas mudei a view do primeiro SELECT, de dba_data_files para dba_free_space. Com isso, podemos ver quem tem mais espaço livre e saber quem precisa, existe tablespace com 8GB livres, e outros com 2,3 e 5G livres, só nisso, deixando apenas 10% livre, podemos economizar 12GB em disco. E ainda sem pensar no UNDO.

Agora, vamos executar um SELECT que irá analisar a marca d’água dos datafiles e verificar se existe a possibilidade de realizar um RESIZE para um valor menor, com isso, liberar espaço em disco no sistema operacional. Esse SELECT precisa de uma atenção especial, pois, é necessário informar o tamanho do db_block_size do seu banco de dados para efetuar corretamente os cálculos.

Para saber o tamanho do seu db_block_size, basta fazer o seguinte procedimento.

NO SQLPLUS, faça:

show parameters db_block_size

NAME TYPE VALUE
———————————— ———– ——————————
db_block_size integer 8192

Se preferir, poderá ver na v$parameter, como no exemplo.

col name format a15
col value format a15
select name, value from v$parameter where name = 'db_block_size';

NAME VALUE
————— —————
db_block_size 8192

Agora, o momento esperado, o SELECT para realizar a operação de resize, veja.

select 'alter database datafile ''' || file_name || ''' resize ' ||
ceil( (nvl(hwm,1)*8192*1.2)/1024/1024 )  || 'm;' cmd
from dba_data_files a,
( select file_id, max(block_id+blocks-1) hwm
  from dba_extents
  group by file_id ) b
where a.file_id = b.file_id(+)
and ceil( (nvl(hwm,1)*8192*1.2)/1024/1024 ) < ceil( blocks*8192/1024/1024)
and ceil( (nvl(hwm,1)*8192*1.2)/1024/1024 ) > 100

Lembrete
Veja que onde está 8192 no script acima, é referente ao tamanho do db_block_size do seu banco de dados, esse valor então poder ser 2048, 4096, 8192, 16384 e 32768.

O script acima irá gerar um resultado sobre espaço livre, tamanho atual, espaço que pode ser salvo, total de espaço que pode ser liberado por datafile do seu banco de dados, tudo isso gerado pelos cálculos sobre a marca d’água de cada datafile. Se atentem pois ele está pegando todas as tablespaces do banco de dados e isso para nós não é necessário, podemos excluir a tablespace SYSTEM e SYSAUX.

FILE_NAME SMALLEST CURRSIZE SAVINGS SMALLEST_SAFE SAVINGS_SAFE
———————————————————— ———- ———- ———- ————- ————
/u02/app/oracle/oradata/finp/fin_corp01.dbf 125 2000 1875 149 1851
/u02/app/oracle/oradata/finp/sysaux01.dbf 191 2000 1809 229 1771
/u02/app/oracle/oradata/finp/system01.dbf 264 2000 1736 316 1684
/u02/app/oracle/oradata/finp/fin_corp02.dbf 117 1500 1383 140 1360
/u01/app/oracle/oradata/finp/fin_cpag_idx04.DBF 643 2000 1357 771 1229
/u01/app/oracle/oradata/finp/fin_cpag_idx03.dbf 651 2000 1349 781 1219
/u01/app/oracle/oradata/finp/fin_cpag_idx02.dbf 692 2000 1308 830 1170
/u01/app/oracle/oradata/finp/fin_cpag_idx01.dbf 728 2000 1272 873 1127
/u01/app/oracle/oradata/finp/fin_corp_idx02.dbf 847 2000 1153 1016 984
/u01/app/oracle/oradata/finp/fin_corp_idx01.dbf 897 2000 1103 1076 924
/u02/app/oracle/oradata/finp/fin_crec09.dbf 1284 2000 716 1540 460
/u02/app/oracle/oradata/finp/fin_crec08.dbf 1288 2000 712 1545 455
/u02/app/oracle/oradata/finp/fin_crec07.dbf 1304 2000 696 1564 436
/u02/app/oracle/oradata/finp/fin_crec06.dbf 1314 2000 686 1576 424
/u02/app/oracle/oradata/finp/fin_crec05.dbf 1331 2000 669 1597 403
/u02/app/oracle/oradata/finp/fin_crec04.dbf 1334 2000 666 1600 400
/u02/app/oracle/oradata/finp/fin_crec01.dbf 1351 2000 649 1622 378
/u02/app/oracle/oradata/finp/fin_crec02.dbf 1351 2000 649 1621 379
/u02/app/oracle/oradata/finp/fin_crec03.dbf 1351 2000 649 1621 379
/u02/app/oracle/oradata/finp/users01.dbf 158 800 642 189 611
/u02/app/oracle/oradata/finp/fin_crec15.dbf 1427 2000 573 1712 288
/u02/app/oracle/oradata/finp/fin_crec14.dbf 1547 2000 453 1856 144
/u02/app/oracle/oradata/finp/fin_crec13.dbf 1549 2000 451 1858 142
/u02/app/oracle/oradata/finp/fin_crec12.dbf 1551 2000 449 1861 139
/u02/app/oracle/oradata/finp/fin_crec11.dbf 1603 2000 397 1923 77
/u01/app/oracle/oradata/finp/fin_corp_idx03.dbf 802 1000 198 962 38

26 linhas selecionadas.

CMD
——————————————————————————
alter database datafile ‘/u02/app/oracle/oradata/finp/system01.dbf’ resize 316m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec11.dbf’ resize 1923m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec02.dbf’ resize 1621m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec07.dbf’ resize 1564m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_corp02.dbf’ resize 140m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec05.dbf’ resize 1597m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec06.dbf’ resize 1576m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec03.dbf’ resize 1621m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec08.dbf’ resize 1545m;
alter database datafile ‘/u01/app/oracle/oradata/finp/fin_corp_idx01.dbf’ resize 1076m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec01.dbf’ resize 1622m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec09.dbf’ resize 1540m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec12.dbf’ resize 1861m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec14.dbf’ resize 1856m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec15.dbf’ resize 1712m;
alter database datafile ‘/u01/app/oracle/oradata/finp/fin_cpag_idx01.dbf’ resize 873m;
alter database datafile ‘/u01/app/oracle/oradata/finp/fin_cpag_idx04.DBF’ resize 771m;
alter database datafile ‘/u02/app/oracle/oradata/finp/sysaux01.dbf’ resize 229m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec13.dbf’ resize 1858m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_crec04.dbf’ resize 1600m;
alter database datafile ‘/u01/app/oracle/oradata/finp/fin_cpag_idx02.dbf’ resize 830m;
alter database datafile ‘/u02/app/oracle/oradata/finp/fin_corp01.dbf’ resize 149m;
alter database datafile ‘/u02/app/oracle/oradata/finp/users01.dbf’ resize 189m;
alter database datafile ‘/u01/app/oracle/oradata/finp/fin_corp_idx02.dbf’ resize 1016m;
alter database datafile ‘/u01/app/oracle/oradata/finp/fin_corp_idx03.dbf’ resize 962m;
alter database datafile ‘/u01/app/oracle/oradata/finp/fin_cpag_idx03.dbf’ resize 781m;

26 linhas selecionadas.

Uma coisa boa que essse script já fornece o comando de DDL para redimensionar o datafile da tablespace sem a perda de dados. Basta executar.

Após a execução dos scripts, vamos analisar os resultados gerados. Primeiramente, vamos ver agora o tamanho total e o espaço livre das tablespaces, depois verificar como ficou o espaço em disco no sistema operacional e saber o quanto ganhamos com isso.

Espaço total das tablespace

select tablespace_name, sum(bytes)/1024/1024 as "TAMANHO(MB)"
from dba_data_files
group by tablespace_name
order by sum(bytes);

TABLESPACE_NAME TAMANHO(MB)
——————– ———–
USERS 189
FIN_CORP 289
FIN_CPAG 400
FIN_CEXT_IDX 800
TOOLS 1500
SYSAUX 2000
SYSTEM 2000
FIN_CORP_IDX 3054
FIN_CPAG_IDX 3255
UNDOTBS 10000
FIN_CREC_IDX 12000
FIN_CREC 25496

12 linhas selecionadas.

Espaço livre nas tablespace

select tablespace_name, sum(bytes)/1024/1024 as "TAMANHO(MB)"
from dba_free_space
group by tablespace_name
order by sum(bytes);

TABLESPACE_NAME TAMANHO(MB)
———————– ———–
FIN_CREC_IDX 2,1875
USERS 31,5625
FIN_CORP 48,6875
FIN_CPAG 398,5625
FIN_CORP_IDX 510,4375
FIN_CPAG_IDX 544,375
FIN_CEXT_IDX 799,5625
TOOLS 1495,3125
SYSTEM 1737,3125
SYSAUX 1811,5
FIN_CREC 4121,125
UNDOTBS 9797,4375

12 linhas selecionadas.

Espaço no sistema operacional

[oracle@pelspos18 u01]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.9G 3.2G 6.3G 34% /
/dev/sda1 190M 13M 168M 8% /boot
none 2.0G 0 2.0G 0% /dev/shm
/dev/sda5 2.0G 36M 1.9G 2% /tmp
/dev/sda6 114G 45G 64G 42% /u01
/dev/sdb1 134G 42G 86G 33% /u02

Conclusões

Perceba que algumas tablespace permaneceram do mesmo tamanho e algumas tiveram mais que 10% do seu tamanho reduzido, o melhor que podemos notar no sistema operacional que o FileSystem /u02 que antes tinha 78GB disponível, agora tem 86GB, uma diferença de 8GB, para o FileSystem /u01 que atens tinha 58GB disponível, agora tem 64GB, uma diferença de 6GB, que somando com o valor anterior, podemos reutilizar 14GB de espaço no sistema operacional.

O tamanho do nosso banco de dados fisicamente, também diminuiu, foi para 62GB. Antes era de 76GB, 14GB a menos, justamente o que nós não utilizamos mais.

O que pode nos ajudar a redução física do banco de dados?

Pode nos ajudar em N tarefas, como:

  • Não deixar o banco de dados travar por problemas de ARCHIVE ERROR;
  • Reaproveitamente de espaço em disco;
  • Diminuição de arquivos de backup gerados pelo RMAN em nível 0;
  • Ajuda na escabilidade do servidor;

Acho que isso já são boas razões para se pensar em fazer uma diminuição física do seu banco de dados.

Abraços,

  • Share/Bookmark
Leave a Comment :, , , , , , , , , , , , , , , , more...

O que é um Control file ?

by Rodrigo Almeida on jan.25, 2010, under Conceito

Olá,

Alguns profissionais iniciantes em Oracle, ainda tem muitas dúvidas sobre diversos conceitos de arquitetura do banco de dados Oracle, por isso, resolvi discutir sobre um ponto bem importante, O que é um Control file?

Tradução

Control file = Arquivo de Controle, tradução em português para a palavra que é muito utilizado na literatura Oracle brasileira.

Visão Geral

O arquivo de controle é um arquivo binário necessário para iniciar e operar com sucesso o banco de dados. O arquivo de controle é atualizado constantemente pelo Oracle durante sua utilização, onde fica disponível para escrita, apenas quando o banco de dados está aberto, ou seja, OPEN. Caso o arquivo de controle não esteja acessível por alguma razão, o banco de dados não irá funcionar corretamente, podendo trazer problemas ao iniciar a instância. Todo arquivo de controle é sempre associado somente com um único banco de dados, não pode existir um arquivo de controle que seja utilizado por mais de uma instância, até em ambientes de Real Application Cluster (RAC), existe um arquivo de controle para cada instância.

Contéudo

Um arquivo de controle possui diversas informações de um banco de dados que é requerida pela instância. Durante o processo de startup ou uma operação normal, somente o Oracle Server pode modificar as informações no arquivo de controle, deste modo, nenhum DBA ou usuário pode modificar seu contéudo.

As informações que o arquivo de controle possui são:

  • Nome do banco de dados
  • Data de criação do banco de dados
  • Os nomes e localizações de cada datafile e redo log associados ao banco de dados
  • Informações sobre as tablespaces
  • Possíveis datafiles com status offline
  • O histórico de logs
  • Sobre os archives gerados
  • Backupsets e backup pieces, gerados pelo RMAN
  • Backups de datafiles e informações de redo log
  • Cópia de datafiles
  • O valor atual do número da sequência do log
  • Informações de checkpoint

Para cada datafile ou redo log que é adicionado, renomeado, modificado ou excluído do banco de dados, o arquivo de controle é atualizado pelo Oracle Server para garantir a modificação da estrutura física da base. Essas modificações pode ser:

  • O Oracle pode identificar os datafiles e redo logs que foram abertos durante o processo de startup
  • Identificar os arquivos que são necessários ou disponíveis em caso de recuperação do banco de dados

Portanto, para cada modificação na estrutura física do banco de dados, podendo ser feito atráves do comando ALTER DATABASE, é altamente recomendado que seja feito um backup do seu arquivo de controle para evitar possíveis problemas no próximo processo de startup do banco de dados.

Como o arquivo de controle armazena informações sobre os checkpoints, a cada três segundos, o processo de plano de fundo (CKPT) registra as posições do redo log, essas posições serão utilizadas posteriormente  durante um processo de recuperação do banco de dados, onde o Oracle irá dizer se todas as entradas dos grupos de redo log serão necessárias para realizar tal recuperação.

Referência

Oracle Concepts 10g Documentation

Abraços,

  • Share/Bookmark
2 Comments :, , , , , , , more...

RMAN - Encontrando o DBID do banco de dados

by Rodrigo Almeida on jan.18, 2010, under RMAN

Olá,

Uma dos maiores problemas de realizar uma recuperação completa ou uma restauração de um banco de dados para um novo servidor, é o problema de mencionar o DBID (Database Identifier - Identificação do banco de dados) para o catálogo do RMAN.

Pois, para conseguir uma restauração da base, é necessário mencionar o DBID ao catálogo de recuperação para conseguir associar o banco de dados no catálogo e posteriormente restaurar e recuperar seus backups sets.

Agora, vamos mencionar quais os meios que podemos encontrar o DBID de um banco de dados.

1. Dicionário de dados

Podemos realizar um simples select na view v$database para conseguir a informação, veja.

select dbid from v$database;
      DBID
----------
4263396950
1 linha selecionada.

2. RMAN - Inicío de sessão

O DBID também é informado quando você conecta ao RMAN, lembrando, que o DBID será informado se o banco de dados estiver em MOUNT ou OPEN, se apenas com NOMOUNT, não será informado, pois não irá ler o arquivo de controle, ou control file. Exemplo.

[oracle@PELSPOWMS2 ~]$ rman

Recovery Manager: Release 10.2.0.1.0 - Production on Thu Oct 23 17:15:23 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

RMAN> connect target 'rman/##########@wmssp.world';

connected to target database: WMSSP (DBID=4263396950)

3. RMAN - Usando o comando List incarnation

Outro modo de se conseguir o DBID do banco de dados, é após logar-se no banco de dados target e estar conectado ao catálogo de recuperação, utilizar o comando LIST INCARNATION, exemplo:

RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
——- ——- ——– —————- — ———- ———-
8451    8458    WMSSP    4263396950       PARENT  1          30/06/2005 19:09:40
8451    8452    WMSSP    4263396950       CURRENT 446075     27/02/2008 09:03:20

Uma dica muito importante é sempre manter uma planilha com todos os bancos de dados, senhas e seus respectivos DBID armazenados após as criação do banco de dados para não correr risco de não saber o DBID do banco de dados criado.

Abraços,

  • Share/Bookmark
5 Comments :, , , , , , , , , , , , , , more...

ORA-600 [2252] - Um caso estranho!

by Rodrigo Almeida on jan.13, 2010, under Oracle Internal

Olá,

Algumas semanas atrás, tive um problema com um banco de dados que eu tinha acabado de criar, um caso muito estranho, tudo funcionava perfeitamente e no outro dia, o banco não iniciava por problemas de ORA-600, poderia ser um caso de pesquisar no Metalink para resolver o problema, mas por curiosidade, resolvi analisar de onde pelo menos esse erro acontecia ou tentar saber o que poderia ter acontecido com meu hardware. O erro exato do ORA-600, está abaixo:

ORA-00600: internal error code, arguments: [2252], [1903], [3499988641], [], [], [], [], []

Como eu estava tentando entender o problema, fui pesquisar sobre o primeiro argumento do ORA-600, o argumento 2252, onde ele se referia a categoria de base 2000, que é referente a funcionalidade do Cache Layer, porém, como o argumento exato é 2252, estava relacionada diretamente a funcionalidade de RCV (Recovery), e o valor 252 é para diversas funcionalidades voltadas ao SCN.

O erro sempre acontecia no momento que eu tentava abrir o banco de dados, executando o ALTER DATABASE OPEN, fora isso, meu banco de dados conseguia montar sem problemas! Então, começei a levantar algumas informações sobre o hardware, como por exemplo:

  • O servidor já tinha 5 anos de uso.
  • Fabricante DELL.
  • O sistema operacional, tinha acabado de ser instalado, estava sobre a Plataforma Linux Red Hat EL AS 4 em 32-Bits, observando os logs do SO, também não encontrava problemas.
  • O banco de dados, recém instalado e configurado.

O problema estava misterioso, quando resolvi analisar cuidadosamente o erro no alert.log, e me deparei com alvo assim:

Wed Jan  9 23:45:57 2002
Successful mount of redo thread 1, with mount id 1181935665
Wed Jan  9 23:45:57 2002
Database mounted in Exclusive Mode
Completed: ALTER DATABASE   MOUNT
Wed Jan  9 23:46:07 2002
alter database open
Wed Jan  9 23:46:07 2002
Errors in file /u01/app/oracle/admin/esdp/udump/esdp_ora_31553.trc:
ORA-00600: internal error code, arguments: [2252], [1903], [3499988641], [], [], [], [], []
Wed Jan  9 23:46:08 2002
ORA-600 signalled during: alter database open...

Lembra que disse que eu tive problemas há algumas semanas atrás, isso é no ano de 2008, todos os registros de alerta estavam com a data de 2002!! Resolvi apenas executar um DATE no Linux diretamente para ver a data, quando me deparei com o ano de 2002 também!

O argumento que o ORA-600 estava apontando estava correto, na trava certa, pois quando criei o banco de dados e realizei o import de várias dados atráves do datapump, meus primeiros archives e entradas de REDO, estava com a data de 2008, quando o servidor perdeu essa data e regrediu, é correto o Oracle Server afirmar que não consegue fazer um Automatic Recovery da instância, quando realiza a abertura do banco, pois como um banco de dados pode começar os primeiros archives na data de 2008 e depois pedir uma recuperação de 2002!!! Meio complicado.

Só para compreender melhor, olhe como estava a minha área de db_recovery:

[oracle@pelspos13 archivelog]$ ls -R
.:
2002_01_05  2008_07_31  2008_08_01  2008_08_04  2008_08_11
./2002_01_05:
o1_mf_1_1_y3dz9wbt_.arc   o1_mf_1_81_y3dx0npt_.arc  o1_mf_1_83_y3dx2ftp_.arc
o1_mf_1_80_y3dx3gmy_.arc  o1_mf_1_82_y3dx1496_.arc
./2008_07_31:
./2008_08_01:
./2008_08_04:
./2008_08_11:
o1_mf_1_82_4b1r5349_.arc
[oracle@pelspos13 archivelog]$

Sendo que os archives da data de 05/01/2002, seria “teoricamente” os archives mais recentes!!!

Agora, a causa disso tudo, simples! A bateria da placa mãe do servidor, como essa bateria já deveria estar com problemas, quando o servidor era reiniciado, ele voltava para a data de fabricação da placa, e com isso, todo o sistema operacional também voltava, e consequentemente, meu banco de dados.

Como trabalhava no modo ARCHIVELOG, ao abrir o banco de dados, apresentava esse erro bonito. Se for analisar, é um erro “besta”, que poderia ser resolvido rapidamente, mas, um simples erro, muitas vezes é díficil de se perceber.

Abraços,

Rodrigo Almeida

  • Share/Bookmark
2 Comments :, , , , , , , , , more...

DROP DATABASE - Esse funciona mesmo!

by Rodrigo Almeida on nov.29, 2009, under Administração

Olá,

Umas das new features mais bem-vindas do Oracle Database 10g, é a opção DROP DATABASE, antigamente, até a versão 9iR2, eliminar um banco de dados era uma coisa demorada e chata. Agora, com essa nova opção, apagar um banco de dados está igual a eliminar uma tabela ou qualquer outro objeto.

Ao invocar o comando DROP DATABASE, todos os seus control files, arquivos de redo logs, datafiles e seu arquivo de parâmetro (PFILE/SPFILE) são apagados do servidor, ou seja, todos os arquivos que são listados internamente no control file, onde estão localizados os arquivos para aquele determinado banco de dados, são eliminados.

Para utilizar o DROP DATABASE, existe algumas restrições, veja:

  • O banco de dados deve estar montado, ou seja, sem acesso aos usuários.
  • Ao montar o banco de dados, deve estar no modo exclusivo (Exclusive mode) e não compartilhado.
  • Quando for montar o banco de dados, a opção de RESTRICT deve ser utilizado. Significa que apenas usuários com opção de acesso restrito são permitidos.

Abaixo, vou passar um exemplo prático de como utilizar esse comando.

sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Sep 5 11:40:44 2008 Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, Data Mining and Real Application Testing options

SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount restrict pfile="/u01/app/oracle/admin/finp/pfile/initfinp.ora";

ORACLE instance started.
Total System Global Area 3221225472 bytes
Fixed Size 2087416 bytes
Variable Size 1543505416 bytes
Database Buffers 1593835520 bytes
Redo Buffers 81797120 bytes
Database mounted.

drop database;

Database dropped.
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options

Atenção

Ao iniciar a instância em MOUNT RESTRICT, utilizei a opção de iniciar por um arquivo de parâmetro alternativo, pois, quando eu executar DROP DATABASE, eu não queria eliminar esse arquivo.

PRONTO! Banco de dados eliminado, é válido lembrar que arquivos como: archives, cópias de backup ou backupsets gerados por RMAN e traces gerados pelos serviços de background, não são apagados pelo DROP DATABASE, o DBA deverá apagar esses arquivos manualmente.

Abraços,

  • Share/Bookmark
3 Comments :, , , , , , , , , , , more...

Certificação OCA 10g agora com 2 exames

by Rodrigo Almeida on jul.30, 2009, under OCA

Olá,

Uma dúvida desde o ano passado para as provas de OCA 10g (Oracle Certified Associate) virou regra. Para ter minha certificação OCA 10g eu preciso fazer somente 1 prova?

Até 1° de Dezembro de 2.008 era possível sim ter a certificação OCA 10g somente realizando a prova 1Z0-042 - Oracle Database 10g: Administration I, porém, a Oracle Univeristy colocou novas regras no mercado de certificação, desde Dezembro de 2.008, para o candidato a prova de OCA 10g deverá realizar dois exames, um exame de SQL, que possui quatro tipos de provas e outra de administração I, pré-requisitos para o OCP.

Segundo a Oracle University a mudança das regras são para melhorar a qualificação dos profossionais e na qualidade dos serviços aos seus clientes e parceiros.

Com essa nova regra, o candidato deve escolher uma prova do exame de SQL, essas quatros provas podem ser:

  • 1Z0-001 - Introduction to Oracle: SQL and SQL
  • 1Z0-007 - Introduction to Oracle: SQL
  • 1Z0-047 - Oracle Database: SQL Expert
  • 1Z0-051 - Oracle Database 11g: Fundamentals I

Após o sucesso no exame acima, deverá prestar para o último exame.

  • 1Z0-042 - Oracle Database Administration I

O score de corte das provas ainda está entre 65% e 71%, depende da prova que vai prestar.

Outras dúvidas também podem ser respondidas, como:

1) Fiz o OCA 10g somente com 1 prova, será necessário realizar outra prova?

Não. Para quem tirou a certificação antes de 1° de Dezembro de 2.008 terá o certificado obdecendo a antiga regra.

2) Preciso ter algum curso oficial Oracle para a prova?

Não, para ter a certificação OCA 10g até o momento, não é necessário qualquer tipo de curso oficial da grade da Oracle University para se candidatar, diferente para a certificação OCP, que é **SIM** necessário um curso oficial para a inscrição dos exames.

Resumindo, a certificação OCA 10g ficou precisamente US$ 125 mais caro que antes, sobre a dificuldade das provas, isso dependerá sempre do candidato, quem é leigo no mundo Oracle, recomendo escolher o exame 1Z0-007, e para quem pretende entrar na área de desenvolvimento, tentar o 1Z0-047 dá uma valiosa “iluminação” ao seu currículo.

Para quem tiver dúvidas sobre as novas mudanças, entre no site da Oracle University.

Abraços,

  • Share/Bookmark
3 Comments :, , , , , , , more...

Publicidade


Friend Connect