You are on page 1of 17

Win2000Oracle10201

Oracle Data Guard


MSN:olivenan@hotmail.com
Maximum protection:

Maximum availability:
Maximum protection Maximum protection
Maximum
performance

Maximum performance:Oracle

Data Guard
Data Guard
SQL> select * from v$option where parameter = 'Managed Standby';
PARAMETER
VALUE
-------------------- ---------Managed Standby
TRUE
SQL>

SQL> ALTER DATABASE FORCE LOGGING;

D:>orapwd
file=D:\oracle\product\10.2.0\db_1\database\PWDauxdb.ora
password=oracle
entries=5;

D:> oradim -NEW -SID auxdb -INTPWD D:\oracle\product\10.2.0\db_1\database\PWDauxdb.ora


-STARTMODE manual
spfile
orcl.__db_cache_size=88080384
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=67108864

orcl.__streams_pool_size=0
*.audit_file_dest='D:\oracle\product\10.2.0\admin\orcl\adump'
*.background_dump_dest='D:\oracle\product\10.2.0\admin\orcl\bdump'
*.compatible='10.2.0.1.0'
*.control_files='D:\oracle\product\10.2.0\oradata\orcl\CONTROL01.CTL','D:\oracle\product\10.2.
0\oradata\orcl\CONTROL02.CTL','D:\oracle\product\10.2.0\oradata\orcl\CONTROL03.CTL'
*.core_dump_dest='D:\oracle\product\10.2.0\admin\orcl\cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest_size=2147483648
*.db_recovery_file_dest='d:\oracle\product\10.2.0\flash_recovery_area'
*.db_unique_name='orcl'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.log_archive_config='dg_config=(orcl,auxdb)'
*.log_archive_dest_1='location=D:\oracle\product\10.2.0\oradata\orcl\archive
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'
*.log_archive_dest_2='service=AUX VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=auxdb'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.log_archive_max_processes=1
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='D:\oracle\product\10.2.0\admin\orcl\udump'
*.fal_service='aux'
*.fal_client='orcl'
*.standby_archive_dest='D:\oracle\product\10.2.0\oradata\orcl\standbyarchive'
*.standby_file_management=auto

SQL> select file#,name from v$datafile;


FILE# NAME
----- ---------------------------------------------------1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF

3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
5 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
6 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF
6
1 copy
SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'd:\bak\standby.ctl';
file 123456 copy d:\bak

2 rman copy
C:\Documents and Settings\Administrator.XY>rman target/
: Release 10.2.0.1.0 - Production on 3 15 14:42:25 2007
Copyright (c) 1982, 2005, Oracle.

All rights reserved.

: ORCL (DBID=1140649303, )
RMAN> copy datafile 1 to 'd:\bak\system01.dbf',datafile 2 to 'd:\bak\undotbs01.d
bf',datafile 3 to 'd:\bak\sysaux01.dbf',datafile 4 to 'd:\bak\users01.dbf',dataf
ile 5 to 'd:\bak\example01.dbf',datafile 6 to 'd:\bak\test01.dbf', current contr
olfile for standby to 'd:\bak\standby.ctl';
2>
backup 15-3 -07

: ORA_DISK_1
ORA_DISK_1: sid=155 devtype=DISK
ORA_DISK_1:

ORA_DISK_1: , : 00:00:01
ORA_DISK_1:

= D:\BAK\STANDBY.CTL = TAG20070315T144240 recid = 40 =


61
7294620
ORA_DISK_1: , : 00:00:01
backup 15-3 -07
RMAN>

SQL> ALTER DATABASE OPEN;

1maximum protection maximum availability


LGWR SYNC

Data Guard
2
3

thread

(maximum number of logfiles for each thread + 1) * maximum number of threads

LGWR
thread 6

SQL>alter database add standby logfile thread 1 'D:\oracle\product\10.2.0\oradata\orcl\redo04.log'


size 50m;
SQL>alter database add standby logfile thread 1 'D:\oracle\product\10.2.0\oradata\orcl\redo05.log'
size 50m;
SQL>alter database add standby logfile thread 1 'D:\oracle\product\10.2.0\oradata\orcl\redo06.log'
size 50m;
SQL>alter database add standby logfile thread 1 'D:\oracle\product\10.2.0\oradata\orcl\redo07.log'
size 50m;
4

SQL>alter system switch logfile;

SQL>
SELECT
GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS
FROM
V$STANDBY_LOG;
GROUP#
THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ---------4
1
0 NO ACTIVE
5
1
0 YES UNASSIGNED
6
1
0 YES UNASSIGNED
7
1
0 YES UNASSIGNED
listener.ora tnsnames.ora

listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = auxdb)

(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = auxdb)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.199)(PORT = 1521))
)
)
tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.199)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
aux =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.199)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)

(SID = auxdb)
)
)
pfile
spfile
:auxdb
initauxdb.ora
*.db_name=orcl
*.db_unique_name=auxdb
*.DB_FILE_NAME_CONVERT=('d:\oracle\product\10.2.0\oradata\orcl','d:\bak')
*.LOG_FILE_NAME_CONVERT=('d:\oracle\product\10.2.0\oradata\orcl','d:\bak')
*.control_files='D:\bak\standby.CTL'
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.compatible='10.2.0.1.0'
*.db_block_size=8192
*.sga_target=250000000
*.background_dump_dest=d:\bak\bdump
*.core_dump_dest=d:\bak\cdump
*.user_dump_dest=d:\bak\udump
*.standby_archive_dest='d:\bak\standbyarchive'
*.fal_server='orcl'
*.fal_client='aux'
*.standby_file_management='AUTO'
*.log_archive_config='dg_config=(orcl,auxdb)'
*.log_archive_dest_1='location=D:\bak\archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=auxdb'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl
LGWR
ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
SQL> create spfile from pfile;

SQL> startup mount;


ORACLE
Total System Global Area 251658240 bytes
Fixed Size
1248380 bytes
Variable Size
83886980 bytes
Database Buffers
163577856 bytes
Redo Buffers
2945024 bytes

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT


FROM SESSION;

SQL> ALTER SYSTEM SWITCH LOGFILE;

SQL>

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG


ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME
NEXT_TIME
---------- -------------- -------------1 15-3 -07
15-3 -07
...
25 15-3 -07
15-3 -07
17

SQL> ALTER SYSTEM SWITCH LOGFILE;

SQL>
SELECT
SEQUENCE#,
FIRST_TIME,
NEXT_TIME,APPLIED
V$ARCHIVED_LOG ORDER BY SEQUENCE#
SEQUENCE# FIRST_TIME
NEXT_TIME
APP
---------- -------------- -------------- --1 15-3 -07
15-3 -07
NO

24 15-3 -07
15-3 -07
YES
25 15-3 -07
15-3 -07
YES
26 15-3 -07
15-3 -07
YES

FROM

18

1 standby_archive_dest/standby_file_management

SQL>
alter
system
set
standby_archive_dest='D:\oracle\product\10.2.0\oradata\orcl\standbyarchive' scope=both;
SQL> alter system set standby_file_management='auto' scope=both;

SQL> show parameter standby


NAME

TYPE

VALUE

------------------------------------ ----------- -----------------------------standby_archive_dest


string
D:\oracle\product\10.2.0\orada
ta\orcl\standbyarchive
standby_file_management
string
AUTO
2 TO STANDBY
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-------------------SESSIONS ACTIVE
SQL>

session active
SQL> SELECT SID, PROCESS, PROGRAM FROM V$SESSION WHERE TYPE = 'USER'
AND SID <>
(SELECT DISTINCT SID FROM V$MYSTAT);
SID PROCESS
PROGRAM
---- ---------- --------------148 2660:2244 plsqldev.exe
154 2660:2244 plsqldev.exe
158 2660:2244 plsqldev.exe
SQL>
1 plsql
SQL> SELECT SID, PROCESS, PROGRAM FROM V$SESSION WHERE TYPE = 'USER'
AND SID <>
(SELECT DISTINCT SID FROM V$MYSTAT);

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;


SWITCHOVER_STATUS
-------------------TO STANDBY
SQL>

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;


2
job_queue_processes 0
SQL> show parameter job_queue_processes

NAME
TYPE
VALUE
------------------------------------ ----------- -----------------------------job_queue_processes
integer
10
SQL> alter system set job_queue_processes=0;
SQL> SELECT SID, PROCESS, PROGRAM FROM V$SESSION WHERE TYPE = 'USER'
AND SID <>
(SELECT DISTINCT SID FROM V$MYSTAT);
SID PROCESS
PROGRAM
---- ---------- --------------148 2660:2244 plsqldev.exe
154 2660:2244 plsqldev.exe
158 2660:2244 plsqldev.exe
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-------------------SESSIONS ACTIVE

CJQ0

job

JOB_QUEUE_PROCESSES 0
spfile

QMN0

AQ_TM_PROCESSES 0
spfile

DBSNMP

oem

emctl stop agent

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH


SESSION SHUTDOWN;
3
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH
SESSION SHUTDOWN;

4 mount
SQL> shutdown immediate
ORA-01507:
ORACLE
SQL> startup mount;

ORACLE
Total System Global Area 167772160 bytes
Fixed Size
1247900 bytes
Variable Size
75498852 bytes
Database Buffers
88080384 bytes
Redo Buffers
2945024 bytes

5
SQL> select t.PROTECTION_MODE,t.DATABASE_ROLE from v$database t;
PROTECTION_MODE
DATABASE_ROLE
-------------------- ---------------MAXIMUM PERFORMANCE PHYSICAL STANDBY
6
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

SQL> ALTER DATABASE OPEN;

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;


SWITCHOVER_STATUS
-------------------TO STANDBY
SQL> select t.PROTECTION_MODE,t.DATABASE_ROLE from v$database t;
PROTECTION_MODE
DATABASE_ROLE
-------------------- ---------------MAXIMUM PERFORMANCE PRIMARY
SQL>

MAXIMUM PERFORMANCE MAXIMUM PROTECTION

SQL>select protection_mode from v$database;


PROTECTION_MODE
-------------------MAXIMUM PERFORMANCE
SQL>shutdown immediate;
SQL>startup mount
SQL> alter system set log_archive_dest_2='SERVICE=aux LGWR SYNC AFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=auxdb'
scope=both;
SQL>alter database set standby database to maximize protection;
SQL>alter database open;

SQL> select protection_mode from v$database;


PROTECTION_MODE
-------------------MAXIMUM PROTECTION

ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION |


AVAILABILITY | PERFORMANCE}

ARC0 started with pid=15, OS id=2596


LGWR: Primary database is in MAXIMUM PROTECTION mode
LGWR: Destination LOG_ARCHIVE_DEST_2 is using asynchronous network I/O
LGWR: Destination LOG_ARCHIVE_DEST_1 is not standby database serviced by LGWR
LGWR: Minimum of 1 synchronous standby database required
Thu Mar 22 15:01:48 2007
Errors in file d:\oracle\product\10.2.0\admin\orcl\bdump\orcl_lgwr_2392.trc:
ORA-16072: a minimum of one standby database destination is required
ORA-16086: standby database does not contain available standby log files
:
1primary database MAXIMUM PROTECTION
maximum performance
2standby standby redo
3LOG_ARCHIVE_DEST_2
*.log_archive_dest_2='service=aux
OPTIONAL
LGWR
SYNC
AFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=auxdb'
SYNC ASYNC
MAXIMUM PROTECTION primary
standby
1 orcl
orcl
SQL> startup
ORACLE
Total System Global Area 167772160 bytes
Fixed Size
1247900 bytes
Variable Size
75498852 bytes
Database Buffers
88080384 bytes
Redo Buffers
2945024 bytes

SQL> select protection_mode from v$database;

PROTECTION_MODE
-------------------MAXIMUM PROTECTION
SQL> alter database commit to switchover to physical standby;
alter database commit to switchover to physical standby
*
1 :
ORA-01093: ALTER DATABASE CLOSE
orcl
SQL> alter database commit to switchover to physical standby;

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;


SELECT SWITCHOVER_STATUS FROM V$DATABASE
*
1 :
ORA-01507:
SQL> shutdown immediate
ORA-01507:
ORACLE
SQL> startup mount;
ORACLE
Total System Global Area 167772160 bytes
Fixed Size
1247900 bytes
Variable Size
79693156 bytes
Database Buffers
83886080 bytes
Redo Buffers
2945024 bytes

orcl
SQL> select t.PROTECTION_MODE,t.DATABASE_ROLE from v$database t;
PROTECTION_MODE
DATABASE_ROLE
-------------------- ---------------MAXIMUM PROTECTION PHYSICAL STANDBY
SQL>

2 auxdb
auxdb

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;


ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY
*
1 :
ORA-16139:
SQL> alter database recover managed standby database;

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

SQL> select t.PROTECTION_MODE,t.DATABASE_ROLE from v$database t;


PROTECTION_MODE
DATABASE_ROLE
-------------------- ---------------MAXIMUM PROTECTION PRIMARY

SQL> alter database open;


alter database open
*
1 :
ORA-03113:
log_archive_dest_2
*.log_archive_dest_2='SERVICE=orcl
OPTIONAL
LGWR
SYNC
AFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
SQL> conn /as sysdba

SQL> conn /as sysdba

SQL> create spfile from pfile;

SQL> startup
ORACLE
Total System Global Area 251658240 bytes
Fixed Size
1248380 bytes
Variable Size
83886980 bytes

Database Buffers
163577856 bytes
Redo Buffers
2945024 bytes

ORA-03113:

alert_auxdb.log
Errors in file d:\bak\bdump\auxdb_lgwr_2040.trc:
ORA-16086: standby database does not contain available standby log files
Thu Mar 22 16:37:37 2007
LGWR: Error 16086 verifying archivelog destination LOG_ARCHIVE_DEST_2
Thu Mar 22 16:37:37 2007
Destination LOG_ARCHIVE_DEST_2 is UNSYNCHRONIZED
LGWR: Error 16086 disconnecting from destination LOG_ARCHIVE_DEST_2 standby host
'orcl'
LGWR: Continuing...
LGWR: Minimum of 1 applicable standby database required
Thu Mar 22 16:37:41 2007
Errors in file d:\bak\bdump\auxdb_lgwr_2040.trc:
ORA-16072: a minimum of one standby database destination is required
standby redo
3 orcl standby redo
orcl
SQL> alter database add standby logfile 'd:\oracle\product\10.2.0\oradata\orcl\r
edo04.log' size 50m;

SQL> alter database add standby logfile 'd:\oracle\product\10.2.0\oradata\orcl\r


edo05.log' size 50m;

SQL> alter database add standby logfile 'd:\oracle\product\10.2.0\oradata\orcl\r


edo06.log' size 50m;

SQL> alter database add standby logfile 'd:\oracle\product\10.2.0\oradata\orcl\r


edo07.log' size 50m;

SQL>
4 auxdb
auxdb
SQL> conn /as sysdba

SQL> create spfile from pfile;


SQL> startup
ORACLE
Total System Global Area 251658240 bytes
Fixed Size
1248380 bytes
Variable Size
83886980 bytes
Database Buffers
163577856 bytes
Redo Buffers
2945024 bytes

SQL> select instance_name from v$instance;


INSTANCE_NAME
---------------auxdb
SQL> select t.PROTECTION_MODE,t.DATABASE_ROLE from v$database t;
PROTECTION_MODE
DATABASE_ROLE
-------------------- ---------------MAXIMUM PROTECTION PRIMARY
SQL>

COMPATIBLE='10.2.0.1.0': redo

DB_FILE_NAME_CONVERT=:

DB_UNIQUE_NAME=:
LOG_ARCHIVE_CONFIG
FAL_CLIENT= aux
FAL_SERVER orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=( db_unique_name, db_unique_name)'
LOG_ARCHIVE_DEST_n:

LOG_ARCHIVE_DEST_STATE_n ={ENABLE|DEFER|ALTERNATE|RESET} :enable or


disable redo
LOG_FILE_NAME_CONVERT: DB_FILE_NAME_CONVERT
STANDBY_ARCHIVE_DEST:
STANDBY_FILE_MANAGEMENT={AUTO|MANUAL} :AUTO

1:

ORA-16057: DGID from server not in Data Guard configuration


: log_archive_config
*.log_archive_config='dg_config=(orcl,auxdb)'
alter system set log_archive_config='dg_config=(orcl,auxdb)' scope=both;
2:
PING[ARC0]: Heartbeat failed to connect to standby 'aux'. Error is 1031.
ORA-01031: insufficient privileges
:1 sys
2Oracle standby_archive_dest
3:
ORA-16025: parameter LOG_ARCHIVE_DEST_2 contains repeated or conflicting attributes
LOG_ARCHIVE_DEST_2='SERVICE=orcl LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
db_unique_name

MANDATORYREOPENMAX_FAILURE
MANDATORY REOPEN=5 MAX_FAILURE=3 5 3
3
*.log_archive_dest_2='service=AUX VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
MANDATORY REOPEN=5 MAX_FAILURE=3 DB_UNIQUE_NAME=auxdb'
1 standby
SQL> SELECT MAX(R.SEQUENCE#) LAST_SEQ_RECD, MAX(L.SEQUENCE#)
LAST_SEQ_SENT FROM
2> V$ARCHIVED_LOG R, V$LOG L WHERE
3> R.DEST_ID=2 AND L.ARCHIVED='YES';
LAST_SEQ_RECD LAST_SEQ_SENT
------------- ------------7 10
2 primary
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1
AND
2> SEQUENCE# BETWEEN 7 AND 10;
NAME
-------------------------------------------------------------------------------/primary/thread1_dest/arcr_1_7.arc
/primary/thread1_dest/arcr_1_8.arc
/primary/thread1_dest/arcr_1_9.arc

3 copy standby STANDBY_ARCHIVE_DEST


STANDBY_ARCHIVE_DEST copy LOG_ARCHIVE_DEST
4
SQL> STARTUP MOUNT
SQL> ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT
FROM SESSION;

2
gap 1 Mail
olivenan@163.com
1
SQL>
SELECT
THREAD#,
LOW_SEQUENCE#,
HIGH_SEQUENCE#
FROM
V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- -------------1 90 92
2 copy standby_archive_dest

ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';


3
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
4
Mailolivenan@163.com
Oracle DBA

You might also like