您的位置:首页 > 数据库 > Oracle

Oracle 10.2.0.5 DG For Windows 2008 R2

2013-09-11 10:42 465 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: