MigraTI - Soluções em banco de dados

quinta-feira, 24 de março de 2011

Oracle para atualizações para o Processador Itanium

Hoje a Oracle anunciou que não irá continuar a desenvolver atualizações para a plataforma Itanium da HP/UX.

Então pense bem em comprar um processador Itanium para sua empresa, você poderá ficar na mão mais para frente.

Noticia completa aqui.

Precisando de Consultoria, monitoramento ou analise em Banco de dados? Clique aqui.

quarta-feira, 23 de março de 2011

Recuperar datafile apagado, sem backup

Hoje aprenderemos a fazer mágica.

Como assim recuperar um arquivo deletado sem backup?
Primeiro preciso lhes dizer que esta tecnica só funciona em linux ou UNIX.
Quando a instância é iniciada, o DBWR adquire um lock do Sistema Operacional em todos os datafiles.
Desta forma, se um datafile for apagado com o comando rm, apenas o seu ponteiro é removido, o arquivo continuará gravado no filesystem, embora não pareça.
É por esse mesmo motivo que em Unix, ao se remover um grande arquivo de log (por exemplo, diag.log),
o espaço livre não é liberado até o processo que estava gravando nele seja reiniciado.
Isto também acontece com o LGRW e os REDOs.

Nota: Ao reiniciar o oracle, ai sim este arquivo será perdido.

WARNING: Não Faça este teste em produção.

Vou fazer um passo a passo em minha instancia de testes para lhes mostrar como efetuar este processo.
Vamos ao Teste:

SQL> startup;
ORACLE instance started.

Total System Global Area 451964928 bytes
Fixed Size 1344812 bytes
Variable Size 272632532 bytes
Database Buffers 171966464 bytes
Redo Buffers 6021120 bytes
Database mounted.
Database opened.

SQL> select name from v$datafile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/lana/system01.dbf
/u01/app/oracle/oradata/lana/sysaux01.dbf
/u01/app/oracle/oradata/lana/undotbs01.dbf
/u01/app/oracle/oradata/lana/users01.dbf
/u01/app/oracle/oradata/lana/TEIKO.dbf
/u01/app/oracle/oradata/lana/lana_LOB.DBF

6 rows selected.

SQL> !rm /u01/app/oracle/oradata/lana/lana_LOB.DBF

SQL> select name from v$datafile;

NAME
--------------------------------------------------
/u01/app/oracle/oradata/lana/system01.dbf
/u01/app/oracle/oradata/lana/sysaux01.dbf
/u01/app/oracle/oradata/lana/undotbs01.dbf
/u01/app/oracle/oradata/lana/users01.dbf
/u01/app/oracle/oradata/lana/TEIKO.dbf
/u01/app/oracle/oradata/lana/lana_LOB.DBF

6 rows selected.

SQL> exit

Agora precisamos pegar o pid do dbwriter

-bash-3.1$ ps -ef | grep dbw
oracle 4023 1 0 14:37 ? 00:00:00 ora_dbw0_lana

Com o pid do dwhr temos de executar o comando lsof para ver quais arquivos este pid esta utilizando
Devemos pegar a quarta coluna deste comando para guardarmos

-bash-3.1$ lsof -p 4023 | grep lana_LOB.DBF
oracle 4023 oracle 264uW REG 8,1 52436992 785490 /u01/app/oracle/oradata/lana/lana_LOB.DBF (deleted)
Apenas por curiosidade vou entrar na pasta em que ficam os ponteiros no Linux e listar
-bash-3.1$ cd /proc/4023/ld
-bash-3.1$ ls -lrt 264*
lrwx------ 1 oracle dba 64 Mar 23 14:44 264 -> /u01/app/oracle/oradata/lana/lana_LOB.DBF (deleted)

Agora é que vem a mágica
Temos de efetuar alguns comandos no banco sequencialmente.
Enter user-name: / as sysdba

Connected to:
Oracle Database 11g Release 11.2.0.2.0 - Production

SQL> alter tablespace LANA_LOB READ ONLY;
alter tablespace LANA_LOB READ ONLY
*
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oracle/oradata/lana/lana_LOB.DBF'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

SQL> !
É normal dar estes erros

bash-3.1$ pwd
/proc/4023/fd
bash-3.1$ cat 264 > /u01/app/oracle/oradata/lana/lana_LOB.DBF

Basta efetuarmos um cat do arquivo 264 que é o arquivo listado pelo lsof para dentro do arquivo deletado


bash-3.1$ exit
exit

SQL> alter tablespace LANA_LOB OFFLINE;

Tablespace altered.

SQL> alter tablespace LANA_LOB online;

Tablespace altered.

SQL> !ls -lrt /u01/app/oracle/oradata/lana/lana_LOB.DBF
-rw-r--r-- 1 oracle dba 52436992 Mar 23 14:48 /u01/app/oracle/oradata/lana/lana_LOB.DBF
Tae o seu arquivo Deletado.



Precisando de Consultoria, monitoramento ou analise em Banco de dados? Clique aqui.

FLASH CACHE

Hoje pela manhã recebi varios documentos do consultor Jailson, e alguns (os mais interessantes) vou postando para os leitores.

O Oracle 11gR2 possui o FLASH CACHE, onde você pode especificar um disco FLASH para ser utilizado como intermediário entre a RAM e o Storage.
Esta é uma das tecnologias utilizadas pelo EXADATA, que você pode utilizar em seu ambiente, com um hardware relativamente barato.
O parâmetro DB_FLASH_CACHE_FILE indica qual Device contém o dispositivo, e o DB_FLASH CACHE_SIZE limita seu tamanho, em Gigabytes.

SQL> SHOW PARAMETER flash_cache

NAME TYPE VALUE
———————————— ———– ——————————
db_flash_cache_file string
db_flash_cache_size big integer 0
SQL>

O FLASH CACHE só pode ser habilitado em Solaris ou Oracle Enterprise Linux. Daí vcês têm uma idéia de como a Oracle dá importância a esta New Feture.

O FLASH CACHE deve ser utilizado quando os Top Wait Events são db file sequential read e db file scattered read,
e o v$DB_CACHE_ADVICE indica que dobrar o tamanho do Cache irá ser benéfico.
Para ser realmente útil, o FLASH CACHE deve ser de 2 a 10 vezes o tamanho do Buffer Cache.

Se estiver utilizando RAC, o FLASH CACHE deve ser habilitado em todos os nós.

terça-feira, 15 de março de 2011

Criar Catalogo do Rman

Passo a Passo para criar um catalogo do Rman em sua base de dados.
Muito útil para gerenciar varias bases de dados em um único ponto.

###############################
# Criar Tablespace do Rman #
###############################
create tablespace rman datafile '+DGDADOS/tksup/rman01.dbf' size 100M AUTOEXTEND ON NEXT 20M MAXSIZE 2000M force logging;


#######################
# Criar owner #
#######################

create user rman identified by rman default tablespace RMAN temporary tablespace temp quota unlimited on RMAN;

#######################
# Grants #
#######################

grant recovery_catalog_owner to rman;
grant connect, resource to rman;


#######################
# criação do catalogo #
#######################

rman catalog rman/rman

create catalog;


########################
# Registrar database #
########################

rman catalog=rman/rman target=rman/rman
register database;

Standby via Rman

Boa Noite!

Segue abaixo o comando para montar um standby via rman.

rman catalog=rman/senha_owner_rman@conexão_produção target sys/senha_sys@conexão_produção auxiliary / log=rman.log
run {
allocate auxiliary channel T1 device type disk;
restore controlfile from 'CAMINHO';
alter database mount;
set until time "to_date('DD-MM-YYYY 17:40:00','dd-mm-yyyy hh24:mi:ss')";
duplicate target database for standby;
}

legal lembrar que é interessante setar corretamente no init os caminhos de db_file_convert ou setar no proprio rman os parametros de set_new_name

"DB_FILE_NAME_CONVERT = ('/PRIM/','/STBY/');"#Parametro a ser inserido no init.
"set newname for datafile 5 to '/u01/oradata/lana.dbf';" #Parametro a ser colocado antes do comando de duplicate no rman.

Qualquer duvida!

segunda-feira, 7 de março de 2011

sqlplus: error while loading shared libraries

ERRO:
$ORACLE_HOME/bin/sqlplus
/u01/app/oracle/product/11.1.0/bin/sqlplus: error while loading shared libraries: /u01/app/oracle/product/11.1.0/lib/libnnz11.so: cannot restore segment prot after reloc: Permission denied


Solução:

1. Login como root

2. vi /etc/selinux/config

3. desabilitar o SELINUX conforme abaixo:
SELINUX=disabled

4. reiniciar o servidor.

Problema Resolvido.

É interessante já na instalação do Linux desabilitar o SELINUX, mas muita gente mantém habilitado pensando estar fazendo um bem para a segurança do SO. Bem se você já não vai abrir o seu linux para o publico (http, ftp, etc) Fica difícil alguém tentar burlar alguma falha de segurança!

Para maiores detalhes sobre SELINUX visite o site http://pt.wikipedia.org/wiki/SELinux

O fato é que não adianta você habilitar o SELinux e não criar políticas de segurança pra ele, é igual instalar o Active Directory e não configurar.(apenas comparação)

Resolvido junto com Reginaldo

Upgrade 11.2.0.2

É importante notar uma grande mudança na forma em que a Oracle passa a tratar os Upgrades de versões a partir da nova versão 11.2.0.2.

Para diminuir o Downtime do serviço ela passou a efetuar o upgrade com a base no ar.

Nesta nova versão você pode efetuar o upgrade com a sua base de produção rodando, parando apenas para efetuar o DBUA, ou melhor dizendo o upgrade na base. Conforme Note 1189783.1 Você poderá efetuar o upgrade deste patch de duas formas.

Out-of-place upgrade: Recomendado pela oracle. Você instalará o patch de uma nova localização para o ORACLE_HOME. Você apenas deverá certificar que há espaço disponível em seu ambiente para um novo ORACLE_HOME.
Após este processo você deverá conferir/modificar os arquivos de tnsnames, listener e oratab. (Conferir todas rotinas que possam influenciar no sistema para direcioná-las para o novo ORACLE_HOME).


In-place upgrade: Modo antigo de atualizar. Parar banco, efetuar backup do ORACLE_HOME, efetuar upgrade de maneira convencional. Oracle só recomenda esta atualização para ambientes que não tenham espaço em disco.
Requer backup de todas as instancias ligadas ao ORACLE_HOME a ser atualizado.


Com esta mudança na atualização ficou significativamente mais facil de efetuar o Upgrade do banco, tempo de parada menor, menos possibilidades de erros e maior facilidade de rollback.

Muito bom esta linha de raciocínio da Oracle.

Erro no Enterprise Manager após mudanças de Horário de verão.

Buenas.

Este erro ocorre em 100% dos Bancos que estão configurados o EM, ao trocar a hora no server referente ao horário de verão o EM até levanta mas mostra vários erros na tela se tornando impossível trabalhar.

Para resolver este problema vou postar um script muito útil que poderá lhe ajudar apenas executando um comando.

Vale lembrar que este script é utilizado apenas para plataforma UNIX.
Antes de rodar o script, certifique-se de que a variável TZ esteja configurada no server.

Copiar e colar o script abaixo em um arquivo sh e mandar executar.

#######################################
# SCRIPT NAME: set_agent_tzrgn.sh
# PURPOSE: Update the timezone for dbsoncole. FYI - database timezone should be updated first.
# USAGE . ./set_agent_tzrgn
# Configure the oracle home and ORACLE_SID before sourcing this script.
#
#set -vx

echo "Report the current timezone from the OS."
echo $TZ

echo "Check to see if the reported timezone is supported by the agent."
grep $TZ $ORACLE_HOME/sysman/admin/supportedtzs.lst

echo "Check to see the current timezone as configured for the agent."
grep TZ $ORACLE_HOME/`hostname`_$ORACLE_SID/sysman/config/emd.properties

# Just a reporting step.
emctl status agent

echo "This should display current timezone as reported by OS TZ value."
emctl config agent getTZ



echo "Take OS TZ and update emd.properties."
echo "resetTZ may send output to the screen on the next command needed in sqlplus."
emctl resetTZ agent
grep TZ $ORACLE_HOME/`hostname`_$ORACLE_SID/sysman/config/emd.properties

# Review and set the EMDROOT then validate the new timezone
emctl getemhome
export EMDROOT=$ORACLE_HOME/`hostname`_$ORACLE_SID
emdctl validateTZ agent $TZ

echo "Make sure the dbconsole is shutdown."
emctl stop dbconsole

# Just a reporting step.
emctl config agent getTZ

# These should be the same port and server as reported by the resetTZ command
hostname=`hostname`
agentport=`grep "Agent Port" $ORACLE_HOME/install/portlist.ini|grep $ORACLE_SID|awk '{print $7}'`

# Create timezone update sql script.
echo "
set echo on verify on feedback on autocommit off;
WHENEVER OSERROR EXIT SQL.SQLCODE ROLLBACK
WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK
prompt Updating dbconsole timezone for &1
alter session set current_schema = SYSMAN;
exec mgmt_target.set_agent_tzrgn('&2:&3','&4');
commit;
exit SQL.SQLCODE
" > /tmp/set_agent_tzrgn_""$$"".sql

echo "\nExecute set_agent_tzrgn.sql script to update the dbconsole config for sysman."
$ORACLE_HOME/bin/sqlplus -S "/ as sysdba" @/tmp/set_agent_tzrgn_""$$"".sql $ORACLE_SID $hostname $agentport $TZ
SQLRESULT=$?
if \[ $SQLRESULT -eq 0 \] ; then
echo "\nBrowse to the URL as reported by the startup of dbconsole."
else
echo "\nFAILED: The set_agent_tzrgn task failed."
fi
rm /tmp/set_agent_tzrgn_""$$"".sql

emctl start dbconsole

echo "\nTimezone update for dbconsole is finished."
echo "\nFor further details on resetTZ and set_agent_tzrgn see:"
echo "Oracle® Enterprise Manager Advanced Configuration 10g Release 5 (10.2.0.5) E10954-02 March 2009."
set +vx