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 |
|
|
|
|
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;
查看归档:
备注:另一个节点手动startup启动实例即可
4.1.4 在主库创建standby logfile
1. 在主库查看redolog
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值大小进行设置
在主库查看相关日志视图:
4.2备库配置
4.2.1 创建standby参数文件
参数文件放在ORACLE_HOME/dbs下面,以init开头。
备注:着重关注红框中参数,其它参数也要进行确认,创建好参数文件后,将数据库启动到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’
查看备配置配置情况:
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))
)
主库和备库中配置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)
)
)
备注:配置完成后在主库各节点和备库都要通过用户名/密码方式登陆对方数据库以验证配置是否正确。
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报错,则需要先根据报错内容解决问题
2. 在主库和备库分别查看v$archived_log视图,对比两端末尾日志是否一致,并在主库切换日志,看是否同步到备库。
3. 切换日志,查看备库
4. 在主库查看v$log视图,在备库查看v$standby_log视图,验证主备库redo是否同步。
查看主库当前在用sequence#是585和512
查看备库当前在用sequence#是否和主库一致
5. 在备库查看v$managed_standby视图,验证后台日志应用进程是否启动
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对归档日志进行删除