ACE Director Alum Daniel Morgan, founder of Morgan's Library, is scheduling
complimentary technical Workshops on Database Security for the first 30
Oracle Database customers located anywhere in North America, EMEA, LATAM, or
APAC that send an email to
asra_us@oracle.com. Request a Workshop for
your organization today.
Purpose
Recovery Appliance (Recovery Appliance) Backup and Recovery support utility.
AUTHID
DEFINER
Constants
Name
Data Type
Value
AM_DEBUG Constants
AM_DEBUG_ON
NUMBER
1
AM_DEBUG_LOW
NUMBER
2
AM_DEBUG_MED
NUMBER
3
AM_DEBUG_HIGH
NUMBER
4
AM_DEBUG_OFF
NUMBER
5
Chunk Constants
CHUNK_NOT_SHARED
NUMBER
1
CHUNK_OWNER
NUMBER
2
CHUNK_DEPENDENT
NUMBER
1
KBRS Constants
KBRS_SAVE_INFO_POOL
NUMBER
0
KBRS_SAVE_INFO_CFFILE
NUMBER
1
KBRS_SAVE_INFO_SPFILE
NUMBER
2
KBRSOPER Constants
KBRSOPER_CLSPOST
NUMBER
1
KBRSOPER_POST
NUMBER
2
KBRSOPER_RELEASE
NUMBER
3
KBRSOPER_COPY
NUMBER
4
KBRSOPER_DEL
NUMBER
5
KBRSOPER_NEWFILE
NUMBER
6
KBRSOPER_NEXT
NUMBER
7
KBRSOPER_DONE
NUMBER
8
KBRSPLBLD Constants
KBRSPLBLD_PIECE
NUMBER
1
KBRSPLBLD_PURGE
NUMBER
2
KBRSPLBLD_SMALLPURGE
NUMBER
3
KBRSPLBLD_OPTPURGE
NUMBER
4
KBRSPLBLD_ALLPURGE
NUMBER
5
KBRSPLBLD_OPTIMIZE
NUMBER
6
KBRSPLBLD_DUPPURGE
NUMBER
7
BRSPLBLD_ORIGPIECE
NUMBER
8
BRSPLBLD_FULLPIECE
NUMBER
10
KBRSPLBLD_MOVPURGE
NUMBER
11
KBRSPLBLD_BADMETA1
NUMBER
101
KBRSPLBLD_BADMETA2
NUMBER
102
KBRSPLBLD_CLEANUP
NUMBER
103
KBRSPLBLD_INITPOP
NUMBER
104
KBRSPLBLD_ADDPOP
NUMBER
105
KBRSPLBLD_USERINS
NUMBER
106
KBRSPLBLD_USERDEL
NUMBER
107
KBRSPLBLD_REBUILD
NUMBER
108
KBRSPLBLD_REPAIR
NUMBER
109
VDBF Constants
VBDF_COMPLETE
NUMBER
1
VBDF_BUILDING
NUMBER
2
VBDF_ABORT
NUMBER
3
VBDF_FIN_NOBP
NUMBER
4
VBDF_CLEANUP
NUMBER
5
VBDF_REPOPULATE
NUMBER
6
VBDF_OBSOLETE
NUMBER
7
VBDF_REPAIR
NUMBER
8
Miscellaneous Constants
BIGNUM
NUMBER
1E40
KSCNINV
NUMBER
281474976710655
Data Types
TYPE blklst IS TABLE OF blocks%ROWTYPE INDEX BY BINARY_INTEGER;
type nolst IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
type nmlst IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
type dtlst IS TABLE OF date INDEX BY BINARY_INTEGER;
TYPE collapse_bin_t IS RECORD (
blkrank NUMBER,
blockno NUMBER,
scn NUMBER,
chunkno NUMBER,
used NUMBER,
coffset NUMBER,
endblk NUMBER);
TYPE collapse_blocks_c IS REF CURSOR RETURN collapse_bin_t;
TYPE collapse_b_t IS RECORD (
blkrank N UMBER, -- 1 for restore else blockno rank
blockno NUMBER, -- min
chunkno NUMBER,
numblks NUMBER, -- count
coffset NUMBER, -- min
numbytes NUMBER); -- sum(used)
TYPE collapse_blocks_t IS TABLE OF collapse_b_t;
TYPE gaplst IS TABLE OF collapse_bin_t INDEX BY BINARY_INTEGER;
-- The SQL for this package was extracted from recover.bsq and executed independently
-- from a SQL*Plus prompt. Not having an Oracle Recovery Appliance handy some a small
-- amount of the source was commented out to obtain a successful compilation.
SQL> @c:\stage\dbms_ra_pool.sql
SP2-0808: Package created with compilation warnings
SQL> show err
Errors for PACKAGE DBMS_RA_POOL:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/1 PLW-05018: unit DBMS_RA_POOL omitted optional AUTHID clause;
default value DEFINER used
68/20 PLW-06026: package specification exposes global variable S_FIXUP_UNORD
69/18 PLW-06026: package specification exposes global variable S_BLOCKS_DIAG
86/27 PLW-07203: parameter 'P_LOC' may benefit from use of the NOCOPY compiler hint
190/29 PLW-07203: parameter 'P_OUTPUT' may benefit from use of the NOCOPY compiler hint
330/14 PLW-06026: package specification exposes global variable S_GAP
331/14 PLW-06026: package specification exposes global variable S_CG
333/23 PLW-06026: package specification exposes global variable S_DFTOTALBLOCKS
334/23 PLW-06026: package specification exposes global variable S_SIG_GAPCORRUPTION
dbms_ra_pool.begin_df(
p_vbkey IN OUT NUMBER,
p_ckpid IN OUT NUMBER,
p_dbkey IN NUMBER,
p_fno IN NUMBER,
p_blocks IN NUMBER,
p_incrscn IN NUMBER,
p_crescn IN NUMBER,
p_crestamp IN NUMBER,
p_rstscn IN NUMBER,
p_rststamp IN NUMBER,
p_pluscn IN NUMBER,
p_prlscn IN NUMBER,
p_prltstamp IN NUMBER,
p_dfkey OUT NUMBER,
p_dbinckey OUT NUMBER,
p_unorderid OUT NUMBER,
p_prvmaxscn OUT NUMBER,
p_firstblk IN NUMBER,
p_lastblk IN NUMBER);
dbms_ra_pool.build_read_plan(
p_dbkey IN NUMBER,
p_vbkey IN NUMBER,
p_dfkey IN NUMBER,
p_bufsize IN NUMBER,
p_type IN NUMBER,
p_chunks IN NUMBER,
p_stored OUT NUMBER);
dbms_ra_pool.collapse(
p_dfkey IN NUMBER,
p_vbkey IN NUMBER,
p_firstblk IN NUMBER,
p_lastblk IN NUMBER,
i_cur IN sys.dbms_ra_pool.collapse_bin_t)
RETURN sys.dbms_ra_pool.collapse_blocks_t;
dbms_ra_pool.end_df(
p_vbkey IN NUMBER,
p_dfkey IN NUMBER,
p_relfno IN NUMBER,
p_ckpscn IN NUMBER,
p_absscn IN NUMBER,
p_repair IN BOOLEAN,
p_cmpvsn IN NUMBER,
p_issft IN NUMBER,
p_unorder IN NUMBER
p_newblk_bytes IN NUMBER,
p_dupblk_bytes IN NUMBER,
p_match IN RAW,
p_replev IN NUMBER);
dbms_ra_pool.get_df_pdbinc(
p_dbinckey IN NUMBER,
p_dfkey IN NUMBER,
p_scn IN NUMBER)
RETURN NUMBER;
-- demo code from recover.bsq
BEGIN
trc('partition_lock_bp: bpkey ' || p_bpkey);
FOR i IN (SELECT DISTINCT df_key, ORA_HASH(df_key, 1023, 0) + 1 hash
FROM bp JOIN bdfdf USING(bs_key)
WHERE bp_key = p_bpkey
AND pdbinc_key =
dbms_ra_pool.get_df_pdbinc(dbinc_key, df_key, ckp_scn)
ORDER BY df_key) LOOP
dbms_ra_scheduler.get_lock(dbms_ra_scheduler.LOCK_PURGE, i.hash, p_lock_mode);
END LOOP;
END partition_lock_bp;
SELECT MIN(task_id)
INTO s_pending_interrupt
FROM task JOIN bp ON(param_num2 = bp_key)
JOIN bdfdf bf USING(bs_key)
WHERE task_type = TASK_RESTORE
AND bf.pdbinc_key =
dbms_ra_pool.get_df_pdbinc(bf.dbinc_key, bf.df_key, bf.ckp_scn)
AND state IN (STATE_RUNNING, STATE_EXECUTABLE,
STATE_TASK_WAIT)
AND ora_hash(bf.df_key, 1023, 0) + 1 = l_partition_pos;
dbms_ra_pool.planDF(
p_type IN NUMBER,
p_dfkey IN NUMBER,
p_vbkey IN NUMBER,
p_res IN NUMBER,
p_locked IN BOOLEAN,
p_must IN BOOLEAN,
p_plock IN BOOLEAN);
-- demo code from recover.bsq
BEGIN
dbms_ra_pool.planDF(l_ptype, l_dfkey, l_vbkeys(i));
EXCEPTION
WHEN OTHERS THEN
save_error;
dbms_ra_misc.unlock(dbms_ra_misc.KEY_BP, l_bpkey);
RAISE;
END;
dbms_ra_pool.prep_piece_read(
p_inbpkey IN NUMBER,
p_loc OUT VARCHAR2,
p_dbkey OUT NUMBER,
p_db_id OUT NUMBER,
p_dfkey OUT NUMBER,
p_vbkey OUT NUMBER,
p_blksize OUT NUMBER,
p_original OUT NUMBER,
p_read_bufs OUT NUMBER,
p_read_size OUT NUMBER,
p_read_waste OUT NUMBER,
p_rslvr_flags OUT NUMBER,
p_cmpvsn OUT NUMBER,
p_firstsec OUT NUMBER,
p_secsz OUT NUMBER,
p_seccnt OUT NUMBER);
dbms_ra_pool.prep_read(
p_type IN NUMBER,
p_bskey IN NUMBER,
p_vbkey IN NUMBER,
p_dfkey IN NUMBER,
p_blksize OUT NUMBER,
p_read_bufs OUT NUMBER,
p_read_size OUT NUMBER,
p_read_waste OUT NUMBER,
p_rslvr_flags OUT NUMBER,
p_cmpvsn OUT NUMBER);
dbms_ra_pool.repairChunks(
p_dbkey IN NUMBER,
p_dfkey IN NUMBER);
-- demo code from recover.bsq
IF l_savepoint <> -77 THEN
dbms_ra_pool.repairChunks(p_task_rec.db_key, p_task_rec.param_num1);
check_for_interrupt(-77);
END IF;
dbms_ra_pool.repair_df(
p_vbkey IN OUT NUMBER,
p_newvb IN OUT NUMBER,
p_dbkey IN NUMBER,
p_fno IN NUMBER,
p_blocks IN NUMBER,
p_relfno IN NUMBER,
p_crescn IN NUMBER,
p_crestamp IN NUMBER,
p_rstscn IN NUMBER,
p_rststamp IN NUMBER,
p_startscn IN NUMBER,
p_ckpscn IN NUMBER,
p_pluscn IN NUMBER,
p_prlscn IN NUMBER,
p_prltstamp IN NUMBER,
p_cmpvsn IN NUMBER,
p_issft IN NUMBER,
p_firstblk IN NUMBER,
p_lastblk IN NUMBER,
p_replev IN NUMBER,
o_dfkey OUT NUMBER,
o_ckpid OUT NUMBER);
dbms_ra_pool.validate_df_key(
p_dbkey IN NUMBER,
p_dfkey IN NUMBER,
p_sort IN NUMBER,
p_vbkey IN NUMBER,
p_allblks IN BOOLEAN,
p_ext IN BOOLEAN,
p_output OUT VARCHAR2);
-- demo code from recover.bsq
LOOP
dbms_ra_pool.validate_df_key(p_dbkey, f.df_key, l_sort, p_vbkey,
dbms_ra_pool.s_blocks_diag, p_deb_ext, l_output);
IF l_output IS NOT NULL THEN
dbms_output.put_line(l_output);
trc(l_output);
END IF;
END LOOP;