环境描述:

Oracle Version:11.2.0.3.0

Primary端:

双节点的RAC,scan使用DNS解析,跑两个实例(JSTDB&PAYDB)

Standby端:

单机的Dataguard

wKioL1cF2pChZwXgAADJ5Y2Ew8g599.png

1.设置网络环境;

vi /etc/hosts

192.168.253.101    rac1.test.com    rac1

192.168.253.102    rac2.test.com    rac2

192.168.253.103    rac1-vip.test.com  rac1-vip

192.168.253.104    rac2-vip.test.com  rac2-vip

10.10.10.11      rac1-priv.test.com  rac1-priv

10.10.10.12      rac2-priv.test.com  rac2-priv

192.168.253.200    standby

vi /etc/resolv.conf

nameserver 192.168.253.100


nslookup scan.test.com

Server:192.168.253.100

Address:192.168.253.100#53

Name:scan.test.com

Address: 192.168.253.107

Name:scan.test.com

Address: 192.168.253.106

Name:scan.test.com

Address: 192.168.253.105


2.修改force logging;

select force_logging from v$database;

alter database force logging;  


3.查看并添加standby logfile;

set line 180 pages 1000

col member for a50

select * from v$logfile order by GROUP#;

alter system set standby_file_management=manual scope=both sid='*';

alter database add standby logfile thread 1 group 5 '+DATA/jstdb/onlinelog/standby_redo1-1.log' size 50M;

alter database add standby logfile thread 1 group 6 '+DATA/jstdb/onlinelog/standby_redo1-2.log' size 50M;

alter database add standby logfile thread 1 group 7 '+DATA/jstdb/onlinelog/standby_redo1-3.log' size 50M;

alter database add standby logfile thread 1 group 8 '+DATA/jstdb/onlinelog/standby_redo1-4.log' size 50M;

alter database add standby logfile thread 2 group 9 '+DATA/jstdb/onlinelog/standby_redo2-1.log' size 50M;

alter database add standby logfile thread 2 group 10 '+DATA/jstdb/onlinelog/standby_redo2-2.log' size 50M;

alter database add standby logfile thread 2 group 11 '+DATA/jstdb/onlinelog/standby_redo2-3.log' size 50M;

alter database add standby logfile thread 2 group 12 '+DATA/jstdb/onlinelog/standby_redo2-4.log' size 50M;

alter system set standby_file_management=auto scope=both sid='*';  


4.收集主库的相关信息;

set line 180 pages 1000

col value for a90

col name for a50

select name,value from v$parameter

 where name in ('db_name',

 'db_unique_name',

 'log_archive_config',

 'log_archive_dest_1',

 'log_archive_dest_2',

 'log_archive_dest_state_1',

 'log_archive_dest_state_2',

 'remote_login_passwordfile',

 'remote_listener',

 'log_archive_format',

 'log_archive_max_processes',

 'fal_server','fal_client',

 'db_file_name_convert',

 'log_file_name_convert',

 'standby_file_management');  


5.创建本地硬盘的归档日志目录以及rman的备份目录; 

mkdir -p /u01/arch/JSTDB

chown -R oracle.oinstall /u01/arch/

mkdir -p /u01/rman/JSTDB

chown -R oracle.oinstall /u01/rman/


6.修改主库的DG配置;

ALTER SYSTEM SET DB_UNIQUE_NAME=JSTDB scope=both sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(JSTDB,JSTDG1)' scope=both sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=+FRA/JSTDB/ARCHIVELOG/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=JSTDB' scope=both sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=JSTDG1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JSTDG1' scope=both sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=both sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=both sid='*';

ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=SHARED scope=spfile sid='*';

ALTER SYSTEM SET REMOTE_LISTENER='scan.test.com:1521' scope=spfile sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=8 SCOPE=both sid='*';

ALTER SYSTEM SET FAL_CLIENT=JSTDB SCOPE=both sid='*';

ALTER SYSTEM SET FAL_SERVER=JSTDG1 SCOPE=both sid='*';

ALTER SYSTEM SET db_file_name_convert='/u01/app/oracle/oradata/JSTDG1/','+DATA/JSTDB/' SCOPE=spfile sid='*';

ALTER SYSTEM SET log_file_name_convert='/u01/app/oracle/oradata/JSTDG1/onlinelog/','+DATA/JSTDB/onlinelog/','/u01/app/oracle/oradata/JSTDG1/onlinelog/','+FRA/JSTDB/onlinelog/','/u01/arch/JSTDG1/','+FRA/JSTDB/ARCHIVELOG/' SCOPE=spfile sid='*';

ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=both sid='*';  


修改archivelog的格式

alter system set log_archive_format='arch_%r_%t_%s.arc' scope=spfile sid='*';

shutdown immediate

startup  


7.创建standby数据库的pfile文件;

create pfile='/u01/rman/initJSTDB.ora' from spfile;  


8.修改tns;

cd $ORACLE_HOME/network/admin

vi tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.


JSTDB =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL TCP)(HOST = scan.test.com)(PORT 1521))

(LOAD_BALANCE yes)

)

    (CONNECT_DATA =

      (SERVER DEDICATED)

      (SERVICE_NAME = JSTDB)

    )

  )


JSTDB1 =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1.test.com)(PORT 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.test.com)(PORT = 1521))

   )

    (CONNECT_DATA =

      (SERVICE_NAME = JSTDB)

      (INSTANCE_NAME JSTDB1)

    )

  )


JSTDB2 =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2.test.com)(PORT = 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.test.com)(PORT = 1521))

   )

    (CONNECT_DATA =

      (SERVICE_NAME = JSTDB)

      (INSTANCE_NAME JSTDB2)

    )

  )


JSTDG1 =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))

)

    (CONNECT_DATA =

      (SERVER DEDICATED)

      (SERVICE_NAME = JSTDG1)

    )

  )


PAYDB =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = scan.test.com)(PORT = 1521))

(LOAD_BALANCE yes)

)

    (CONNECT_DATA =

      (SERVER DEDICATED)

      (SERVICE_NAME = PAYDB)

    )

  )


PAYDG1 =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))

)

    (CONNECT_DATA =

      (SERVER DEDICATED)

      (SERVICE_NAME = PAYDB)

    )

  )


9.备库添加监听;

cd $ORACLE_HOME/network/admin

vi listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/network/admin/listener.ora

# Generated by Oracle configuration tools.

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))

      (ADDRESS = (PROTOCOL IPC)(KEY = EXTPROC1521))

    )

  )

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = JSTDG1)

      (ORACLE_HOME = /u01/app/oracle)

      (SID_NAME = JSTDB)

    )

    (SID_DESC =

      (GLOBAL_DBNAME = PAYDG1)

      (ORACLE_HOME = /u01/app/oracle)

      (SID_NAME = PAYDB)

    )

  )

ADR_BASE_LISTENER = /u01/app/oracle

备库重启监听服务

lsnrctl stop

lsnrctl start


10.在RAC节点1生成standby控制文件;

export ORACLE_SID=JSTDB1

rman target /

backup device type disk format '/u01/rman/ctl01.ctl' current controlfile for standby;  

scp /u01/rman/ctl01.ctl standby:/u01/rman/


11.在standby创建相关目录;

@root用户

mkdir -p /u01/rman/JSTDB

chown -R oracle.oinstall /u01/rman/

mkdir -p /u01/arch/JSTDG1

chown -R oracle.oinstall /u01/arch/

@oracle用户

mkdir -p /u01/app/oracle/oradata/JSTDG1/datafile/

mkdir -p /u01/app/oracle/oradata/JSTDG1/onlinelog

mkdir -p /u01/app/oracle/admin/JSTDG1/adump


12.复制密码文件;

orapwd file=/$ORACLE_HOME/dbs/orapwJSTDB1 password=oracle force=y ignorecase=y

scp /$ORACLE_HOME/dbs/orapwJSTDB1 rac2:/$ORACLE_HOME/dbs/orapwJSTDB2

scp /$ORACLE_HOME/dbs/orapwJSTDB1 standby:/u01/app/oracle/dbs/orapwJSTDB


13.拷贝参数文件到备库,并修改相关内容;

@主库

scp /u01/rman/initJSTDB.ora standby:/u01/app/oracle/dbs/initJSTDB.ora

@备库

vi /u01/app/oracle/dbs/initJSTDB.ora

删除原有的内容,添加以下内容:

*.audit_file_dest='/u01/app/oracle/admin/JSTDG1/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='/u01/app/oracle/oradata/JSTDG1/control01.ctl','/u01/app/oracle/oradata/JSTDG1/control02.ctl','/u01/app/oracle/oradata/JSTDG1/control03.ctl'

*.db_block_size=8192

#*.db_create_file_dest='/u01/app/oracle/oradata/'

#*.db_create_online_log_dest_1='/u01/app/oracle/oradata/onlinelog/'

*.db_domain=''

*.db_file_name_convert='+DATA/JSTDB/','/u01/app/oracle/oradata/JSTDG1/'

*.db_name='JSTDB'

*.db_unique_name='JSTDG1'

*.db_recovery_file_dest=''

*.fal_client='JSTDG1'

*.fal_server='JSTDB'

*.log_archive_config='DG_CONFIG=(JSTDB,JSTDG1)'

*.log_archive_dest_1='LOCATION=/u01/arch/JSTDG1/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=JSTDG1'

*.log_archive_dest_2='SERVICE=JSTDB LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JSTDB'

*.log_archive_format='arch_%r_%t_%s.arc'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.log_archive_max_processes=8

*.log_file_name_convert='+DATA/JSTDB/onlinelog/','/u01/app/oracle/oradata/JSTDG1/onlinelog/','+FRA/JSTDB/onlinelog/','/u01/app/oracle/oradata/JSTDG1/onlinelog/','+FRA/JSTDB/ARCHIVELOG/','/u01/arch/JSTDG1/'

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='SHARED'

*.standby_file_management='AUTO'

*.undo_management='AUTO'

undo_tablespace='UNDOTBS1'


14.把备库启动到nomount状态;

export ORACLE_SID=JSTDB

sqlplus / as sysdba

startup nomount pfile='/u01/app/oracle/dbs/initJSTDB.ora';

create spfile from pfile='/u01/app/oracle/dbs/initJSTDB.ora';  


15.恢复备库的控制文件;

rman target /

restore standby controlfile from '/u01/rman/ctl01.ctl';  


16.收集RAC数据库的信息;

col file_name for a70

select file_name, file_id from dba_data_files;  

FILE_NAME  FILE_ID

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

+DATA/jstdb/datafile/system.259.9079385031

+DATA/jstdb/datafile/sysaux.260.9079385092

+DATA/jstdb/datafile/undotbs1.261.9079385153

+DATA/jstdb/datafile/undotbs2.263.9079385254

+DATA/jstdb/datafile/users.264.9079385275

4 rows selected.



17.备份主库全库(仅供保险备份,不是拷贝到standby);

rman target /

backup format '/u01/rman/JSTDB/fulldb_%d_%U' database include current controlfile plus archivelog delete input;  


18.RMAN duplicate数据库到备库;

rman target sys/oracle@JSTDB1 auxiliary sys/oracle@JSTDG1 nocatalog
duplicate target database for standby from active database nofilenamecheck;  

同步完成后退出rman

quit


19.检查状态;

@RAC节点1

set line 180 pages 1000

col member for a70;

select group#, typemember from v$logfile order by GROUP#;  

   GROUP# TYPE  MEMBER

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

 1 ONLINE +DATA/jstdb/onlinelog/group_1.257.907938501

 1 ONLINE +FRA/jstdb/onlinelog/group_1.257.907938501

 2 ONLINE +DATA/jstdb/onlinelog/group_2.258.907938501

 2 ONLINE +FRA/jstdb/onlinelog/group_2.258.907938501

 3 ONLINE +DATA/jstdb/onlinelog/group_3.265.907941151

 3 ONLINE +FRA/jstdb/onlinelog/group_3.259.907941151

 4 ONLINE +DATA/jstdb/onlinelog/group_4.266.907941151

 4 ONLINE +FRA/jstdb/onlinelog/group_4.260.907941151

 5 STANDBY +DATA/jstdb/onlinelog/standby_redo1-1.log

 6 STANDBY +DATA/jstdb/onlinelog/standby_redo1-2.log

 7 STANDBY +DATA/jstdb/onlinelog/standby_redo1-3.log

 8 STANDBY +DATA/jstdb/onlinelog/standby_redo1-4.log

 9 STANDBY +DATA/jstdb/onlinelog/standby_redo2-1.log

10 STANDBY +DATA/jstdb/onlinelog/standby_redo2-2.log

11 STANDBY +DATA/jstdb/onlinelog/standby_redo2-3.log

12 STANDBY +DATA/jstdb/onlinelog/standby_redo2-4.log

16 rows selected.

select max(sequence#) from v$archived_log;  

MAX(SEQUENCE#)

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

    98



@RAC节点2

select max(sequence#) from v$archived_log;  

MAX(SEQUENCE#)

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

    98


@备库

set line 180 pages 1000

col member for a70;

select group#, typemember from v$logfile order by GROUP#;  

    GROUP# TYPE    MEMBER

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

 1 ONLINE  /u01/app/oracle/oradata/JSTDG1/onlinelog/group_1.257.907938501

 1 ONLINE  /u01/app/oracle/oradata/JSTDG1/onlinelog/group_1.257.907938501

 2 ONLINE  /u01/app/oracle/oradata/JSTDG1/onlinelog/group_2.258.907938501

 2 ONLINE  /u01/app/oracle/oradata/JSTDG1/onlinelog/group_2.258.907938501

 3 ONLINE  /u01/app/oracle/oradata/JSTDG1/onlinelog/group_3.265.907941151

 3 ONLINE  /u01/app/oracle/oradata/JSTDG1/onlinelog/group_3.259.907941151

 4 ONLINE  /u01/app/oracle/oradata/JSTDG1/onlinelog/group_4.266.907941151

 4 ONLINE  /u01/app/oracle/oradata/JSTDG1/onlinelog/group_4.260.907941151

 5 STANDBY /u01/app/oracle/oradata/JSTDG1/onlinelog/standby_redo1-1.log

 6 STANDBY /u01/app/oracle/oradata/JSTDG1/onlinelog/standby_redo1-2.log

 7 STANDBY /u01/app/oracle/oradata/JSTDG1/onlinelog/standby_redo1-3.log

 8 STANDBY /u01/app/oracle/oradata/JSTDG1/onlinelog/standby_redo1-4.log

 9 STANDBY /u01/app/oracle/oradata/JSTDG1/onlinelog/standby_redo2-1.log

10 STANDBY /u01/app/oracle/oradata/JSTDG1/onlinelog/standby_redo2-2.log

11 STANDBY /u01/app/oracle/oradata/JSTDG1/onlinelog/standby_redo2-3.log

12 STANDBY /u01/app/oracle/oradata/JSTDG1/onlinelog/standby_redo2-4.log

16 rows selected.

select max(sequence#) from v$archived_log;  

MAX(SEQUENCE#)

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

    98


standby端可以看到rac1和rac2的archivelog

wKioL1cFxe-yBjx-AAAtrwFFTyY736.png


select protection_mode,protection_level from v$database;  

PROTECTION_MODE        PROTECTION_LEVEL

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

MAXIMUM PERFORMANCE       MAXIMUM PERFORMANCE


select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;  

SEQUENCE#  FIRST_TIM NEXT_TIME APPLIED

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

        28 06-APR-16 06-APR-16 NO

        29 06-APR-16 06-APR-16 NO

        30 06-APR-16 06-APR-16 NO

        95 06-APR-16 06-APR-16 NO

        96 06-APR-16 06-APR-16 NO

        97 06-APR-16 06-APR-16 NO

        98 06-APR-16 06-APR-16 NO

开启归档日志自动应用

alter database recover managed standby database using current logfile disconnect from session;  


select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;  

 SEQUENCE# FIRST_TIM NEXT_TIME APPLIED

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

28 06-APR-16 06-APR-16 YES

29 06-APR-16 06-APR-16 YES

30 06-APR-16 06-APR-16 IN-MEMORY

95 06-APR-16 06-APR-16 YES

96 06-APR-16 06-APR-16 YES

97 06-APR-16 06-APR-16 YES

98 06-APR-16 06-APR-16 YES

强制切换日志测试所有节点都可以同步

alter system switch logfile;  


20.同理搭建PAYDB实例的Dataguard,不再记录笔记;


21.切换测试(每个实例都是独自切换)

1)关闭RAC节点2的数据库实例

srvctl stop instance -d JSTDB -i JSTDB2

srvctl stop instance -d PAYDB -PAYDB2


2)在主库切换预备操作

select count(*) from v$session;

select username,program from v$session where username is not null;

wKiom1cGJ7PBfQezAAAVbei7C6s452.png

set line 180 pages 1000

col open_mode for a20;

col database_role for a30;

col switchover_status for a30;

select open_mode,database_role,switchover_status from v$database; 

OPEN_MODE          DATABASE_ROLE            SWITCHOVER_STATUS

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

READ WRITE         PRIMARY                TO STANDBY


3)在主库执行切换命令

alter database commit to switchover to physical standby with session shutdown;  

shutdown immediate

ORA-01092: ORACLE instance terminated. Disconnection forced

startup nomount 

ORA-24324: service handle not initialized

ORA-01041: internal error. hostdef extension doesn't exist


exit

sqlplus / as sysdba

startup nomount  


alter database mount;


col database_role for a20;

col switchover_status for a30;

select database_role,switchover_status from v$database;

DATABASE_ROLE       SWITCHOVER_STATUS

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

PHYSICAL STANDBY     RECOVERY NEEDED   


4)在备库进行切换

set line 180 pages 1000

col open_mode for a20;

col database_role for a30;

col switchover_status for a30;

select open_mode,database_role,switchover_status from v$database; 

OPEN_MODE          DATABASE_ROLE            SWITCHOVER_STATUS

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

MOUNTED           PHYSICAL STANDBY          SESSIONS ACTIVE


alter database commit to switchover to primary; 

shutdown immediate 

startup

select open_mode,database_role,switchover_status from v$database;

OPEN_MODE          DATABASE_ROLE            SWITCHOVER_STATUS

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

READ WRITE         PRIMARY                RESOLVABLE GAP 


5)回到原主库开启归档日志自动恢复

alter database recover managed standby database using current logfile disconnect from session;

select open_mode,database_role,switchover_status from v$database;

OPEN_MODE          DATABASE_ROLE           SWITCHOVER_STATUS

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

MOUNTED           PHYSICAL STANDBY         TO PRIMARY


6)检查备库状态,RESOLVABLE GAP恢复正常

select open_mode,database_role,switchover_status from v$database;

OPEN_MODE          DATABASE_ROLE            SWITCHOVER_STATUS

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

READ WRITE         PRIMARY                TO STANDBY


7)恢复原状,把RAC节点恢复为PRIMARY,standby节点恢复为STANDBY

重新开启RAC2节点2的实例

srvctl start instance -d JSTDB -i JSTDB2

srvctl start instance -d NETPAYDB -NETPAYDB2 


END.踩过的坑

1)错误的理解了DB_NAME以及DB_UNIQUE_NAME的概念,在修改standby的initJSTDB.ora参数时修改了DB_NAME=JSTDG1,导致还原standby的控制文件后无法mount备库:

RMAN-03002: failure of alter db command at 04/05/2016 09:52:48

ORA-01103: database name 'JSTDB' in control file is not 'JSTDG1'

解决方法:

将standby端的参数文件保持跟primary一致的db_name,错误解决.


2)备库listener.ora配置错误,导致primary无法正常解析standby

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME JSTDG1)

      (ORACLE_HOME = /u01/app/oracle)

      (SID_NAME = JSTDG1)

    )

结果在RAC节点都无法通过sqlplus连接到standby:

sqlplus sys/oracle@JSTDG1 as sysdba

ora-01031:insufficient privilege

解决方法:

保持GLOBAL_DBNAME与tnsnames.ora中的SERVICE_NAME = JSTDG1保持一致,SID_NAME与DB_NAME保持一致为JSTDB即可


3)从RAC节点1生成密码文件然后复制到RAC节点2以及standby数据库后,RAC节点2的alter日志一直报以下错误:

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

PING[ARC6]: Heartbeat failed to connect to standby 'JSTDG1'. Error is 16191.

Wed Apr 06 15:40:31 2016

Error 1017 received logging on to the standby

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

Check that the primary and standby are using a password file

and remote_login_passwordfile is set to SHARED or EXCLUSIVE, 

and that the SYS password is same in the password files.

      returning error ORA-16191

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

且在standby中无法自动生成theard2的standby_redo2-*.log,

但RAC节点1却是可以跟standby同步成功,

跟翻看了一些资料,官方文档对remote_login_passwordfile的解释:only one instance of one database使用exclusive方式,那配置shared值的口令文件就应该是可以被一台服务器上的多个数据库或者RAC集群数据库共享;

解决方法:

Exclusive转变为shared

@RAC节点1

cd $ORACLE_HOME/dbs

mv orapwJSTDB1 orapw.bak

@RAC节点2

cd $ORACLE_HOME/dbs

mv orapwJSTDB2 orapw.bak

alter system set remote_login_passwordfile=shared scope=spfile sid='*';  

重启RAC数据库

srvctl stop database -d JSTDB

srvctl start database -d JSTDB

@standby备库

cd $ORACLE_HOME/dbs

mv orapwJSTDB2 orapw.bak

alter system set remote_login_passwordfile=shared scope=spfile;  

重启备库

shutdown immediate

startup nomount  

重新生成shared方式的密码文件并复制到所有节点,错误解决.


4)由于RAC环境下的onlinelog建库时是默认放了两份,一份在+DATA下,一份是在+FRA下;但*.log_file_name_convert日志转换路径少了+FRA这一份,导致RMAN duplicate数据库到备库时,onlinelog无法自动生成:

wKioL1cFxhuyEgp6AAB3z1AyaDw243.png

解决方法:

主库的日志转换参数为:

log_file_name_convert='备库onlinelog路径','主库onlinelog路径1','备库onlinelog路径','主库onlinelog路径2','备库archivelog路径','主库archivelog路径' SCOPE=spfile sid='*';

ALTER SYSTEM SET log_file_name_convert='/u01/app/oracle/oradata/JSTDG1/onlinelog/','+DATA/JSTDB/onlinelog/','/u01/app/oracle/oradata/JSTDG1/onlinelog/','+FRA/JSTDB/onlinelog/','/u01/arch/JSTDG1/','+FRA/JSTDB/ARCHIVELOG/' SCOPE=spfile sid='*';

备库的日志转换为:

log_file_name_convert='主库onlinelog路径1','备库onlinelog路径','主库onlinelog路径2','备库onlinelog路径','主库archivelog路径','备库archivelog路径'

*.log_file_name_convert='+DATA/JSTDB/onlinelog/','/u01/app/oracle/oradata/JSTDG1/onlinelog/','+FRA/JSTDB/onlinelog/','/u01/app/oracle/oradata/JSTDG1/onlinelog/','+FRA/JSTDB/ARCHIVELOG/','/u01/arch/JSTDG1/'


5)RAC环境一开始设置了两个归档日志的路径,导致rman备份时无法读取RAC另外一个节点的归档日志而导致备份失败

ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=+FRA/JSTDB/ARCHIVELOG/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=JSTDB' scope=both sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/u01/arch/JSTDB/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=JSTDB' scope=both sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=JSTDG1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JSTDG1' scope=both sid='*';  

即便archive log list显示的路径是

Archive destination       +FRA/jstdb/archivelog/

一样报错:

wKiom1cFxZmCMWA4AAArrmy_IL0112.png

解决方法:只保留在ASM磁盘组的归档目录

ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='' scope=both sid='*';

ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=JSTDG1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JSTDG1' scope=both sid='*';


P.S.如有错误,敬请看官指正;不胜感激!