记录一下在windows里用VMware虚拟机安装Oracle Dataguard的过程。
1,在VMWare安装两台Linux AS 5虚拟机,不用安装两次,在一台安装完成后(Linux 5以及Oracle后) ,拷贝这个虚拟机的文件修改部分内容作为第二台虚拟机的文件直接打开。
参照http://www.5ienet.com/note/html/srac/rac_step_setup_second_note.shtml
2,将两台虚拟机的网络连接配置为host-only
IP信息如下:这样能保证虚拟机之间网络能连接。
windows主机的 VMware Virtual Ethernet Adapter for VMnet1
172.16.245.1
255.255.255.0
172.16.245.1
dg1 虚拟机1的IP配置如下
172.16.245.100
255.255.255.0
172.16.245.1
dg2 虚拟机2的IP配置如下
172.16.245.101
255.255.255.0
172.16.245.1
*注意要将Linux虚拟机的防火墙关闭。
Oracle的官方文档:http://docs.oracle.com/cd/B19306_01/server.102/b14239/create_ps.htm#g88234
3,在第一台虚拟机上创建数据库(db name 为test),作为primary数据库。
数据库信息如下:
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.0.2/db_1
export ORACLE_SID=test
然后执行下面步骤:
将数据库改为归档模式参照:http://blog.csdn.net/kkdelta/article/details/7193738
然后做主数据库的准备工作
1,SQL> ALTER DATABASE FORCE LOGGING;
2,编辑参数文件,以目前的spfile为基准,创建一个pfile,然后在这个基础上编辑。
create pfile from spfile; 会在/opt/oracle/product/10.0.2/db_1/dbs下创建inittest.ora
加入下面的内容:
#--------------------------
DB_UNIQUE_NAME=testp
LOG_ARCHIVE_CONFIG='DG_CONFIG=(testp,tests)'
LOG_ARCHIVE_DEST_1='LOCATION=/opt/oracle/product/10.0.2/oradata/test/arclog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testp'
LOG_ARCHIVE_DEST_2='SERVICE=test_s LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=tests'
FAL_SERVER=test_s
FAL_CLIENT=test_p
STANDBY_FILE_MANAGEMENT=AUTO
这里的 testp是主数据库的unique名字,tests是备用数据库的unique名字,test_p是主数据库的tns,test_s是备用数据库的tns。
这些tns都需要在两台虚拟机上配置(tnsnames.ora)。
3,将数据库关闭后做一份主数据库的数据文件备份,
shutdown immediate
将第一台虚拟机中 /opt/oracle/product/10.0.2/oradata/test 的数据文件(.dbf)拷贝到第二台同样的文件夹。
4,将主数据启动到mount,创建standby 数据库的控制文件
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/opt/oracle/product/10.0.2/oradata/stdby/stdby.ctl';
SQL> ALTER DATABASE OPEN;
将创建好的控制文件拷贝到第二台虚拟机的位置: /opt/oracle/product/10.0.2/oradata/test/stdby.ctl
5,为备用数据库准备参数文件,将主数据库的参数文件拷贝一份到第二台虚拟机同样的目录后如下修改。
修改 *.control_files='/opt/oracle/product/10.0.2/oradata/test/stdby.ctl'
将上面第二步主数据库参数文件添加的内容替换成下面的内容:
#---------------------------
DB_UNIQUE_NAME=tests
LOG_ARCHIVE_CONFIG='DG_CONFIG=(testp,tests)'
LOG_ARCHIVE_DEST_1='LOCATION=/opt/oracle/product/10.0.2/oradata/test/arclog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=tests'
LOG_ARCHIVE_DEST_2= 'SERVICE=test_p LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=testp'
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=test_p
FAL_CLIENT=test_s
6,将主数据库的口令文件拷贝到备用数据库的虚拟机。
7,在第二台虚拟机上为备用数据库创建listener
8,打开备用数据库到mount,创建standby logfile
alter database mount
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/product/10.0.2/oradata/test/stdby_redo01.log' size 20M;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/product/10.0.2/oradata/test/stdby_redo02.log' size 20M;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/product/10.0.2/oradata/test/stdby_redo03.log' size 20M;
9,在standby数据库上开始redo应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
10,在主数据库上切换日志,看归档日志是否会传送到standby数据库。
SQL> ALTER SYSTEM SWITCH LOGFILE;
查看日志是否传到备用数据库。
**standby数据库只能以只读的方式打开
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
alter database open read only;
在备用数据库上查看表内容:
select * from t1;
在只读模式下,主数据库的归档日志仍然会传到standby数据库,但是standby数据库不会应用归档日志。
和Dataguard相关的一下视图
v$dataguard_config
v$dataguard_status
v$dataguard_stats
v$managed_standby
主从切换:
1,在primary数据库创建standby日志
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/product/10.0.2/oradata/test/stdby_redo01.log' size 20M;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/product/10.0.2/oradata/test/stdby_redo02.log' size 20M;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/product/10.0.2/oradata/test/stdby_redo03.log' size 20M;
2,在primary机上将所有外部应用停止,开始切换
alter database commit to switchover to physical standby with session shudown;
shutdown immediate;
startup mount;
3,将standby机切换到primary,
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
alter database commit to switchover to primary;
alter database open;
standby数据库会自动创建redo log日志文件组。
4,在最初的primary开启日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
如果是primary数据库发生了故障,启用standby数据库为应用服务。
1,应用所有日志,recover standby database;
2,启用standby数据库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
shutdown immediate;
startup open;