Dataguard 安装与管理
5.1 环境准备
以HDB为例,阐述oracle 11g Dataguard physical standby的安装过程。主从数据库都是ORACLE 11G RAC环境,数据和ORACLE程序都在CFS共享磁盘上。 运行crs_stat –t 检查各资源状态。
在本系统中,采用Maximum Performance方式,即日志同步采取lgwr noaffirm方式。 环境如下:
大厦中心:HDB。 张江中心:HDB_ZJ 节点1: CO01 192.168.84.91 节点2: CM02 192.168.84.96 节点1: B-AO01 172.18.34.91 节点2: B-AP01 172.18.34.96 hdb1 hdb2 hdb_zj1 hdb_zj2 在源端和目标端 /etc/hosts加入两端主机地址和VIP地址。 192.168.84.91 CO01 hdb1 192.168.84.92 CO01-vip hdb1-vip 192.168.84.96 CM02 hdb2 192.168.84.97 CM02-vip hdb2-vip 172.18.34.91 B-AO01 hdb_zj1 172.18.34.92 hdb_zj1-vip 172.18.34.96 B-AP01 hdb_zj2 172.18.34.97 hdb_zj2-vip hdb1.shfe.com.cn hdb1-vip.shfe.com.cn hdb2.shfe.com.cn hdb2-vip.shfe.com.cn 5.2 Dataguard Physical Standby 数据库创建 5.2.1 tnsnames.ora修改
修改源端和目标端的tnsnames.ora, 加入以下内容:
hdb_zj= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = b-ao01-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = b-ap01-vip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = hdb) (UR=A) ) ) hdb_ft= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hdb1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = hdb2-vip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = hdb) (UR=A) ) ) 5.2.2 password file 重建
重新生成源端的password file,并复制到目标端。并建立到$ORACLE_HOME/dbs的软连接。重起源端数据库。 orapwd file=/cfs/data/hdb/orapwhdb password=oracle force=y ignorecase=y 5.2.3 设置数据库运行在force logging模式
在源端数据库sqlplus中运行 sql> alter database force logging; 5.2.4 创建pfile 参数文件
在源端数据库生成pfile, 并复制到目标端。并修改以下参数
db_name=hdb db_unique_name=hdb_zj service_name=hdb fal_server='hdb' fal_client='hdb_zj' db_file_name_convert=hdb','hdb' log_file_name_convert='/cfs/archivelog','/cfs/archivelog' log_archive_dest_1='LOCATION=/cfs/archivelog/ VALID_FOR=(all_logfiles,all_roles) log_archive_config='DG_CONFIG=(hdb,hdb_zj)' log_archive_dest_2='SERVICE=hdb_ft lgwr ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=hdb' standby_file_management=auto scope=both remote.listener=’LISTENERS_HDB_ZJ’ 5.2.5 生成spfile参数文件
在目标端用pifle启动数据库到nomount状态。从pfile 生成spfile. $export ORACLE_SID=hdb1 $sqlplus / as sysdba sql>startup nomount pfile=’?/dbs/hdb_zj.ora’; sql>create spfile=’/cfs/data/hdb/spfilehdb.ora’ from pfile=’?/dbs/hdb_zj.ora’; $lsnrctl staus 检查listener状态。 5.2.6 测试备库连接
在源端:
$sqlplus sys/oracle@hdb_zj as sysdba 确保从主库可以连接到从库。如果不能连接,检查以前的配置,然后再进行下一步。
5.2.7 创建standby日志文件
在主库上创建,应该会同步到从库。Standy log 的推荐数目为: (# of online redo logs per primary instance + 1) * # of instances
alter database add standby logfile thread 1 group 11 ‘/cfs/data/hdb/redo11_s.log SIZE 128M; ... alter database add standby logfile thread 2 group 15 ‘/cfs/data/hdb/redo11_s.log SIZE 128M; 5.2.8 复制数据库
数据库的复制过程有几种方法:
方法1:RMAN “on the fly duplicate”
此种方式仅适用于oracle 11g. 在源端或目标端: $export ORACLE_SID=hdb1 $rman target sys/oracle@hdb auxiliary sys/oracle@hdb_zj rman> duplicate target database for standby from active database nofilenamecheck; 这种方式可以自动备份datafile,control文件到目标端,而且复制过程事主库仍可正常运行。 方法2: 复制数据文件
将主库shutdown, 然后复制所有的数据文件到从库的相应目录。启动主库到mount 状态, 生成从库所用的控制文件,并复制到从库。 sql> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/hdb_zj01.ctl'; sql> alter database open; 方法3: RMAN 备份复制
主库RMAN备份,并复制到从库相同的目录下。 $rman target / RMAN> BACKUP DEVICE TYPE DISK FORMAT '/cfs/backup/%U' DATABASE PLUS ARCHIVELOG; RMAN> BACKUP DEVICE TYPE DISK FORMAT '/cfs/backup/%U' CURRENT CONTROLFILE FOR STANDBY; 在从库RMAN恢复,
$ rman target sys/oracle@CHICAGO auxiliary / RMAN> DUPLICATE TARGET DATABASE FOR STANDBY; 5.2.9 启动备库
在从库上运行 startup mount; 启动到mount 状态。 登录主库,并修改主库相关参数
alter system set fal_server='hdb_zj' scope=both; alter system set fal_client='hdb' scope=both; alter system set db_file_name_convert=hdb_zj','hdb' scope=spfile; alter system set log_file_name_convert='/cfs/data/hdb/','/cfs/data/hdb/' scope=spfile; alter system set log_archive_dest_1='LOCATION=/cfs/archivelog/ VALID_FOR=(all_logfiles,all_roles) db_unique_name=hdb' scope=both; alter system set log_archive_config='DG_CONFIG=(hdb,hdb_zj)' scope=both; alter system set log_archive_dest_2='SERVICE=hdb_zj lgwr ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=hdb' scope=both; alter system set standby_file_management=auto scope=both sid=’*’; 需要重起主库以使参数生效。
5.2.10 启动重做应用
sql> alter database recover managed standby database disconnect; 观察从库的alert_hdb1.log,看是否归档成功应用。 主、从库:观察两边是否一致。 Select max(sequence#) from v$log; select * from v$archive_dest where dest_id=2; 测试日志传输与归档 在主库上运行: sql> alter system switch logfile; 观察从库的alert_hdb1.log,看是否归档成功应用。 SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; 5.2.11 注册第二个节点到CRS
在从库的第二个节点上, $ export ORACLE_SID=hdb2 $ sqlplus / as sysdba sql> startup mount; $srvctl add database –d hdb_zj–o $ORACLE_HOME –n hdb –r physical_standby –s mount $srvctl add instance –d hdb_zj –i hdb_zj1 –n b-ao01 $srvctl add instance –d hdb_zj –i hdb_zj2 –n b-ap01 $srvctl start database –d hdb_zj $srvctl status database –d hdb_zj 5.3 Dataguard 日常管理 5.3.1 数据库切换
在RAC状态下,主从数据库的切换时主从库只能有一个实例在运行状态。在切换前需关掉其他节点,在切换完成后再启动其他节点。 查询主从库状态 sql> select database_role,switchover_status from v$database; 将主库切换到从库状态 sql> alter database commit to switchover to physical standby [with session shutdown]; 如果主库状态为 “sessions active”, 则需要在命令后加上 with session shutdown 语句。 重起原数据库到mount 状态。 在原从库上执行切换命令
sql> alter database commit to switchover to primary [with session shutdown]; shutdown 并startup 新主数据库。 在新的从库启动 redo apply.
sql>alter database recover managed standby database [using current logfile] disconnect; 5.3.2 启用real time redo apply和read only open
sql> alter database recover managed standby database cancel; sql> alter database open; sql> alter database recover managed standby database using current logfile disconnect; 从库将可以以只读模式提供查询和报表服务。
5.3.3 从库过期归档日志删除
Crontab: /home/oracle/script/clrarch.sh >/dev/null 2>&1 clrarch.sh: . $HOME/.profile cd /home/oracle/script export ORACLE_SID=hdb1 sqlplus '/ as sysdba' @rm_applied_arch.sql chmod u+x rm_applied_arch.sh mv rm_applied_archivelog /cfs/archivelog/ cd /cfs/archivelog rm_applied_arch.sh rm_applied_arch.sql set heading off set pagesize 9999 set feedback off spool rm_applied_arch.sh SELECT 'rm '||NAME FROM V$ARCHIVED_LOG where applied='YES' AND first_Time between sysdate-15 and sysdate-3 ORDER BY SEQUENCE#; spool OFF EXIT
5.3.4 Dataguard运行状态检查
5.3.4.1 alert log 日志检查
Dataguard日志复制及应用,以及错误信息在alert log中都有记录。 正常情况下,主库日志通常显示为以下内容:
Thread 1 advanced to log sequence 2851 Current log# 2 seq# 2851 mem# 0: /cfs/data/hdb/redo02.log Mon Nov 17 23:30:44 2008 LNS: Standby redo logfile selected for thread 1 sequence 2851 for destination LOG_ARCHIVE_DEST_2 正常情况下,从库日志通常显示为以下内容:
Mon Nov 17 23:31:55 2008 Media Recovery Waiting for thread 1 sequence 2851 (in transit) Recovery of Online Redo Log: Thread 1 Group 15 Seq 2851 Reading mem 0 Mem# 0: /cfs/data/hdb/standby15.log 5.3.4.2 查询DataGuard日志传输方式
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS列显示进程信息
CLIENT_PROCESS列显示对应的主数据库中的进程 SEQUENCE#列显示归档redo的序列号 STATUS列显示的进程状态
5.3.4.3 查询standby库中所有已被应用的归档文件信息 SQL> select first_time,first_change#,next_change#,sequence# from v$log_history; SQL> SELECT THREAD#, MAX(SEQUENCE#) AS \"LAST_APPLIED_LOG\" FROM V$LOG_HISTORY GROUP BY THREAD#;
5.3.4.4 查询primary server上有哪些日志没有被传输到Standby SQL> SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM (SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1) LOCAL WHERE LOCAL.SEQUENCE# NOT IN (SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND THREAD# = LOCAL.THREAD#); 5.3.4.5 查询dataguard 状态信息
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS; 5.3.4.6 监控恢复操作的进程 SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#, APPLIED_SEQ# FROM V$ARCHIVE_DEST_STATUS; SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; 5.3.4.7 Dataguard 相关视图
Primary Site V$ARCHIVE_DEST V$ARCHIVE_DEST_STATUS V$ARCHIVED_LOG V$DATABASE 当前实例所有的归档日志目标,当前序号,模式和状态 显示归档目标的运行状态和配置信息 显示从控制文件中取得的归档日志信息,包括归档文件名 提供控制文件记录的数据库信息,包括数据库的状态 在线日志文件信息 V$LOG Standby Site V$ARCHIVED_LOG V$DATABASE 显示从控制文件中取得的归档日志信息,包括归档文件名 提供控制文件记录的数据库信息,包括数据库的状态 在线日志/重做日志文件信息 显示与dataguard相关的当前数据库状态信息 V$LOGFILE V$MANAGED_DATAGUARD The V$DATAGUARD_LOG 显示standby日志文件信息 5.3.5故障转移
在某些情况下,不能执行正常的切换操作。如源端主数据库停掉,不能在短时间内恢复或数据库无法恢复甚至需要重建,需要启用从库。值得注意的是,这种操作是destructive操作,一旦执行,备库需要重建。运行此操作需慎重。 sql> alter database recover managed standby database finish force; sql> alter database activate standby database [skip standby logfile]; sql> shutdown immediate; sql> startup mount; sql> alter database open resetlogs; 5.4 常见故障处理
故障一:
Error 12170 received logging on to the standby Errors in file /cfs/home/oracle/diag/rdbms/hdb/hdb1/trace/hdb1_arc4_10407.trc: ORA-12170: TNS:Connect timeout occurred PING[ARC4]: Heartbeat failed to connect to standby 'hdb_zj'. Error is 12170. 这种情况通常是主库不能连到从库,一般是从库当机或关闭。首先在主库用 sqlplus 测试到从库的连接,检查从库状态。从库启动后,这种错误就会消失。 故障二:
数据库的维护步骤:
关闭:先关主库后关从库,
启动:先启动从库然后启动主库。
因篇幅问题不能全部显示,请点此查看更多更全内容