DataGuard相同SID物理Standby搭建
Oracle Data Guard 是针对企业数据库的最有效和最全面的数据可用性、数据保护和灾难恢复解决方案。它提供管理、监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数据不受故障、灾难、错误和损坏的影响。
Data Guard 优点
灾难恢复和高可用性
Data Guard 提供了一个高效、全面的灾难恢复和高可用性解决方案。自动故障切换和易于管理的转换功能允许主数据库和备用数据库之间的快速角色转换,从而使主数据库因计划中和计划外的中断所导致的停机时间减到最少。
完善的数据保护
备用数据库还针对数据损坏和用户错误提供了有效防护。主数据库上的存储器级物理损坏不会传播到备用数据库上。同样,导致主数据库永久损坏的逻辑损坏或用户错误也能够得到解决。最后,重做数据在到达备用数据库并在以后应用到备用数据库时得到验证。
有效利用系统资源
物理备用数据库可用于备份和只读报表,这样既减少了主数据库的负载又节省了宝贵的 CPU 和 I/O 周期。物理备用数据库还可以在不牺牲数据保护的同时在物理备用数据库和开启读/写功能的数据库间轻松转换。逻辑备用数据库支持对同步的备用数据库进行读写访问,和/或向备用数据库添加本地表来实现更新,和/或创建额外索引来优化读取性能。
数据保护中的灵活性平衡性能需求和可用性
Oracle Data Guard 提供最大程度的保护、最大的可用性和最佳性能模式来帮助企业平衡数据可用性和系统性能需求。
防止通信失败
如果主数据库和一个或多个备用数据库失去网络连接,重做数据将不能从主数据库发送到这些失去连接的备用数据库。一旦连接重新建立起来,Data Guard 将自动检测丢失的重做数据,必要的存档日志将自动传输到备用数据库。备用数据库将与主数据库重新同步,无需管理员手动干预。
简单的集中式管理
Data Guard Broker 实现了 Data Guard 配置中跨多个数据库的管理和监视任务的自动化。管理员可以借助 Oracle 企业管理器或 Broker 自己专用的命令行界面 (DGMGRL) 来利用这个集成管理框架。
一、环境介绍
1. 主数据库环境
操作系统版本 : Red Hat 5.8 x86_64
IP地址 : 192.168.100.121
数据库版本 : Oracle 11.2.0.1 x86_64
数据库名 : fxopt
数据库SID : fxopt
Db_unique_name : fxopt
Instance_name : fxopt
网络服务名 : PRIMARY
2. 备数据库环境
操作系统版本 : Red Hat 5.8 x86_64
IP地址 : 192.168.100.122
数据库版本 : Oracle 11.2.0.1 x86_64(只安装oracle数据库软件)
数据库名 : fxopt
数据库SID : fxopt
Db_unique_name : fxopt_std
Instance_name : fxopt
网络服务名 : STANDBY
3. DataGuard启动顺序
启动顺序:先启备库,后启主库
关闭顺序:先关主库,后关备库
二.主数据库环境准备
1. 准备工作
1) 检查数据库状态
SQL> select force_logging,log_mode,flashback_on from v$database;
2) 将主库设置为FORCE LOGGING模式
SQL> alter database force logging;
3) 开启归档模式(如已开启,跳过)
SQL> alter system set log_archive_dest_1='LOCATION=/ora_rman/arc' scope=spfile;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
2. 重建密码文件
充分利用主数据库原来环境,尽量不对主数据库参数配置作过多的修改。
$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=oracle entries=10 force=y
$ cp $ORACLE_HOME/dbs/orapw$ORACLE_SID /ora_rman
3. 修改主库参数文件
SQL>
alter system set INSTANCE_NAME='fxopt' scope=spfile;
alter system set DB_UNIQUE_NAME='fxopt' scope=spfile;
alter system set LOCAL_LISTENER='primary' scope=spfile; --配TNS Name
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(fxopt,fxopt_std)'; --这里是db_unique_name!如果db_unique_name一致的话,这个参数不需要配
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/ora_rman/arc valid_for=(all_logfiles,all_roles) db_unique_name=fxopt' scope=spfile;
alter system set LOG_ARCHIVE_DEST_2='SERVICE=standby lgwr async affirm valid_for=(online_logfiles,primary_role) db_unique_name=fxopt_std' scope=spfile; --Service是配TNS Name
alter system set LOG_ARCHIVE_FORMAT='ARC_%T_%S_%R.arc' scope=spfile;
alter system set LOG_ARCHIVE_MAX_PROCESSES=5 scope=spfile;
alter system set FAL_CLIENT='primary' scope=spfile; --配TNS Name
alter system set FAL_SERVER='standby' scope=spfile; --配TNS Name
alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;
alter system set STANDBY_ARCHIVE_DEST='/ora_rman/arc' scope=spfile; --配的路径跟LOG_ARCHIVE_DEST_1一致
然后重启数据库:
SQL> shutdown immediate;
SQL> startup;
4. 修改配置lisener监听文件
# listener.ora Network Configuration File: /app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.121)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = fxopt)
(ORACLE_HOME = /app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = fxopt)
)
)
ADR_BASE_LISTENER = /app/oracle
5. 修改配置tnsname.ora文件
说明:PRIMARY是主库的服务名,STANDBY是备库的服务名。
#/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.121)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fxopt)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.122)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fxopt)
)
)
6. 备份主库数据文件
关闭应用服务器,停止监听,开始RMAN备份:
$ lsnrctl stop
$ rman target /
RMAN> backup full database format '/ora_rman/backup_%T_%s_%p.bak';
##RMAN> sql "alter system archive log current";
##RMAN> backup archivelog all format='/backup/arch_%T_%s_%p.bak';
7. 在主库上建立备库控制文件
控制文件通常需要有多份,手工将文件复制几份。
$ sqlplus / as sysdba
SQL> alter database create standby controlfile as '/ora_rman/std_control.ctl';
$ cd /ora_rman/
$ cp std_control.ctl control01.ctl
$ cp std_control.ctl control02.ctl
$ cp std_control.ctl control03.ctl
8. 配置standby redolog
SQL> shutdown immediate
SQL> startup mount
SQL> alter database add standby logfile
group 4 '/app/oracle/oradata/fxopt/standby_redo04.log' size 50M,
group 5 '/app/oracle/oradata/fxopt/standby_redo05.log' size 50M,
group 6 '/app/oracle/oradata/fxopt/standby_redo06.log' size 50M,
group 7 '/app/oracle/oradata/fxopt/standby_redo07.log' size 50M;
SQL> alter database open;
Standby redo log的组数参考公式:(online redo log组数 + 1) * 数据库线程数;单机线程数为1,RAC一般为2。
Standby redo log的组成员数和大小也尽量和online redo log一样。
三、备库配置
1. 准备备库参数文件
$ vi initfxopt.ora
audit_file_dest='/app/oracle/admin/fxopt/adump'
control_files='/app/oracle/oradata/fxopt/control01.ctl','/app/oracle/oradata/fxopt/control02.ctl','/app/oracle/oradata/fxopt/control03.ctl'
db_domain=''
db_name='fxopt'
db_unique_name='fxopt_std'
fal_client='standby'
fal_server='primary'
instance_name='fxopt'
log_archive_config='DG_CONFIG=(fxopt,fxopt_std)'
log_archive_dest_1='LOCATION=/ora_rman/arc valid_for=(all_logfiles,all_roles) db_unique_name=fxopt_std'
log_archive_dest_2='SERVICE=primary lgwr async affirm valid_for=(online_logfile,primary_role) db_unique_name=fxopt'
log_archive_dest_state_1='enable'
log_archive_dest_state_2='enable'
log_archive_format='ARC_%T_%S_%R.arc'
log_archive_max_processes=5
log_archive_min_succeed_dest=1
standby_file_management='AUTO'
STANDBY_ARCHIVE_DEST='/ora_rman/arc'
undo_tablespace='UNDOTBS1'
2. 创建11g数据库基本目录
$ export ORACLE_BASE=/app/oracle
$ export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
$ export ORACLE_SID=fxopt
$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
$ mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID
$ mkdir -p /ora_rman/arc
$ mkdir -p /ora_data/fxopt
3. 拷贝文件到备库主机
/ora_rman目录下的文件:
- backup_%T_%s_%p.bak
- control01/02/03.ctl
- initfxopt.ora
$ cd /ora_rman/
$ scp backup*.bak oracle@192.168.100.122:/ora_rman/
$ scp initfxopt.ora oracle@192.168.100.122:$ORACLE_HOME/dbs/
$ scp orapwfxopt oracle@192.168.100.122:$ORACLE_HOME/dbs/
$ scp control*.ctl oracle@192.168.100.122:$ORACLE_BASE/oradata/$ORACLE_SID
4. 修改配置lisener监听文件
# listener.ora Network Configuration File: /app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.122)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = fxopt)
(ORACLE_HOME = /app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = fxopt)
)
)
ADR_BASE_LISTENER = /app/oracle
5. 修改配置tnsname.ora文件
说明:PRIMARY是主库的服务名,STANDBY是备库的服务名。
#/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.121)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fxopt)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.122)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fxopt)
)
)
6. 重启监听服务(主库备库都要执行)
$ lsnrctl stop
$ lsnrctl start
测试服务名连通性:
$ tnsping primary
$ tnsping standby
测试远程登录
$ sqlplus sys/oracle@primary as sysdba
$ sqlplus sys/oracle@standby as sysdba
7. 启动备库到nomount状态
$ sqlplus / as sysdba
SQL> create spfile from pfile;
SQL> startup nomount;
SQL> alter database mount standby database;
8. 备库做RMAN恢复
$ rman target /
RMAN> restore database;
#RMAN> restore archivelog all;
介质恢复后,rman 自动将standby 数据库打开到mount 状态。
9. 配置standby redolog
SQL> alter database add standby logfile
group 4 '/app/oracle/oradata/fxopt/standby_redo04.log' size 50M,
group 5 '/app/oracle/oradata/fxopt/standby_redo05.log' size 50M,
group 6 '/app/oracle/oradata/fxopt/standby_redo06.log' size 50M,
group 7 '/app/oracle/oradata/fxopt/standby_redo07.log' size 50M;
10. 在备库上,启动redo apply
SQL> alter database recover managed standby database disconnect from session;
到此物理备库创建完毕!
四. 备库验证
1. 查看备库状态
SQL> select open_mode,database_role,db_unique_name from v$database;
2. 将备库置与应用日志模式状态
SQL> alter database recover managed standby database using current logfile disconnect from session;
3. 取消备库的自动恢复
SQL> alter database recover managed standby database cancel;
4. OPEN备库为只读模式
SQL> alter database open;
5. 打开实时应用状态模式
SQL> alter database recover managed standby database using current logfile disconnect;
6. 更改保护模式
从Data Guard的保护模式分,可以分为三种不同的保护模式:
最大性能(Maximize Performance):这是Data Guard默认的保护模式。Primary上的事务Commit前不需要从Standby上收到反馈信息,该模式在Primary故障时可能丢失数据,但Standby对Primary的性能影响最小。
最大可用(Maximize Availability):在正常情况下,最大可用模式和最大保护模式一样;在Standby不可用时,最大可用模式会自动降低成最大性能模式,所以Standby故障不会导致Primary不可用。只要至少有一个Standby可用的情况下,即使Primary Down机,也能保证不丢失数据。
最大保护(Maximize Protection):最高级别的保护模式。Primary上的事务在Commit前必须确认Redo已经传递到至少一个Standby上,如果所有Standby不可用,则Primary会挂起。该模式能保证零数据丢失。
SQL> select DB_UNIQUE_NAME,PROTECTION_MODE from v$database;
切换Data Guard的保护模式的语法如下:
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE}
SQL> alter database set standby to maximize availability;
更改成Maximum Availability之后,主库的状态会变成“RESYNCHRONIZATION”
SQL> select DB_UNIQUE_NAME,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
DB_UNIQUE_NAME PROTECTION_MODE PROTECTION_LEVEL
------------------------------------------------------------ ---------------------------------------- ----------------------------------------
futures8 MAXIMUM AVAILABILITY RESYNCHRONIZATION
但是数据还是会正常同步到备库的。
如果也要显示成“MAXIMUM AVAILABILITY”,就需要把LOG_ARCHIVE_DEST_2参数里面的async改成sync,当然这样肯定会对主数据库的性能有一些影响啦!
具体怎么设置,自己取舍!
DG Protection Mode知识点
Minimum Requirements for Maximum Protection Mode
Redo Archival Process LGWR
Network Transmission Mode SYNC
Disk Write Option AFFIRM
Standby Redo Logs? Yes
Standby Database Type Physical Only
Minimum Requirements for Maximum Availability Mode
Redo Archival Process LGWR
Network Transmission Mode SYNC
Disk Write Option AFFIRM
Standby Redo Logs? Required for physical standby databases only. Standby redo logs are not supported for logical standby databases.
Standby Database Type Physical or Logical
Minimum Requirements for Maximum Performance Mode
Redo Archival Process LGWR or ARCH
Network Transmission Mode ASYNC when using LGWR process. Not applicable when using the ARCH process.
Disk Write Option NOAFFIRM
Standby Redo Logs? Required for physical standby databases using the LGWR process.
Standby Database Type Physical or Logical
附录 - DataGuard常用维护命令
1. 主备切换
1) 主库切换为备库
SQL> alter database commit to switchover to physical standby;
SQL> alter database commit to switchover to physical standby with session shutdown;-- 主库有会话连接的时候
SQL> shutdown immediate
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> alter database recover managed standby database disconnect from session;
2) 从库切换为主库
SQL> alter database commit to switchover to primary;
SQL> shutdown immediate;
SQL> startup
SQL> alter system switch logfile;
3) 从库打开只读实时应用模式
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect;
4) 检查切换状态
SQL> select open_mode,database_role,db_unique_name from v$database;
2. 基本查询
--查看数据库级别日志的归档模式、记录模式
SQL> select log_mode,force_logging,flashback_on from v$database;
--查看表空间级别的日志记录模式
SQL> select tablespace_name,logging,force_logging from dba_tablespaces;
--查看数据库的现行日志和自动归档模式的设置
SQL> archive log list;
--查看备库状态
SQL> select open_mode,database_role,db_unique_name from v$database;
--查看备库是否在应用日志进行恢复
SQL> select process, status from v$managed_standby;
--查询Switchover状态
SQL> select open_mode,database_role,switchover_status from v$database;
--查看保护模式
SQL> select DB_UNIQUE_NAME, PROTECTION_MODE, PROTECTION_LEVEL from v$database;
--查看归档日志应用
SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;
3. 日志应用
--将备库置与应用日志模式状态
SQL> alter database recover managed standby database disconnect from session;
--取消备库的自动恢复
SQL> alter database recover managed standby database cancel;
--Open只读模式(Dataguard只能启动到readonly模式)
SQL> alter database open;
--打开实时应用状态模式
SQL> alter database recover managed standby database using current logfile disconnect;
参考:
Oracle 11g Dataguard 物理备库配置系列文档
http://koumm.blog.51cto.com/703525/1275237
DataGuard参数配置详解
http://czmmiao.iteye.com/blog/1311070
DataGuard最大性能模式下开启REDO LOG 实时APPLY
http://wangwei.cao.blog.163.com/blog/static/10236252620115305456648/
DataGuard相同SID物理Standby搭建的更多相关文章
- Oracle DataGuard 物理Standby 搭建(上)
物理standby database 环境搭建 Arch asysnc Oracle Dataguard host IP Oracle_sid DB_unique_name FAL_server FA ...
- Oracle DataGuard 物理Standby 搭建(下)
主备库切换 Switchover 一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUAR ...
- (摘)DataGuard物理standby管理 - 主备切换
DataGuard物理standby管理 - 主备切换 Dataguard的切换分为两种,switchover和failover. switchover一般用于数据库或硬件升级,这时只需要较短时间中断 ...
- ORACLE11g Dataguard物理Standby 日常巡检操作手册
ORACLE11g Dataguard物理Standby日常巡检操作手册 编写:_____________校对:_____________日期:_____________ 目录1.DG环境的日常巡检 ...
- (摘自ItPub)物理standby中switchover时switchover pending的解决办法
http://www.itpub.net/thread-1782245-1-1.html DataGuard一主一物理备,sid为primary和standby,现在要把primary切换成备库,st ...
- Duplicate复制数据库并创建物理StandBy(spfile+不同实例名+不同路径)
过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...
- Oracle 12C 物理Standby 主备切换switchover
Oracle 12C 物理Standby 主备切换switchover Oracle 12C 物理Standby 主备切换switchover Table of Contents 1. 简述 2. 切 ...
- 11g使用非duplicate方式创建物理standby要注意的问题总结
在上篇博文中,使用了duplicate方式来创建物理standby http://blog.csdn.net/aaron8219/article/details/38434579 今天来说说在11g中 ...
- Duplicate复制数据库并创建物理StandBy(spfile+不同实例名)
过程和Duplicate复制数据库并创建物理StandBy类似,只是不需要重启数据库. 目的:创建standby,不重启源数据库 1设定环境如下: Primary数据库 IP 172.17.22.16 ...
随机推荐
- 【C++之STL】理解容器(ing)
“容器可容纳一些数据的模板类” “容器是包容其他对象的对象” 两种类型:顺序容器.关联容器 顺序容器 关联容器 访问成员 顺序访问和随机访问 经过优化关键键值访问 ...
- POJ3468 A Simple Problem With Integers 树状数组 区间更新区间询问
今天学了很多关于树状数组的技巧.一个是利用树状数组可以简单的实现段更新,点询问(二维的段更新点询问也可以),每次修改只需要修改2个角或者4个角就可以了,另外一个技巧就是这题,原本用线段树做,现在可以用 ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- ccflow学习下载网址
1.ccflow下载:http://ccflow.org/download.aspx 2.说明:http://ccbpm.mydoc.io/ 3.各种文档:bbs.ccflow.org/showtop ...
- [2-sat]HDOJ3062 Party
中文题 题意略 学2-sat啦啦啦 2-sat就是 矛盾的 ($x.x’$不能同时取) m对人 相互也有限制条件 取出其中n个人 也有可能是把一件东西分成 取/不取 相矛盾的两种情况 (那就要拆 ...
- Web中的监听器【Listener】
Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及 ...
- spring aop通过joinpoint传递参数
三.总结. 我们可以通过Advice中添加一个JoinPoint参数,这个值会由spring自动传入,从JoinPoint中可以取得. 三.总结. 我们可以通过Advice中添加一个JoinPoint ...
- C语言文件操作函数
C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...
- parent children
class parent{ protected static int count=0; public parent() { count++; } } public class child extend ...
- Servlet的应用
1.重定向 HttpServletRequest接口提供的sendRedirect()方法用于生产302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的U ...