一、环境
Windows20003server
Oracle10.2.0.1
主机:192.168.180.104(primary)
备机:192.168.180.105(standby)
二、准备条件
分别在primary、standby上安装数据库,并自动创建实例;安装路径、数据库实例名(powerdes)和密码都设置成一样
三、Primary操作
1、设置主数据库为force logging模式
SQL>sqlplus"/as sysdba"
SQL>alter database force logging;
2、设置主数据库为归档模式,并以mount启动数据库
SQL>archive log list
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>archive log list
3、添加"备用联机日志文件"
SQL>select*from v$logfile;
再添加:
alter database add standby logfile group4('D:\ORACLE\PRODUCT\10.2.0\ORADATA\POWERDES\redo04.log')size 50m;
alter database add standby logfile group5('D:\ORACLE\PRODUCT\10.2.0\ORADATA\POWERDES\redo05.log')size 50m;
alter database add standby logfile group6('D:\ORACLE\PRODUCT\10.2.0\ORADATA\POWERDES\redo06.log')size 50m;
alter database add standby logfile group7('D:\ORACLE\PRODUCT\10.2.0\ORADATA\POWERDES\redo07.log')size 50m;
4、创建主库的初始化参数给备库用
SQL>Create pfile from spfile;
产生的文件名为a存放目录默认放在$ORACLE_HOME/database下
5、在主库创建监听和配置a
SID_LIST_LISTENER中添加:
(SID_DESC=
(GLOBAL_DBNAME=powerdes)
(ORACLE_HOME=D:\oracle\product\10.2.0\db_1)
(SID_NAME=powerdes)
)
添加:
primary=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.180.104)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=powerdes)
)
)
standby=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.180.105)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=powerdes)
)
)
6、在a中添加以下内容:
*.log_archive_format='%T%S%r.ARC'
*.DB_UNIQUE_NAME='primary'
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='location=D:\oracle\product\10.2.0\oradata\arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary'
*.log_archive_dest_2='SERVICE=standby arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER='standby'
*.FAL_CLIENT='primary'
关闭数据库,在用a重启
SQL>startup pfile='D:\oracle\product\10.2.0\db_1\a';
7、用Rman备份,不用停机
$rman target/
RMAN>backup full format'D:/FULL_%d_%T_%s.bak'database include current controlfile for standby;
RMAN>sql'alter system archive log current';
RMAN>Backup ArchiveLog all format='D:/arch_%d_%T_%s.bak';
备份完后将备份文件拷到standby上同样的目录,强调:同样的目录(D盘),在standby进行rman恢复即可
8、启动主数据库
SQL>startup
四、Standby操作
1、以mount启动备库,添加"备用联机日志文件"
SQL>sqlplus"/as sysdba"
SQL>shutdown immediate
SQL>startup mount
先查看日志文件位置:
SQL>select*from v$logfile;
再添加:
alter database add standby logfile group4('D:\ORACLE\PRODUCT\10.2.0\ORADATA\POWERDES\redo04.log')size 50m;
alter database add standby logfile group5('D:\ORACLE\PRODUCT\10.2.0\ORADATA\POWERDES\redo05.log')size 50m;
alter database add standby logfile group6('D:\ORACLE\PRODUCT\10.2.0\ORADATA\POWERDES\redo06.log')size 50m;
alter database add standby logfile group7('D:\ORACLE\PRODUCT\10.2.0\ORADATA\POWERDES\redo07.log')size 50m;
2、在备库创建监听和配置a(同主库)
3、测试主备之间网络连通
Primary:
C:>lsnrctl start
C:>tnsping standby
Standby:
C:>lsnrctl start
C:>tnsping primary
4、配置备库初始化参数recover
编辑$ORACLE_HOME/database目录下的a添加以下内容
*.log_archive_format='%T%S%r.ARC'
*.DB_UNIQUE_NAME='standby'
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='location=D:\oracle\product\10.2.0\oradata\arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'
*.log_archive_dest_2='SERVICE=primary arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER='primary'
*.FAL_CLIENT='standby'
5、启动备用数据库
SQL>sqlplus"/as sysdba"
SQL>startup nomount pfile='D:\oracle\product\10.2.0\db_1\a';
重启主、备库监听,用Rman还原数据库
$rman target sys/admin@primary auxiliary/
RMAN>duplicate target database for standby dorecover nofilenamecheck;
SQL>alter database mount standby database;--该语句如果报错可忽略
SQL>alter database recover managed standby database disconnect from session;
五、测试
注意Data Guard启动顺序:
●启动顺序:先standby,后primary;
●关闭顺序:先primary后standby;
1、在备库将实例启动到mount状态:
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database cancel;--该语句如果报错,可忽略SQL>alter database recover managed standby database disconnect from session;
#如果有需要应用的日志并想手工应用,可以运行如下命令
SQL>recover automatic standby database;
2、在主库启动实例:
SQL>startup;
3、在主库验证日志:
SQL>alter system switch logfile;
SQL>select max(sequence#)from v$archived_log;
4、在备库检查日志是否和主库一致
SQL>select max(sequence#)from v$archived_log;
注:主备查询结果一致,Data Guard搭建结束。
六、备库standby和read only切换
1、主库创建一个表,用于备库打开时验证数据
SQL>create table test02as select*from v$parameter;
SQL>commit;
SQL>alter system switch logfile;
2、将备库启动到read only状态
1)如果standby db处于mount状态,则可以通过下面的命令启动到read-only状态SQL>select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
-------[oracle@standbydb~]$sqlplus/as sysdba
-------------------
MOUNTED PHYSICAL STANDBY
SQL>alter database recover managed standby database cancel;
SQL>alter database open;
2)如果standby db数据库处于关闭状态,则执行下面的命令启动到read-only状态
SQL>startup
3、切换回standby状态.
断开所有链接,执行以下语句
SQL>alter database recover managed standby database disconnect from session;
SQL>select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
--------------------------
MOUNTED PHYSICAL STANDBY
注:在standby db打开的过程中,主库的日志文件还是传递过来,只不过不做日志的应用。所以standby db打开的时间越长,以后做日志应用的时间就越长,如果主库故障,则启用备库到正常状态的时间就越长,这是需要您来权衡的。
注:如果切换后发现日志不能同步,重新切换一下即可
七、主/备库切换
一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是
可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。在进行DATA GUARD的物理STANDBY切换前需要注意:
●确认主库和从库间网络连接通畅;
●确认没有活动的会话连接在数据库中;
●PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;
●确保STANDBY数据库处于ARCHIVELOG模式;
●如果设置了REDO应用的延迟,那么将这个设置去掉;
●确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。
1、主库切换成备库
1)查看switchover状态
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
如果返回to standby
安装oracle10g
SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
否则
SQL>Alter database commit to switchover to physical standby with session shutdown;
2)启动到mount和应用日志状态
SQL>shutdown immediate
SQL>startup nomount
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;
查看数据库模式
SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status;
SQL>select status,database_mode from v$archive_dest_status;
2、备库切换成主库
1)查看switchover状态
SQL>select switchover_status from v$database;
如果返回TO PRIMARY
SQL>alter database commit to switchover to primary;
否则
SQL>alter database commit to switchover to primary with session shutdown
启动数据库
SQL>shutdown immediate
SQL>startup
SQL>alter system switch logfile;
SQL>select max(sequence#)from v$archived_log;
2)查看数据库模式
SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status;
SQL>select status,database_mode from v$archive_dest_status;
注:如果做了switchover,主库参数设置成以下方式,会触发ora-16009错误,按以下操作即可:
Alert system set log_archive_dest_2=’service=primary DB_UNIQUE_NAME=orcl’scope=spfile;
八、切换保护模式
1、在primary上操作
1)首先查看当前的保护模式
SQL>select protection_mode,protection_level from v$database;
2)修改初始化参数
SQL>alter system set log_archive_dest_2='SERVICE=standby OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=standby';
3)重启数据库并设置新的数据保护模式
SQL>shutdown immediate
SQL>startup mount
SQL>alter database set standby database to maximize availability;
SQL>alter database open;
SQL>select protection_mode,protection_level from v$database;
提示:maximize后可跟{PROTECTION|AVAILABILITY|PERFORMANCE},分别对应最大保护,最高可用性及最高性能。
2、在standby上操作
1)修改standby初始化参数设置(主要考虑角切换,如果只测试的话本步可跳过)
SQL>alter system set log_archive_dest_2='SERVICE=primary OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=primary';
2)查看当前的保护模式
SQL>select instance_name from v$instance;
INSTANCE_NAME
----------------
standby
SQL>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
----------------------------------------