create or replace PACKAGE dbms_drs IS -- ------------ -- OVERVIEW -- ------------ -- -- This package contains procedures used in the DR Server (Hot Standby). -- There are two forms of each major function; one is a blocking procedure, -- which does not return until the command is completed. The other is a -- non-blocking function which returns with a request identifier which may -- be used to return the result of the command. -- -------------------------- -- NON-BLOCKING FUNCTIONS -------------------------- -- -- There is 1 non-blocking function: -- do_control -- -- These functions take an incoming document type described in the -- Design Specification for DR Server API. Before the document is parsed -- and processed, it is added to a request queue with a request id returned. -- Therefore, the only reason why the non-blocking functions would raise -- an exception is when the request cannot be added to the request queue. -- -- Once all pieces of the outgoing document have been retrieved, the -- user should delete the request using the 'delete_request' procedure. -- -------------------------- -- BLOCKING PROCEDURES -------------------------- -- -- There are several blocking procedures: -- do_control -- delete_request -- cancel_request -- get_property -- -- With the exception of delete_request, cancel_request and get_property*, -- all the blocking procedures work the same way: as with the -- non-blocking functions, each command takes an incoming document type -- described in the Design Specification for the DR Server API. -- Unlike the non-blocking functions, the blocking functions wait until -- the command completes before returning the first piece of the document. -- All initial requests should request the first piece (piece=1). -- -- If there is only one piece of the outgoing document, then the procedure -- returns the first and only piece with a NULL request id. The request id -- is automatically deleted prior to returning from the procedure. -- -- If there is more than one piece of the outgoing document, then the -- procedure returns the request id along with the first piece of the -- outgoing document. The user should continue to call the blocking function -- with increasing piece numbers until the last piece is retrieved. Prior -- to returning the last piece, the function autmatically deletes the request -- id and a NULL request id is returned to the user. -- -- As with the non-blocking functions, the blocking procedures will not -- raise an exception unless they cannot make the request. The user should -- check the outgoing document for the results of the command issued. -- -- The remaining blocking functions (delete_request, cancel_request, -- get_property*) may -- be used to delete, cancel a request, or get a named non-XML property -- respectively. delete_request may be used with a valid request id that -- was retrieved using either the blocking or non-blocking functions. -- Deleting a request that hasn't completed is not permitted and will -- raise an exception. To cancel a request that is in progress, use the -- cancel_request function. The cancel request function will automatically -- delete the request information after cancelling the request. -- -- Note: Do not mix blocking and non-blocking functions using the request_id. -- -- get_property* returns the first piece of a named property value that is -- identified by name rather than by object id. -- -- -- ------------------------ -- EXAMPLES -- ------------------------ -- -- ------------------------ -- Non-blocking example -- ------------------------ -- -- declare -- rid integer; -- indoc varchar2(4000); -- outdoc varchar2(4000); -- p integer; -- begin -- indoc:='foo'; -- -- rid :=dbms_drs.do_control(indoc); -- dbms_output.put_line('Request_id = '|| rid); -- -- outdoc :=NULL; -- p:=1; -- while (outdoc is null) -- loop -- -- should really sleep a couple of ms -- -- outdoc:=dbms_drs.get_response(rid,p); -- end loop; -- -- dbms_output.put_line(outdoc); -- begin -- while (outdoc is not NULL) -- loop -- p:=p+1; -- -- outdoc:=dbms_drs.get_response(rid,p); -- -- dbms_output.put_line(outdoc); -- end loop; -- exception -- when no_data_found then -- -- we got past last piece -- NULL; -- end; -- dbms_drs.delete_request(rid); -- end; -- -- ------------------------ -- Blocking example -- ------------------------ -- -- declare -- rid integer; -- indoc varchar2(4000); -- outdoc varchar2(4000); -- p integer; -- begin -- p:=1; -- indoc:='foo'; -- dbms_drs.do_control(indoc,outdoc,rid,p); -- dbms_output.put_line(outdoc); -- -- p:=2; -- while(rid is NOT NULL) -- loop -- dbms_drs.do_control(indoc,outdoc,rid,p); -- dbms_output.put_line(outdoc); -- p:=p+1; -- end loop; -- end; -- -- -- ------------------------ -- PROCEDURES AND FUNCTIONS -- ------------------------ procedure do_control( indoc IN VARCHAR2, outdoc OUT VARCHAR2, request_id IN OUT INTEGER, piece IN INTEGER, context IN VARCHAR2 default NULL ); -- Control blocking API - OBSELETE, for test use only -- - See do_control_raw below -- Perform a control operation. This is the blocking form of the procedure. -- Input parameters: -- indoc - the document containing the control commands. The -- document type (DDT) is DO_CONTROL. -- request_id - the request id for returning multiple output pieces -- must be NULL for the first piece. -- piece - the piece of the output document to return. For new -- requests, the piece must be 1. For values greater than -- 1, a valid request_id must be supplied. -- context - the context of command, usually NULL. -- Output parameters: -- outdoc - the result of the command. DDT may be either RESULT or VALUE. -- request_id - the request id for returning the next output piece -- will be NULL if the current piece does not exist -- or is the last piece. -- Exceptions: -- bad_request (ORA-16508) -- procedure do_control_raw( indoc IN RAW, outdoc OUT RAW, request_id IN OUT INTEGER, piece IN INTEGER, context IN VARCHAR2 default NULL, client_id IN INTEGER default 0 ); -- Control blocking API - designed for solving NLS problem -- Send DG Broker control request. It is blocking call. -- Input parameters: -- indoc - the document containing the control commands. The -- document type (DDT) is DO_CONTROL. -- request_id - the request id for returning multiple output pieces -- must be NULL for the first piece. -- piece - the piece of the output document to return. For new -- requests, the piece must be 1. For values greater than -- 1, a valid request_id must be supplied. -- context - the context of command, usually NULL. -- client_id - For clients to identify itself - GUI or CLI. -- Default value is 0, which means not GUI nor CLI. -- -- Output parameters: -- outdoc - the result of the command. DDT may be either RESULT or VALUE. -- request_id - the request id for returning the next output piece -- will be NULL if the current piece does not exist -- or is the last piece. -- Exceptions: -- bad_request (ORA-16508) -- function do_control(indoc in varchar2) return integer; -- Control non-blocking API - OBSELETE, for test use only -- - See do_control_raw below -- Perform a control operation. This is the non-blocking form of the -- procedure. -- Input parameters: -- indoc - the document containing the control commands. The -- document type (DDT) is DO_CONTROL. -- Return Value: The request id for the request. -- -- Exceptions: -- bad_request (ORA-16508) -- function do_control_raw( indoc IN RAW ) return integer; -- Control non-blocking API - designed for solving NLS problem -- Perform a control operation. This is the non-blocking form of the -- procedure. -- Input parameters: -- indoc - the document containing the control commands. The -- document type (DDT) is DO_CONTROL. -- Return Value: The request id for the request. -- -- Exceptions: -- bad_request (ORA-16508) -- function get_response(rid in integer, piece in integer) return varchar2; -- Get Result (non-blocking) - OBSELETE, for test use only -- - See get_repsonse_raw below -- Get the result of a non-blocking command. If the command hasn't finished, -- the answer will be NULL. If the piece is beyond the end of the document -- the answer will be NULL. -- Input parameters: -- rid - the request to delete. -- piece - the piece to get, starting from 1. -- Returns: -- outdoc - the answer to the request, if any, or NULL otherwise. -- -- Exceptions: -- bad_request (ORA-16508) -- function get_response_raw(rid in integer, piece in integer) return RAW; -- Get Result (non-blocking) - designed for solving NLS problem -- Get the result of a non-blocking command. If the command hasn't finished, -- the answer will be NULL. If the piece is beyond the end of the document -- the answer will be NULL. -- Input parameters: -- rid - the request to delete. -- piece - the piece to get, starting from 1. -- Returns: -- outdoc - the answer to the request, if any, or NULL otherwise. -- -- Exceptions: -- bad_request (ORA-16508) -- procedure delete_request(rid in integer); -- Delete Request (blocking). -- Input parameters: -- rid - the request to delete. -- -- Exceptions: -- bad_request (ORA-16508) -- procedure cancel_request(rid in integer); -- Cancel Request (blocking). -- Input parameters: -- rid - The request to cancel. -- -- Exceptions: -- bad_request (ORA-16508) -- function get_property( site_name in varchar2, resource_name in varchar2, property_name in varchar2) return varchar2; -- get_property -- get a named property. This function is equivalent to using -- getid to return the object id, followed by a -- request. -- -- Input parameters: -- site_name - The name of the site (optional). If omitted, -- resource_name must be NULL and DRC properties are -- retrieved. -- resource_name - The name of the resource (optional). If omitted, -- then site DRC properties are retrieved. Otherwise, -- resource properties are retrieved. -- -- property_name - the name of the property to return. -- -- Output parameters: -- none -- Returns: -- The property value converted to a string. If the value_type is XML -- then the first 4000 bytes of the XML document are returned. -- Exceptions: -- function get_property_obj(object_id in integer, property_name in varchar2) return varchar2; -- get_property -- get a named property. This function is equivalent to -- calling a ... -- request and parsing the resulting string. -- -- Input parameters: -- object_id - The object_handle. -- property_name - the name of the property to return. -- -- Output parameters: -- none -- Returns: -- The property value converted to a string. If the value_type is XML -- then the first 4000 bytes of the XML document are returned. -- Exceptions: -- function dg_broker_info( info_name in varchar2 ) return varchar2; -- get Data Guard Broker Information -- It now recognizes the following information names: -- 'VERSION' - the version of Data Guard Broker; -- 'DMONREADY' - whether Data Guard Broker is ready to receive requests. -- Returns: -- The requested information specified by info_name, or -- 'UNSUPPORTED' if info_name is not supported -- Exceptions: -- none -- procedure sleep(seconds in integer); -- Sleep (blocking). -- Input parameters: -- seconds - Number of seconds to sleep. -- -- Output parameters: -- none -- -- Exceptions: -- none -- procedure dump_meta( options IN integer, metafile IN varchar2, dumpfile IN varchar2 ); -- DUMP data guard broker METAdata file content into a readable text file. -- Input parameters: -- options - Indicates which metafile(s) to be dumped -- - the file indicated by fnam/fnamlen -- - the "current" metadata file -- - the "alternate" metadata file -- - first the "current", then the "alternate" -- metafile - Metadata filespec to be dumped. Ignored unless selected by -- the options argument. -- dumpfile - The readable output filespec. PROCEDURE Ping(iObid IN BINARY_INTEGER, iVersion IN BINARY_INTEGER, iFlags IN BINARY_INTEGER, iMiv IN BINARY_INTEGER, oVersion OUT BINARY_INTEGER, oFlags OUT BINARY_INTEGER, oFoCond OUT VARCHAR2, oStatus OUT BINARY_INTEGER); PROCEDURE ReadyToFailover(iObid IN BINARY_INTEGER, iVersion IN BINARY_INTEGER, iFlags IN BINARY_INTEGER, iMiv IN BINARY_INTEGER, iFoCond IN VARCHAR2, oStatus OUT BINARY_INTEGER); PROCEDURE StateChangeRecorded(iObid IN BINARY_INTEGER, iVersion IN BINARY_INTEGER); PROCEDURE fs_failover_for_hc_cond(hc_cond IN BINARY_INTEGER, status OUT BINARY_INTEGER); FUNCTION fs_failover_for_hc_cond(hc_cond IN BINARY_INTEGER) RETURN BOOLEAN; PROCEDURE initiate_fs_failover(condstr IN varchar2, status OUT binary_integer); pragma TIMESTAMP('2006-05-17:20:20:00'); end; /