Oracle 10.2.0.5 DG For Windows 2008 R2

Oracle 10g R2 DATAGUARD 搭建 


目录
Oracle 10g R2 DATAGUARD 搭建 1
1 环境 3
2 准备条件 3
3 Primary操作 3
3.1 设置主数据库为force logging 模式 3
3.2 设置主数据库为归档模式,并以mount 启动数据库 3
3.3 添加"备用联机日志文件" 3
3.4 创建主库的初始化参数给备库用 4
3.5 在主库创建监听和配置tnsnams.ora 4
3.5.1 配置初始化参数文件 4
3.6 用Rman备份,不用停机 5
3.7 启动主数据库 5
4 Standby操作 5
4.1 以mount 启动备库,添加"备用联机日志文件" 5
4.2 在备库创建监听和配置tnsnams.ora (同主库) 6
4.3 测试主备之间网络连通 6
4.4 配置备库初始化参数 6
4.5 启动备用数据库 6
5 测试 7
5.1 在备库将实例启动到mount 状态: 7
5.2 在主库启动实例: 7
5.3 在主库验证日志: 7
5.4 在备库检查日志是否和主库一致 7
6 备库standby和read only切换 8
6.1 主库创建一个表,用于备库打开时验证数据 8
6.2 将备库启动到read only状态 8
6.3 切换回standby状态. 8
7 主/备库切换 8
7.1 主库切换成备库 9
7.2 备库切换成主库 9
8 切换保护模式 10
8.1 在primary上操作 10
8.2 在standby上操作 10
9 创建 Data Guard Broker 配置 11


1 环境
Windows 20008 server
Oracle 10.2.0.4
主机:172.18.18.200(primary)
备机:172.18.18.201(standby)
2 准备条件
分别在primary、standby上安装数据库,并自动创建实例;安装路径、数据库实例名(orcl)和密码都设置成一样
3 Primary操作
3.1 设置主数据库为force logging 模式
SQL>sqlplus "/as sysdba"
SQL>alter database force logging;
3.2 设置主数据库为归档模式,并以mount 启动数据库
SQL>archive log list
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>archive log list
3.3 添加"备用联机日志文件"
SQL>select * from v$logfile;
再添加:
alter database add standby logfile group 4 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo04.log') size 50m;
alter database add standby logfile group 5 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo05.log') size 50m;
alter database add standby logfile group 6 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo06.log') size 50m;
alter database add standby logfile group 7 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo07.log') size 50m;
3.4 创建主库的初始化参数给备库用
SQL>Create pfile from spfile;
产生的文件名为initorcl.ora 存放目录默认放在%ORACLE_HOME%/database下
3.5 在主库创建监听和配置tnsnams.ora
listener.ora配置如下:
SID_LIST_LISTENER中添加:
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = c:\oracle\product\10.2.0\db_1)
(SID_NAME = orcl)
)
tnsnames.ora配置如下:
添加:
primary =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.18.200)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
standby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.18.201)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
3.5.1 配置初始化参数文件
*.log_archive_format='%T%S%r.ARC'
*.DB_UNIQUE_NAME='primary'
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='location=c:\oracle\product\10.2.0\oradata\arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary'
*.log_archive_dest_2='SERVICE=standby lgwr 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'
关闭数据库,在用initorcl.ora重启
SQL>startup pfile='c:\oracle\product\10.2.0\db_1\database\initorcl.ora';
SQL> create spfile from pfile ='C:\oracle\pfile\initorcl.ora';
3.6 用Rman备份,不用停机
$ rman target /
RMAN>backup full format 'C:\oracle\rman_backup\FULL_%d_%T_%s.bak' database include current controlfile for standby;
RMAN>sql 'alter system archive log current';
RMAN>Backup ArchiveLog all format='C:\oracle\rman_backup\arch_%d_%T_%s.bak';
备份完后将备份文件拷到standby上同样的目录,强调:同样的目录(C盘),在standby进行rman 恢复即可
3.7 启动主数据库
SQL>startup
4 Standby操作
4.1 以mount 启动备库,添加"备用联机日志文件"
SQL>sqlplus "/as sysdba"
SQL>shutdown immediate
SQL>startup mount
先查看日志文件位置:
SQL>select * from v$logfile;
再添加:
alter database add standby logfile group 4 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo04.log') size 50m;
alter database add standby logfile group 5 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo05.log') size 50m;
alter database add standby logfile group 6 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo06.log') size 50m;
alter database add standby logfile group 7 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\redo07.log') size 50m;
4.2 在备库创建监听和配置tnsnams.ora (同主库)
4.3 测试主备之间网络连通
Primary:
C:>lsnrctl start
C:>tnsping standby
Standby:
C:>lsnrctl start
C:>tnsping primary
4.4 配置备库初始化参数
编辑initorcl.ora添加以下内容
*.log_archive_format='%T%S%r.ARC'
*.DB_UNIQUE_NAME='standby'
*.log_archive_config='DG_CONFIG=(primary,standby)'
*.log_archive_dest_1='location=c:\oracle\product\10.2.0\oradata\arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'
*.log_archive_dest_2='SERVICE=primary lgwr 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'
4.5 启动备用数据库
SQL>sqlplus "/as sysdba"
SQL>startup nomount pfile='c:\oracle\product\10.2.0\db_1\database\initorcl.ora';
SQL> create spfile from pfile = 'C:\oracle\pfile\initorclstandby.ora';
重启主、备库监听,用Rman还原数据库
>rman target sys/sys@primary auxiliary /
RMAN>duplicate target database for standby dorecover nofilenamecheck;
>sqlplus / as sysdba
SQL>alter database recover managed standby database disconnect from session;
5 测试
DG 启动顺序:
 启动顺序:先standby ,后primary;
 关闭顺序:先primary 后standby;
5.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;
5.2 在主库启动实例:
SQL>startup;
5.3 在主库验证日志:
SQL>alter system switch logfile;
SQL>select max(sequence#) from v$archived_log;
5.4 在备库检查日志是否和主库一致
SQL>select max(sequence#) from v$archived_log;
注:主备查询结果一致,Data Guard 搭建结束。
6 备库standby和read only切换
6.1 主库创建一个表,用于备库打开时验证数据
SQL>create table test02 as select * from v$parameter;
SQL>commit;
SQL>alter system switch logfile;
6.2 将备库启动到read only状态
 如果standby db处于mount状态,则可以通过下面的命令启动到read-only状态
C:\Users\Administrator>sqlplus / as sysdba
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
-------------------- --------------------------------
MOUNTED PHYSICAL STANDBY
SQL>alter database recover managed standby database cancel;
SQL>alter database open;
 如果standby db数据库处于关闭状态,则执行下面的命令启动到read-only状态
SQL>startup
6.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打开的时间越长,以后做日志应用的时间就越长,如果主库故障,则启用备库到正常状态的时间就越长,这是需要您来权衡的。
注:如果切换后发现日志不能同步,重新切换一下即可
7 主/备库切换
一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。 在进行DATA GUARD的物理STANDBY切换前需要注意:
 确认主库和从库间网络连接通畅;
 确认没有活动的会话连接在数据库中;
 PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;
 确保STANDBY数据库处于ARCHIVELOG模式;
 如果设置了REDO应用的延迟,那么将这个设置去掉;
 确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。
7.1 主库切换成备库
 查看switchover 状态
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
如果返回to standby
SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
否则
SQL>Alter database commit to switchover to physical standby with session shutdown;
 启动到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;
7.2 备库切换成主库
 查看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;
 查看数据库模式
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错误,按以下操作即可:
SQL> Alter system set log_archive_dest_2='service=primary DB_UNIQUE_NAME=orcl' scope=spfile;
8 切换保护模式
8.1 在primary上操作
 首先查看当前的保护模式
SQL>select protection_mode,protection_level from v$database;
 修改初始化参数
SQL>alter system set log_archive_dest_2='SERVICE=standby OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby';
 重启数据库并设置新的数据保护模式
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},分别对应最大保护,最高可用性及最高性能。
8.2 在standby上操作
 修改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';
 查看当前的保护模式
SQL>select instance_name from v$instance;
INSTANCE_NAME
----------------
standby
SQL>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
 停掉standby数据库,再查看primary数据库状态
SQL>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY RESYNCHRONIZATION
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;
Standby数据库shutdown后,primary数据库保护级别切换为待同步。
注:主库的保护模式修改之后,备库的模式也会改变,和主库保持一致。
9 创建 Data Guard Broker 配置
为避免单点故障而导致切换不成功,Oracle推荐Broker单独安装在一台机器。
 连接到主数据库,使用以下命令设置 DG_BROKER_START 的值:
ALTER SYSTEM SET dg_broker_start = true;
 连接到物理备用数据库,使用以下命令设置 DG_BROKER_START 的值:
ALTER SYSTEM SET dg_broker_start = true;
 创建用于监听器的服务
定义用于监听器的服务包 GLOBAL_DBNAME
的 db_unique_name_DGMGRL.db_domain 值。
1. 要在代理程序运行期间启用 DGMGRL 来重新启动实例,必须将一个具有特定名称的服务静态注册到每个实例的本地监听器。必须将 GLOBAL_DBNAME 属性的值设置为<db_unique_name>_DGMGRL.<db_domain> 的连接。
检查 %oracle_home%/wkdir/dg_broker 中的 listener.ora 文件,
检查%ORACLE_HOME%/network/admin/listener.ora。特别注意standby_DGMGRL 和 primary_DGMGRL 的列表项。用%oracle_home%/wkdir/dg_broker/listener. 代替%ORACLE_HOME%/network/admin/listener.ora
2. 使用 lsnrctl reload 命令重新加载监听器。
使用 lsnrctl status 命令验证新的监听器配置。服务列表应该包括针对 standby1_DGMGRL和 primary_DGMGRL 的项:
 创建 Broker 配置
在这一任务中,您将创建 Data Guard Broker 配置。
1. 调用 DGMGRL 并连接至主数据库。为 SYS 输入您的口令。
set oracle_sid=primary
dgmgrl
connect sys
2. 创建 Broker 配置,包括主数据库的配置文件。
DGMGRL> Create configuration ‘DGConfig’ AS primary database is ‘orcl’ connect
identifier is orcl
3. 显示相关配置信息
DGMGRL> show configuration
4. 使用以下命令将物理备用数据库添加到broker配置中
DGMGRL> add database ‘orcl’ as connect identifier is standby;
5. 使用 SHOW CONFIGURATION 命令验证 standby数据库已添加到配置中。
DGMGRL>show configuration
6. 启用broker配置
 成功为主数据库和备用数据库设置好 Data Guard 环境后,现在可以启用 broker 配置了。
1. 启用整个配置。
DGMGRL> enable configuration
2. 验证配置已成功启用。
DGMGRL> show configuration
 通过切换测试 Broker
使用 Data Guard Broker 配置来切换主数据库与备用数据库的角色,对 Data Guard Broker 配置进行测试。
1. 执行 SWITCHOVER 命令测试 Data Guard Broker 配置。
DGMGRL> switchover to standby;
2. 验证 SWITCHOVER 已成功完成。注意,现在 standby是主数据库,而 orcl 是物理备用数据库。
DGMGRL> show configuration
3. 再次执行 SWITCHOVER 命令,将您的 Data Guard 环境返回到初始的数据库角色。这可能需要一些时间来完成。
DGMGRL> Switchover to standby;
4. 验证第二个 SWITCHOVER 已成功完成。注意,现在 orcl 又是主数据库了,而 standby仍为物理备用数据库。退出 DGMGRL 完成本教程。
DGMGRL> show configuration

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值