Skip to main content

How to enable log shipping on Standby after failing archival.



The Primary Database was giving error in alert log that it was not able to send archivelogs to Standby. The error looked like the following:

Tue Jun  5 10:31:36 2012
Errors in file /u01/oracle/admin/DB1/bdump/DB1_arcp_6846.trc:
ORA-16055: FAL request rejected
ARCH: FAL archive failed. Archiver continuing

Diagnosis:

To check the status of archiving the following sql was issued:

  •  Check what is the destination status

 select ds.dest_id                id,
          ad.status,
         ds.database_mode          db_mode,
         ad.archiver               type,
         ds.recovery_mode,
         ds.protection_mode,
         ds.standby_logfile_count  "SRLs",
         ds.standby_logfile_active active,
         ds.archived_seq#
    from v$archive_dest_status ds, v$archive_dest ad
   where ds.dest_id = ad.dest_id
     and ad.status != 'INACTIVE'
   order by ds.dest_id;
    
ID
STATUS
DB_MODE
TYPE
RECOVERY_MODE
PROTECTION_MODE
SRLs
ACTIVE
ARCHIVED_SEQ#
2
ERROR
MOUNTED-STANDBY
LGWR
MANAGED
MAXIMUM PERFORMANCE
8
7
13317
10
VALID
OPEN
ARCH
IDLE
MAXIMUM PERFORMANCE
0
0
13319 

We can see one destination which is STANDBY has status "ERROR".

  select dest_id, dest_name, status
    from v$archive_dest_status
   where status != 'INACTIVE';


DEST_ID
DEST_NAME
STATUS
2
LOG_ARCHIVE_DEST_2
ERROR
10
LOG_ARCHIVE_DEST_10
VALID

  • Where the log stuck in standby
select thread#, sequence#, process, status from v$managed_standby;

  • Check the errors in dataguard status from primary
  select error_code, message, timestamp
    from v$dataguard_status
   where dest_id = 2;

  • To check if the process MRPO exists in secondary, issue the command.

SELECT PROCESS FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%';

This SQL returned no row which means the dataguard was not working properly.

To find out the root cause of this problem I tried the "df -h" to check space on my STANDBY.
I found that there was no space left on device.

The Solution:

STEP 1: First of all space was made available by deleting BACKUPSET of STANDBY.

STEP 2: Issue the command to delete the archived and old archivelog.

BACKUP ARCHIVELOG ALL DELETE ALL INPUT; 


STEP 3: Issue the command to CROSSCHECK the archivelogs.

CROSSCHECK ARCHIVELOG ALL; 

STEP 4: Shutdown STANDBY.

alter database recover managed standby database cancel;
(N.B : This command is used before shutting down the STANDBY database for regular maintenance of STANDBY)


shutdown immediate;

STEP 5: Startup the database in mount mode.

startup mount;

STEP 6: Start log applying to secondary:

 I.  Log on to STAN SQL prompt and issue the command.
 alter database recover managed standby database disconnect; ---apply cuurent logfile

 II. To check archives are applied to secondary, issue the following command.
 Select sequence#,first_time,applied from v$archived_log order by sequence#;

 III. To check if the process MRPO exists in secondary, issue the command.
SELECT PROCESS FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%';


Now the MRP process should be there and dataguard should work properly.

-----------------------------------------------------------------------------------------------------



Comments

Popular posts from this blog

Starting and Stopping the Oracle Enterprise Manager Console

Starting and Stopping the Oracle Enterprise Manager Console To access the Oracle Enterprise  Manager Console from a client browser, the  dbconsole  process needs to be running on the server. The dbconsole process is automatically started after installation. However, in the event of a system restart,change in IP, or other changes, you can start it manually at the command line. To start the  dbconsole  process from the command line: Navigate into your  ORACLE_HOME/bin  directory. Run the following statement: ./emctl start dbconsole Additionally, you can stop the process and view its status. To stop the  dbconsole  process:          ./emctl stop dbconsole To view the status of the  dbconsole  process:         ./emctl status dbconsole -------------------------------------------------------------------------------------------------------

Query to check the OPTIMAL UNDO RETENTION

Query to check the OPTIMAL UNDO RETENTION _____________________________________________________________________________ SELECT d.undo_size / (1024 * 1024) "ACTUAL UNDO SIZE [MByte]",        SUBSTR(e.value, 1, 25) "UNDO RETENTION [Sec]",        ROUND((d.undo_size / (to_number(f.value) * g.undo_block_per_sec))) "OPTIMAL UNDO RETENTION [Sec]"   FROM (SELECT SUM(a.bytes) undo_size           FROM v$datafile a, v$tablespace b, dba_tablespaces c          WHERE c.contents = 'UNDO'            AND c.STATUS = 'ONLINE'            AND b.name = c.tablespace_name            AND a.ts# = b.ts#) d,        v$parameter e,        v$parameter f,        (SELECT MAX(undoblks / ((end_time - begin_time) * 3600 * 24)) undo_block_per_sec  ...

Solution of problem: Resultset Exceeds the Maximum Size (100 MB)

Solution of problem: Resultset Exceeds the Maximum Size (100 MB) I was running a select statement in PL/SQL Developer. it was a short query but the data volume that the query was fetching was huge. But when ever i Click the button Fetch Last Page or press 'ALT+End' button a message box comes after a while saying: Then I started looking for the exact reason of this sort of problem in Google. When I realized there was no direct solution in the web, I started looking the PL/SQL Developer Software menu and found the ultimate solution. The reason of this problem is there is a parameter of maximum result set size in PL/SQL Developer Software which is by default set to 100 MB. To change this parameter you have to go to the following location: 1. Goto Edit Menu and click ' PL/SQL Beautifier Options '. A new window will open. 2. Click SQL Window of " Window Types ". 3. Now Change the value of "Maximum Result Set Size( 0 is unlimited)"  ...