Oracle DG 和 物理 standby 数据库的创建

Oracle DG 和 物理 standby 数据库的创建

Oracle DG 概念

1、DG 是一个集合,由一个 primary 数据库及一个或多个standby数据库(最多9个standby)组成。组成dg的各个 oracle 数据库之间,通过 oracle 的网络服务名(net service name)连接。

2、相同的 DG 环境中,有且仅有一个 primary 数据库,standby 数据库最多可以创建9个,standby 数据库可以视作为 primary 数据库在某个时间点的备份(事务上一致)。

3、 primary 数据库和 standby 数据库 可以是单实例数据库,也可以是 RAC 结构。

4、 standby 数据库 通常分两类;逻辑 standby 和 物理 standby。逻辑 standy 就是具体到数据库,内容相同,但结构可能有差异;物理 standby 就是具体到数据库,不仅文件的物理结构相同,甚至连块在磁盘上的存储位置都是一模一样的(默认情况下),就像拿相机拍照一样。

5、逻辑 standby 和 物理 standby 虽然都是接收 primary 数据库生成的 redo , 不过 逻辑 standby 接收后将其转换成 sql 语句, 然后在 standby 数据库上执行 sql 语句实现同步,这种方式有一个专业名词叫 sql apply。物理 standby 接收完 primary 数据库生成的 redo 后,以介质恢复的方式实现同步,这种方式有也一个专业名词叫 redo apply。

DG 中角色转换

一个DG 环境中只有两种角色, primary 和 standby ,所谓角色转换就是数据库在这两个角色中切换,切换分为两种 switchover 和 failover。
1、switchover: 如将 primary 数据库转换成 standby 数据库,将 standby 数据库转换成 primary 数据库(如果有多个 standby 数据库, 一次只能选择其中的一个),switchover 可以确保不会丢失数据。

2、failover:当 primary 数据库出现故障并且不能被及时恢复时,就需要通过 failover 将 DG 配置的其中一个 standby 数据库转换为新的 primary 数据库,在最大保护或最高可用模式下,failover 也可以保证不会丢失数据

DG 三大保护模式

1、最大保护
2、最高性能
3、最高可用(生产上推荐):当最高可用不可用时,自动切换为最高性能

DG 环境的要求

1、DG 环境中,所有的oracle 数据库必须运行于相同的系统架构,运行的操作系统平台也必须相同,不过操作系统版本可以略有差异,数据库版本也必须一致。

2、primary 数据库 和 standby 数据库 的 目录路径可以相同,也可以不同。为了简化配置,建议 primary 数据库 和各个 standby 数据库 的 目标结构 保持一致。DG 是 oracle 企业版的一个特性。

3、同一个 DG 配置中所有数据库的初始化参数:compatible 的值必须相同。

4、primary 数据库 必须运行于 归档模式,并且务必确保在 primary 数据库上打开 force logging , 以避免 用户通过 nologging 之类的操作方式。

5、管理 primary 和 standby 数据库 必须是拥有 sysdba 系统权限的用户。

6、建议 primary 和 standby 数据库 采用相同的存储架构。

7、注意各服务器的时间设置,不要因为时区/时间设置的不一致造成同步上的问题(这一点很重要)。

接下来我们重点关注 物理 standby

物理 standby 创建前的准备工作——对 primary 数据库进行配置

1、将 primary 数据库置于归档模式,并启用 foce logging

	sql> alter database force logging;#启用 force logging

2、创建密钥文件(如果不存在的话)

	1、需要注意的是,同一个 DG 配置中所有的数据库必须都拥有独立的密钥文件,并且必须保证同一个 DG 配置中,所有数据库服务器的 SYS 用户拥有相同密码,以保证 redo 数据的顺利传输。
	2、如果使用 DBCA 建库则oracle 会自动创建密钥文件, 该密钥文件默认路径在$ORACLE_HOME/dbs 目录下,oracle 提供了一个创建密钥文件的命令: orapwd
	3、密钥文件的命名规则,linux/unix 平台命名规则:orapw[sid], windows 平台则是 PWD[sid].ora

3、配置 standby redologs

  1、建议为 primary 和 standby 数据库都配置 standby redologs(为了主备切换), 确保 standby redologs 的文件大小与 primary 数据库的 online redologs 文件大小相同。
  
  2、创建适当数目的日志组,一般而言,standby redologs 日志组要比 primary 数据库的 online redologs 日志组数至少多一个。
  
  3、管理 standby redologs 的操作方式 与 online redologs 几乎一模一样,只不过需要多指定一个 standby 关键字。可以通过 视图 v$logfile 或 专用视图 v$standby_log 查看当前数据库中创建的 standby redologs.

4、设置primary 数据库 和 standby 数据库 的初始化参数

  建议不管是 primary 数据库,还是 standby 数据库 对于角色相关的初始化参数都要进行配置。

物理 standby 创建时的操作步骤

1、创建 primary 数据库的一份完整备份,oracle 建议使用 rman 创建备份集。

2、创建 standby 数据库的控制文件

 --通过下列语句 为 standby 数据库创建控制文件
 sql>alter database create standby controlfile as '/home/oracle/backup/jsspdg01.ctl';
 控制文件通常需要有多份,你可以手工将上述文件复制几分

3、配置 primary 数据库 和 standby 数据库的初始化参数文件

 1、创建 pfile 客户端初始化参数文件
	由于 spfile 服务器端初始化参数文件为二进制格式,无法直接编辑,因此建议通过 spfile 创建 pfile后再编辑,然后再通过 pfile 重建 spfile
	-- 通过当前的 spfile 创建 pfile
	sql> create pfile='/home/oracle/backup/initjsspdg.ora' from spfile;
	-- 通过 pfile 重建 spfile
	sql> create spfile from pfile='/home/oracle/backup/initjsspdg.ora';
	
 2、修改初始化参数文件中的参数(两个注意)
	1、注意 primary 和 standby 不同角色对应初始化参数的配置
	2、注意保持各初始化参数中的路径准确有效

4、复制文件到 standby 服务器

  复制文件到 standby 服务器 主要包括三部分:备份文件(备份的数据文件),创建的 standby 数据库控制文件 和 修改过的初始化参数文件。

5、配置 standby 数据库

 1、创建密钥文件(如果不存在的话),注意保持密码与 primary 数据库一致。也可以直接复制 primary 数据库的,注意命名规则。
 2、配置监听并启动
 3、修改 primary 和 standby 数据库所在服务器的 tnsnames.ora, 各自增加对应的 net service name
 4、创建服务器端的初始化参数文件 spfile
 sql> create spfile from pfile='/home/oracle/backup/initjsspdg.ora';#由于 spfile 文件无法在实例以 spfile 方式启动时创建,因此首先得 shutdown immediate 数据库。
 
 (针对备份文件 如果是用 rman 备份的,standy 数据库启动到 mount 状态(前提是恢复 standby 数据库控制文件),执行 rman恢复,最后打开数据库)

6、启动物理 standby 数据库

 直接 startup 命令 启动 物理 standby 数据库 ,默认会以只读方式打开数据库(oralce 会根据控制文件判断是否是 物理 standby ,如果是则默认启动到 read only 模式)
 sql> startup
 sql> select open_mode from v$database;

7、启动 redo 应用

 sql> alter database recover managed standby database disconnect from session;
 或者附加 using current logfile 子句启动实时应用
 sql> alter database recover managed standby database using current logfile disconnect from session;
 注意,要启动实时应用,primary 数据库 在发送 redo 数据时必须使用 lgwr 进程发送。

8、停止物理 standby 数据库

 如果直接停止 standby 数据库,轻则 primary 数据库的 alert 文件中记录一堆归档发送失败的错误信息,重则 primary 数据库直接 shutdown。
 通常建议使用下列步骤:
 1、修改 primary 数据库的 log_archive_dest_sate_n 参数,暂时取消向 standby 数据库发送日志。
  sql> alter system set log_archive_dest_sate_2=DEFER;
 2、然后 standby 端停止 redo 应用
  sql> alter database recover managed standby database calcel;
 3、关闭 standby 数据库
  sql> shutdown immediate;

物理 standby 创建过程演示(实操)

primary 数据库配置和相关操作

1、确认 primary 数据库处于归档模式

sql> archive log list; #查看当前的归档状态,如果是非归档模式,那么可以将数据库启动到 mount 状态,然后执行 alter database archive log 语句,将数据库置为归档模式。

2、将 primary 数据库置为 force logging 模式

sql> select force_logging from v$database;
sql> alter database force logging;#启用 force logging

3、配置 primary 数据库的初始化参数文件

  1、创建 pfile 客户端初始化参数文件
	由于 spfile 服务器端初始化参数文件为二进制格式,无法直接编辑,因此建议通过 spfile 创建 pfile后再编辑,然后再通过 pfile 重建 spfile
	-- 通过当前的 spfile 创建 pfile
	sql> create pfile='/home/oracle/backup/initjsspdg.ora' from spfile;
	-- 通过 pfile 重建 spfile
	sql> create spfile from pfile='/home/oracle/backup/initjsspdg.ora';# 由于 spfile 文件无法在实例以 spfile 方式启动时创建,因此首先得 shutdown immediate 数据库。
	
 2、修改初始化参数文件中的参数(3个注意)
	1、注意 primary 和 standby 不同角色对应初始化参数的配置
	2、注意保持各初始化参数中的路径准确有效
	3、*.DB_FILE_NAME_CONVERT 和 *.LOG_FILE_NAME_CONVERT(主要针对 primary 和 standby 数据库 数据文件和日志文件目录不一致时,做相应的转换)
	
    另外 *.log_archive_dest_sate_2=DEFER 可以在这里先禁用远程归档,后面物理 standby 数据库配置启动ok后,再把 primary 数据库 开启远程归档(通过执行 alter system set log_archive_dest_sate_2=ENABLE)

4、创建 standby 数据库的控制文件

 sql> startup;
 --通过下列语句 为 standby 数据库创建控制文件
 sql>alter database create standby controlfile as '/home/oracle/backup/jsspdg01.ctl';
 控制文件通常需要有多份,你可以手工将上述文件复制几分

5、复制相关文件到 standby 服务器

1、需要复制的文件包括:所有的数据文件、重做日志文件(可选)、以及刚刚创建的 standby 数据库的控制文件 和 primary 数据库的客户端初始化参数文件(主要用来创建 standby 数据库的服务器端初始化参数文件),后两项比较简单,直接通过 scp 命令复制过去即可。
2、在默认情况下,控制文件有三份冗余(具体可以看初始化参数文件中的 control_files 配置值),在 standby 端 手工复制即可。

3、针对复制 primary 数据库的数据文件,我们这里并不打算使用 rman 备份集的方式创建(后续再介绍),而选择使用 用户管理方式的数据库备份。
   3.1、如果要创建冷备份,用户管理方式的数据库备份操作很简单,数据库只要没有在 open read write 状态,只要复制 所有的数据文件、控制文件、联机重做日志文件和归档文件 到指定的备份路径即可。
   3.2、大多数情况下的备份都是数据库活动状态时创建--热备份,用户管理方式 创建 热备份 就是 备份表空间, 可以分为三步:
       1、通过 alter tablespace  xxx begin backup 命令标记指定表空间 xxx 进入备份状态
	   2、通过操作系统命令复制 锁定表空间的数据文件
	   3、通过 alter tablespace  xxx end backup 命令标记指定表空间 xxx 结束备份。
	   
	   --查询当前数据库的表空间和对应数据文件的信息
       sql> select file_name, tablespace_name from dba_data_files order by 2;
	   sql> alter tablespace  books begin backup;
	   sql> host copy /oracle/oradata/jssbook/books01.dbf /home/oracle/oradata_bak/jssbook/books01.dbf
	   sql> alter tablespace  books end backup;
	   重复这一过程,直到所有表空间的数据文件均被备份并复制到 standy 服务器
	   
4、针对 重做日志文件(联机重做日志文件和归档文件,这里主要指归档文件) 可以复制过去,也可以不用,DG 环境中,重做日志文件 会由 primary 数据库端 自动发送过去,因此这里只要将数据文件复制过去即可。

6、配置 监听 和 网络服务名

1、可以通过界面化方式配置(netca), 也可以通过创建或修改文件方式配置:监听文件 listener.ora 和 网络服务名的配置文件 tnsnames.ora 默认路径在 $ORACLE_HOME/network/admin 目录下,存在就修改,不存在就直接创建,并添加相应的内容。
2、监听配置文件修改后,必须重启监听服务才会生效。
   lsnrctl status #查看监听状态
   lsnrctl stop #停止监听
   lsnrctl start #启动监听

7、创建密钥文件(如果不存在的话),然后复制该密钥文件 到 standby 服务器的对应路径下:$ORACLE_HOME/dbs,注意命名规则。

 1、需要注意的是,同一个 DG 配置中所有的数据库必须都拥有独立的密钥文件,并且必须保证同一个 DG 配置中,所有数据库服务器的 SYS 用户拥有相同密码,以保证 redo 数据的顺利传输。
 2、如果使用 DBCA 建库则oracle 会自动创建密钥文件, 该密钥文件默认路径在$ORACLE_HOME/dbs 目录下,oracle 提供了一个创建密钥文件的命令: orapwd
 3、密钥文件的命名规则,linux/unix 平台命名规则:orapw[sid], windows 平台则是 PWD[sid].ora

物理 standby 数据库配置和相关操作

1、配置 监听 和 网络服务名,创建方式与创建 primary 数据库时相同。完成后通过 lsnrctl start 命令 启动 standby 数据库的监听服务。此时,最好在两台服务器间使用 TNSPING 命令相互测试网络服务器是否可用。

TNSPING 网络服务名 
显示 OK 表示能够正常通信。

2、修改 客户端初始化参数文件。

 1、找到刚刚从 primary 数据库 复制过来的 客户端初始化参数文件 pfile 进行修改
 2、修改初始化参数文件中的参数(3个注意)
	1、注意 primary 和 standby 不同角色对应初始化参数的配置
	2、注意保持各初始化参数中的路径准确有效
	3、*.DB_FILE_NAME_CONVERT 和 *.LOG_FILE_NAME_CONVERT(主要针对 primary 和 standby 数据库 数据文件和日志文件目录不一致时,做相应的转换)
 3、修改并保存后,通过该 pfile 创建 spfile
    sqlplus / as sysdba;
	-- 通过 pfile 重建 spfile
	sql> create spfile from pfile='/home/oracle/backup/pfile_jsspdg.ora';# 由于 spfile 文件无法在实例以 spfile 方式启动时创建,因此首先得 shutdown immediate 数据库。

3、接收归档文件,启动物理 standby 数据库到 mount 状态

sql> startup mount;
-- 查看相应的转换配置
sql> show parameter convert;
-- 查看数据文件路径
sql> select name from v$datafile;

物理 standby 启动到 mount 状态后,就能够接收来自 primary 数据库发送的 redo 数据了。
接下来,需要切换到 primary 数据库端 执行一下操作,打开远端的归档。然后 primary 数据库就会发送 redo 数据到物理 standby 数据库了。
sql> alter system set log_archive_dest_sate_2=ENABLE;

4、验证

1、连接到 primary 数据库

sqlplus / as sysdba;
sql> select max(sequence#) from v$archived_log;

2、连接到 standby 数据库

sqlplus / as sysdba;
sql> select max(sequence#) from v$archived_log;

对比一下结果看是否一致,一致时,表示所有已归档的文件都已发送到物理 standby 数据库了。

5、开启 REDO 应用

 sql> alter database recover managed standby database disconnect from session;
 或者附加 using current logfile 子句启动实时应用
 sql> alter database recover managed standby database using current logfile disconnect from session;
 注意,要启动实时应用,primary 数据库 在发送 redo 数据时必须使用 lgwr 进程发送。

6、暂停REDO 应用

sql> alter database recover managed standby database calcel;
注意这只是暂停 redo 应用,并不会停止物理 standby 数据库,standby 数据库仍会保持接收,只不过不会再应用接收到的归档,直到你再次启动 redo 应用为止。
  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值