前言

笔者前文已介绍了ORACLE DG的成员身份与数据保护模式等相关理论知识,从本文开始,将进入ORACLE DG理论与实践相结合模式,深入理解ORACLE DG的内在原理与基本运维技能。本文讲述如何使用rman恢复方式搭建ORACLE DG物理备库—physical standby。

部署前规划

oracle DG要求主备数据库的DB_NAME相同,db_unique_name不同,DG根据db_unique_name区分主备库。根据此要求,规划DG主备如下表所示,

 

primary db

standby db

IP

99.12.98.194

55.14.17.100

hostname

t24app1sg

mqserver02n

db_name

T24APDB

T24APDB

db_unique_name

T24APDB

T24APDBDG

附加说明:

  • 主库

  • 备库

安装oracle软件后使用dbca创建一个空的oracle实例。数据库名与主库保持相同,建议datafile路径、快速恢复区路径也保持与主库相同,不相同也行,只是后续需要进行文件名转换。

主库端配置

开启主库归档模式

此操作详细步骤从略,以下只列出可能用到的操作SQL语句。

  • 检查数据库归档模式
SQL> archive log list;
  • 开启归档模式(此操作需要数据库处于mount---12c)
SQL> alter database archivelog;

开启db的强制写日志模式

oracle有些DDL(如create table)支持NOLOGGING子句,即建表时不会产生重做日志,由于物理备库是应用主库的重做日志而来,所以主库必须打开FORCE LOGGING模式。

  • 检查FORCE LOGGING状态
SQL> select force_logging from v$database;
FORCE_LOGGING
---------------------------------------
NO
  • 打开force logging
SQL> ALTER DATABASE FORCE LOGGING;
  • 再次检查force logging模式
SQL> select force_logging from v$database;

补充:

  • 关闭force logging模式
SQL> ALTER DATABASE NO FORCE LOGGING;

配置监听和tnsname

正常情况下primary db应该是已经正常配置了监听,无需重复配置,只需查看监听状态,确认能通过监听连接到实例上。

  • 查看监听状态
$ lsnrctl statusService "T24APDB " has 1 instance(s).Instance "T24APDB", status READY, has 1 handler(s) for this service...

说明:此服务下有对应的instance,状态为ready,表示动态监听。主库由于一直正常使用,可以是动态监听。

  • 配置tns连接串(tnsnames.ora)

1. 增加到主库自身的连接串(可用于客户端访问)。

T24APDB =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = T24APDB)

)

)

配置完毕后可使用tnsping进行测试。

2. 增加主库到备库的TNS连接串

T24APDBDG =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 55.14.17.100)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = T24APDBDG)

)

)

此条TNS暂时还不能测试,因为备库还没有配置监听。

添加data guard参数

  • 从spfile生成pfile(重新生成一个pfile,用于编辑)
SQL> create pfile='/home/oracle/T24APDB_PR.ora' from spfile;
  • 修改pfile添加DG配置参数(主库vim T24APDB_PR.ora)
*.db_unique_name='T24APDB '说明:db_unique_name严格区分大小写*.log_archive_config='dg_config=(T24APDB,T24APDBDG)'说明:dg_config参数指定的是DG环境中的db_unique_name,所有unique name通过逗号分割;*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name= T24APDB '说明:valid_for参数的含义是当本数据库处于all_roles即任何角色时到往本地路径log_archive_dest_1下归档all_logfiles(online redo log和standby redo log),若为ASM管理,location环境ASM路径(如+ARCH);*.log_archive_dest_2='service=T24APDBDG reopen=120 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=T24APDBDG'说明:valid_for参数的含义是当数据库为primary_role主库角色时往远程路径log_archive_dest_2下归档online_logfiles(online redo log)。其中的service= T24APDBDG,指定归档传输TNS路径;lgwr:指定redo data传输使用的传输方式,lgwr async的组合表示redo data使用lgwr进程采用异步传输的方式同步到db_unique_name 为T24APDBDG 的standby db;*.log_archive_dest_state_1=enable*.log_archive_dest_state_2=enable说明:启用归档目的地,该参数对应的值有三个,分别如下:enable:启用归档目的地defer:禁用归档目的地ALTERNATE:作为备用归档目的地*.standby_file_management='auto'说明:该参数的意思是standby db的文件管理方式是auto,而非manual。设置该参数值为auto主要目的是:主库如果添加、删除表空间或者数据文件时,会自动在备库相应的添加、删除表空间或者数据文件。*.fal_server='T24APDBDG'说明:指定故障转移的目标端(主库)。即出现故障时往tnsname='T24APDBDG'指定的目标端切。通常不会设置故障转移的自动切换,都是dba按照自己的意愿,往最适合接管  primary db的standby db上去切。*.fal_client='T24APDB说明:指定发送故障的客户端,即本地db。

最终新加的pfile配置如下:

用新pfile重启主库

SQL> shutdown immediate
SQL> create spfile from pfile='/home/oracle/T24APDB_PR.ora'
SQL> startup

可能的报错:

ORA-01078: failure in processing system parameters
ORA-16032: parameter LOG_ARCHIVE_DEST_1 destination string cannot be translated
ORA-19801: initialization parameter DB_RECOVERY_FILE_DEST is not set

原因:DB_RECOVERY_FILE_DEST未解析到,导致log_archive_dest_state_1解析失败;

修改方案:将pfile文件中DB_RECOVERY_FILE_DEST放到LOG_ARCHIVE_DEST_1参数的前面;

创建standby redo log文件

添加standby redo log文件的目的是在后续执行rman duplicate时可以直接从主库复制standby redo log,而不用再在standby db端创建standby redo log。直接从主库复制的好处有如下几条:

1、保证主库和备库有相同的standby redo log,即省了在备库端创建的麻烦又能保证主备库完全相同,这样在switchover时可以直接切换,无需做任何更改;

2、如果主库有多套dg备库,所有的dg备库的standby redo log是完全相同的,这样管理起来方便。

创建standby redo log的原则:

  • Each standby redo log file must be at least as large as the largest redo log file in the redo log of the redo source database.

每个standby 重做日志至少和online重做日志一样大;

  • The standby redo log must have at least one more redo log group than the redo log at the redo source database, for each redo thread at the redo source database.

standby重做日志数量至少比online重做日志多一个。

  • 查询重做日志
select group#,type,member from v$logfile;

  • 添加standby redo log
alter database add standby logfile '/odata/datafile/standby_01.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_02.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_03.log' size 100m;
alter database add standby logfile '/odata/datafile/standby_04.log' size 100m;
  • 再次查询重做日志
select group#,type,member from v$logfile;

备库端配置

确保备库与主库目录相同

若不相同,后续需要进行转化;此处从略。

生产备库的密码文件

由于后面需要通过RMAN主库远程登录备库进行恢复,此处需要配置备库SYS用户的密码。有如下集中方法:

  1. 直接将主库的orapwT24APDB密码文件拷贝到备库;
  2. 使用orapwd命令创建密码文件
orapwd file='/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapwT24APDBDG' password=TEST

  • 创建standby的初始化参数

与主库类似,创建备库的DG参数(vim initT24APDBDG.ora)。如下:

*.db_name='T24APDB'

*.db_recovery_file_dest='/data/T24APDBDG'

*.db_recovery_file_dest_size=48318382080

*.db_unique_name='T24APDBDG'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=eppsXDB)'

*.fal_client='T24APDBDG'

*.fal_server='T24APDB'

*.log_archive_config='dg_config=(T24APDB,T24APDBDG)'

*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=T24APDBDG'

*.log_archive_dest_2='SERVICE=T24APDB LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=T24APDB'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

用pfile 将standby 启动到nomount状态

  • 把spfile文件重命名
$ mv spfileT24APDBDG.ora spfileT24APDBDG.ora.bak
  • 用pfile启动数据库到nomount状态
SQL> startup nomount;

备库端配置监听

备库由于处于nomount状态,要想通过SYS用户链接,需要配置静态监听(vim listener.ora)。

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = T24APDBDG)

(SID_NAME=T24APDBDG)

(ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1)

(SERVICE_NAME=T24APDBDG)

)

)

LISTENER =

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=mqserver02n)(PORT=1521))

)

注意上面的配置中,SID为实例名,GLOBAL_DBNAME为unique名,serive_name随便起(与主库配置的tnsname一致)。然后启动监听服务并查看。

$ lsnrctl start
$ lsnrctl statusService "T24APDBDG" has 1 instance(s).Instance "T24APDB", status UNKNOWN, has 1 handler(s) for this service...

如上unknown状态的实例即为静态监听注册的实例。其中还有一个nomount状态注册的动态实例。

配置tnsname(vim tnsnames.ora)

T24APDBDG =

(DESCRIPTION =

(LOAD_BALANCE = OFF)(FAILOVER=ON)(CONNECT_TIMEOUT=3)(TRANSPORT_CONNECT_TIMEOUT=2)

(ADDRESS = (PROTOCOL = TCP)(HOST = 55.14.17.100)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = T24APDBDG)

)

)

T24APDB =

(DESCRIPTION =

(LOAD_BALANCE = OFF)(FAILOVER=ON)(CONNECT_TIMEOUT=3)(TRANSPORT_CONNECT_TIMEOUT=2)

(ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = T24APDB)

)

)

测试主库和备库端tnsname配置是否正确

配置完主备的TNS后即可测试TNS联系连通性,主备都执行如下语句:

$tnsping T24APDB
$tnsping T24APDBDG

使用rman开启duplicate创建备库(主库操作)

  • 在主库上使用rman同时登录主备库,如下:
$ rman target SYS/SYSTEM@T24APDB auxiliary SYS/SYSTEM@T24APDBDG nocatalog

  • 执行duplicate创建备库

run {

allocate auxiliary channel c1 device type disk;

allocate auxiliary channel c2 device type disk;

duplicate target database for standby nofilenamecheck dorecover;

release channel c1;

release channel c2;

}

报错1:auxiliary file name /odata/datafile/SYSAUX0422.dbf conflicts with a file used by the target database

原因:目录不对应,主库这边需要加文件转换

解决方案:

1. 将DG备库shutdown并重新startup 称nomount状态;---因为上面的操作中将备库设置成了mount状态;

2. 主库rman重新登录两个库;

$ rman target SYS/SYSTEM@T24APDB auxiliary SYS/SYSTEM@T24APDBDG nocatalog

3. 主库RMAN执行如下duplicate,其中加了文件转换。

run {

duplicate target database for standby from active database

db_file_name_convert=('/odata/datafile','/data/T24APDBDG');

}

最后成功后如下:

此时备库就获得了主库完全的数据文件拷贝,备库处于mount状态。备库基本搭建完毕。

备库启动实时重做应用redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

执行完上述语句后,理论上主库与备库已经实时同步了,可以使用v$managed_standby查看备库的状态:

SQL> select process,status from v$managed_standby;

其中,MRP0处于APPLYING_LOG,即代表正常,此时可以查看备库的角色和打开模式。

SYS@T24APDBDG> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE

---------------- --------------------

PHYSICAL STANDBY MOUNTED

将备库设置为只读状态(可选)

从ORACLE 11g开始,支持备库应用redo 日志的同时处于redo only状态。这样可以方法进行数据读操作。

SQL> recover managed standby database cancel

SQL> alter database open;

SQL> recover managed standby database using current logfile disconnect;

说明:以上操作就是先取消日志应用,再打开数据库,最后启用日志应用。查询数据库的打开模式和角色如下图所示--read only with apply。完毕

总结

本文step-by-step详细讲述了ORACLE物理备库的部署,除了rman的duplicate操作可能需要稍微注意一下,其他步骤应该不难。整个流程包含诸多知识点,如强制归档、归档模式、standby redo log、静态监听等等。读者在部署过程中要仔细琢磨各个步骤的作用,才能做到少出错或出错后懂得如何着手解决。

ORACLE DG专题3--手把手部署DG 物理备库相关推荐

  1. 【DG】基于同一个主机建立物理备库和逻辑备库 (四)--添加一个物理dg节点

    [DATAGUARD] 基于同一个主机建立物理备库和逻辑备库 (四)--添加一个物理dg节点 BLOG文档结构图 [DATAGUARD] 基于同一个主机建立物理备库和逻辑备库(一): http://b ...

  2. Oracle 11g Dataguard 物理备库配置(一)之Duplicate配置

    Oracle 11g Dataguard Duplicate物理备库配置(一)之物理备库创建配置 # ver:1.5 第五次修改 # modify: 2013.8.16 # author: koumm ...

  3. oracle dataguard in-memory,Oracle 11g Dataguard 物理备库配置(一)之Duplicate配置

    Oracle 11g Dataguard Duplicate物理备库配置(一)之物理备库创建配置 # ver:1.5 第五次修改 # modify: 2013.8.16 # author: koumm ...

  4. oracle dg fal client,创建物理备库(DG)及相关参数解释

    此文默认你会使用dbca创建数据库,并了解数据库的相关目录结构及spfile.file.密码文件等位置. 1.创建主数据库 使用一dbca创建数据主库,sid为dg1,数据库名为dg,并且设置db_u ...

  5. 【Oracle】DG中物理备库、快照备库的相互转换

    一.物理备库切换快照备库 1. 如果正在运行日志应用,先停止 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 2. 确保数据库为MOUN ...

  6. Oracle 11g Dataguard 物理备库配置(四)之broker snapshot standby测试

    Oracle 11g Dataguard 物理备库配置系列文档 Oracle 11g Dataguard 物理备库配置(一)之duplicate创建 Oracle 11g Dataguard 物理备库 ...

  7. DG 主库fial over,强制激活备库解决案例

    14年1月份的时候,因硬件环境的变更,需要把库从原来的存储平台移到新的存储平台.也就是把数据库的底层存储介质更换一下.下面主要记录一下事故的发生及应对措施. 事情概况 win平台,11R2,64位,单 ...

  8. linux下oracle11G DG搭建(三):围绕备库搭建操作

    linux下oracle11G DG搭建(三):围绕备库搭建操作 环境 名称 主库 备库 主机名 bjsrv shsrv 软件版本 RedHat Enterprise5.5.Oracle 11g 11 ...

  9. dg的几个redo解释及备库目录

    dg恢复操作的几个最主要的结构就是在线redo,归档redo,与standby redo,主库上的redo被备库上的remote file server(rfs)进程接受,rfs进程写redo文件到归 ...

最新文章

  1. linux centos7 docker 安装 oracle
  2. 使用SQL DTS功能实现从DB/2向SQL Server传输数据
  3. svm 彻底的过程
  4. 自考18年4月计算机应用基础,2019年自学考试计算机应用基础试题(18)
  5. android nv21图片格式,Android -- 将NV21图像保存成JPEG
  6. Flash开发的基本概念
  7. sql 动态存储过程
  8. 完美解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget
  9. mysql 选择索引_mysql选择索引
  10. C# 置顶EXE 把EXE放最前面 ProcessStartInfo
  11. 卡尔曼滤波c语言程序,卡尔曼滤波算法及C语言实现
  12. c语言实现sdcch信道编码译码,gsm信道编码办法及分类
  13. 读Leveraging Unimodal Self-Supervised Learning for Multimodal AVSR论文
  14. (附源码)计算机毕业设计SSM-志愿者管理系统
  15. fidder无法抓取浏览器Https,提示“证书错误”
  16. c语言中结构体中默认值,C Struct中的缺省值
  17. vue与ios和Android联调方法
  18. jQuery诞生记-原理与机制
  19. 苹果手机Charles设置未受信任的软件安装
  20. 亚利桑那州立大学周纵苇:研习 U-Net ——现有的分割网络创新 | AI 研习社74期大讲堂...

热门文章

  1. 服务器c盘虚拟内存取消不掉,虚拟内存没用就关掉吧
  2. 什么软件好画电路图?
  3. 银河麒麟V10——Ubantu--银河麒麟系统安装
  4. ARM A系列处理器对比
  5. 蚂蚁链开源跨链技术,与开发者共享多年区块链技术沉淀
  6. 编程推荐书目管理(PDF资源)
  7. 低温工作笔记本计算机,为什么极低温度下不宜使用笔记本电脑?
  8. docker 打包解包
  9. python 文件时间戳_在Python中每小时将时间戳记写入文件
  10. python泰勒公式_泰勒公式和Gamma函数