`

Oracle Data Guard详细配置过程

 
阅读更多
作者:隔壁老王 博客:http://wallimn.iteye.com 邮件:wallimn@sohu.com


实验环境:Oracle9.2.0.1,操作系统:XP(虚拟机)

一、 配制过程
1. 在主数据库(primary database)上启用强制生成日志
SQL>shutdown immediate;
SQL>startup mount;
--修改为归档模式
SQL>alter database archivelog;
SQL>alter database open;
--设置强制归档模式
SQL> alter database force logging;
注:查看命令:select  log_mode,force_logging from v$database
  查看是否归档命令:Archive log list

2. 在主数据库上设置本地的归档路径、设置归档进程自动启动
SQL> alter system set log_archive_dest_1='LOCATION=c:/oracle/oradata/GORACLE/archive MANDATORY'
scope=spfile;
SQL> alter system set log_archive_start=true scope=both;
SQL> alter system set remote_archive_enable=’SEND’ scope=spfile; --切换时,要修改成RECEIVE
SQL> alter system set fal_server=’STANDBYDB’ scope=both;
SQL> alter system set fal_client=’PRIMARYDB’ scope=both;
SQL> alter system set standby_archive_dest='c:\oracle\oradata\GORACLE\rmarc' scope=both;
SQL> alter system set standby_file_management=’AUTO’ scope=both;
注:后几个参数,主备切换后会用到。

3. 获取主数据库数据文件信息
SQL> select name from v$datafile;

4. 拷贝主数据库数据文件
1)停止主数据库
SQL> shutdown immediate;
2)拷贝数据文件到临时位置
3)重启主数据库
SQL> startup;

5. 在主数据库为备用数据库创建控制文件(standby专用的控制文件)
SQL> alter database create standby controlfile as 'c:/standbycontrol01.ctl';

6. 在主数据库为备用数据库准备初始化参数文件
SQL> create pfile='c:/initGORACLE.ora' from spfile;

7. 从主数据库拷贝文件到备用服务器(包含:数据文件拷贝、备用控制文件、初始化参数文件和口令文件)
注:standbycontrol01.ctl文件放置到c:/oracle/oradata/GORACLE目录中,并复制一份为standbycontrol02.ctl,与下面的参数文件修改对应。

8. 在备用服务器上修改初始化参数文件(从主库上拷过来的initGORACLE.ora)
*.control_files='c:/oracle/oradata/GORACLE/standbycontrol.ctl01',’c:/oracle/oradata/GORACLE/standbycontrol02.ctl'
*.standby_archive_dest=' c:/oracle/oradata/GORACLE/rmarc'
*.standby_file_management=AUTO
*.remote_archive_enable=TRUE
*.fal_server=’PRIMARYDB’
*.fal_client=’STANDBYDB’
*.remote_archive_enable=’RECEIVE’
*.log_archive_dest_2='SERVICE=PRIMAYDB LGWR SYNC AFFIRM'
注:修改控制文件名称,设置备库专用的归档路径以及一些相关的参数,注意主备切换时需要使用Alter Database 将参数remote_archive_enable修改为’SEND’;最后一个参数主备切换后才会用到。

9. 在备用服务器上仅安装数据库软件,不创建数据库,然后手动创建Oracle服务(for windows)
c:\> oradim -NEW -SID GORACLE -STARTMODE a
注:需要配置环境变量ORACLE_SID=GORACLE

10. 在主、备服务器上创建监听
使用Oracle Net Manager或直接修改listener.ora文件

11. 在备用服务器上允许连接死锁检测
修改SQLNET.ORA文件,增加如下行:
SQLNET.EXPIRE_TIME=2

12. 在主、备服务器上创建Oracle Net服务名
使用Oracle Net Manager或直接修改tnsname.ora文件,两个服务器上都定义两个别名:PRIMARYDB、STANDBYDB,分别指向主库和备库。设置好后,可以使用tnsping命令检查一下。防火墙有时会影响数据库的连通。

13. 在备用服务器上创建SPFILE
SQL> create spfile from pfile='c:\initGORACLE.ora';
注:使用修改过的pfile创建spfile。此时数据库还没有启动,若已启动请关闭shutdown immediate,这样就不用每次启动的时候指定pfile参数了。

14. 启动备用数据库为挂载备库模式
SQL> startup nomount;
SQL> alter database mount standby database;

15. 在备用服务器上启动日志传送服务
SQL> alter database recover managed standby database disconnect from session;

16. 在主数据库上启动归档到备用数据库
1)设置归档初始化参数
SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=STANDBYDB LGWR ASYNC ' scope=both;
-- STANDBYDB为前面配置的别名
--可增加配置属性:VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE),在主备切换的时候有用,其格式为:
VALID_FOR(redo_log_type,database_role)
--redo_log_type: online_logfile, standby_logfile, all_logfiles
--database_role:primary_role, standby_role, all_roles
--一句话总结:当配置有VALID_FOR的数据库处于指定的database_role时,允许归档redo_log_type到log_archive_dest_n所配置的路径。
SQL> alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=both;

2)归档当前日志
SQL> alter system archive log current;

17. 检验物理备用数据库
1)在备用服务器上查看已有归档日志
SQL> select sequence#,first_time,next_time from v$archived_log order by sequence#;
注:可使用alter session set nls_date_format=’yyyy-mm-dd hh:mi:ss’命令,修改日期显示格式,便于观察
2)在主服务器上归档当前日志
SQL> alter system archive log current;
3)在备用数据库上验证新归档日志已收到
SQL> select sequence#,first_time,next_time from v$archived_log order by sequence#;
4)在备用数据库上验证新归档日志已应用
SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;
注:也可以直接检查硬盘上眼归档目录中的归档文件。

如果备库中归档日志生成,则证明配置成功。

二、切换管理角色(正常切换)
--切换的时候,先主后备
将原standby数据库改为MAXIMIZE PERFORMANCE (这个是默认值,先检查一下,如果是就不用切换了)
alter database set standby database to maximize performance;

1) 检查切换是否可行
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
TO STANDBY
1 row selected
--据说TO STANDBY、SESSION ACTIVE都可以

2) 切换原主库为备库
SQL> alter database commit to switchover to physical standby ;
若是SESSION ACTIVE状态,带上with session shutdown
SQL> alter database commit to switchover to physical standby with session shutdown ;

3)关闭原主库数据库,启动为standby模式
--如果设置了remote_archive_enable=’SEND’,要修改成’RECEIVE’
SQL> alter database set remote_archive_enable=’SEND’ scope=both;
SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount standby database;

4 )检查原主库的切换结果
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
SWITCHOVER PENDING
1 row selected

5)将原备库切换成主库
SQL>alter database recover managed standby database cancel;
SQL>alter database recover managed standby datbase finish;
SQL>alter database commit to switchover to primary;
修改remote_archive_enable参数
SQL>alter database set remote_archive_enable=’SEND’ scope=both;

6)关闭原备库、重启
SQL> shutdown immediate;
SQL> startup;

若出错
ORA-16072: a minimum of one standby database destination is required
设置远程归档路径
log_archive_dest_2='SERVICE=PRIMARYDB LGWR MANDATORY REOPEN=60'

7)启动日志恢复服务
SQL> alter database recover managed standby database disconnect from session;

8)检查日志接收情况
SQL> alter system archive log current; 

三、失败接管步骤
1)检查有无归档裂隙,若有须先去除
SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
1       90             92
上面的例子中,线程1的日志为90至92,补全缺失的日志(从主库或其它备库),然后注册这些日志。若有多个线程,其它线程缺失的日志也要补全、注册。
SQL> alter database register physical logfile ’filespec1’;

2)补全缺失的归档日志
SQL> SELECT distinct thread# as thread, max(sequence#) over (partition by thread#) as last FROM v$archived_log;
THREAD       LAST         
1        147
把大于最大日志号(例子中是147)的归档日志也补全、注册,同样每个线程的都要进行。

SQL> select name from v$archived_log where thread#=1 and sequence#=147;
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE ’filespec1’;

3)执行失败接管
若有standby redo日志,执行
SQL> alter database recover managed standby database finish;
否则执行
SQL> alter database recover managed standby database finish skip standby logfile;

4)切换原备库为主库
SQL> alter database commit to switchover to primary;
SQL>alter database set remote_archive_enable=’SEND’ scope=both;
根据需要,修改log_archive_dest_2等归档参数

若执行该命令出错,按下面方式处理
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary error at line 1:
ORA-16139: media recovery required
可以把数据库置于managed recovery 的状态
SQL> alter database recover managed standby database disconnect from session;
SQL> alter database recover managed standby database finish skip standby logfile;
SQL> alter database commit to switchover to primary;

5)准备新的备库,接收日志

6)重启新的主库(也就是刚切换成的)

7)备份新的主库


实践中发现:
如果把一个正常运行的数据库(或者没有备库的主库),直接切换成从库:
Alter database commit to switchover to physical standby with session shutdown;
会收到:ORA-16014、00312两个错误。
应该是切换之后,之日志没有地方写,报的错??(可能是这样,这个不知具体原因)


四、其它常用的命令
1. 创建Standby Redo Logs
1)检验Standby redo logs的方法
SQL> select * from v$standby_log;
SQL> select * from v$logfile where type='STANDBY';
2)在主、备数据库分别创建比联机日志多至少一组的Standby redo log(在主机作standby redo log 是为了作switchover时候用,不是必须的);
   standby redo log的大小应该跟online redo log的大小相等(使用select GROUP#,BYTES,MEMBERS,STATUS from v$log命令查看);
SQL>  alter database recover managed standby database cancel;

SQL> alter database add standby logfile ('c:\oracle\oradata\GORACLE\stdlog01.tdo') size 100M;
SQL> alter database add standby logfile ('c:\oracle\oradata\GORACLE\stdlog02.tdo') size 100M;
SQL> alter database add standby logfile ('c:\oracle\oradata\GORACLE\stdlog03.tdo') size 100M;
SQL> alter database add standby logfile ('c:\oracle\oradata\GORACLE\stdlog04.tdo') size 100M;

查看加入的standby数据库是否开始使用的方法(在maximize PERFORMANCE下不用该日志,也可以反过来理解,maximize PERFORMANCE模式下,不要求使用该日志):
在primary库上调用log switch(ALTER SYSTEM SWITCH LOGFILE),然后在备用库上查看V$STANDBY_LOG视图。
SELECT group#,thread#,sequence#,archived,status FROM v$standby_log;

3)如果控制文件中的MAXLOGFILES参数值太小,无法增加足够的日志组的话,需要重建数据库或控制文件。    SQL> alter database backup controlfile to trace;
将在admin/orcl/udump目录下生成新的trace文件,打开该文件可获得在主/备数据库上分别重建控制文件的脚本。按照其指示执行即可。

2. 在主数据库修改数据保护模式的方法
1)设置初始化参数
SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=STANDBYDB LGWR ASYNC' scope=spfile;
2)数据库重新打开为排他模式装载
SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount exclusive;
3)修改保护模式(任选一种模式)
SQL>alter database set standby database to maximize {PROTECTION | AVAILABILITY | PERFORMANCE}
--最大保护模式、最大可用性模式、最大性能模式
4)打开数据库
SQL> alter database open;
5)检查保护模式的方法
SQL> select database_role,protection_mode,protection_level from v$database;

3. 监视重作日志归档情况
1)确定当前重作日志顺序号
SQL> select thread#,sequence#,archived,status from v$log;
2)确定最近的归档重作日志
SQL> select max(sequence#) from v$archived_log;
3)确定每个目的地的最近归档日志
SQL> select destination,status,archived_thread#,archived_seq# from v$archive_dest_status
          where status <> 'DEFERRED' and  status<>'INACTIVE';
4)查看某特殊位置日志是否收到
SQL> select dest_id from v$archive_dest;
SQL> select local.thread#,local.sequence# from
         (select thread#,sequence# from v$archived_log where dest_id=1)
         local where
         local.sequence# not in
         (select sequence# from v$archived_log where dest_id=2 and thread#=local.thread#);
5)跟踪备用站点的归档日志进程
在主、备数据库设置初始化参数log_archive_trace

4. 监视恢复进程
SQL> SELECT process, status, thread#, sequence#, block#, blocks
          FROM v$managed_standby;

5. 日志应用服务
1)启动/停止日志应用服务
SQL> alter database start logical standby apply;
SQL> alter database stop logical standby apply;
2)确认重做日志已应用V$LOGSTDBY、DBA_LOGSTDBY_PROGRESS
SQL> column status format A50
SQL> column type format A12
SQL> select type,high_scn,status from v$logstdby;
SQL> select applied_scn,newest_scn from dba_logstdby_progress;
3)修补归档间隙
SQL> select * from v$archive_gap;
SQL> select name from v$archived_log where thread#=1 dest_id=1 and sequence# between 7 and 10;
SQL> alter database register logfile '/physical_standby1/thread1_dest/arcr_1_7.arc';
然后重启管理恢复操作(见前面的命令)

6. 监视物理备用数据库日志应用服务
SQL> select process,status,thread#,sequence#,block#,blocks from v$managed_standby;
SQL> select archived_thread#,archived_seq#,applied_thread#,applied_seq# from v$archive_dest_status;
SQL> select registrar,creator,thread#,sequence#,first_change#,next_change# from v$archived_log;
SQL> select thread#,sequence#,first_change#,next_change# from v$log_history;
SQL> select message from v$dataguard_status;

SQL> select file_name,sequence#,first_change#,next_change#,timestamp,dict_begin,dict_end,thread#
from dba_logstdby_log order by sequence#;

SQL> select applied_scn,newest_scn from dba_logstdby_progress;
SQL> alter session set NLS_DATA_FORMAT='DD-MON-YY HH24:MI:SS';
SQL> select l.sequence#,l.first_time,(case when l.next_change# < p.read_scn then 'yes'
                                   when l.first_change# < p.applied_scn then 'current'
                                   else 'no' end) applied
          from dba_logstdby_log l, dba_logstdby_progress p
          order by sequence#;
SQL> column status format a50
SQL> column type format a12
SQL> select type,high_scn,status from v$logstdby;

SQL> column name format a35
SQL> column value format a35
SQL> select name,value from v$logstdby_status where name like 'coordinatior%' or name like 'transactions%';

全文从附件中下载。
分享到:
评论

相关推荐

    oracle data guard文档

    在Oracle Data Guard配置中,主数据库(Production Database)负责处理用户事务,而备用数据库(Standby Database)则在后台同步更新,以便在需要时能够快速接管主数据库的角色。 一、Oracle Data Guard的基本概念...

    oracle10gRAC+Data Guard环境配置以及原理说明(非常详细)

    本篇将详细阐述这两种技术的配置过程及工作原理。 首先,Oracle RAC 是一个集群数据库解决方案,允许多台服务器共享同一个数据库实例,以实现负载均衡和故障切换。在Oracle 10g RAC环境下,数据存储在共享的存储...

    Oracle Data Guard安装配置手册.docx

    以下是对Oracle Data Guard安装配置手册中的关键知识点的详细解释: 1. **引言** - 目的:阐述安装配置Data Guard的主要目标,通常是提高数据库的可用性和安全性。 - 背景:介绍Data Guard的背景,包括其在Oracle...

    Oracle Data Guard RAC TO RAC迁移方案(基于rman备份)V1.1.pdf

    在搭建 Data Guard 之前,需要进行充分的规划和准备工作,包括选择合适的备用数据库、配置网络、配置存储设备等。 3.2 主库 RAC 资源检查 在搭建 Data Guard 之前,需要检查主库 RAC 资源,包括检查 CPU、内存、...

    Oracle Data Guard 11g完全参考手册

    这本精品指南全面介绍Data Guard无与伦比的数据保护、可用性和灾难恢复功能,详细讲解Data Guard基础知识,列出最佳的配置、监视、维护和故障排除实践,并指导您部署完美架构以满足灾难恢复目标和其他要求。...

    Oracle Data Guard实现数据库同步介绍

    Data guard因为技术简单成熟,成本低廉(Oracle自带的功能,不需要单独购买),是广泛采用的一种数据库的高性能与容灾方案。 Oracle Data Guard 确保企业数据的高可用性、数据保护以及灾难恢复。

    网盘资料\oracle相关书籍\Oracle RAC系列之_10gR2 RAC(ASM) Data Guard容灾配置手册

    在"Oracle RAC系列之_10gR2 RAC(ASM) Data Guard容灾配置手册"中,你可能会学习到以下关键知识点: 1. **RAC安装与配置**:如何在多台服务器上安装和配置RAC实例,包括网络设置、OCR(Oracle Cluster Registry)和...

    Linux虚拟机下 配置ORACLE Data Guard (phycial-backup)

    在Linux虚拟机环境下配置Oracle Data Guard,主要涉及到以下几个关键步骤和概念: 1. **主数据库与备库设置**:首先需要在主数据库上正常运行,并确保所有必要的参数设置正确,例如redo log文件大小、数量和位置。...

    Oracle Data Guard白皮书

    ### Oracle Data Guard 白皮书知识点详述 #### 执行概要 - **业务连续性和灾难恢复的重要性**:在全球化企业中,业务连续性和灾难恢复是...- [1] Oracle Data Guard 文档:详细的 Data Guard 使用手册和技术指南。

    oracle data guard配置文档

    根据提供的文件信息,本文将详细解析Oracle Data Guard配置的关键步骤及技术要点,旨在帮助初学者更好地理解并实施Data Guard环境的构建。 ### 一、Oracle Data Guard简介 Oracle Data Guard是一种高可用性解决...

    Oracle Data Guard最佳实践

    以下是对Oracle Data Guard六项最佳实践的详细说明: 1. **配置保护模式** 数据保护模式的选择是Data Guard部署的关键。有三种基本模式:最大保护、最大性能和最大可用性。最大保护模式确保零数据丢失,但可能牺牲...

    12c Data Guard配置手册-01

    本文将基于提供的内容部分详细介绍Data Guard配置的关键知识点。 1. CDB01配置: CDB01(Container Database)是主数据库,用于配置Data Guard环境中的主节点。配置步骤包括: - 启用强制日志模式(Force Logging)...

    oracle data guard 完全参考手册

    本手册详细介绍了Oracle Data Guard的各项功能、配置和管理策略,旨在帮助数据库管理员(DBA)充分利用这一工具来构建和维护安全的数据环境。 1. **Data Guard基础概念** - **主数据库与备用数据库**:Data Guard...

    Oracle Data Guard在图书馆的应用.pdf

    2. 灾难恢复:Oracle Data Guard 可以快速恢复数据库,在灾难恢复过程中不需要停止数据库服务。 3. 高性能:Oracle Data Guard 可以对数据库进行实时同步,确保数据库的高性能和高可用性。 Oracle Data Guard 的...

    Oracle Data Guard配置部署(oracle 12c)

    Oracle Data Guard的配置是一个复杂的过程,涉及到许多步骤和细节。正确配置和维护Data Guard可以显著提高数据库系统的可用性和安全性,是企业级数据库管理的重要组成部分。在实际操作中,还需要考虑监控、性能优化...

    oracle.Data.Guard.11g完全参考手册

    本书的重点在于Oracle 11g版本的数据保护技术,提供了关于如何设置和维护Data Guard配置的详细步骤和技巧。Data Guard是Oracle提供的一种容灾解决方案,旨在通过物理或逻辑备份的方式,在一个或多个备用数据库上维护...

    Oracle Data Guard与Oracle Streams技术对比.pdf

    Oracle Data Guard与Oracle Streams技术对比 Oracle Data Guard是一种Oracle数据库保护技术,用于建立一个或多个备用数据库,通过备用数据库与生产数据库的同步,以实现对数据库的保护。当发生错误、故障、灾难所...

Global site tag (gtag.js) - Google Analytics