Вы находитесь на странице: 1из 6

Converting Physical Standby to Logical Standby and Monitoring

On standby database
------------------------------ ------------------------------




SQL> SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received",
APPL.SEQUENCE# "Last Sequence Applied"
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;


Cancel the recovery on standby database
------------------------------ ------------------------------



SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;


$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$


On primary database
------------------------------ ------------------------------
------------------------------ ------------------------------

SQL> show parameters archive

log_archive_dest_1 string location=/slot/ems3079/oracl
e/db_1/arch/sitst01/

***************On primary set the VALID_FOR parameter to make destination 1
as valid for online redo logs and role as all roles. This mean even if we
change the role of primary server to standby server, online redo logs will
get archived to archive destination 1.



****SQL>alter system set
log_archive_dest_1='location=/slot/ems3079/oracle/db_1/arch/sitst01/
valid_for=(ONLINE_LOGFILES,ALL_ROLES)';***

##################################################

Archive destination 2 is for service which will ship archivelogs/redo logs
to secondary standby server.

Create another archive destination log_archive_dest_3 which will archive
only standby redo logs and role should be set to standby_role. This means
that in case if we make this primary as standby then standby redo logs will
be archived automatically at archive destination 3.

alter system set LOG_ARCHIVE_DEST_3='LOCATION=/u01/oradata/arch_bbmlprod
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)';

#################################################

Run DBMS_LOGSTDBY.BUILD package to create metadata for log miner to apply
SQLs on logical standby site.

SQL> EXECUTE DBMS_LOGSTDBY.BUILD;
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$





On standby database
------------------------------ ------------------------------




Start the recover and change the DB name of standby

SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY BBMLDR;




Set the archive log destination on standby site as well.

SQL> alter system set
log_archive_dest_1='LOCATION=/slot/ems6826/oracle/db_1/dbs/arch/sitst02
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)';


System altered.


SQL> alter system set LOG_ARCHIVE_DEST_2='service=sitst01 LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)';


System altered.


SQL> alter system set LOG_ARCHIVE_DEST_3='LOCATION=/u01/oradata/arch_bbmldr
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)';


System altered.




Start the SQL apply on logical standby



Create standby redo logs as shown below.

SQL> alter database add standby logfile group 4
('/u01/oradata/BBMLPROD/redo4.dbf') size 50M;
Database altered.
SQL> alter database add standby logfile group 5
('/u01/oradata/BBMLPROD/redo5.dbf') size 50M;
Database altered.
SQL> alter database add standby logfile group 6
('/u01/oradata/BBMLPROD/redo6.dbf') size 50M;
Database altered.
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Database altered.

SQL> ALTER DATABASE OPEN RESETLOGS;
Database altered.



SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;








&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&


*****************************************************************************
*****
Sanity check logical standby

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Run following on standby database

SQL> select name, database_role from v$database;


NAME DATABASE_ROLE

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

STANDBY LOGICAL STANDBY



=====On primary


SQL> select DEST_ID, THREAD#, SEQUENCE#, ARCHIVED, APPLIED from
v$archived_log where DEST_ID = 2 ;



DEST_ID THREAD# SEQUENCE# ARC APP

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

2 1 179 YES YES

2 1 181 YES YES

2 1 182 YES YES

2 1 183 YES YES

2 1 184 YES YES

2 1 185 YES YES

2 1 186 YES YES

2 1 187 YES YES

2 1 188 YES YES

2 1 189 YES YES

2 1 190 YES NO


On standby


SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, DICT_BEGIN, DICT_END FROM
DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#;





SEQUENCE# FIRST_TIME NEXT_TIME DIC DIC

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

189 02-MAY-10 02:17:59 02-MAY-10 02:20:32 NO NO

190 02-MAY-10 02:20:32 02-MAY-10 02:20:33 NO NO





SQL> SELECT TYPE, HIGH_SCN, STATUS FROM V$LOGSTDBY;





TYPE HIGH_SCN STATUS

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

COORDINATOR 5846054 ORA-16116: no work available

READER 5846054 ORA-16240: Waiting for logfile
(thread# 1, sequence# 191)

BUILDER 5846050 ORA-16116: no work available

PREPARER 5846049 ORA-16116: no work available

ANALYZER 5845790 ORA-16117: processing

APPLIER 5845733 ORA-16116: no work available

APPLIER 5845739 ORA-16116: no work available

APPLIER 5845784 ORA-16116: no work available

APPLIER 5845790 ORA-16116: no work available

APPLIER 5845429 ORA-16116: no work available



SQL> SELECT EVENT_TIME, STATUS, EVENT FROM DBA_LOGSTDBY_EVENTS ORDER BY
EVENT_TIME, COMMIT_SCN;



SQL> SELECT FILE_NAME, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#, TIMESTAMP,
DICT_BEGIN, DICT_END, THREAD# FROM DBA_LOGSTDBY_LOG ORDER BY SEQUENCE#



SQL> SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';





Session altered.



SQL> SELECT L.SEQUENCE#, L.FIRST_TIME, (CASE WHEN L.NEXT_CHANGE# < P.READ_SCN
THEN 'YES'WHEN L.FIRST_CHANGE# < P.APPLIED_SCN THEN 'CURRENT' ELSE 'NO' END)
APPLIED FROM DBA_LOGSTDBY_LOG L, DBA_LOGSTDBY_PROGRESS P ORDER BY SEQUENCE#;





SEQUENCE# FIRST_TIME APPLIED

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

189 02-MAY-10 02:17:59 CURRENT

190 02-MAY-10 02:20:32 CURRENT





SQL> SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS WHERE NAME LIKE
'coordinator%' or NAME LIKE 'transactions%';






References:


Metalink note ID : 738643.1


http://avdeo.com/2010/05/04/converting-physical-standby-to-logical-oracle-
dataguard-10g/

Вам также может понравиться