1、环境规划:
---RAC环境介绍(primary database)
rac1 rac2
______________________________________________________
public ip 192.168.110.11 192.168.110.12
______________________________________________________
virtual ip 192.168.110.21 192.168.110.22
_____________________________________________________
instance racdb1 racdb2
______________________________________________________
db_name racdb
_______________________________________________________
storage mode ASM
__________________________________________________
---单机环境介绍(standby database)
数据文件可放至本地, 也可以放至ASM上,本实验中先放至本地实验
__________________________________________________________________________
ip 192.168.110.11 192.168.110.12
___________________________________________________________________________
instance 192.168.110.13(rac3)
___________________________________________________________________________
storage mode /oradata/racdb
___________________________________________________________________________
----hosts文件
#Public Network - (eth0)
192.168.110.11 rac1
192.168.110.12 rac2
192.168.110.13 rac3
#Private Interconnect - (eth1)
10.10.10.11 rac1priv
10.10.10.12 rac2priv
#Public Virtual IP (VIP) addresses - (eth0)
192.168.110.21 rac1vip
192.168.110.22 rac2vip
--检查环境
1)、启动archivelog归档模式
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 54
Next log sequence to archive 56
Current log sequence 56
SQL> show parameter RECOVERY
NAME TYPE VALUE
------------------------------------ ----------- ---------------------------
---
db_recovery_file_dest string +DG_RECOVERY
db_recovery_file_dest_size big integer 2G
recovery_parallelism integer 0
2)、启动FORCE_LOGGING模式
SQL> alter database FORCE LOGGING;
Database altered.
SQL> select FORCE_LOGGING from v$database;
FOR
---
YES
2、首先配置两个数据库的tnsnames.ora和listener.ora
tnsnames.ora(两台主机相同)
racdb_rac1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.21)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb_s)
(SERVICE_NAME = racdb1)
)
)
racdb_rac2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.22)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb_s)
(SERVICE_NAME = racdb2)
)
)
racdb_standby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.13)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = racdb)
)
)
3、准备参数文件 件就会放入至新的db_unique_name目录下面,导致DB_FILE_NAME_CONVERT失效。) (ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb' (ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdb_standby' oradata/racdb/tempfile','+DG_DATA/racdb/tempfile' (ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb_standby' (ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdb' DG_DATA/racdb/tempfile','/oradata/racdb/tempfile' * DG_DATA/racdb/tempfile','/oradata/racdb/tempfile' (ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb_standby' (ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdb' rman target / comment=NONE 将备份的文件拷到另一台备机相同目录下。 racdbfull_0clfv9jn_12_1 [/email] [email=sys/6212327@rac1]sys/6212327@rac1[/email]; [email=sys/6212327@rac2]sys/6212327@rac2[/email]; sys/sys@racdb_standby[/email] control file /soft/racdb/racdbfull_0clfv9jn_12_1 filename=/oradata/racdb/datafile/system.268.719166757 filename=/oradata/racdb/datafile/undotbs1.269.719166777 filename=/oradata/racdb/datafile/sysaux.270.719166783 filename=/oradata/racdb/datafile/undotbs2.272.719166797 filename=/oradata/racdb/datafile/users.273.719166803 filename=/oradata/racdb/datafile/rman_tbs.dbf SQL> select member from v$logfile; ---- ---- SQL> select name from v$tempfile; ---- --- /oradata/racdb/datafile/racdb. 6组12个,则现在要创建7组14个。 alter database add standby logfile thread 1 group 7 '/oradata/racdb/onlinelog/group_7.log' size 50M; alter database add standby logfile thread 1 group 8 '/oradata/racdb/onlinelog/group_8.log' size 50M; '/oradata/racdb/onlinelog/group_9.log' size 50M; '/oradata/racdb/onlinelog/group_10.log' size 50M; alter database add standby logfile thread 2 group 11 '/oradata/racdb/onlinelog/group_11.log' size 50M; alter database add standby logfile thread 2 group 12 '/oradata/racdb/onlinelog/group_12.log' size 50M; '/oradata/racdb/onlinelog/group_13.log' size 50M; '/oradata/racdb/onlinelog/group_14.log' size 50M; 10、开始同步 DEST_NAME STATUS ERROR -------------------- configuration scope=both; -------------------- v$archived_log order by SEQUENCE#; SELECT MAX(R.SEQUENCE#) LAST_SEQ_RECD, MAX(L.SEQUENCE#) LAST_SEQ_SENT FROM V$ARCHIVED_LOG R, V$LOG L WHERE R.DEST_ID=2 AND L.ARCHIVED='YES' BETWEEN 85 AND 86; 测试在RAC主库上创建一个表空间: 创建用户: ---- SQL> conn fmismain/fmismain fmismain.287.721410885 sysaux.270.719166783 system.268.719166757 undotbs1.269.719166777 undotbs2.272.719166797 users.273.719166803 group_1.266.719166749 group_2.267.719166751 group_3.274.719167937 group_4.275.719167939 在备库中查看刚才创建的表空间与用户是否生效。 --- 12、增加temp文件 '/oradata/racdb/tempfile/temp.271.719166789' reset 100M; 13、少日志的时候,维护故障解决 试3次仍然不能成功,那么主库的日志传输服务就会停止。 MANDATORY REOPEN=5 MAX_FAILURE=3 DB_UNIQUE_NAME=auxdb' V$ARCHIVED_LOG R, V$LOG L WHERE R.DEST_ID=2 AND L.ARCHIVED='YES'; SEQUENCE# BETWEEN 5 AND 10; ---- copy到 LOG_ARCHIVE_DEST下 COMPATIBLE='10.2.0.1.0':数据库版本号,主库与从库要统一,否则有可能redo的数据 不能从主库传送到从库。 器上或主从库数据文件的路径不一致的情况下 么就必须有改参数。 disable来决定是否传输redo的数据到从库中。 步从库而不需要手动干预。 15、 经常遇到错误
standby主机上的listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = racdb)
(ORACLE_HOME = /oracle/app/product/10.2.0/db_1)
(SID_NAME = racdb)
)
(SID_DESC =
(GLOBAL_DBNAME = PLSExtProc)
(ORACLE_HOME = /oracle/app/product/10.2.0/db_1)
(SID_NAME = PLSExtProc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.13)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
RAC环境下的参数变化增加如下:
RAC主库:(注意使用ASM的时候,不要改变db_unique_name参数,否则之后创建的asm文
#add below parameter for standy database
*.service_names=racdb_s
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(racdb,racdb_standby)'
*.LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=
*.LOG_ARCHIVE_DEST_2='SERVICE=racdb_standby LGWR VALID_FOR=
*.FAL_SERVER='racdb_standby'
*.STANDBY_ARCHIVE_DEST='/oradata/arch'
*.racdb1.fal_client=racdb1
*.racdb2.fal_client=racdb2
*.STANDBY_FILE_MANAGEMENT=AUTO
*.DB_FILE_NAME_CONVERT='/oradata/racdb/datafile','+DG_DATA/racdb/datafile','/
*.LOG_FILE_NAME_CONVERT='/oradata/racdb/onlinelog','+DG_DATA/racdb/onlinelog'
单机备库增加以下:
*.db_name='racdb'
*.db_unique_name='racdb_standby'
*.service_names='racdb_standby'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(racdb_standby,racdb)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch VALID_FOR=
*.LOG_ARCHIVE_DEST_2='SERVICE=racdb1 LGWR VALID_FOR=
*.STANDBY_FILE_MANAGEMENT='AUTO'
STANDBY_ARCHIVE_DEST='/oradata/arch'
*.FAL_SERVER='racdb1','racdb2'
fal_client='racdb_standby'
*.DB_FILE_NAME_CONVERT='+DG_DATA/racdb/datafile','/oradata/racdb/datafile','+
*.LOG_FILE_NAME_CONVERT='+DG_DATA/racdb/onlinelog','/oradata/racdb/onlinelog'
racdb1.thread=1
*.undo_management='AUTO'
单机备库参数如下:
#add below parameter for standy database
*.audit_file_dest='/oracle/app/admin/racdb/adump'
*.background_dump_dest='/oracle/app/admin/racdb/bdump'
*.compatible='10.2.0.4'
*.control_files='/oradata/racdb/datafile/racdb.ctl'
*.core_dump_dest='/oracle/app/admin/racdb/cdump'
*.db_block_size=16384
*.db_domain=''
*.db_name='racdb'
*.db_file_multiblock_read_count=16
*.DB_FILE_NAME_CONVERT='+DG_DATA/racdb/datafile','/oradata/racdb/datafile','+
*.db_unique_name='racdb_standby'
fal_client='racdb_standby'
*.FAL_SERVER='racdb1','racdb2'
*.job_queue_processes=10
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(racdb_standby,racdb_s)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch VALID_FOR=
*.LOG_ARCHIVE_DEST_2='SERVICE=racdb1 LGWR VALID_FOR=
*.LOG_FILE_NAME_CONVERT='+DG_DATA/racdb/onlinelog','/oradata/racdb/onlinelog'
*.open_cursors=300
*.pga_aggregate_target=89128960
*.processes=150
*.remote_login_passwordfile='exclusive'
*.service_names='racdb_standby'
*.sga_target=268435456
*.STANDBY_FILE_MANAGEMENT='AUTO'
racdb1.thread=1
*.undo_management='AUTO'
racdb1.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/oracle/app/admin/racdb/udump'
STANDBY_ARCHIVE_DEST='/oradata/arch'
5、在rac上进行备份
backup database format '/soft/racdb/racdbfull%u_%s_%p';
RMAN> backup database format '/soft/racdb/racdbfull%u_%s_%p';
Starting backup at 11-JUN-10
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=127 instance=racdb1 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current SPFILE in backupset
including current control file in backupset
input datafile fno=00001 name=+DG_DATA/racdb/datafile/system.268.719166757
input datafile fno=00002 name=+DG_DATA/racdb/datafile/undotbs1.269.719166777
input datafile fno=00003 name=+DG_DATA/racdb/datafile/sysaux.270.719166783
input datafile fno=00004 name=+DG_DATA/racdb/datafile/undotbs2.272.719166797
input datafile fno=00006 name=+DG_DATA/racdb/datafile/rman_tbs.dbf
input datafile fno=00005 name=+DG_DATA/racdb/datafile/users.273.719166803
channel ORA_DISK_1: starting piece 1 at 11-JUN-10
channel ORA_DISK_1: finished piece 1 at 11-JUN-10
piece handle=/soft/racdb/racdbfull0elfvhv4_14_1 tag=TAG20100611T143204
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:38
Finished backup at 11-JUN-10
[oracle@rac1 racdb]$ ls -ls
total 498268
498268 -rw-r----- 1 oracle oinstall 509722624 Jun 11 12:10
[oracle@rac1 racdb]$ pwd
/soft/racdb
[oracle@rac1 racdb]$ scp racdbfull_0clfv9jn_12_1 rac3:/soft/racdb/
6、创建standby控制文件
在rac两个实例上进行几次归档。
alter system archive log current;
创建standby控制文件
alter database create standby controlfile as '/oracle/standby.ctl';
创建spfile并启动standby至nomount状态。
startup nomount;
7、利用rman创建standby数据库
rac1:
rman target / auxiliary [email=sys/sys@racdb_standby]sys/sys@racdb_standby
allocate channel c1 device type disk format '/soft/racdb/%U' connect
allocate channel c2 device type disk format '/soft/racdb/%U' connect
allocate auxiliary channel ac1 device type disk format '/soft/racdb/%U';
allocate auxiliary channel ac2 device type disk format '/soft/racdb/%U';
duplicate target database for standby;
过程如下:
[oracle@rac1 racdb]$ rman target / auxiliary [email=sys/sys@racdb_standby]
Recovery Manager: Release 10.2.0.4.0 - Production on Fri Jun 11 13:41:48 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: RACDB (DBID=716783510)
connected to auxiliary database: RACDB (not mounted)
RMAN> duplicate target database for standby;
Starting Duplicate Db at 11-JUN-10
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=155 devtype=DISK
contents of Memory Script.:
{
restore clone standby controlfile;
sql clone 'alter database mount standby database';
}
executing Memory Script
Starting restore at 11-JUN-10
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: copied control file copy
input filename=/oracle/standby.ctl
output filename=/oradata/racdb/datafile/racdb.ctl
Finished restore at 11-JUN-10
sql statement: alter database mount standby database
released channel: ORA_AUX_DISK_1
contents of Memory Script.:
{
set newname for tempfile 1 to
"/oradata/racdb/tempfile/temp.271.719166789";
switch clone tempfile all;
set newname for datafile 1 to
"/oradata/racdb/datafile/system.268.719166757";
set newname for datafile 2 to
"/oradata/racdb/datafile/undotbs1.269.719166777";
set newname for datafile 3 to
"/oradata/racdb/datafile/sysaux.270.719166783";
set newname for datafile 4 to
"/oradata/racdb/datafile/undotbs2.272.719166797";
set newname for datafile 5 to
"/oradata/racdb/datafile/users.273.719166803";
set newname for datafile 6 to
"/oradata/racdb/datafile/rman_tbs.dbf";
restore
check readonly
clone database
;
}
executing Memory Script
executing command: SET NEWNAME
renamed temporary file 1 to /oradata/racdb/tempfile/temp.271.719166789 in
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 11-JUN-10
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=155 devtype=DISK
channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /oradata/racdb/datafile/system.268.719166757
restoring datafile 00002 to /oradata/racdb/datafile/undotbs1.269.719166777
restoring datafile 00003 to /oradata/racdb/datafile/sysaux.270.719166783
restoring datafile 00004 to /oradata/racdb/datafile/undotbs2.272.719166797
restoring datafile 00005 to /oradata/racdb/datafile/users.273.719166803
restoring datafile 00006 to /oradata/racdb/datafile/rman_tbs.dbf
channel ORA_AUX_DISK_1: reading from backup piece
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/soft/racdb/racdbfull_0clfv9jn_12_1 tag=TAG20100611T120926
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:01:39
Finished restore at 11-JUN-10
contents of Memory Script.:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy recid=10 stamp=721116136
datafile 2 switched to datafile copy
input datafile copy recid=11 stamp=721116137
datafile 3 switched to datafile copy
input datafile copy recid=12 stamp=721116137
datafile 4 switched to datafile copy
input datafile copy recid=13 stamp=721116137
datafile 5 switched to datafile copy
input datafile copy recid=14 stamp=721116137
datafile 6 switched to datafile copy
input datafile copy recid=15 stamp=721116137
Finished Duplicate Db at 11-JUN-10
RMAN>
8、检查standby数据库
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
MEMBER
----------------------------------------------------------------------------
/oradata/racdb/onlinelog/group_1.266.719166749
/oradata/racdb/onlinelog/group_2.267.719166751
/oradata/racdb/onlinelog/group_3.274.719167937
/oradata/racdb/onlinelog/group_4.275.719167939
/oradata/racdb/onlinelog/group5
/oradata/racdb/onlinelog/group6
6 rows selected.
SQL> select name from v$datafile;
NAME
----------------------------------------------------------------------------
/oradata/racdb/datafile/system.268.719166757
/oradata/racdb/datafile/undotbs1.269.719166777
/oradata/racdb/datafile/sysaux.270.719166783
/oradata/racdb/datafile/undotbs2.272.719166797
/oradata/racdb/datafile/users.273.719166803
/oradata/racdb/datafile/rman_tbs.dbf
6 rows selected.
NAME
----------------------------------------------------------------------------
/oradata/racdb/tempfile/temp.271.719166789
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ---------------------------
control_file_record_keep_time integer 7
control_files string
ctl
9、创建standby redo log日志。
创建原则和单实例一样,大小相等,但日志组数量要比primary数据库多一组。如之前为
alter database add standby logfile thread 1 group 9
alter database add standby logfile thread 2 group 10
alter database add standby logfile thread 1 group 13
alter database add standby logfile thread 2 group 14
启动MRP:
SQL> alter database recover managed standby database disconnect from session;
Media recovery complete.
停止MRP:
alter database recover managed standby database cancel;
11、在rac各个实例上查看日志传送情况:
col DEST_NAME format a20
select dest_name,status,error from v$archive_dest;
-------------------- --------- ---------------------------------------------
LOG_ARCHIVE_DEST_1 INACTIVE
LOG_ARCHIVE_DEST_2 ERROR ORA-16057: DGID from server not in Data Guard
LOG_ARCHIVE_DEST_3 INACTIVE
LOG_ARCHIVE_DEST_4 INACTIVE
LOG_ARCHIVE_DEST_5 INACTIVE
LOG_ARCHIVE_DEST_6 INACTIVE
LOG_ARCHIVE_DEST_7 INACTIVE
LOG_ARCHIVE_DEST_8 INACTIVE
LOG_ARCHIVE_DEST_9 INACTIVE
LOG_ARCHIVE_DEST_10 VALID
错误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=(racdb,racdb_standby)'
SQL> select dest_name,status,error from v$archive_dest;
DEST_NAME STATUS ERROR
-------------------- --------- ---------------------------------------------
LOG_ARCHIVE_DEST_1 VALID
LOG_ARCHIVE_DEST_2 VALID
LOG_ARCHIVE_DEST_3 INACTIVE
LOG_ARCHIVE_DEST_4 INACTIVE
LOG_ARCHIVE_DEST_5 INACTIVE
LOG_ARCHIVE_DEST_6 INACTIVE
LOG_ARCHIVE_DEST_7 INACTIVE
LOG_ARCHIVE_DEST_8 INACTIVE
LOG_ARCHIVE_DEST_9 INACTIVE
LOG_ARCHIVE_DEST_10 INACTIVE
10 rows selected
---测试看日志是否传送成功。
主库:
Sql>alter system switch logfile;
Sql> select max(SEQUENCE#) from v$archived_log;
备库:
Sql> select max(SEQUENCE#) from v$archived_log;
#或者更详细的:select FIRST_TIME,NEXT_TIME, APPLIED,SEQUENCE# from
SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE#
CREATE TABLESPACE FMISMAIN
LOGGING
DATAFILE '+dg_data' SIZE 20M AUTOEXTEND
ON NEXT 10M EXTENT MANAGEMENT LOCAL SEGMENT SPACE
MANAGEMENT AUTO;
CREATE USER "FMISMAIN" PROFILE "DEFAULT"
IDENTIFIED BY "FMISMAIN" DEFAULT TABLESPACE "FMISMAIN"
TEMPORARY TABLESPACE "TEMP"
ACCOUNT UNLOCK;
GRANT DBA TO "FMISMAIN";
SQL> select name from v$datafile;
NAME
----------------------------------------------------------------------------
+DG_DATA/racdb/datafile/system.268.719166757
+DG_DATA/racdb/datafile/undotbs1.269.719166777
+DG_DATA/racdb/datafile/sysaux.270.719166783
+DG_DATA/racdb/datafile/undotbs2.272.719166797
+DG_DATA/racdb/datafile/users.273.719166803
+DG_DATA/racdb/datafile/rman_tbs.dbf
+DG_DATA/racdb/datafile/fmismain.287.721410885
Connected.
SQL> select count(*) from xtdw3;
COUNT(*)
----------
30
SQL> select dh from xtdw3;
DH
--------
MAIN
0600
0601
1200
1201
0602
0100
0101
0400
0401
0500
DH
--------
0501
0700
0701
1300
1301
1800
1801
1900
1901
5100
5101
DH
--------
5300
5301
0301
0300
1500
1501
1600
1601
30 rows selected.
在两个RAC实例上分别手工执行查看结果:
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
检查rac3备库的日志传送:
[oracle@rac3 oradata]$ ls -lsR
total 24
4 drwxr-xr-x 2 oracle oinstall 4096 Jun 11 16:15 arch
16 drwxrwxrwx 2 oracle dba 16384 Jun 8 03:21 lost+found
4 drwxr-xr-x 5 oracle oinstall 4096 Jun 8 03:25 racdb
./arch:
total 4888
36 -rw-r----- 1 oracle oinstall 36352 Jun 8 07:26 1_76_719166742.dbf
76 -rw-r----- 1 oracle oinstall 73728 Jun 8 07:26 1_77_719166742.dbf
152 -rw-r----- 1 oracle oinstall 151040 Jun 8 07:26 1_78_719166742.dbf
168 -rw-r----- 1 oracle oinstall 165888 Jun 8 07:26 1_79_719166742.dbf
168 -rw-r----- 1 oracle oinstall 166400 Jun 8 07:51 1_80_719166742.dbf
148 -rw-r----- 1 oracle oinstall 144896 Jun 8 07:51 1_81_719166742.dbf
4 -rw-r----- 1 oracle oinstall 1024 Jun 8 07:51 1_82_719166742.dbf
144 -rw-r----- 1 oracle oinstall 140288 Jun 8 07:51 1_83_719166742.dbf
4 -rw-r----- 1 oracle oinstall 1024 Jun 8 07:42 1_84_719166742.dbf
72 -rw-r----- 1 oracle oinstall 66048 Jun 8 07:47 1_85_719166742.dbf
1464 -rw-r----- 1 oracle oinstall 1492992 Jun 8 08:25 1_86_719166742.dbf
16 -rw-r----- 1 oracle oinstall 13824 Jun 11 16:15 1_87_719166742.dbf
4 -rw-r----- 1 oracle oinstall 2560 Jun 11 16:15 1_88_719166742.dbf
24 -rw-r----- 1 oracle oinstall 23040 Jun 8 07:27 2_36_719166742.dbf
176 -rw-r----- 1 oracle oinstall 175104 Jun 8 07:27 2_37_719166742.dbf
148 -rw-r----- 1 oracle oinstall 143872 Jun 8 07:27 2_38_719166742.dbf
768 -rw-r----- 1 oracle oinstall 778752 Jun 8 07:51 2_39_719166742.dbf
152 -rw-r----- 1 oracle oinstall 149504 Jun 8 07:51 2_40_719166742.dbf
4 -rw-r----- 1 oracle oinstall 1024 Jun 8 07:51 2_41_719166742.dbf
140 -rw-r----- 1 oracle oinstall 139264 Jun 8 07:43 2_42_719166742.dbf
4 -rw-r----- 1 oracle oinstall 1024 Jun 8 07:42 2_43_719166742.dbf
60 -rw-r----- 1 oracle oinstall 54272 Jun 8 07:51 2_44_719166742.dbf
948 -rw-r----- 1 oracle oinstall 963584 Jun 11 16:14 2_45_719166742.dbf
4 -rw-r----- 1 oracle oinstall 2048 Jun 11 16:15 2_46_719166742.dbf
4 -rw-r----- 1 oracle oinstall 1536 Jun 11 16:15 2_47_719166742.dbf
./lost+found:
total 0
./racdb:
total 12
4 drwxr-xr-x 2 oracle oinstall 4096 Jun 11 16:14 datafile
4 drwxr-xr-x 2 oracle oinstall 4096 Jun 8 06:55 onlinelog
4 drwxr-xr-x 2 oracle oinstall 4096 Jun 8 08:05 tempfile
./racdb/datafile:
total 1245228
20520 -rw-r----- 1 oracle oinstall 20987904 Jun 11 16:22
15076 -rw-r----- 1 oracle oinstall 15417344 Jun 11 16:29 racdb.ctl
51272 -rw-r----- 1 oracle oinstall 52445184 Jun 11 16:22 rman_tbs.dbf
215272 -rw-r----- 1 oracle oinstall 220217344 Jun 11 16:22
440772 -rw-r----- 1 oracle oinstall 450904064 Jun 11 16:22
292148 -rw-r----- 1 oracle oinstall 298860544 Jun 11 16:22
205020 -rw-r----- 1 oracle oinstall 209731584 Jun 11 16:22
5148 -rw-r----- 1 oracle oinstall 5259264 Jun 11 16:22
./racdb/onlinelog:
total 717640
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 11 16:29 group_10.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 07:26 group_11.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 06:55
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 07:47 group_12.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 07:37 group_13.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 07:37 group_14.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 06:55
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 06:55
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 06:55
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 06:55 group5
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 06:55 group6
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 11 16:29 group_7.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 07:25 group_8.log
51260 -rw-r----- 1 oracle oinstall 52429312 Jun 8 07:39 group_9.log
./racdb/tempfile:
total 84
84 -rw-r----- 1 oracle oinstall 20987904 Jun 8 08:05 temp.271.719166789
首先将数据库启动到read only模式下:
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database open read only;
Database altered.
SQL> !hostname
rac3
SQL>
SQL> conn fmismain/fmismain
Connected.
SQL> show parameter db_unique
NAME TYPE VALUE
------------------------------------ ----------- ---------------------------
db_unique_name string racdb_standby
SQL>
SQL> select count(*) from xtdw3;
COUNT(*)
----------
30
SQL> select dh from xtdw3;
DH
--------
MAIN
0600
0601
1200
1201
0602
0100
0101
0400
0401
0500
DH
--------
0501
0700
0701
1300
1301
1800
1801
1900
1901
5100
5101
DH
--------
5300
5301
0301
0300
1500
1501
1600
1601
30 rows selected.
---在管理恢复模式下到只读模式
SQL>alter database recover managed standby database cancel;
SQL>alter database open read only;
这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)
alter tablespace temp add tempfile
--从只读方式到管理恢复方式
SQL>recover managed standby database disconnect from session;
故障1
由于网络等原因导致归档日志没有全部传输到从库中,这些需要我们手动干预。
常见因素:从库关闭、网络故障、从库空间不足等。
维护的通常步骤;关闭:先关主库后关从库,启动:先启动从库然后启动主库。
关于日志传输的控制可以通过MANDATORY、REOPEN、MAX_FAILURE来控制
MANDATORY REOPEN=5 MAX_FAILURE=3 每5秒重试一次,最大允许错误次数为3次,如果重
*.log_archive_dest_2='service=AUX VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
1)、查找不在standby的日志。
SQL>
SELECT MAX(R.SEQUENCE#) LAST_SEQ_RECD, MAX(L.SEQUENCE#) LAST_SEQ_SENT FROM
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
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的日志
4)、
SQL> STARTUP MOUNT
SQL> ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
至此恢复成功。
故障2:
归档日志之间经常产生gap
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)、然后就可以按切换步骤进行切换了。
14、 参数说明
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
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