暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

RAC对单机的DATAGUARD

最帅dba工作笔记 2019-04-04
1791

RAC对单机的DATAGUARD

最近帮朋友搭了一个rac对单机的dg,做了些记录,大家一起来学习吧

RAC配置信息

IP

ROLE 

INSTANCE NAME 

SCANIP

VIP

STORAGE

172.28.7.201

RAC1

DEVDB1

172.28.7.221

172.28.7.202

ASM

172.28.7.211

RAC2

DEVDB2

172.28.7.212



单库配置信息

IP

INSTANCE NAME 

STORAGE

172.26.5.16

SDB

文件系统

操作步骤:

1,开启归档模式

RAC:执行

shutdown immediate;

alter database archivelog ;

alter database open ;

2,配置归档位置

RAC:执行

这里可以将位置配置到闪回区,也可以将其配置到一个目录下,这里是将其配置到了闪回

开启闪回功能

alter system set db_recovery_file_dest_size=80g scope=spfile;

alter system set db_recovery_file_dest='+DATA' scope=spfile;

alter system set db_flashback_retention_target=1440 scope=spfile;  --这里是配置闪回时间1天是1440min

shutdown immediate;

startup nomount;

alter database flashback on ;

alter database open;

select flashback_on from v$database;

这里归档默认是在闪回区目录下所以不用配置;

如果是普通的fs,就用下面这种

mkdir -p home/oracle/arch

alter system set log_archive_dest_1='location=/home/oracle/arch' node='devdb1';

alter system set log_archive_dest_1='location=/home/oracle/arch' node='devdb2';

3,创建日志组

RAC执行

一般来说,standby redo日志文件组要比primary数据库的online redo 日志文件组要多一个,这样设计会降低primary数据库LGWR进程锁住的可能性。

select * from v$logfiles; 查看有几组日志组,创建的Standby logfile group要比online 的多一个;

alter database add  standby logfile group 5 '+DATA' size 50M;

alter database add  standby logfile group 6 '+DATA' size 50M;

alter database add  standby logfile group 7 '+DATA' size 50M;

alter database add  standby logfile group 8 '+DATA' size 50M;

alter database add  standby logfile group 9 '+DATA' size 50M;

4,开启强日志级别

RAC执行

SQL>select force_logging from v$database;

FOR


no

SQL>alter database force logging ;

5,修改primary的参数文件

RAC执行

alter system set log_archive_config='dg_config=(devdb,SDB)' scope=spfile sid='*';

alter system set log_archive_dest_1='location=+DATA valid_for=(all_logfiles,all_roles) db_unique_name=devdb' scope=spfile;

alter system set log_archive_dest_2='service=SDB async valid_for=(online_logfiles,primary_role) db_unique_name=SDB' scope=spfile;

alter system set log_archive_dest_state_1=enable   scope=spfile sid='*';

alter system set log_archive_dest_state_2=enable   scope=spfile sid='*';

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

alter system set fal_server='SDB' scope=spfile sid='*';

alter system set db_file_name_convert='/u01/app/oracle/oradata/SDB/','+data/devdb/datafile/' scope=spfile;

alter system set log_file_name_convert='/u01/app/oracle/oradata/SDB/','+data/devdb/onlinelog' scope=spfile;

alter system set fal_server=sdb scope=spfile;

alter system set LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;

6,standby数据库关闭监听

su - oracle 

lsnrctl stop

7,将primary的参数文件和密码文件传到standby

create pfile='/home/oracle/rac.pfile' from spfile;

scp rac.pfile 172.26.5.16:/home/oracle/

orapwd file=orapwDEVDB password=oracle enrtries=30;

scp orapwDEVDB 172.26.5.16:/u01/app/oracle/product/11.2.0/dbhome_1/

8,修改standby的参数文件

将参数文件中重复的参数删掉

删掉*.cluster_database=true

删掉*.remote_listener='scan-cluster:1521'

修改*.audit_file_dest='/u01/app/oracle/admin/devdb/adump'的位置

修改 log_archive_dest_1='location=+DATA valid_for=(all_logfiles,all_roles) db_unique_name=devdb' 成log_archive_dest_1='location=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch valid_for=(all_logfiles,all_roles) db_unique_name=sdb'   --这里注意,standby数据库需要开启归档,如果没有指定归档路径,默认创建在/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch

修改log_archive_dest_2='service=sdb valid_for=(online_logfiles,primary_role) db_unique_name=sdb'成log_archive_dest_2='service=devdb valid_for=(online_logfiles,primary_role) db_unique_name=devdb'

修改*.db_create_file_dest='+DATA'成 *.db_create_file_dest='/u01/app/oracle/oradata/sdb/'     --该参数指定tempfile,logfile,tracking file ,datafile ,controlfile等文件的路径

修改.control_files='/u01/app/oracle/oradata/sdb/ora_control.ctl','/u01/app/oracle/oradata/sdb/ora_control1.ctl' 

修改 *.db_name='SDB' 成*.db_name='devdb' 

删掉*.db_recovery_file_dest='+DATA'

*.db_recovery_file_dest_size=4621074432

修改*.db_name='devdb' 成 *.db_name='sdb' 

替换参数名称

:%s#devdb1#SDB#g

修改db_file_name_convert='/u01/app/oracle/oradata/SDB/','+data/devdb/datafile/' 成db_file_name_convert='+data/devdb/datafile/','/u01/app/oracle/oradata/SDB/'

       log_file_name_convert='/u01/app/oracle/oradata/SDB/','+data/devdb/onlinelog'成  log_file_name_convert='+data/devdb/onlinelog','/u01/app/oracle/oradata/SDB/'

最后文件

vi rac.pfile

sdb.__db_cache_size=1862270976

sdb.__java_pool_size=16777216

sdb.__large_pool_size=33554432

sdb.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

sdb.__pga_aggregate_target=838860800

sdb.__sga_target=2516582400

sdb.__shared_io_pool_size=0

sdb.__shared_pool_size=570425344

sdb.__streams_pool_size=0

audit_file_dest='/u01/app/oracle/admin/sdb/adump'

audit_trail='db'

compatible='11.2.0.4.0'

control_files='/u01/app/oracle/oradata/sdb/control01.ctl','/u01/app/oracle/oradata/sdb/control02.ctl'

db_block_size=8192

db_domain=''

db_file_name_convert='+DATA/devdb/datafile/','/u01/app/oracle/oradata/sdb/','+DATA/devdb/tempfile','/u01/app/oracle/oradata/sdb/tempfile'  #这里包括tempfile

db_unique_name=SDB

db_name='DEVDB'

#*.db_recovery_file_dest='+DATA'

#*.db_recovery_file_dest_size=4621074432

diagnostic_dest='/u01/app/oracle'

dispatchers='(PROTOCOL=TCP) (SERVICE=devdbXDB)'

fal_server='devdb'

log_archive_config='dg_config=(sdb,devdb)'

log_archive_dest_1='location=/home/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=sdb'

log_archive_dest_2='service=devdb async valid_for=(online_logfiles,primary_role) db_unique_name=devdb'

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

log_archive_dest_state_1='ENABLE'

log_archive_dest_state_2='ENABLE'

log_file_name_convert='+DATA/devdb/onlinelog','/u01/app/oracle/oradata/sdb/'

LOG_ARCHIVE_MAX_PROCESSES=30

fal_server=devdb

open_cursors=300

pga_aggregate_target=838860800

processes=150

#*.remote_listener='scan-cluster:1521'

remote_login_passwordfile='exclusive'

sga_target=2516582400

standby_file_management='auto'

undo_tablespace='UNDOTBS1'

standby 启动到nomount:

export ORACLE_SID=SDB

startup pfile=/home/oracle/rac.pfile nomount;

创建spfile

create spfile from pfile;

--如果这里参数文件报错(无法从$ORACLE_HOME/dbs/initSDB.ora 创建spfile 之类的问题),将/home/oracle/rac.pfile cp到$ORACLE_HOME/dbs/下,命名为initSDB.ora

然后关闭数据库,使用spfile启动

shutdown immediate;

startup nomount

9,创建监听(location: $ORACLE_HOME/network/admin/listener.ora)

rac 节点1:

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3 = ON

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2 = ON

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON

LISTENER =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cluster)(PORT = 1521))

  )

ADR_BASE_LISTENER = /u01/app/grid

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON

LISTENER_SCAN3 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN3))

  )

LISTENER_SCAN2 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN2))

  )

ADR_BASE_LISTENER_SCAN3 = /u01/app/grid

LISTENER_SCAN1 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))

  )

ADR_BASE_LISTENER_SCAN2 = /u01/app/grid

ADR_BASE_LISTENER_SCAN1 = /u01/app/grid

~

rac 节点2:

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON

LISTENER =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cluster)(PORT = 1521))

  )

ADR_BASE_LISTENER = /u01/app/grid

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON

LISTENER_SCAN1 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))

  )

ADR_BASE_LISTENER_SCAN1 = /u01/app/grid

单机监听:

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

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

    )

  )

ADR_BASE_LISTENER = /u01/app/oracle

SID_LIST_LISTENER=

  (SID_LIST=

    (SID_DESC=

      (GLOBAL_DBNAME=sdb)

      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

  (SID_NAME=sdb)))

#SID_LIST_LISTENER部分标识全局数据库名称、标识监听程序正在服务的每个实例的Oracle软件主目录以及实例或SID。这里一定要配置SID_LIST_LISTENER 否则监听数据库的状态将会是block状态,这样primary使用rman 连接的时候会出现问题。

10.配置tnsname(location: $ORACLE_HOME/network/admin/tnsname.ora)

rac1和rac2配置相同

devdb=

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cluster)(PORT = 1521))

   (CONNECT_DATA =

    (SERVER = DEDICATED)

    (SERVICE_NAME =devdb)

    )

  )

SDB=

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = SDB)

    )

  )

单机tnsname

DEVDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

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

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = devdb)

    )

  )

sdb =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = sdb)

    )

  )

单机端需要配置sqlnet.ora(location: $ORACLE_HOME/network/admin/sqlnet.ora)

在最后加

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

sqlnet.authentication_services=all

#这里是为了单库可以支持远程连接

10,验证连接

rac:

sqlplus sys/oracle@sdb as sysdba

sqlplus sys/oracle@devdb as sysdba

单机:

sqlplus sys/oracle@sdb as sysdba

sqlplus sys/oracle@devdb as sysdba

11,备库duplicate

rac端操作:

rman target / auxiliary  sys/oracle@sdb

执行命令将RAC数据推到SDB:

RMAN> duplicate target database for standby from active database;

注意:如果在duplicate的时候出现了password error 的问题,登陆rman请用rman target sys/oracle@devdb auxiliary sys/oracle@sdb

12,完成后对比两端的归档状态

rac:

archive log list;

Database log mode           Archive Mode

Automatic archival           Enabled

Archive destination           +DATA

Oldest online log sequence     232

Next log sequence to archive   233

Current log sequence           233

sdb:

archive log list;

Database log mode           Archive Mode

Automatic archival           Enabled

Archive destination           /home/oracle/arch

Oldest online log sequence     232

Next log sequence to archive   0

Current log sequence           233

13,查询状态

RAC:

SELECT PROTECTION_MODE, PROTECTION_LEVEL,DATABASE_ROLE ROLE,SWITCHOVER_STATUS FROM V$DATABASE;

PROTECTION_MODE      PROTECTION_LEVEL      ROLE           SWITCHOVER_STATUS

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

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  PRIMARY       SESSIONS ACTIVE

SDB:

SELECT PROTECTION_MODE, PROTECTION_LEVEL,DATABASE_ROLE ROLE,SWITCHOVER_STATUS FROM V$DATABASE;

PROTECTION_MODE      PROTECTION_LEVEL      ROLE           SWITCHOVER_STATUS

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

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  PHYSICAL STANDBY RECOVERY NEEDED

14:同步数据:

SDB:

recover managed standby database using current logfile disconnect from session;   #开启日志实时应用

recover managed standby database cancel;

alter database open;

recover managed standby database using current logfile disconnect from session;

经验:RAC对单机的DG其实和单对单一样,可以在配置的时候将RAC的一个节点关掉,然后单独配置监听即可。

THAT'S ALL

BY CUI PEACE!!!



本文分享自微信公众号 - 最帅dba工作笔记,如有侵权,请联系 service001@enmotech.com 删除。
最后修改时间:2020-01-13 22:17:34
文章转载自最帅dba工作笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论