IN PRIMARY DATABASE :-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 1) Check Instance details :- select status,instance_name,database_role from v$database,v$instance; ------------------------------------------------------------------------------------------------------------------------------------ 2) Check redo log and standby redo log size in Primary and standby :- Redo log :- use script referred at the end select group#,sum(bytes/1024/1024)"Size in MB" from v$standby_log group by group#; ------------------------------------------------------------------------------------------------------------------------------------ 3) Check if the parameter standby_file_management is set to AUTO or MANUAL on standby database. If it is not set to MANUAL, then set it. SQL> show parameter standby_file_management NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ standby_file_management string AUTO SQL> alter system set standby_file_management=manual; 4) On the primary database:- Check the status of the Online Redo Logs and resize them by dropping the INACTIVE redo logs and re-creating them with the new size. SQL> @redologsize.sql GROUP# THREAD# MEMBER ARCHIVED STATUS Size (MB) ------ ------- ---------------------------------------------------------------------- ---------- ---------- --------- 1 1 /u01/app/oracle/oradata/DG/redo01.log YES INACTIVE 200 2 1 /u01/app/oracle/oradata/DG/redo02.log NO CURRENT 200 3 1 /u01/app/oracle/oradata/DG/redo03.log YES INACTIVE 200 SQL> alter database drop logfile group 1; SQL> alter database add logfile group 1 '/u01/app/oracle/oradata/DG/redo01.log' size 250M reuse; SQL> alter database drop logfile group 3; SQL> alter database add logfile group 3 '/u01/app/oracle/oradata/DG/redo03.log' size 250M reuse; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | 5>Now that Online Redo Log Groups 1 and 2 are resized and the status of Group 2 is CURRENT, switch logfiles manually until Group 2 becomes INACTIVE :- SQL> @redologsize.sql GROUP# THREAD# MEMBER ARCHIVED STATUS Size (MB) ------ ------- ---------------------------------------------------------------------- ---------- ---------- --------- 1 1 /u01/app/oracle/oradata/DG/redo01.log YES UNUSED 250 2 1 /u01/app/oracle/oradata/DG/redo02.log NO CURRENT 200 3 1 /u01/app/oracle/oradata/DG/redo03.log YES UNUSED 250 SQL> alter system switch logfile; SQL> @redologsize.sql GROUP# THREAD# MEMBER ARCHIVED STATUS Size (MB) ------ ------- ---------------------------------------------------------------------- ---------- ---------- --------- 1 1 /u01/app/oracle/oradata/DG/redo01.log NO CURRENT 250 2 1 /u01/app/oracle/oradata/DG/redo02.log YES INACTIVE 200 3 1 /u01/app/oracle/oradata/DG/redo03.log YES INACTIVE 250 Now drop group 2 :- SQL> alter database drop logfile group 2; SQL> alter database add logfile group 2 '/u01/app/oracle/oradata/DG/redo02.log' size 250M reuse; ------------------------------------------------------------------------------------------------------------------------------------ 6>Do log switch and make all usable alter system switch logfile; alter system checkpoint; <---------- TO REGISTER THE CHANGES IN CONTROL FILE ------------------------------------------------------------------------------------------------------------------------------------ 7>Moving on to the Standby Redo Logs on the Primary Database:- SQL> select group#,sum(bytes/1024/1024)"size in MB" from v$standby_log group by group#; GROUP# size in MB ------ ---------- 6 201 \ \ SQL> select group#,status from v$standby_log; GROUP# STATUS ------ ---------- 4 UNASSIGNED 5 UNASSIGNED \ \ SQL> select group#,member from v$logfile; GROUP# MEMBER ------ ---------------------------------------------------------------------- 4 /u01/app/oracle/oradata/DG/stndby1.log 5 /u01/app/oracle/oradata/DG/stndby2.log 6 /u01/app/oracle/oradata/DG/stndby3.log 7 /u01/app/oracle/oradata/DG/stndby4.log ------------------------------------------------------------------------------------------------------------------------------------ 8>Drop all standby logfile like below SQL> alter database drop standby logfile group 4; [ SAME FOR 5,6,& 7 GROUP STANDBY LOGFILES ] ------------------------------------------------------------------------------------------------------------------------------------ 9>Add standby redo file with same size. # REPEAT THIS FOR THE REMAINING SRLS ON THE PRIMARY DATABASE AND WE CAN SEE BELOW THAT ALL THE SRL ON THE PRIMARY DATABASE HAVE BEEN RESIZED. alter database add standby logfile group 4 '/u01/app/oracle/oradata/DG/stndby1.log' size 251M reuse; alter database add standby logfile group 5 '/u01/app/oracle/oradata/DG/stndby2.log' size 251M reuse; alter database add standby logfile group 6 '/u01/app/oracle/oradata/DG/stndby3.log' size 251M reuse; alter database add standby logfile group 7 '/u01/app/oracle/oradata/DG/stndby4.log' size 251M reuse; |
------------------------------------- Moving on to the standby database:- -------------------------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 1) SQL> select group#,status from v$log; GROUP# STATUS ------ ---------- 1 UNUSED 2 UNUSED 3 UNUSED ------------------------------------------------------------------------------------------------------------------------------------ 2) SQL> select group#,status from v$log; GROUP# STATUS ---------- ---------------- 1 CURRENT 3 CLEARING 2 CLEARING # LETS TRY TO DROP ONLINE REDO LOG GROUP 2 AS GROUP 1 IS CURRENT STATUS AND IT CANNOT BE DROPPED. SQL> alter database drop logfile group 2; alter database drop logfile group 2 * # ERROR at line 1: # ORA-01156: recovery or flashback in progress may need access to files # Here above, we faced ORA-01156 error, which is self-explanatory. The recovery (MRP process) on the standby database is active and it needs to be cancelled before we drop any Redo log groups ------------------------------------------------------------------------------------------------------------------------------------ 3) SQL> alter database recover managed standby database cancel; ------------------------------------------------------------------------------------------------------------------------------------ 4>Since the status of Group 1 is still clearing, lets clear it manually before dropping the group.Repeat for all. alter database clear logfile group 1; <--------- TO CLEAR LOGFILE MANUALLY # NOW, DROP LOGFILE, SQL> alter database drop logfile group 1; alter database drop logfile group 1 # ERROR : # ORA-01275: Operation DROP LOGFILE is not allowed if standby file management is automatic. SQL> alter system set standby_file_management=manual; SQL> alter database drop logfile group 1; SQL> alter database add logfile group 1 '/u01/app/oracle/oradata/DG/redo01.log' size 250M reuse; SQL> select group#,status from v$log; GROUP# STATUS ---------- ---------------- 1 CURRENT 3 CLEARING 2 UNUSED # CHECK THE SIZE OF REDOLOG FILE SQL> @redologsize.sql |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | --------------------------------------------------- 5) Resizing Standby Redo Logs on standby database: --------------------------------------------------- SQL> select group#,sum(bytes/1024/1024)"size in MB" from v$standby_log group by group#; GROUP# size in MB ------ ---------- 4 201 5 201 6 201 7 201 SQL> select group#,status from v$standby_log; GROUP# STATUS -------- -------------- 4 ACTIVE 5 UNASSIGNED 6 UNASSIGNED 7 UNASSIGNED SQL> select group#,member from v$logfile order by group#; GROUP# MEMBER ------ ---------------------------------------------------------------------- 4 /u01/app/oracle/oradata/DG/stndby1.log 5 /u01/app/oracle/oradata/DG/stndby2.log 6 /u01/app/oracle/oradata/DG/stndby3.log 7 /u01/app/oracle/oradata/DG/stndby4.log |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 6> SWITCH LOGS AND CLEAR THE SRL GROUP WHOSE STATUS IS ACTIVE AS DONE EARLIER, DROP THE GROUP AND RE-CREATE THEM WITH THE SIZE SAME AS THAT OF THE ONLINE REDO LOGS. FOR THE SRL GROUPS WHOSE STATUS IS UNASSIGNED, JUST DROP THE GROUP AND RECREATE THEM WITH THE +1 SIZE AS THAT OF THE ONLINE REDO LOGS. SQL> alter database clear logfile group 5; SQL> alter database clear logfile group 6; SQL> alter database clear logfile group 7; SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/DG/stndby2.log' size 251M reuse; SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/DG/stndby3.log' size 251M reuse; SQL> alter database add standby logfile group 7 '/u01/app/oracle/oradata/DG/stndby4.log' size 251M reuse; SQL> alter system switch logfile; SQL> alter database clear logfile group 4; <------ CLEAR THE SRL WHICH IS ACTIVE SQL> alter database drop standby logfile group 4; <------ DROP THE SRL AFTER CLEARING SQL> alter database add standby logfile group 4 '/u01/app/oracle/oradata/DG/stndby1.log' size 251M reuse; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 7) VERIFY:- SQL> select group#,sum(bytes/1024/1024)"size in MB" from v$log group by group#; GROUP# size in MB ------ ---------- 1 250 2 250 3 250 SQL> select group#,sum(bytes/1024/1024)"size in MB" from v$standby_log group by group#; GROUP# size in MB ------ ---------- 6 251 4 251 5 251 7 251 ------------------------------------------------------------------------------------------------------------------------------------ 8) ONCE ALL THE STANDBY REDO LOGS AND ONLINE REDO LOGS HAVE BEEN RESIZE ON BOTH PRIMARY AND STANDBY DATABASE, SET THE STANDBY_FILE_MANAGEMENT TO "AUTO" ON THE STANDBY DATABASE AND START THE RECOVERY (MRP) ON STANDBY DATABASE. SQL> alter system set standby_file_management=auto; SQL> alter database recover managed standby database disconnect from session using current logfile; <---- MRP START SQL> select process,status,sequence# from v$managed_standby; <---- CHECK MRP STATUS ------------------------------------------------------------------------------------------------------------------------------------ 9>>Verify sync status:- Primary:- SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 23 Next log sequence to archive 25 Current log sequence 25 Standby:- USe below script:- @standbysync.sql |
Scripts used in above part:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | --------------------------- 1) @standbysync.sql :- --------------------------- SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference" FROM (SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH, (SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL WHERE ARCH.THREAD# = APPL.THREAD# ORDER BY 1; ------------------------------------------------------------------------------------------------------------------------------------ ------------------------- 2) @redologsize.sql :- ------------------------- -- Script begins here -- -- -- Please note, this is a sample script -- provided for educational purposes only -- and is not certified by Oracle Support for any purpose. spool log.lst set echo off set feedback on set linesize 120 set pagesize 35 set trim on set trims on set lines 120 col group# format 999 col thread# format 999 col member format a70 wrap col status format a10 col archived format a10 col fsize format 999 heading "Size (MB)" select l.group#, l.thread#, f.member, l.archived, l.status, (bytes/1024/1024) fsize from v$log l, v$logfile f where f.group# = l.group# order by 1,2 / spool off -- End of script -- |