1? 实验环境
主机:192.168.2.128
备机:192.168.2.129
以上oracle 10G dataguard环境已搭建成功,由此测试switchover 实现dg主备切换
2? 注意事项
1)确认主库和从库间网络连接通畅;
2)确认没有活动的会话连接在数据库中;
3)PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;
4)确保STANDBY数据库处于ARCHIVELOG模式;
5)如果设置了REDO应用的延迟,那么将这个设置去掉;
6)确保配置了主库和从库的初始化参数,使得切换完成后,DATA?GUARD机制可以顺利的运行。
3? 主备切换
3.1???? 主库 192.168.2.128
3.1.1? 登入
[oracle@linux128 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 22 08:40:49 2014
Copyright (c) 1982, 2005, Oracle.? All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
3.1.2? 查看switchover状态
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
SESSIONS ACTIVE
3.1.3? 查询session连接数,切换成备库
SQL> select count(*) from v$session where username is not null;
COUNT(*)
1
虽然当前数据库的状态是SESSION ACTIVE ,而不是TO STANDBY,但是查询V$SESSION会话,确认除了当前会话外,其他都是系统会话,那么就可以在主库进行SWITCHOVER切换了。
SQL> alter database commit to switchover to physical standby;
Database altered.
遇到ORA-01093错误
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY with session shutdown;
3.1.4? 关闭数据库
SQL> shutdown immediata;
SP2-0717: illegal SHUTDOWN option
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
3.1.5? 开启数据库mount
SQL> startup mount
ORACLE instance started.
Total System Global Area? 167772160 bytes
Fixed Size????????? ??? 1218316 bytes
Variable Size????????????? ?? 79694068 bytes
Database Buffers??? ?? 83886080 bytes
Redo Buffers???????????? ??? 2973696 bytes
Database mounted.
Database altered.
3.1.6? 查看数据库模式
SQL> select status,database_mode from v$archive_dest_status;
STATUS???? ? DATABASE_MODE
--------- ---------------
VALID?????? ? MOUNTED-STANDBY
VALID?????? ? MOUNTED-STANDBY
INACTIVE? MOUNTED-STANDBY
INACTIVE? MOUNTED-STANDBY
INACTIVE? MOUNTED-STANDBY
INACTIVE? MOUNTED-STANDBY
INACTIVE? MOUNTED-STANDBY
INACTIVE? MOUNTED-STANDBY
INACTIVE? MOUNTED-STANDBY
INACTIVE? MOUNTED-STANDBY
VALID?????? ? MOUNTED-STANDBY
看到都收standby状态。
3.2???? 备机 192.168.2.129
3.2.1? ?查看switchover状态
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
----------------------------------------
TO PRIMARY
3.2.2? 切换成主库并打开数据库
SQL> alter database commit to switchover to primary;
Database altered.
--如果报ORA-16139: media recovery required,可能是由于未应用日志引起,可先执行
ALTER ?DATABASE RECOVER MANAGED STANDBY ?DATABASE DISCONNECT FROM SESSION;
SQL> alter database open;
Database altered.
3.2.3? 查看数据库模式
SQL> select status,database_mode from v$archive_dest_status;
STATUS????????????? ?? DATABASE_MODE
------------------ ------------------------------
VALID???????????????? ?? OPEN
VALID???????????????? ?? MOUNTED-STANDBY
INACTIVE????????? ?? OPEN
INACTIVE????????? ?? OPEN
INACTIVE????????? ?? OPEN
INACTIVE????????? ?? OPEN
INACTIVE????????? ?? OPEN
INACTIVE????????? ?? OPEN
INACTIVE????????? ?? OPEN
INACTIVE????????? ?? OPEN
Standby数据库已经切换成PRIMARY数据库了,将standby(原primary 192.168.2.128)开始接受并恢复主库的日志就可以了,在192.168.2.128上,输入如下:
SQL> alter database recover managed standby database disconnect from session;
Database altered.
3.2.4? 查看线程
SQL> select process,status from v$managed_standby;
PROCESS?? STATUS
--------- ------------
ARCH??????? ? CONNECTED
ARCH??????? ? CONNECTED
ARCH??????? ? CONNECTED
ARCH??????? ? CONNECTED
ARCH??????? ? CONNECTED
RFS?? ? IDLE
RFS?? ? IDLE
RFS?? ? IDLE
MRP0?????? ? WAIT_FOR_LOG
至此,主备已成功切换。
3.3???? 插入数据测试
现 主库192.168.2.129?? 备库 192.168.2.128
3.3.1? 主库(129)上创建数据
SQL> create table ceshi(id number);
Table created.
SQL> insert into ceshi values(1);
1 row created.
SQL> select * from ceshi;
ID
----------
1
SQL> alter system switch logfile;
System altered.
3.3.2? 备机(128)上查看数据
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database open;
Database altered.
SQL> select * from ceshi;
ID
----------
1
至此,主备切换,测试OK
3.3.3? 备库接受主库的日志
SQL>? alter database recover managed standby database disconnect from session;
Database altered.