sexta-feira, 25 de fevereiro de 2011

Recovery Manager (RMAN) Básico em exemplos - Parte 2

Para uma utilizacao mais profissional do RMAN.Deveremos configurar e alocar o canais (channels).Atraves dos canais podemos refinar nosso backup.

Para configurarmos um canal default podemos utilizar o exemplo abaixo :

configure default device type format Parallelism maxpiecesize

onde :
tipo : podemos utilizar disk ou sbt(fita).
formato : nome padrao dos arquivos a serem gerados (explicado opções na post parte 1)
n : Nível de paralelismo a ser utilizado
nn : Tamanho permitido para cada pedaco dos arquivos do backup.

A Alocação poderá ser feita no momento da execucao do backup com o commando allocate

exemplo :

allocate channel teste_ram type disk format 'c:\bkp\%s_%U.bkp' ;
backup

quarta-feira, 23 de fevereiro de 2011

Recovery Manager (RMAN) Básico em exemplos - Parte 1

PASSO 1 - Garantir que o banco está com archivelog ativado.

Para executar o RMAN , no prompt do sistema operacional chame : Rman

c:\ rman target /


Comando BACKUP

Para eloborarmos backup temos que utilizar o comando backup com as seguites opções

Full : Todos os blocos do banco target serao copiados

Incremental Level : Nivel incremental do Backup

database : Determina a cópia de todos os datafiles.Podemos também especificar a
OPÇAO INCLUDE CURRENT CONTROL FILE

Tablespace : Permite determinar a tablespace a ser parte do backup

datafile : Permite especificar um o mais datafiles :

Format : Permite determinar o nome dos arquivos onde :

%s : Numero do Backup set
%p : Identifica o peice dentro do backup
%d : Possibilita a insercao do nome do banco target
%u : Insere um conjunto de 8 caracteres .
%U : igual a %u || %p || %c

Exemplo : BACKUP format'c:\bkp\%d_%s_%p.bkp' incremental level 0 database

Parametrosde inicialização modificaveis

select name
, value
from v$parameter
where ismodified != 'FALSE'

Paramentos de incilização não Default


select name
, value
from v$parameter
where isdefault = 'FALSE'
and value is not null
order by name

sábado, 12 de fevereiro de 2011

Identificar queries com parse Alto

(1) identificar as queries com maior numero de versões .Neste caso vamos verificar as consultas sql que tiveram mais de 20 versões de execução .

select sql_id,version_count from v$sqlarea where version_count > 20 ;

Exemplo de resultado :

SQL_ID VERSION_COUNT
-------------------------------------------------------------
56wzt9qfdnrju 63
9u8t5m5cqx844 81
0x5xgr3mcddb1 56
6thv1hstvkcg9 187
3083syarq6g7j 113

(2) vamos verificar qual o sql de uma destas versões .

select SQL_TEXT from v$sql where SQL_ID = '8p1pztfdxut3u' and rownum = 1

(3) depois disso pegamos o motivo das vários execuções com esse script abaixo :

select * from v$sql_shared_cursor where sql_id = '8p1pztfdxut3u'

Essa querie a partir da quinta coluna traz campos com resultado S ou N .As colunas que estiverem com 'Y'

estão dizendo o motivo dessa query filha (child_address) não ter utilizado o parse da query original (adress).

os motivos que podem acontecer são os seguintes :

UNBOUND_CURSOR,
SQL_TYPE_MISMATCH
,
OPTIMIZER_MISMATCH
,
OUTLINE_MISMATCH
,
STATS_ROW_MISMATCH
,
LITERAL_MISMATCH
,
FORCE_HARD_PARSE
,
EXPLAIN_PLAN_CURSOR
,
BUFFERED_DML_MISMATCH
,
PDML_ENV_MISMATCH
,
INST_DRTLD_MISMATCH
,
SLAVE_QC_MISMATCH
,
TYPECHECK_MISMATCH
,
AUTH_CHECK_MISMATCH
,
BIND_MISMATCH
,
DESCRIBE_MISMATCH
,
LANGUAGE_MISMATCH
,
TRANSLATION_MISMATCH
,
BIND_EQUIV_FAILURE
,
INSUFF_PRIVS
,
INSUFF_PRIVS_REM
,
REMOTE_TRANS_MISMATCH
,
LOGMINER_SESSION_MISMATCH
,
INCOMP_LTRL_MISMATCH
,
OVERLAP_TIME_MISMATCH
,
EDITION_MISMATCH
,
MV_QUERY_GEN_MISMATCH
,
USER_BIND_PEEK_MISMATCH
,
TYPCHK_DEP_MISMATCH
,
NO_TRIGGER_MISMATCH
,
FLASHBACK_CURSOR
,
ANYDATA_TRANSFORMATION
,
INCOMPLETE_CURSOR
,
TOP_LEVEL_RPI_CURSOR
,
DIFFERENT_LONG_LENGTH
,
LOGICAL_STANDBY_APPLY
,
DIFF_CALL_DURN
,
BIND_UACS_DIFF
,
PLSQL_CMP_SWITCHS_DIFF
,
CURSOR_PARTS_MISMATCH
,
STB_OBJECT_MISMATCH
,
CROSSEDITION_TRIGGER_MISMATCH
,
PQ_SLAVE_MISMATCH,
TOP_LEVEL_DDL_MISMATCH
,
MULTI_PX_MISMATCH
,
BIND_PEEKED_PQ_MISMATCH
,
MV_REWRITE_MISMATCH
,
ROLL_INVALID_MISMATCH
,
OPTIMIZER_MODE_MISMATCH
,
PX_MISMATCH
,
MV_STALEOBJ_MISMATCH
,
FLASHBACK_TABLE_MISMATCH
,
LITREP_COMP_MISMATCH
,
PLSQL_DEBUG
,
LOAD_OPTIMIZER_STATS
,
ACL_MISMATCH
,
FLASHBACK_ARCHIVE_MISMATCH
,
LOCK_USER_SCHEMA_FAILED
,
REMOTE_MAPPING_MISMATCH
,
LOAD_RUNTIME_HEAP_FAILED
,
HASH_MATCH_FAILED
,
PURGED_CURSOR
,
BIND_LENGTH_UPGRADEABLE

Backup com Datapump

Criacao do diretorio
create directory my_dir as 'c:\temp\'

Exportação

expdp system/****** schemas=scott dumpfile=scott.dp directory=my_dir

Importação

impdp system/****** schemas=scott dumpfile=scott.dp directory=my_dir




Edições do Oracle 11 G

Entenda as diferenças de cada versão :

http://www.oracle.com/us/products/database/product-editions-066501.html

sexta-feira, 11 de fevereiro de 2011

Uso da PGA por sessões

SELECT SS.USERNAME,
SS.OSUSER ,
ST.SID "SID",
SN.NAME "TYPE",
CEIL(ST.VALUE / 1024 / 1024) "MB"
FROM V$SESSTAT ST
JOIN V$SESSION SS ON ST.SID = SS.SID
JOIN V$STATNAME SN ON ST.STATISTIC# = SN.STATISTIC#
WHERE UPPER(SN.NAME) LIKE '%PGA%'
AND SS.TYPE <> 'BACKGROUND'
ORDER BY ST.SID,ST.VALUE DESC

Capturar queries executadas em um determinado Periodo

(1) Primeiro crie a tabela que guardara as queires do momento 1 :

CREATE TABLE SQL_EXEC_BEFORE AS
SELECT EXECUTIONS
, HASH_VALUE
FROM V$SQLAREA

(2) Depois gere outra tabela para guardar as queries do momento 2 :

CREATE TABLE SQL_EXEC_AFTER AS
SELECT EXECUTIONS
, HASH_VALUE
FROM V$SQLAREA

(3) Com esta querie abaixo você identifica os sql que foram executados e iniciados entre o periodo 1 e 2 :

SELECT dd.HASH_VALUE ,dd.SQL_TEXT
FROM V$SQLTEXT dd
WHERE dd.HASH_VALUE in ( SELECT AFT.HASH_VALUE
FROM SQL_EXEC_BEFORE BEF ,SQL_EXEC_AFTER AFT
WHERE AFT.EXECUTIONS > BEF.EXECUTIONS
AND AFT.HASH_VALUE = BEF.HASH_VALUE (+)
)
ORDER BY
HASH_VALUE
, PIECE

quinta-feira, 10 de fevereiro de 2011

Roles e Grants de um usuário

Select Usuario,Permissao
from(
Select x.Grantee As Usuario ,y.Granted_Role As Permissao
From Dba_Role_Privs X
join Role_Role_Privs y on y.Role = x.Granted_Role

union all

Select x.Grantee As Usuario ,y.PRIVILEGE As Permissao
From Dba_Role_Privs X
join Role_sys_Privs y on y.Role = x.Granted_Role

)
where usuario = upper(:usuario)
order by usuario desc

Oracle 11 G release 2 - DBA_users

Um nota interessante é que a senha criptografada do Dba_users na release 2 do oracle 11g não possue conteudo.

Com isso a velha tecnica de mudar a senha de um usuario.fazr modificacoes de dados e voltar a senha deste usuário com alter user identified by value não é mais possível.

Roles , Grants - Cuidados com permissões

Segue alguns scripts para identificarmos como estão relacionados as grants e roles padrões do oracle 11g.

Select Role ,Granted_Role As Filho , 'ROLE' As Tipo
From Role_Role_Privs
Union All
Select Role ,PRIVILEGE As Filho , 'GRANT' As Tipo
From Role_sys_Privs
order by role


Como dar acesso a todos os objetos de um schema para :

SELECT decode(object_type,
'TABLE','GRANT SELECT, INSERT, UPDATE, DELETE , REFERENCES ON'||&OWNER||'.',
'VIEW','GRANT SELECT ON '||&OWNER||'.',
'SEQUENCE','GRANT SELECT ON '||&OWNER||'.',
'PROCEDURE','GRANT EXECUTE ON '||&OWNER||'.',
'PACKAGE','GRANT EXECUTE ON '||&OWNER||'.',
'FUNCTION','GRANT EXECUTE ON'||&OWNER||'.' )||object_name||' TO MI_PROPIO_ROLE ;'
FROM user_objects
WHERE OBJECT_TYPE IN ( 'TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'PACKAGE','FUNCTION')
Order By Object_Type


Roles e Grants de um usuário :

Select Grantee, Granted_Role
FROM dba_role_privs ;

quarta-feira, 9 de fevereiro de 2011

Pacote Statspack

Segue algumas dicas de como instalar e utilizar o pacote Statspack da Oracle.

(1) Intalacao

Crie um tablespace de pelo menos 300 mb
execute o comando que esta em : /rdbms/admin/spcreate
@?/rdbms/admin/spcreate

(2) Gerar uma analise do seu banco

Execute o comando :

exec statspack.snap;

(3) Eliminar uma Analise

Execute o comando :

@?/rdbms/admin/sppurge;



(3) Gerando um relatorio da analise

Execute o comando :

@?/rdbms/admin/spreport.sql

(4) Gerando um relatorio da analise

Execute o comando :

col "Date/Time" format a30
select snap_id
, snap_level
, to_char(snap_time,'HH24:MI:SS DD-MM-YYYY') "Date/Time"
from stats$snapshot
, v$database
order by snap_id
/

(5) Removendo o Statspack

Execute o comando :


@?/rdbms/admin/spauto.sql

(6) Shedulando analise automatica

Execute o comando :



@?/rdbms/admin/spdrop


Apesar de ser um recurso orinal do oracle 9i,continua sendo muito útil.







terça-feira, 1 de fevereiro de 2011

Descubra o waited for latches da sua instancia

col event format a30
select event
, time_waited
, round(time_waited*100/ SUM (time_waited) OVER(),2) wait_pct
from (
select event
, time_waited
from v$system_event
where event not in (
'Null event'
,'client message'
,'rdbms ipc reply'
,'smon timer'
,'rdbms ipc message'
,'PX Idle Wait'
,'PL/SQL lock timer'
,'file open'
,'pmon timer'
,'WMON goes to sleep'
,'virtual circuit status'
,'dispatcher timer'
,'SQL*Net message from client'
,'parallel query dequeue wait'
,'pipe get')
union
(
select name
, value
from v$sysstat
where name like 'CPU used when call started'
)
)
order by 2 desc
/