● HP-UX Itanium 11.31
● 12.1.0.2 RAC
● HP-UX Itanium 11.31
● 12.1.0.2 Single Instance Database With ASM
|
主库 |
备库 |
||
IP |
|
|||
db_name |
HIS |
XNH/SEP/RHIPQZJ/RHIPBZK |
HIS |
XNH/SEP/RHIPQZJ/RHIPBZK |
db_unique_name |
HIS |
XNHS/SEPS/RHIPQZJS/RHIPBZKS |
||
sys密码 |
oracle |
oracle |
在省厅搭建Oracle DataGuard 备库环境,将地市的数据同步到省厅。规划将6套RAC生产环境异地容灾到一台单机备库环境。
SQL>alter database forcelogging;
以下以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命令修改相关参数。着重关注加粗参数,其它参数也要进行确认
srvctl stop database -d his
srvctl start database -d his -ihis1-o mount
SQL>alter database archivelog;
SQL>alter database open;
查看归档:
备注:另一个节点手动startup启动实例即可
1. 在主库查看redolog
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_HOME/dbs下面,以init开头。
备注:着重关注红框中参数,其它参数也要进行确认,创建好参数文件后,将数据库启动到nomount状态,检查参数文件是否正确。
在+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
SQL>create spfile='+DATA/HISS/spfilehiss.ora'from pfile='inithiss.ora'
从主库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/
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’
查看备配置配置情况:
备库创建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)
)
)
备注:配置完成后在主库各节点和备库都要通过用户名/密码方式登陆对方数据库以验证配置是否正确。
在主库执行:
rman target sys/oracle@hisauxiliary sys/oracle@hiss
启动备库为nomount状态
RMAN>startup nomount;
使用rman工具连接主库和备库
RMAN> duplicate targetdatabase for standby from active database;
duplicate完成后,启动到open状态,在备库执行同步:
SQL>alter database open;
SQL>alter database recovermanaged standby database using current logfile disconnect from session;
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视图,验证后台日志应用进程是否启动
为了简化运维人员在日常巡检中的工作步骤,在此提供一种简单有效的方法,该方法的原理:在主库中创建一张表,并实时将最新系统时间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计划让脚本又重新运行,开始另一个运行周期,如此循环。
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"< 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,可以查看到备库时间是否在更新。 通过本地部署的AnyBackup对数据库进行备份,具体删除策略或脚本或AnyBackup中可以进行管理。具体策略可做调整 此处以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"< 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对归档日志进行删除第六单 归档日志管理
6.1 主库归档日志管理
6.1.1 主库归档日志管理
6.2 备库归档日志管理
6.1.2 备库归档日志管理