rac和单实例的dg创建

1、环境规划 (rac环境:http://download.csdn.net/detail/dcwnb1/8576809)
---RAC环境介绍(primary database)
                racdb1            racdb2            
public ip   192.168.75.11    192.168.75.12    
virtual ip   192.168.75.21    192.168.75.22        
Private ip  192.168.80.11    192.168.80.12        
instance         racdb1          racdb2        
db_name                  racdb
storage mode                ASM




---单机环境介绍(standby database)
数据文件可放至本地, 也可以放至ASM上,本实验中先放至本地实验
ip                       192.168.75.130
instance              standby
storage mode     /u01/app/oracle/oradata/racdb/


----RAC的hosts文件
#public
192.168.75.11   rac1.localdomain          rac1
192.168.75.12   rac2.localdomain          rac2
#private
192.168.80.11   rac1-priv.localdomain     rac1-priv
192.168.80.12   rac2-priv.localdomain     rac2-priv
#virtual
192.168.75.21   rac1-vip.localdomain      rac1-vip
192.168.75.22   rac2-vip.localdomain      rac2-vip
#standby
192.168.75.130  standby.localdoumain      standby


--检查环境
1)、启动RAC归档模式
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/oradata/racdb1/archivelog
Oldest online log sequence     50
Next log sequence to archive   51
Current log sequence           51


2)、RAC启动FORCE_LOGGING模式
SQL> alter database force logging;


Database altered.


SQL> select force_logging from v$database;


FOR
---
YES


配置standby的hosts文件 
vi /etc/hosts 
加入: 
#public
192.168.75.11   rac1.localdomain          rac1
192.168.75.12   rac2.localdomain          rac2
#private
192.168.80.11   rac1-priv.localdomain     rac1-priv
192.168.80.12   rac2-priv.localdomain     rac2-priv
#virtual
192.168.75.21   rac1-vip.localdomain      rac1-vip
192.168.75.22   rac2-vip.localdomain      rac2-vip
#standby
192.168.75.130  standby.localdoumain      standby


2、配置两个数据库的tnsnames.ora
rac的tnsnames.ora(两台节点相同),加入:
standby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.75.130)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = racdb)
    )
)


standby主机上的listener.ora 
[oracle@standby admin]$ cat listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
     (SID_DESC =
      (GLOBAL_DBNAME = racdb)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME = standby)
    )
     (SID_DESC =
      (GLOBAL_DBNAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME = PLSExtProc)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.75.130)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )


然后启动备库的监听:
lsnrctl start
standby主机上的tnsnames.ora如下:
standby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.75.130)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = racdb)
    )
)


RACDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = racdb.localdomain)
      (INSTANCE_NAME = racdb1)
    )
  )


RACDB2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = racdb.localdomain)
      (INSTANCE_NAME = racdb2)
    )
  )


3、准备主备库目录
主库:
oracle身份:
racdb1上:mkdir /u01/oradata/racdb1/standbylog
racdb2上:mkdir /u01/oradata/racdb2/standbylog


备库:
oracle身份:
mkdir /u01/backup
mkdir -p /u01/app/oracle/admin/racdb/bdump
mkdir -p /u01/app/oracle/admin/racdb/adump
mkdir -p /u01/app/oracle/admin/racdb/cdump
mkdir -p /u01/app/oracle/admin/racdb/udump
mkdir -p /u01/app/oracle/oradata/racdb/archivelog
mkdir -p /u01/app/oracle/oradata/racdb/standbylog


4、准备参数文件
主库参数变化
RAC环境下的参数变化增加如下:
RAC主库:(注意使用ASM的时候,不要改变db_unique_name参数,否则之后创建的asm文件就会放入至新的db_unique_name目录下面,导致DB_FILE_NAME_CONVERT失效。)
#add below parameter for standy database
日志传输部分:
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(racdb,standby)'
*.LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' 
devdb1.log_archive_dest_1='location=/u01/oradata/racdb1/archivelog'
devdb2.log_archive_dest_1='location=/u01/oradata/racdb2/archivelog'
以下为切换后的参数: 
*.FAL_SERVER='standby'
racdb1.fal_client=racdb1
racdb2.fal_client=racdb2
*.STANDBY_FILE_MANAGEMENT=AUTO 
*.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/racdb','+DATA/racdb/datafile'
*.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/racdb','+DATA/racdb/onlinelog'
因此执行下面的sql: 
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(racdb,standby)' sid='*'; 
alter system set LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' sid='*'; 
alter system set FAL_SERVER='standby' sid='*';
alter system set fal_client=racdb1 sid='racdb1';
alter system set fal_client=racdb2 sid='racdb2';
alter system set STANDBY_FILE_MANAGEMENT=AUTO sid='*'; 
alter system set DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/racdb','+DATA/racdb/datafile','/u01/app/oracle/oradata/racdb','+DATA/racdb/tempfile' scope=spfile sid='*'; 
alter system set LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/racdb','+DATA/racdb/onlinelog' scope=spfile  sid='*'; 
alter system set log_archive_dest_3='location=/u01/oradata/racdb1/standbylog VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=racdb' sid='racdb1'; 
alter system set log_archive_dest_3='LOCATION=/u01/oradata/racdb2/standbylog  VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=racdb' sid='racdb2'; 


SQL> select name from v$datafile;


NAME
--------------------------------------------------------------------------------
+DATA/racdb/datafile/system.262.862924783
+DATA/racdb/datafile/undotbs1.263.862924831
+DATA/racdb/datafile/sysaux.264.862924853
+DATA/racdb/datafile/undotbs2.266.862924893
+DATA/racdb/datafile/users.267.862924915


备库参数设置:
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(standby,racdb)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/racdb/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby' 
*.LOG_ARCHIVE_DEST_2='SERVICE=racdb1 LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdb' 
*.log_archive_dest_3='LOCATION=/u01/app/oracle/oradata/racdb/standbylog  VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=standby' 
*.FAL_SERVER='racdb1','racdb2'
fal_client='standby' 
*.DB_FILE_NAME_CONVERT='+DATA/racdb/datafile','/u01/app/oracle/oradata/racdb','+DATA/racdb/tempfile','/u01/app/oracle/oradata/racdb'
*.LOG_FILE_NAME_CONVERT='+DATA/racdb/onlinelog','/u01/app/oracle/oradata/racdb'


重启主库以及nomount备库:
主库:
[oracle@rac1 admin]$ srvctl stop database -d racdb
[oracle@rac1 admin]$ srcvtl start database -d racdb


备库:
[oracle@standby backup]$ rman target /


Recovery Manager: Release 10.2.0.4.0 - Production on Wed Mar 25 12:04:00 2015


Copyright (c) 1982, 2007, Oracle.  All rights reserved.


connected to target database (not started)


RMAN> startup nomount


Oracle instance started


Total System Global Area     285212672 bytes


Fixed Size                     2083368 bytes
Variable Size                 88081880 bytes
Database Buffers             188743680 bytes
Redo Buffers                   6303744 bytes




4、在rac上进行备份
[oracle@rac1 backup]$ rman target /


Recovery Manager: Release 10.2.0.4.0 - Production on Thu Mar 26 01:16:15 2015


Copyright (c) 1982, 2007, Oracle.  All rights reserved.


connected to target database: RACDB (DBID=860541502)


run
{
allocate channel c1 device type disk format "/u01/backup/%U";
backup database  format '/u01/backup/racdbfull%u_%s_%p';
}


using target database control file instead of recovery catalog
allocated channel: c1
channel c1: sid=151 instance=racdb1 devtype=DISK


Starting backup at 26-MAR-15
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
input datafile fno=00001 name=+DATA/racdb/datafile/system.262.862924783
input datafile fno=00005 name=+DATA/racdb/datafile/users.267.862924915
input datafile fno=00002 name=+DATA/racdb/datafile/undotbs1.263.862924831
input datafile fno=00004 name=+DATA/racdb/datafile/undotbs2.266.862924893
input datafile fno=00003 name=+DATA/racdb/datafile/sysaux.264.862924853
channel c1: starting piece 1 at 26-MAR-15
channel c1: finished piece 1 at 26-MAR-15
piece handle=/u01/backup/racdbfull07q2p2he_7_1 tag=TAG20150326T042309 comment=NONE
channel c1: backup set complete, elapsed time: 00:04:21
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel c1: starting piece 1 at 26-MAR-15
channel c1: finished piece 1 at 26-MAR-15
piece handle=/u01/backup/racdbfull08q2p2pk_8_1 tag=TAG20150326T042309 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:14
Finished backup at 26-MAR-15
released channel: c1




将RAC备份的文件拷到备机相同目录下,这里也可以考虑nfs挂载。
[oracle@rac1 backup]$ scp * 192.168.75.130:/u01/backup/


一般都是配置nfs挂载的,如果网络速度给力的话
注意配置nfs的时候系统参数设置要符合rman的要求,大家可以下去研究一下,每个系统的设置






5、创建standby控制文件
在rac两个实例上进行几次归档。
alter system archive log current;
创建standby控制文件
alter database create standby controlfile as '/tmp/standby.ctl';


拷贝到备库
有些步骤在dg搭建文档上都是有的 是和单实例一样的
[oracle@rac1 backup]$ scp /tmp/standby.ctl 192.168.75.130:/tmp/standby.ctl
 mv /tmp/standby.ctl  control01.ctl
 mv /tmp/standby.ctl  control02.ctl
 mv /tmp/standby.ctl  control03.ctl


SQL> startup nomount pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initstandby.ora';
ORACLE instance started.


Total System Global Area  285212672 bytes
Fixed Size                  2083368 bytes
Variable Size              88081880 bytes
Database Buffers          188743680 bytes
Redo Buffers                6303744 bytes
SQL> create spfile from pfile;


File created.


SQL> alter database mount standby database;


Database altered.


然后备库把主库的pwd文件拷贝过来。
当然你在备库用orapwd创建口令文件也是可以的,但是必须保证参数一样,包括entries,否则就要浪费时间了。
主库racdb上执行:
[oracle@rac1 backup]$ scp /u01/oracle/db_1/dbs/orapwracdb1 192.168.75.130:/u01/app/oracle/product/10.2.0/db_1/dbs
[oracle@standby dbs]$ cp orapwracdb1 orapwstandby


6、利用rman创建standby数据库
说明:不论在primary,standby 执行,target 都是priamry 库, auxiliary都是standby 库,只是连接方式不一样而已,本质一样的。
在主库上执行(此时主库处于open,从库处于nomount状态)
rman target / auxiliary sys/oracle@standby 
RMAN> duplicate target database for standby;


Starting Duplicate Db at 26-MAR-15
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=155 devtype=DISK
allocated channel: ORA_AUX_DISK_2
channel ORA_AUX_DISK_2: sid=154 devtype=DISK


contents of Memory Script:
{
   restore clone standby controlfile;
   sql clone 'alter database mount standby database';
}
executing Memory Script


Starting restore at 26-MAR-15
using channel ORA_AUX_DISK_1
using channel ORA_AUX_DISK_2


channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: copied control file copy
input filename=/tmp/standby.ctl
output filename=/u01/app/oracle/oradata/racdb/control01.ctl
output filename=/u01/app/oracle/oradata/racdb/control02.ctl
output filename=/u01/app/oracle/oradata/racdb/control03.ctl
Finished restore at 26-MAR-15


sql statement: alter database mount standby database
released channel: ORA_AUX_DISK_1
released channel: ORA_AUX_DISK_2


contents of Memory Script:
{
   set newname for tempfile  1 to
 "/u01/app/oracle/oradata/racdb/temp.265.862924867";
   switch clone tempfile all;
   set newname for datafile  1 to
 "/u01/app/oracle/oradata/racdb/system.262.862924783";
   set newname for datafile  2 to
 "/u01/app/oracle/oradata/racdb/undotbs1.263.862924831";
   set newname for datafile  3 to
 "/u01/app/oracle/oradata/racdb/sysaux.264.862924853";
   set newname for datafile  4 to
 "/u01/app/oracle/oradata/racdb/undotbs2.266.862924893";
   set newname for datafile  5 to
 "/u01/app/oracle/oradata/racdb/users.267.862924915";
   restore
   check readonly
   clone database
   ;
}
executing Memory Script


executing command: SET NEWNAME


renamed temporary file 1 to /u01/app/oracle/oradata/racdb/temp.265.862924867 in control file


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


Starting restore at 26-MAR-15
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=154 devtype=DISK
allocated channel: ORA_AUX_DISK_2
channel ORA_AUX_DISK_2: sid=158 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 /u01/app/oracle/oradata/racdb/system.262.862924783
restoring datafile 00002 to /u01/app/oracle/oradata/racdb/undotbs1.263.862924831
restoring datafile 00003 to /u01/app/oracle/oradata/racdb/sysaux.264.862924853
restoring datafile 00004 to /u01/app/oracle/oradata/racdb/undotbs2.266.862924893
restoring datafile 00005 to /u01/app/oracle/oradata/racdb/users.267.862924915
channel ORA_AUX_DISK_1: reading from backup piece /u01/backup/racdbfull07q2p2he_7_1
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/u01/backup/racdbfull07q2p2he_7_1 tag=TAG20150326T042309
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:03:12
Finished restore at 26-MAR-15


contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script


datafile 1 switched to datafile copy
input datafile copy recid=6 stamp=875300637 filename=/u01/app/oracle/oradata/racdb/system.262.862924783
datafile 2 switched to datafile copy
input datafile copy recid=7 stamp=875300637 filename=/u01/app/oracle/oradata/racdb/undotbs1.263.862924831
datafile 3 switched to datafile copy
input datafile copy recid=8 stamp=875300637 filename=/u01/app/oracle/oradata/racdb/sysaux.264.862924853
datafile 4 switched to datafile copy
input datafile copy recid=9 stamp=875300637 filename=/u01/app/oracle/oradata/racdb/undotbs2.266.862924893
datafile 5 switched to datafile copy
input datafile copy recid=10 stamp=875300637 filename=/u01/app/oracle/oradata/racdb/users.267.862924915
Finished Duplicate Db at 26-MAR-15




duplicate target database for standby nofilenamecheck;如果文件名没有变化,则要用这个。


7、检查standby数据库
SQL> select status from v$instance;


STATUS
------------
MOUNTED


SQL> select open_mode from v$database;


OPEN_MODE
----------
MOUNTED


SQL> set pagesize 150
SQL> set linesize 150
SQL> col member for a60
SQL> select GROUP#,STATUS,MEMBER from v$logfile;


    GROUP# STATUS  MEMBER
---------- ------- ------------------------------------------------------------
         1         /u01/app/oracle/oradata/racdb/group_1.258.862924751
         1         /u01/app/oracle/oradata/racdb/group_1.259.862924759
         2         /u01/app/oracle/oradata/racdb/group_2.260.862924765
         2         /u01/app/oracle/oradata/racdb/group_2.261.862924773
         3         /u01/app/oracle/oradata/racdb/group_3.268.862928611
         3         /u01/app/oracle/oradata/racdb/group_3.269.862928621
         4         /u01/app/oracle/oradata/racdb/group_4.270.862928629
         4         /u01/app/oracle/oradata/racdb/group_4.271.862928639


8 rows selected.


SQL> select name from v$datafile;


NAME
------------------------------------------------------------
/u01/app/oracle/oradata/racdb/system.262.862924783
/u01/app/oracle/oradata/racdb/undotbs1.263.862924831
/u01/app/oracle/oradata/racdb/sysaux.264.862924853
/u01/app/oracle/oradata/racdb/undotbs2.266.862924893
/u01/app/oracle/oradata/racdb/users.267.862924915


SQL> select name from v$tempfile;


NAME
------------------------------------------------------------
/u01/app/oracle/oradata/racdb/temp.265.862924867


SQL> show parameter control


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/racdb/
                                                 control01.ctl, /u01/app/oracle
                                                 /oradata/racdb/control02.ctl,
                                                 /u01/app/oracle/oradata/racdb/
                                                 control03.ctl


8、创建standby redo log日志
创建原则和单实例一样,大小相等,但日志组数量要比primary数据库多一组
如之前为6组12个,则现在要创建7组14个,而且要分实例
如果是2个实例加起来是8组,2组一个,那么备库就是(4+1)*2=10组


alter database add standby logfile thread 1 group 5 '/u01/app/oracle/oradata/racdb/group_5.log' size 50M;
alter database add standby logfile thread 2 group 6 '/u01/app/oracle/oradata/racdb/group_6.log' size 50M; 
alter database add standby logfile thread 1 group 7 '/u01/app/oracle/oradata/racdb/group_7.log' size 50M; 
alter database add standby logfile thread 2 group 8 '/u01/app/oracle/oradata/racdb/group_8.log' size 50M;
alter database add standby logfile thread 1 group 9 '/u01/app/oracle/oradata/racdb/group_9.log' size 50M; 
alter database add standby logfile thread 2 group 10 '/u01/app/oracle/oradata/racdb/group_10.log' size 50M;
alter database add standby logfile thread 1 group 11 '/u01/app/oracle/oradata/racdb/group_11.log' size 50M; 
alter database add standby logfile thread 2 group 12 '/u01/app/oracle/oradata/racdb/group_12.log' size 50M; 
alter database add standby logfile thread 1 group 13 '/u01/app/oracle/oradata/racdb/group_13.log' size 50M;  
alter database add standby logfile thread 2 group 14 '/u01/app/oracle/oradata/racdb/group_14.log' size 50M; 




9、开始同步
启动MRP:
SQL> alter database recover managed standby database disconnect from session;
停止MRP:
alter database recover managed stanby database cancel;




10、在rac上查看各实力的传送情况
SQL> col dest_name format a20
SQL> col error format a20
SQL> select dest_name,status,error from v$archive_dest;


DEST_NAME            STATUS    ERROR
-------------------- --------- --------------------
LOG_ARCHIVE_DEST_1   VALID
LOG_ARCHIVE_DEST_2   DISABLED  ORA-16047: DGID
                               mismatch between
                               destination setting
                               and standby


LOG_ARCHIVE_DEST_3   VALID
LOG_ARCHIVE_DEST_4   INACTIVE
LOG_ARCHIVE_DEST_5   INACTIVE
LOG_ARCHIVE_DEST_6   INACTIVE
LOG_ARCHIVE_DEST_7   INACTIVE


DEST_NAME            STATUS    ERROR
-------------------- --------- --------------------
LOG_ARCHIVE_DEST_8   INACTIVE
LOG_ARCHIVE_DEST_9   INACTIVE
LOG_ARCHIVE_DEST_10  INACTIVE


10 rows selected.


错误:
DISABLED  ORA-16047: DGID mismatch between  destination setting and standby


查看日志:
[root@rac2 ~]# tail -f /u01/admin/racdb/bdump/alert_racdb2.log
replication_dependency_tracking turned off (no async multimaster replication found)


备库:发现db_unique_name没有更改
SQL> show parameter log_archive_config


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_config                   string      DG_CONFIG=(standby,racdb)
SQL> show parameter name


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string      +DATA/racdb/datafile, /u01/app
                                                 /oracle/oradata/racdb, +DATA/r
                                                 acdb/tempfile, /u01/app/oracle
                                                 /oradata/racdb
db_name                              string      racdb
db_unique_name                       string      racdb
global_names                         boolean     FALSE
instance_name                        string      standby
lock_name_space                      string
log_file_name_convert                string      +DATA/racdb/onlinelog, /u01/ap
                                                 p/oracle/oradata/racdb
service_names                        string      racdb.localdomain


SQL> alter system set db_unique_name='standby' scope=spfile;


System altered.


重启备库:
SQL> alter database recover managed standby database cancel;


Database altered.


SQL> shutdown immediate
ORA-01109: database not open




Database dismounted.
ORACLE instance shut down.
SQL> create pfile from spfile;


File created.


SQL> startup nomount
ORACLE instance started.


Total System Global Area  285212672 bytes
Fixed Size                  2083368 bytes
Variable Size              88081880 bytes
Database Buffers          188743680 bytes
Redo Buffers                6303744 bytes
SQL> alter database mount standby database;


Database altered.


SQL> alter database recover managed standby database disconnect from session;


Database altered.


SQL> show parameter name


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string      +DATA/racdb/datafile, /u01/app
                                                 /oracle/oradata/racdb, +DATA/r
                                                 acdb/tempfile, /u01/app/oracle
                                                 /oradata/racdb
db_name                              string      racdb
db_unique_name                       string      standby
global_names                         boolean     FALSE
instance_name                        string      standby
lock_name_space                      string
log_file_name_convert                string      +DATA/racdb/onlinelog, /u01/ap
                                                 p/oracle/oradata/racdb


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      standby.localdomain


重启主库:
[oracle@rac1 ~]$ srvctl stop database -d racdb
[oracle@rac1 ~]$ srvctl start database -d racdb
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/oradata/racdb1/standbylog
Oldest online log sequence     58
Next log sequence to archive   59
Current log sequence           59
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   VALID
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> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/oradata/racdb/standbylog
Oldest online log sequence     59
Next log sequence to archive   0
Current log sequence           59




---测试看日志是否传送成功。


主库:
SQL> alter system switch logfile;


System altered.


SQL> select max(sequence#) from v$archived_log;


MAX(SEQUENCE#)
--------------
            59


备库:
SQL> select max(sequence#) from v$archived_log;


MAX(SEQUENCE#)
--------------
            59
或者更详细的:select FIRST_TIME,NEXT_TIME, APPLIED,SEQUENCE# from v$archived_log order by SEQUENCE#;
SQL> 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';


LAST_SEQ_RECD LAST_SEQ_SENT
------------- -------------
           59            59
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 58 AND 59;


NAME
--------------------------------------------------------------------------------
/u01/oradata/racdb1/archivelog/1_58_862924734.dbf
/u01/oradata/racdb1/archivelog/1_59_862924734.dbf


测试在RAC主库上创建一个表空间:
CREATE TABLESPACE TEST LOGGING  DATAFILE '+DATA' SIZE 20M AUTOEXTEND ON NEXT  10M EXTENT MANAGEMENT LOCAL SEGMENT SPACE   MANAGEMENT  AUTO; 
SQL> select name from v$datafile;


NAME
--------------------------------------------------------------------------------
+DATA/racdb/datafile/system.262.862924783
+DATA/racdb/datafile/undotbs1.263.862924831
+DATA/racdb/datafile/sysaux.264.862924853
+DATA/racdb/datafile/undotbs2.266.862924893
+DATA/racdb/datafile/users.267.862924915
+DATA/racdb/datafile/test.273.875367369
 


创建用户:
SQL> create user test profile default identified by test default tablespace test temporary tablespace temp account unlock;


User created.


SQL> grant dba to test;


Grant succeeded.




SQL> create table test as select * from dba_objects;


SQL> select count(*) from test;


  COUNT(*)
----------
     41801


在两个RAC实例上分别手工执行归档:
SQL> alter system switch logfile;


System altered.


SQL> /


System altered.


SQL> /


System altered.


检查备库的日志传送:
看看日志:
tail -f /u01/app/oracle/admin/racdb/bdump/alert_standby.log
Fri Mar 27 15:11:40 2015
Recovery created file /u01/app/oracle/oradata/racdb/test.273.875367369
Successfully added datafile 6 to media recovery
Datafile #6: '/u01/app/oracle/oradata/racdb/test.273.875367369'
Fri Mar 27 15:12:43 2015
Media Recovery Log /u01/app/oracle/oradata/racdb/standbylog/1_61_862924734.dbf
Media Recovery Log /u01/app/oracle/oradata/racdb/standbylog/2_17_862924734.dbf
Media Recovery Log /u01/app/oracle/oradata/racdb/standbylog/1_62_862924734.dbf
Media Recovery Log /u01/app/oracle/oradata/racdb/standbylog/2_18_862924734.dbf
Media Recovery Log /u01/app/oracle/oradata/racdb/standbylog/1_63_862924734.dbf
Media Recovery Log /u01/app/oracle/oradata/racdb/standbylog/1_64_862924734.dbf
Media Recovery Log /u01/app/oracle/oradata/racdb/standbylog/1_65_862924734.dbf
Media Recovery Log /u01/app/oracle/oradata/racdb/standbylog/2_19_862924734.dbf
Media Recovery Waiting for thread 2 sequence 20 (in transit)


在备库中查看刚才创建的表空间与用户是否生效。
注意要看前面的视图保证apply完了,否则的话。
首先将数据库启动到read only模式下:
SQL> alter database recover managed standby database cancel;


Database altered.
SQL> alter database open read only;


Database altered.


SQL> !hostname
standby.localdoumain


SQL> conn test/test
Connected.
SQL> select count(*) from test;


  COUNT(*)
----------
     41801
看到数据到备库了。


11、增加temp文件
---在管理恢复模式下到只读模式
alter database recover managed standby database cancel;
alter database open read only;


这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)文件名可以和asm的一致
alter tablespace temp add tempfile '/u01/app/oracle/oradata/racdb/ temp.265.862924867' size 50M;


--从只读方式到管理恢复方式
recover managed standby database disconnect from session;
create spfile from pfile='/tmp/racdb.ora';
shutdown immediate;
startup nomount;
alter database mount standby database;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;


在rac上:
conn test/test
insert into test select * from test;
commit;
SQL> select count(*) from test;


  COUNT(*)
----------
     83602
主备库切换日志3次:
SQL> alter system switch logfile;


System altered.


SQL> /


System altered.


SQL> /


System altered.


然后看备库数据:
SQL> conn / as sysdba
Connected.
SQL> alter database recover managed standby database disconnect from session;


Database altered.


SQL> alter database recover managed standby database cancel;


Database altered.


SQL> alter database open read only;


Database altered.


SQL> conn test/test
Connected.
SQL> select count(*) from test;


  COUNT(*)
----------
     83602


已经完成数据同步。


12、少日志的时候,维护故障解决
故障1
由于网络等原因导致归档日志没有全部传输到从库中,这些需要我们手动干预。
常见因素:从库关闭、网络故障、从库空间不足等。
维护的通常步骤;关闭:先关主库后关从库,启动:先启动从库然后启动主库。
于日志传输的控制可以通过MANDATORY、REOPEN、MAX_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 V$ARCHIVED_LOG R, V$LOG L WHERE R.DEST_ID=2 AND   L.ARCHIVED='YES';


LAST_SEQ_RECD LAST_SEQ_SENT
------------- -------------
           69            69
2)、查找primary的所在路径
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 5 AND 10;


no rows selected


SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 60 AND 69;


NAME
--------------------------------------------------------------------------------
/u01/oradata/racdb1/archivelog/1_60_862924734.dbf
/u01/oradata/racdb1/archivelog/1_61_862924734.dbf
/u01/oradata/racdb1/archivelog/1_62_862924734.dbf
/u01/oradata/racdb1/archivelog/1_63_862924734.dbf
/u01/oradata/racdb1/archivelog/1_64_862924734.dbf
/u01/oradata/racdb1/archivelog/1_65_862924734.dbf
/u01/oradata/racdb1/archivelog/1_66_862924734.dbf
/u01/oradata/racdb1/archivelog/1_67_862924734.dbf
/u01/oradata/racdb1/archivelog/1_68_862924734.dbf
/u01/oradata/racdb1/archivelog/1_69_862924734.dbf


10 rows selected.
3)、将日志copy到standby的STANDBY_ARCHIVE_DEST下,将STANDBY_ARCHIVE_DEST的日志copy到 LOG_ARCHIVE_DEST下
STARTUP MOUNT
ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
至此恢复成功。


故障2:
归档日志之间经常产生gap 
1)、确认归档日志之间有无遗漏
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 90 92
2)、将遗漏的归档日志copy到备库的standby_archive_dest下
然后对其分别注册
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
3)、恢复归档日志
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
4)、然后就可以按切换步骤进行切换了。






13、参数说明
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当主库添加或减少数据文件时会自动同步从库而不需要手动干预。 


14、经常遇到的错误
下面我们来介绍几个常见的错误
错误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密码是否正确,大部分是这个原因。
错误3:
Oracle用户有写standby_archive_dest的权限
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前少了一个空格导致的


15、日常管理
(1) 启动到管理模式
shutdown immediate;
startup nomount;
alter database mount standby database;
alter database recover managed standby database disconnect from session;
(2)启动到只读方式
shutdown immediate;
startup nomount;
alter database mount standby database;
alter database open read only;
(3)在管理恢复模式下到只读模式
recover managed standby database cancel;
alter database open read only;
这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)

alter tablespace temp add tempfile '/oracle/oradata/ddd/temp01.dbf' size 100M;
(4)从只读方式到管理恢复方式
recover managed standby database disconnect from session;
(5)打开备库
#sqlplus /nolog
 conn [email=sys/sys@standby]sys/sys@standby as sysdba;
 startup mount;
 alter database recover managed standby database disconnect from session;
如果要取消恢复:alter database recover managed standby database cancel;
(6)打开主库
# sqlplus /nolog
conn [email=sys/sys@primary]sys/sys@primary as sysdba;
startup;
(7)测试是否OK
主库:
alter system switch logfile;
select max(SEQUENCE#) from v$archived_log;
备库:
select max(SEQUENCE#) from v$archived_log;
#或者更详细的:select FIRST_TIME,NEXT_TIME, APPLIED,SEQUENCE# from v$archived_log order by SEQUENCE#;


16、角色转换
注意:Swithover时只能先从Primary切到Standby,再从Standby切到Primary.启动备库,再启动主库,先停主库再停备库。
需要先到Primary端关闭其它实例仅保留一台实例
[oracle@rac2 ~]$ sqlplus / as sysdba
SQL> shutdown immediate
主库:
alter database commit to switchover to physical standby with session shutdown;
with session shutdown 子句专门用来处理,执行转换操作时仍有用户在连接的情况,如果附加了该子句,Primary数据库执行switchover,就会自动断开仍在连接该实例的无关会话。
shutdown immediate
startup mount
SQL> alter database recover managed standby database disconnect from session;


Database altered.


SQL> set linesize 150
SQL> select OPEN_MODE, PROTECTION_MODE, ACTIVATION#,DATABASE_ROLE, SWITCHOVER# ,SWITCHOVER_STATUS from v$database;


OPEN_MODE  PROTECTION_MODE      ACTIVATION# DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
---------- -------------------- ----------- ---------------- ----------- --------------------
MOUNTED    MAXIMUM PERFORMANCE            0 PHYSICAL STANDBY           0 SESSIONS ACTIVE




备库:
转到原Standby端操作:
SQL> select OPEN_MODE, PROTECTION_MODE, ACTIVATION#,DATABASE_ROLE, SWITCHOVER# ,SWITCHOVER_STATUS from v$database;


OPEN_MODE  PROTECTION_MODE      ACTIVATION# DATABASE_ROLE    SWITCHOVER# SWITCHOVER_STATUS
---------- -------------------- ----------- ---------------- ----------- --------------------
MOUNTED    MAXIMUM PERFORMANCE            0 PHYSICAL STANDBY           0 TO PRIMARY


alter database commit to switchover to physical primary;                      (alter database commit to switchover to physical primary with session shutdown;)
shutdown immediate
startup
角色转换工作完成。
SQL> select database_role,open_mode from v$database;


DATABASE_ROLE    OPEN_MODE
---------------- ----------
PRIMARY          READ WRITE


新的Primary诞生了,切换下日志,看看Standby端的接收是否正常:
primary:
SQL> select thread#,max(sequence#) from v$archived_log group by thread#;


   THREAD# MAX(SEQUENCE#)
---------- --------------
         1             74
         2             25


standby:
SQL> select thread#,max(sequence#) from v$archived_log group by thread#;


   THREAD# MAX(SEQUENCE#)
---------- --------------
         1             72
         2             25


primary:
SQL> alter system switch logfile;


System altered.


SQL> select thread#,max(sequence#) from v$archived_log group by thread#;


   THREAD# MAX(SEQUENCE#)
---------- --------------
         1             78
         2             25




由于新的Primary只有一个实例,因此其实我们只需要关注thread#1生成的日志即可,转到新的Standby看看:
standby:
SQL> select thread#,max(sequence#) from v$archived_log group by thread#;


   THREAD# MAX(SEQUENCE#)
---------- --------------
         1             78
         2             25




剩下的是补救措施(针对原primary 数据库)
由于此时primary 数据库已经不再是data guard 配置的一部分,我们需要做的就是尝试看看能否恢复原primary 数据库,将其改造为新的standby服务器



















































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值