MigraTI - Soluções em banco de dados

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

terça-feira, 10 de agosto de 2010

PL/SQL: Item ignored, PLS-00201, PLS-00302, ORA-06550

Pensa no quanto apanhei para descobrir que códigos PL/SQL não encontra OWNER dentro das aplicações.

Procedimento abaixo mostra como a solução é simples para quando um código PL não encontra objetos do próprio schema.

CREATE TABLE lana.user1 (x NUMBER);

Table created


DECLARE
x lana.user1.x%TYPE;
BEGIN
NULL;
END;

ORA-06550: line 3, column 12:
PLS-00302: component 'LANA' must be declared
ORA-06550: line 3, column 6:
PL/SQL: Item ignored


CREATE OR REPLACE SYNONYM LANA FOR LANA.LANA;

Synonym created


DECLARE
x lana.x%TYPE;
BEGIN
NULL;
END;
/

PL/SQL procedure successfully completed


Desde já agradeço.

domingo, 18 de abril de 2010

Alterando alguns dados do Enterprise Manager

Me deparei com um problema esta semana.
O cliente alterou a porta do listener do db dele e utilizou a mesma porta para outro banco.
Mas como o EM vai funcionar? Precisa alterar a porta dele também.
Para você alterar existe uma solução mais classica do que recriar o repositório todo.

No diretório $ORACLE_HOME/$HOSTNAME_$ORACLE_SID/sysman/emd/
altere o arquivo target.xlm la vai ter uma linha com a porta do listener.

property NAME="Port" VALUE="1521"/


Facil,rapido e seguro.

Evitando disputa de IO em disco.

Bom estou empenhado em entender melhor os niveis de performance, então logicamente posso começar a postar varias dicas sobre este topico =].

Hoje vou escrever algo bem interessante e facil de se aplicar em qualquer ambiente.

Bem como qualquer DBA sabe é sempre criar os datafiles de indices e dados em locais/discos diferentes, para melhorar o IO mais balanceado.

Não basta apenas dividirmos os dados dos indices, vamos selecionar os datafiles com mais IO e assim conseguiremos analisar quais datafiles precisam trocar de lugar.

Segue select abaixo:
col name for a60
select name,PHYRDS,PHYWRTS,READTIM,WRITETIM
from v$filestat a, v$dbfile b
where a.file#=b.file#
order by READTIM desc;


NAME PHYRDS PHYWRTS READTIM WRITETIM
------------------------------------------------------------ ---------- ---------- ---------- ----------
/u01/app/oracle/oradata/lana/system01.dbf 1377 6 2248 0
/u01/app/oracle/oradata/lana/sysaux01.dbf 130 49 213 30
/u01/app/oracle/oradata/lana/undotbs01.dbf 67 26 44 16
/u01/leolana1.dbf 5 2 11 0
/u01/app/oracle/oradata/lana/lana_LOB.DBF 5 2 11 3
/u01/app/oracle/oradata/lana/users01.dbf 5 2 6 0
/u01/app/oracle/oradata/lana/TEIKO.dbf 5 2 4 0


Uma grande diferença no número de escritas e leitura fisica entre os discos mostra quando o disco esta sendo sobrecarregado.
Observe que o filesystem "/u01/app/oracle/oradata/lana/system01.dbf" tem muitas leituras logicas mas tem poucas leitura/gravações fisicas, no caso não esta gerando IO.
Quanto mais leituras fisicas mais IO.

Esses números mostram que o banco ganharia performance de IO se dividissemos os filesystem dos datafiles system,sysaux e undo.

logicamente os esses números são inexpressivos pois base de teste não são muito utilizados.
Esses valores podem fazer uma grande diferença em bancos de produção.

[]'s

segunda-feira, 22 de março de 2010

Unamed Files.

ORA-00283: recovery session canceled due to errors
ORA-01111: name for data file 192 is unknown - rename to correct file
ORA-01110: data file 192: '/orastb01/app/oracle/product/9.2.0/dbs/UNNAMED00192'
ORA-01157: cannot identify/lock data file 192 - see DBWR trace file
ORA-01111: name for data file 192 is unknown - rename to correct file
ORA-01110: data file 192: '/orastb01/app/oracle/product/9.2.0/dbs/UNNAMED00192'
ORA-06512: at line 12


Este erro pode ocorrer caso o parametro "standby_file_management" não estiver parametrizado como "auto".

caso isso ocorrer em algum servidor de standby vc deve seguir os seguintes passos.

############################################
# fazer select na maquina de produção. #
############################################

select file_name,file_id from dba_data_files where file_ID=192;
--Observe que o número do file_id esta no final do arquivo de standby. "UNNAMED00192"

FILE_NAME FILE_ID
------------------------------------------------------------ ----------
/oraprd04/oradata/prod/TESTE01.dbf 192




######################################################################
# Ao descobrir o arquivo basta executar o comando abaixo no standby. #
######################################################################

SQL> alter database create datafile '/orastb01/app/oracle/product/9.2.0/dbs/UNNAMED00192' as '/orastd04/oradata/prod/TESTE01.dbf';

Database altered.


Efetuar shutdown no banco de standby
e executar novamente a atualização.

Caso o paremetro standby_file_management estiver como auto, verifique se você não esta utilizando alguns parametros de conversão de nome "db_filename_convert" provavelmente não há as entradas necessárias para este novo datafile.
caso isso ocorrer você deve retirar o parametro de standby_file_management do pfile efetuar o procedimento acima e adicionar os devidos caminhos no db_filename_convert, conforme abaixo.

db_filename_convert='/oraprd04/','/orastd04/'

Qualquer duvida comente abaixo.

terça-feira, 16 de março de 2010

EXP-00079

Este erro pode ocorrer apenas em Oracle Enterprise edition.

Mas é simples de resolver.

ERRO:
EXP-00079: Data in table "NOMEDATABELA" is protected. Conventional path may only be exporting partial table.

Solução:
SQL> grant exempt access policy to OWNER_DO_BACKUP;