.comment-link {margin-left:.6em;}

Wednesday, June 29, 2005

Gerar Arquivo de Campo BLOB

Autor: Aleksandro
A Dúvida.

Boa noite,

Tio,

Estou precisando de um help, tô quebrando o raio da cabeça , mais não tô
tendo muito sucesso .....então resolvi pedir ajuda....

Tenho uma loja virtual feita em java , esta loja é de uma seguradora
...então lá elabora-se vendas em Vida em Grupo e Previdência Privada...então
o cara vai lá e preenche a proposta, cálcula e pimba se tiver tudo belezinha
.....o cara imprime esta proposta ....que pode gerar boleto caso seja a
opção dele.......é neste momento que começa o meu problema.....

Na aplicação existe uma classe em java que esta gravando este pdf no meu BD
oracle 9i, em uma coluna BLOB, pois teremos que disponibilizar todos os
pdf's emitidos durante o dia, em uma rotina em PL/SQL, porque ?

Pq o cliente tem uma aplicação interna (workflow) e esta aplicação , mostra
propostas emitidas internamente na seguradora , ou seja, o cara vende a
proposta , um departamento escaneia esta proposta , guarda em uma área e
esta aplicação busca estes arquivos e mostra para o usuário, agora eles
querem fazer isto com as propostas emitidas pela loja, então terei que fazer
da seguinte maneira:

1 - Criei uma rotina em PL/SQL que gera toda a movimentação diária da loja,
que será integrada em uma tabela dentro do meu BD, e o cliente criará um
owner com grant de select nesta tabela, para a empresa responsável pelo
workflow possa pegar estes dados e inserir na aplicação, até ae tudo bem...

porém preciso disponibilizar os pdf's gerados em uma pasta , dentro de um
diretório, onde a aplicação do workflow ou alguém proprietário desta
aplicação possa manipular estes pdf's e colocar em uma área onde possa
mostrar a qualquer usuário estas propostas emitidas ....porém tô tomando uma
surra ...estou tentando utilizar o dbms_lob..mais não estou conseguindo,
gravar estes arquivos pdf's em uma pasta dentro diretório......é possivél
fazer isto ??????

eu preciso converter estes arquivos .pdf para outra extensão ???????

Qualquer ajuda é bem-vinda ou opinião .... preciso enviar uma prévia dia
30......agora..........rs....:(....

Obrigado,

Aleks


É perfeitamente possível gerar o conteúdo que está em PDF no seu campo blob em um arquivo e não há necessidade de renomear a extensão.
Até a versão 9ir2 o ult_file tem um bug (2546782) que grava número de bytes errados para campos do tipo BLOB (binários). Esse bug foi corrigido a partir da versão 10g. Porém, na dúvida está claro o uso da versão 9i, portanto vamos ao que consegui.

O conceito foi simples, fazer ftp de mim para eu mesmo ;) -- Existe um pessoal no site oracle-base que desenvolveu uma API para fazer ftp a partir de um código pl/sql. Desta maneira, é possível carregar o seu campo BLOB para uma variável e enviá-lo para a mesma/outra máquina no diretório desejado, basta que nesta máquina esteja configurado um servidor de ftp e usuário para a trasmissão.

No exemplo a seguir, fiz no meu notebook, que não possuia ftp server - então fui no google e procurei um ftp server (free), instalei e configurei um usuário onde só havia permissão de upload vindo de um só ip, evitando portanto conexões indesejadas. Isso me tomou 15 minutos (entre procurar, configurar e levantar o ftp server) realmente muito simples.

A seguir o exemplo.

ops$marcio@ORA10G> create table t ( x blob );

Table created.

ops$marcio@ORA10G>
ops$marcio@ORA10G> host dir *.pdf
Volume in drive C has no label.
Volume Serial Number is 4064-FF3B

Directory of C:\scripts\blog\question

05/19/2004 01:38 PM 218,967 teste.pdf
1 File(s) 218,967 bytes
0 Dir(s) 4,333,289,472 bytes free

ops$marcio@ORA10G>
ops$marcio@ORA10G> create or replace directory my_files as 'C:\scripts\blog\question';

Directory created.

ops$marcio@ORA10G>
ops$marcio@ORA10G> declare
2 l_blob blob;
3 l_bfile bfile;
4 begin
5 insert into t values ( empty_blob() ) returning x into l_blob;
6 l_bfile := bfilename( 'MY_FILES', 'teste.pdf' );
7 dbms_lob.fileopen( l_bfile );
8 dbms_lob.loadfromfile( l_blob, l_bfile, dbms_lob.getlength( l_bfile ) );
9 dbms_lob.fileclose( l_bfile );
10 end;
11 /

PL/SQL procedure successfully completed.

ops$marcio@ORA10G>
ops$marcio@ORA10G> select dbms_lob.getlength(x) bytes from t;

BYTES
-------------
218967

1 row selected.


Para alinhar, até aqui crei uma tabela (t) com um único campo blob (x) e dentro do diretório /scripts/blog/question eu tenho um PDF chamado teste.pdf (um paper do SQL Model 10g). Carreguei esse arquivo para a tabela t e verifiquei o tamanho. Veja que é exatamente o mesmo como no diretório, 218967 bytes.

ops$marcio@ORA10G> declare
2 l_conn UTL_TCP.connection;
3 l_blob blob;
4 begin
5 select x into l_blob from t where rownum = 1;
6
7 l_conn := ftp.login('10.60.92.238', '21', 'marcio', 'senha');
8 ftp.binary(p_conn => l_conn);
9 ftp.put_remote_binary_data
10 (p_conn => l_conn,
11 p_file => 'novo_teste.pdf',
12 p_data => l_blob );
13 ftp.logout(l_conn);
14 utl_tcp.close_all_connections;
15 end;
16 /
220 Welcome to MPortes FTP Server
331 Password required for marcio
230 User successfully logged in.
200 Type set to BINARY
227 Entering Passive Mode (10,60,92,238,4,4)
150 Opening BINARY mode data connection for file transfer.
226 Transfer complete

PL/SQL procedure successfully completed.

ops$marcio@ORA10G>
ops$marcio@ORA10G> host dir *.pdf
Volume in drive C has no label.
Volume Serial Number is 4064-FF3B

Directory of C:\scripts\blog\question

06/29/2005 01:26 AM 218,967 novo_teste.pdf
05/19/2004 01:38 PM 218,967 teste.pdf
2 File(s) 437,934 bytes
0 Dir(s) 4,333,068,288 bytes free

No bloco acima eu, através de PL/SQL, me conecto com o MPortes FTP Server e transfiro o arquivo com outro nome (novo_teste.pdf), não houve necessidade de colocar diretório porque no momento da configuração, o usuário marcio teve o diretório default direcionado para C:\scripts\blog\question. O número de bytes é o mesmo e pude abrí-lo normalmente através do reader.

Quando estiver na versão 10g, o bug da package UTL_FILE já estará superado então basta:

ops$marcio@ORA10G> declare
2 l_output utl_file.file_type;
3 l_blob blob;
4 l_amt number default 32000;
5 l_off number default 1;
6 l_raw raw(32000);
7 l_length number;
8 begin
9 l_output := utl_file.fopen( 'MY_FILES', 'novo_teste.pdf', 'wb', 32000 );
10 select x into l_blob from t;
11 l_length := dbms_lob.getlength(l_blob);
12 loop
13 exit when l_off > l_length;
14 dbms_lob.read( l_blob, l_amt, l_off, l_raw );
15 l_off := l_off + l_amt;
16 utl_file.put_raw( l_output, l_raw, true );
17 end loop;
18
19 utl_file.fclose( l_output );
20
21 end;
22 /

PL/SQL procedure successfully completed.

ops$marcio@ORA10G>
ops$marcio@ORA10G> host dir *.pdf
Volume in drive C has no label.
Volume Serial Number is 4064-FF3B

Directory of C:\scripts\blog\question

06/29/2005 02:02 AM 218,967 novo_teste.pdf
05/19/2004 01:38 PM 218,967 teste.pdf
2 File(s) 437,934 bytes
0 Dir(s) 4,333,121,536 bytes free

Monday, June 27, 2005

Polimorfismo em PL/SQL

Grosso modo, o polimorfismo serve para que não tenhamos que nos preocupar sobre o que estamos trabalhando, e abstrairmos para definir um código que seja compatível com objetos de vários tipos. No exemplo seguinte, a mensagem refletirá o datatype enviado na mensagem para a mesma chamada, ou seja, codificamos 3 funções com o mesmo nome e obtivemos comportamento diferente conforme o parâmetro enviado.

ops$marcio@ORA10G> create or replace package qual
2 as
3 function tipo( x in number ) return varchar2;
4 function tipo( x in varchar2 ) return varchar2;
5 function tipo( x in date ) return varchar2;
6 end;
7 /

Package created.

ops$marcio@ORA10G>
ops$marcio@ORA10G>
ops$marcio@ORA10G> create or replace package body qual
2 as
3 function tipo( x in number ) return varchar2
4 is
5 begin
6 return 'number';
7 end;
8
9 function tipo( x in varchar2 ) return varchar2
10 is
11 begin
12 return 'varchar2';
13 end;
14
15 function tipo( x in date ) return varchar2
16 is
17 begin
18 return 'date';
19 end;
20 end;
21 /

Package body created.

ops$marcio@ORA10G>
ops$marcio@ORA10G>
ops$marcio@ORA10G> declare
2 a number;
3 b varchar2(20);
4 c date;
5 begin
6 dbms_output.put_line( qual.tipo(a) );
7 dbms_output.put_line( qual.tipo(b) );
8 dbms_output.put_line( qual.tipo(c) );
9 end;
10 /
number
varchar2
date

PL/SQL procedure successfully completed.

Tuesday, June 21, 2005

SQL*Plus

A versão do Client do SQL*Plus pode influenciar a sentença SQL, mesmo que o banco esteja na versão que aceita o comando?

Sim! O SQL*Plus na sua construção já pré-interpreta alguns comandos. Veja abaixo um script simples usando feature do 9i executadas em duas versões do SQL*Plus (8i e 9i) contra uma mesma base - Oracle9i Enterprise Edition Release 9.2.0.2.1.

Script:

set echo on

with
a as ( select ename, sal, rank() over (order by sal) rank
from emp )
select *
from a
where rank <= 3
/
set echo off

O Teste:

c:\migracao\loads>plus /

SQL*Plus: Release 9.2.0.2.0 - Production on Mon Nov 24 11:09:33 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.2.1 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.2.0 - Production

ops$t_mp00@MRP9I1> @teste_sql+
ops$t_mp00@MRP9I1>
ops$t_mp00@MRP9I1> with
2 a as ( select ename, sal, rank() over (order by sal) rank
3 from emp )
4 select *
5 from a
6 where rank <= 3
7 /

ENAME SAL RANK
---------- ---------- ----------
SMITH 800 1
JAMES 950 2
ADAMS 1100 3

3 rows selected.

ops$t_mp00@MRP9I1> set echo off
Agora conectando com sql*plus 8.1.7.

C:\migracao\loads>sqlplus /@mrp9i1

SQL*Plus: Release 8.1.7.0.0 - Production on Mon Nov 24 11:07:48 2003

(c) Copyright 2000 Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.2.1 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.2.0 - Production

ops$t_mp00@MRP9I1> @teste_sql+
ops$t_mp00@MRP9I1>
ops$t_mp00@MRP9I1> with
SP2-0042: unknown command "with" - rest of line ignored.
ops$t_mp00@MRP9I1> a as ( select ename, sal, rank() over (order by sal) rank
ops$t_mp00@MRP9I1> from emp )
SP2-0042: unknown command "from emp )" - rest of line ignored.
ops$t_mp00@MRP9I1> select *
2 from a
3 where rank <= 3
4 /
from a * ERROR at line 2: ORA-00942: table or view does not exist

Portanto tente alinhar as versões tanto do client quanto a do server para obter um melhor aproveitamento das new features.

Friday, June 17, 2005

Tablespace Resize (10g)

Na versão 10g já há possibilidade de fazer resize na tablespace, anteriormente isso só era permitido através dos datafiles com o comando ALTER DATABASE ... autoextend_clause. Se a tablespace foi criada com a cláusula BIGFILE, ou seja, que tablespace permite apenas adicionar um datafile ou tempfile por tablespace. Veja no exemplo:

ops$marcio@ORA10G> create BIGFILE tablespace tbs datafile 'c:\temp\tbs_df.dbf' size 5m;

Tablespace created.

ops$marcio@ORA10G>
ops$marcio@ORA10G> select tablespace_name, sum(bytes)/1024 Kbytes
2 from dba_data_files
3 where tablespace_name = 'TBS'
4 group by tablespace_name
5 /

TABLESPACE_NAME KBYTES
------------------------------ -------------
TBS 5120

1 row selected.

ops$marcio@ORA10G>
ops$marcio@ORA10G> save tmp_space replace
Wrote file tmp_space.sql
ops$marcio@ORA10G> alter tablespace tbs resize 10m;

Tablespace altered.

ops$marcio@ORA10G> @tmp_space
ops$marcio@ORA10G> select tablespace_name, sum(bytes)/1024 Kbytes
2 from dba_data_files
3 where tablespace_name = 'TBS'
4 group by tablespace_name
5 /

TABLESPACE_NAME KBYTES
------------------------------ -------------
TBS 10240

1 row selected.

ops$marcio@ORA10G> select tablespace_name, bigfile
2 from dba_tablespaces
3 where bigfile = 'YES'
4 /

TABLESPACE_NAME BIG
------------------------------ ---
TBS YES

1 row selected.

ops$marcio@ORA10G>
ops$marcio@ORA10G> drop tablespace tbs including contents and datafiles;

Tablespace dropped.

Labels:


Sunday, June 12, 2005

Dúvida - Função PMT

Autor: ralmeida
A Dúvida.


Tio , parabems pelo BLOG ]

preciso de um help , nem sei se da pra fazer isso

sabe aquela função (PMT) ou (PGTO) do EXCEL ,

tem como fazer aquilo via sql ou procedure

ex : =PGTO(1%/12;10;0;-1234,31;0)


(1%/12 = taxa anual / por 12 meses)
(10 = numero de meses de pagamento )
(0 = valor presente)
(-1234,31 = valor futuro)

Se vc puder me ajudar , qualquer ajuda é bem vindo


Grato

abç.


Qualquer função pode ser desenvolvida no Oracle, no caso da função PMT podemos encotrar definição aqui. De posse da informação, ou seja, como é a fórmula, ai fica fácil.

ops$marcio@ORA10G> create or replace function pmt
2 ( pv in number, i in number, n in number )
3 return number
4 is
5 l_pmt number;
6 begin
7 l_pmt := (pv * i) / (1 - power((1 + i), -n));
8 return l_pmt;
9 end;
10 /

Function created.

ops$marcio@ORA10G>
ops$marcio@ORA10G> select pmt(1000, 0.05/12, 12) from dual;

PMT(1000,0.05/12,12)
--------------------
85,6074817885

1 row selected.

Sunday, June 05, 2005

Dúvida - Bakup (RMAN)

Autor: Daniel Crespo Gutierre
A Dúvida.


Boa Tarde

Primeiramente, parabens pelo seu blog é muito bom me ajuda bastante.

Queria saber se vc tem algum material ou poderia colocar no seu blog alguma coisa sobre RMAN não consigo achar material em portugues


Obrigado


Posso colocar alguns exemplos do que o RMAN pode fazer e tentar escrever algo sobre seus componentes principais, porém sem um cenário para discutir e principalmente sem sua estratégia de backup e recovery, é bem difícil escrever algo que seja compreensível do rman.

A matéria é extensa, daria um livro o Recovery Manager, basicamente ele é um programa que facilita o processo de backup e recovery. Ele pode ser usado tanto em modo NOCATALOG (simplemente como client) quanto ter um repositório para controle de seus backups. Nesse último, uma instância a mais teria que ser mantida.

Basicamente o RMAN tem como componentes básicos:

Target Database - Control file, datafiles e opcionalmente os archives do banco de
dados que o RMAN está a cargo. RMAN usa o control file deste banco
para conhecer os metadatas do target database e arquivar suas
próprias operações. O trabalho de backup e recovery é executado por
sessões no servidor (channel) do target database.

RMAN Client - Recovery Manager Client para gerenciar operações de backup e
recovery. O RMAN client conecta-se ao target database através do
Oracle Net.

O Backup/Recovery é feito através de canais (server session), ou seja, voce
identifica qual o device e o configura como canal.

RMAN Channel - É uma corrente de dados enviados a um determinado device (fita,
disco, storage, etc). Esse processo de backup ou recovery é feito
através de uma sessão no servidor (channel).

A maneira mais fácil de visualizar o desenho rman seria:

----------
... | Database |
| Target |
----------
|
+------------+-------+----------- (RMAN)
| |
+----+----+ +----+----+
| Server | | Server |
| Session | | Session | ...
|(Channel)| |(Channel)|
+---------+ +---------+
| |
[disk] [fita] ...

Enfim, através dos channels direcionar seu backup para vários devices assim como
contralar vários databases targets. O uso do RMAN é bastante abrangente.

Um exemplo muito simples, seria fazer um backup do seu banco de dados, deletar um arquivo que pertence a uma tablespace para perdê-la, restaurar o datafile e recuperar o banco. Descobri qual o arquivo estava com problema na view v$datafile_header e v$recover_file.

c:\scripts\blog\question>rman nocatalog

Recovery Manager: Release 10.1.0.2.0 - Production

Copyright (c) 1995, 2004, Oracle. All rights reserved.

RMAN> CONNECT TARGET /

connected to target database: ORA10G (DBID=3848249943)
using target database controlfile instead of recovery catalog

RMAN> show all;

RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\ORACLE\10.1.0\DATABASE\SNCFORA10G.ORA'; # default

RMAN> backup database format 'c:\temp\%U';

Starting backup at 05-JUN-05
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=151 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_SYSTEM_0FF6S1HG_.DBF
input datafile fno=00002 name=C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_UNDOTBS1_0FF6TCKN_.DBF
input datafile fno=00005 name=C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_PERFSTAT_18MCZRH3_.DBF
input datafile fno=00003 name=C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_SYSAUX_0FF6TVYW_.DBF
input datafile fno=00004 name=C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_USERS_0FF6VPMW_.DBF
channel ORA_DISK_1: starting piece 1 at 05-JUN-05
channel ORA_DISK_1: finished piece 1 at 05-JUN-05
piece handle=C:\TEMP\21GM84JR_1_1 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:06:57
Finished backup at 05-JUN-05

Starting Control File and SPFILE Autobackup at 05-JUN-05
piece handle=C:\WINDOWS\SYSTEM32\C-3848249943-20050605-00 comment=NONE
Finished Control File and SPFILE Autobackup at 05-JUN-05

RMAN> LIST BACKUP OF DATABASE;


List of Backup Sets
===================

BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
64 Full 294M DISK 00:06:48 05-JUN-05
BP Key: 64 Status: AVAILABLE Compressed: NO Tag: TAG20050605T205418
Piece Name: C:\TEMP\21GM84JR_1_1
List of Datafiles in backup set 64
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
1 Full 1853553 05-JUN-05 C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_SYSTEM_0FF6S1HG_.DBF
2 Full 1853553 05-JUN-05 C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_UNDOTBS1_0FF6TCKN_.DBF
3 Full 1853553 05-JUN-05 C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_SYSAUX_0FF6TVYW_.DBF
4 Full 1853553 05-JUN-05 C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_USERS_0FF6VPMW_.DBF
5 Full 1853553 05-JUN-05 C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_PERFSTAT_18MCZRH3_.DBF

RMAN> list backup of datafile 1;


List of Backup Sets
===================

BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
64 Full 130M DISK 00:06:48 05-JUN-05
BP Key: 64 Status: AVAILABLE Compressed: NO Tag: TAG20050605T205418
Piece Name: C:\TEMP\21GM84JR_1_1
List of Datafiles in backup set 64
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
1 Full 1853553 05-JUN-05 C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_SYSTEM_0FF6S1HG_.DBF

RMAN> LIST INCARNATION;


List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 ORA10G 3848249943 CURRENT 1 21-JUN-04

RMAN> report schema;

Report of database schema
File K-bytes Tablespace RB segs Datafile Name
---- ---------- -------------------- ------- -------------------
1 307200 SYSTEM *** C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_SYSTEM_0FF6S1HG_.DBF
2 204800 UNDOTBS1 *** C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_UNDOTBS1_0FF6TCKN_.DBF
3 122880 SYSAUX *** C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_SYSAUX_0FF6TVYW_.DBF
4 25600 USERS *** C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_USERS_0FF6VPMW_.DBF
5 132928 PERFSTAT_TBS *** C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_PERFSTAT_18MCZRH3_.DBF

RMAN> quit;

Como visto acima, existem vários sabores de listagens e reports no rman, podemos ver os backups realizados. Agora como já mencionado acima, perdi o datafile #5 e vamos recuperá-lo.

RMAN> restore datafile 5 preview;

Starting restore at 05-JUN-05
using channel ORA_DISK_1


List of Backup Sets
===================

BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
64 Full 4M DISK 00:06:48 05-JUN-05
BP Key: 64 Status: AVAILABLE Compressed: NO Tag: TAG20050605T205418
Piece Name: C:\TEMP\21GM84JR_1_1
List of Datafiles in backup set 64
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
5 Full 1853553 05-JUN-05 C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_PERFSTAT_18MCZRH3_.DBF
Finished restore at 05-JUN-05

RMAN> restore datafile 5;

Starting restore at 05-JUN-05
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00005 to C:\ORACLE\ORADATA\ORA10G\DATAFILE\O1_MF_PERFSTAT_18MCZRH3_.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=C:\TEMP\21GM84JR_1_1 tag=TAG20050605T205418
channel ORA_DISK_1: restore complete
Finished restore at 05-JUN-05

RMAN> recover database;

Starting recover at 05-JUN-05
using channel ORA_DISK_1

starting media recovery
media recovery complete

Finished recover at 05-JUN-05

RMAN>

Tenha em mente que isso reflete apenas um teste simples para demonstração do RMAN, não siga os passos acima em uma base de produção, primeiro faça um estudo do RMAN para obter entendimento, planeje sua estratégia de backup e recovery, teste do backup e (principalmente) do recovery, teste novamente e outra vez, agora sim -- faça a implementação em produção.

This page is powered by Blogger. Isn't yours?