admin 管理员组

文章数量: 887031


2024年1月15日发(作者:具影响力的公司总经理培训)

第五部分 ORACLE 11G RAC TO RAC

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

5.2 Dataguard Physical Standby 数据库创建

5.2.1 修改

修改源端和目标端的, 加入以下内容:

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

er=’LISTENERS_HDB_ZJ’

5.2.5 生成spfile参数文件

在目标端用pifle启动数据库到nomount状态。从pfile 生成spfile.

$export ORACLE_SID=hdb1

$sqlplus / as sysdba

sql>startup nomount pfile=’?/dbs/hdb_’;

sql>create spfile=’/cfs/data/hdb/’ from pfile=’?/dbs/hdb_’;

$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_ SIZE 128M;

...

alter database add standby logfile thread 2 group 15

‘/cfs/data/hdb/redo11_ 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_';

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_,看是否归档成功应用。

主、从库:观察两边是否一致。

Select max(sequence#) from v$log;

select * from v$archive_dest where dest_id=2;

测试日志传输与归档

在主库上运行:

sql> alter system switch logfile;

观察从库的alert_,看是否归档成功应用。

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/ >/dev/null 2>&1

:

. $HOME/.profile

cd /home/oracle/script

export ORACLE_SID=hdb1

sqlplus '/ as sysdba' @rm_applied_

chmod u+x rm_applied_

mv rm_applied_archivelog /cfs/archivelog/

cd /cfs/archivelog

rm_applied_

rm_applied_

set heading off

set pagesize 9999

set feedback off

spool rm_applied_

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/

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/

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 #, CE# FROM (SELECT THREAD#,

SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1) LOCAL WHERE

CE# NOT IN

(SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND 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_:

ORA-12170: TNS:Connect timeout occurred

PING[ARC4]: Heartbeat failed to connect to standby 'hdb_zj'. Error is 12170.

这种情况通常是主库不能连到从库,一般是从库当机或关闭。首先在主库用 sqlplus 测试到从库的连接,检查从库状态。从库启动后,这种错误就会消失。

故障二:

数据库的维护步骤:

关闭:先关主库后关从库,

启动:先启动从库然后启动主库。


本文标签: 数据库 主库 日志