Oracle 12c RAC 到单机实例 DATAGUARD搭建

Oracle 12c RAC 到单机实例 DATAGUARD搭建

2016年10月09日 16:12:29 红色石头hr 阅读数:2115

第二章:环境信息

2.1 系统平台

2.1.1 主机平台与版本

主机系统

● HP-UX Itanium 11.31

主机数据库

● 12.1.0.2 RAC

2.1.2 备机平台与版本

备机系统

● HP-UX Itanium 11.31

备机数据库

● 12.1.0.2 Single Instance Database With ASM

2.2 数据库环境

2.2.1 数据库配置环境

 

主库

备库

IP

 

 Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

Oracle 12c RAC 到单机实例 DATAGUARD搭建

Oracle 12c RAC 到单机实例 DATAGUARD搭建

Oracle 12c RAC 到单机实例 DATAGUARD搭建

Oracle 12c RAC 到单机实例 DATAGUARD搭建

db_name

HIS

XNH/SEP/RHIPQZJ/RHIPBZK

HIS

XNH/SEP/RHIPQZJ/RHIPBZK

db_unique_name

HIS

XNHS/SEPS/RHIPQZJS/RHIPBZKS

sys密码

oracle

oracle

 

 

 

第三章:方案简介

3.1方案规划

3.1.1 方案规划

在省厅搭建Oracle DataGuard 备库环境,将地市的数据同步到省厅。规划将6套RAC生产环境异地容灾到一台单机备库环境。

第四章:DataGuard安装步骤

4.1 主库配置

4.1.1 开启RAC的force logging

SQL>alter database forcelogging;

4.1.2 修改RAC参数文件

以下以HIS数据库为例说明,其它数据库配置一样。

DB_NAME=his

DB_UNIQUE_NAME=his

LOG_ARCHIVE_CONFIG=’DG_CONFIG=(his,hiss)’

LOG_ARCHIVE_DEST_1=’LOCATION=+DATA’

DB_UNIQUE_NAME=his

LOG_ARCHIVE_DEST_2='SERVICE=hiss ASYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)

DB_UNIQUE_NAME=hiss'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

LOG_ARCHIVE_MAX_PROCESSES=30

FAL_SERVER=hiss

DB_FILE_NAME_CONVERT='hiss','his'

LOG_FILE_NAME_CONVERT=’hiss’,’his’

STANDBY_FILE_MANAGEMENT=AUTO

备注:通过alter systemset命令修改相关参数。着重关注加粗参数,其它参数也要进行确认

4.1.3 开启RAC归档模式

srvctl stop database -d his

srvctl start database -d his -ihis1-o mount

SQL>alter database archivelog;

SQL>alter database open;

查看归档:

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

备注:另一个节点手动startup启动实例即可

4.1.4 在主库创建standby logfile

1.     在主库查看redolog

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

2.     通过查看主库redolog有8组,standby redolog需要创建10组,每个thread5组,大小1G,如下:

SQL>alter database add standbylogfile thread 1 group 10 size 1G ;

SQL>alter database add standbylogfile thread 1 group 11 size 1G;

SQL>alter database add standbylogfile thread 1 group 12 size 1G;

SQL>alter database add standbylogfile thread 1 group 13 size 1G;

SQL>alter database add standbylogfile thread 1 group 14 size 1G;

SQL>alter database add standbylogfile thread 2 group 15 size 1G;

SQL>alter database add standbylogfile thread 2 group 16 size 1G;

SQL>alter database add standbylogfile thread 2 group 17 size 1G;

SQL>alter database add standbylogfile thread 2 group 18 size 1G;

SQL>alter database add standbylogfile thread 2 group 19 size 1G;

备注:该standbylogfile建议先在RAC中创建,这样就可以在standby创建后也自动地有了standby logfile了,standby logfile组必须比生产库多一个,大小根据查询到的BYTES值大小进行设置

在主库查看相关日志视图:

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

4.2备库配置

4.2.1 创建standby参数文件

参数文件放在ORACLE_HOME/dbs下面,以init开头。

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

备注:着重关注红框中参数,其它参数也要进行确认,创建好参数文件后,将数据库启动到nomount状态,检查参数文件是否正确。

 

4.2.2 在备库ASM中创建相关目录

在+DATA目录下创建HISS目录,并在HISS目录下创建相关目录

ASMCMD>cd +DATA

ASMCMD>mkdir HISS

ASMCMD>cd hiss

ASMCMD>mkdir DATAFILE

ASMCMD>mkdir CONTROLFILE

ASMCMD>mkdir ONLINELOG

ASMCMD>mkdir PASSWORD

在+FRA目录下创建HISS目录,并在HISS目录下创建相关目录

ASMCMD>cd +FRA

ASMCMD>mkdir ARCHIVELOG

ASMCMD>mkdir ONLINELOG

4.2.3创建spfile到ASM中

SQL>create spfile='+DATA/HISS/spfilehiss.ora'from pfile='inithiss.ora'

 

4.2.4将主库RAC中的口令文件拷贝到备库中

从主库ASM拷贝到文件系统中:

ASMCMD>pwcopy +DATA/HISS/PASSWORD/pwdhis.256.918602833/home/grid/

使用scp或者其它方式拷贝到备库的主机中并重命名为hiss:

scp /home/grid/pwdhis.256.91860283310.241.8.9:/home/grid

mv pwdhis.256.918602833 orapwhiss

从备库文件系统拷贝到ASM中:

ASMCMD> pwcopy /home/grid/orapwhiss +DATA/HISS/PASSWORD/

 

4.2.5添加数据库到OCR中,同时注册参数文件和口令文件

srvctl add database -db hiss -o/extmp/app/oracle/product/12.1.0/db_1

srvctl modify database -db hiss-role physical_standby -spfile ’

+DATA/HISS/spfilehiss.ora’-pwfile ‘+DATA/HISS/PASSWORD/orapwhiss’

查看备配置配置情况:

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

4.2.5配置监听文件,保证主库和备库能够互连

备库创建listener.ora配置静态监听

SID_LIST_LISTENER =

 (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = hiss)

      (ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)

      (SID_NAME = hiss)

    )

 )

LISTENER =

 (DESCRIPTION =

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

 )

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

主库和备库中配置tnsnames.ora

HIS =

 (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = his)

    )

 )

HISS =

 (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = hiss)

    )

 )

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

备注:配置完成后在主库各节点和备库都要通过用户名/密码方式登陆对方数据库以验证配置是否正确。

4.3复制主库数据到备库

4.3.1 duplicate将主库数据恢复到备库

在主库执行:

rman target sys/[email protected] sys/[email protected]

启动备库为nomount状态

RMAN>startup nomount;

使用rman工具连接主库和备库

RMAN> duplicate targetdatabase for standby from active database;

4.3.2备库应用主库同步的日志

duplicate完成后,启动到open状态,在备库执行同步:

SQL>alter database open;

SQL>alter database recovermanaged standby database using current logfile disconnect from session;

 

第五章:同步验证

5.1 数据同步验证

5.1.1 主备库验证

1.     在主库查看复制v$archive_dest视图,如archive_log_dest_2有error报错,则需要先根据报错内容解决问题

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

2.        在主库和备库分别查看v$archived_log视图,对比两端末尾日志是否一致,并在主库切换日志,看是否同步到备库。

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

3.     切换日志,查看备库

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

4.     在主库查看v$log视图,在备库查看v$standby_log视图,验证主备库redo是否同步。

查看主库当前在用sequence#是585和512

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

查看备库当前在用sequence#是否和主库一致

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

 

 

5.      在备库查看v$managed_standby视图,验证后台日志应用进程是否启动

 Oracle 12c RAC 到单机实例 DATAGUARD搭建Oracle 12c RAC 到单机实例 DATAGUARD搭建

  

5.2 脚本验证

5.2.1 主库创建脚本

为了简化运维人员在日常巡检中的工作步骤,在此提供一种简单有效的方法,该方法的原理:在主库中创建一张表,并实时将最新系统时间update到该表中,正常情况下该表的内容为最新系统时间,如果该表能够正常的同步到备库中,那么在备库中查看到时间也为最新系统时间;如果查看到的时间不是最新系统时间,那么备库的同步状态为查询的时间。

以下以HIS数据库为例,其它数据库配置方法一样。

1.     主库中创建如下脚本his_check_for_dg.sh,内容如下:

export ORACLE_BASE=/u01/app/oracle

exportORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1

export ORACLE_SID=his1

sqlplus -s " / as sysdba"<< EOF

set feedback off

set pages 0

set head off

set timing off

set echo off

drop table eisoo_check_for_dg;

create table eisoo_check_for_dg(idnumber,check_for_dg varchar2(30));

alter system archive log current;

declare

i number;

begin

delete eisoo_check_for_dg where 1=1;

insert into eisoo_check_for_dgvalues(1,to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));

for i in 1..715 loop

update eisoo_check_for_dg setcheck_for_dg=to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') where id=1;

dbms_lock.sleep(5);

commit;

end loop;

end;

/

exit

alter system archive log current;

EOF

 

2.     在root用户下,通过crontab工具添加执行计划

30 * * * * su - oracle -c /home/oracle/his_check_for_dg.sh

备注:将该脚本写入crontab,让它定时运行,防止服务器重启或者数据库重启后中断。此处脚本含义:每个小时运行一次his_check_for_dg.sh脚本,脚本会每5秒更新一次时间到表eisoo_check_for_dg中,更新715次后结束,这个周期刚好1小时,之后crontab计划让脚本又重新运行,开始另一个运行周期,如此循环。

 

5.2.2 备库创建脚本

1.     备库通过如下脚本查看主库同步的时间点是否变化以确认CDP是否正常运行,创建checkdg.sh脚本如下:

export ORACLE_BASE=/extmp/app/oracle

export ORACLE_HOME=/extmp/app/oracle/product/12.1.0/dbhome_1

export ORACLE_SID=anyangs1

export PATH=$PATH:$ORACLE_HOME/bin

sqlplus -s "/ as sysdba"<<EOF

set feedback off

set pages 0

set head off

set timing off

set echo off

select * from eisoo_check_for_dg;

EOF

备注:将脚本放在/home/oracle目录下,直接运行./checkdg.sh,可以查看到备库时间是否在更新。

 

第六单 归档日志管理

6.1 主库归档日志管理

6.1.1 主库归档日志管理

通过本地部署的AnyBackup对数据库进行备份,具体删除策略或脚本或AnyBackup中可以进行管理。具体策略可做调整

 

 

 

 

 

 

 

 

 

 

6.2 备库归档日志管理

6.1.2 备库归档日志管理

此处以HISS为例,其它数据库配置方法一样。

1.     创建脚本his_archlog_sql.sh,用来生成要删除归档日志

exportORACLE_BASE=/u01/app/oracle

exportORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1

export ORACLE_SID=hiss

applied_days=1

cat/dev/null>applied_arch.lst

chmod +x applied_arch.lst

sqlplus -s "/ assysdba"<<EOF

set feedback off

set pages 0

set head off

set timing off

set echo off

spool applied_arch.lst

select 'run{' from dual;

select 'delete nopromptarchivelog sequence '||sequence#||' thread '||thread#||';' from v\$archived_logwhere name like '%seq%' and status='A'

and applied='YES' andCOMPLETION_TIME<=sysdate-${applied_days}

order by COMPLETION_TIME;

select '}' from dual;

spool off;

exit

EOF

备注:此脚本会生成另一个脚本文件applied_arch.lst,新生成的脚本内容是1天前在备库已经应用的归档日志。

 

2.     创建脚本his_archlog.sh

PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.

export PATH

export PATH=$PATH:$ORACLE_HOME/bin

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1

ORACLE_SID=hiss

export ORACLE_BASE ORACLE_HOME ORACLE_SID

export PATH=$PATH:$ORACLE_HOME/bin

rman target / cmdfile='/home/oracle/applied_arch.lst'log='/home/oracle/his_archlog.log'

备注:此脚本会通过rman调用applied_arch.lst脚本中过期归档日志再进行删除。

 

3.     在root用户下通过crontab工具设置执行计划。

crontab –e

30 0 * * * su - oracle -c /home/oracle/his_archlog_sql.sh

40 0 * * * su - oracle -c /home/oracle/his_archlog.sh

备注:将该脚本放到crontab中,定时执行。此计划,会每天0:30生成已经过期并应用过的归档日志;每天0:40对归档日志进行删除