Windows 10 环境下oracle 11g r2 dg配置详解

目录

1.主库设置归档模式: 1

2.硬件与数据库安装 2

3.主备库配置过程 2

3.1 主库配置 2

3.2备库配置 8

3.3复制主库 10

4.验证是否搭建成功 11

4.1主、备库执行查询命令 11

5 关于 switchover(正常主备切换) 11

(1)首先查询主库切换状态 11

(2)在主库将 primary 切换到 physical standby 12

(3)在备库,switchover 到 primary: 12

6.相关错误解决和说明: 14

7.相关名称说明: 14

8.相关概念说明: 16

 

 

 

 

1.主库设置归档模式: 

如果我们不清楚为什么是归档模式,那我们就应该也不会清楚 dataguard

用来做什么的。透过很多修饰的官方语言,我们需要明确 DGdataguard 简称,

后同)实际上的作用就是用来高可用。而实现原理就是从主库获取数据到从库,

在主库发生异常的时候,从库接管主库,完成身份的变化。可以一个主库,最多

9 个从库。同时分为逻辑 standby 和物理 standby 这里我们讨论的是物理 standby.

一旦创建并配置成 standby 后,dg 负责传输 primary 数据库 redo data

standby 数据库,standby 数据库通过应用接收到的 redo data 保持与 primary

据库的事务一致。

这下清楚了吧,需要保证主从库一致,需要传输 archive log redo log 到从库,

如果不是归档模式无法保证主从库的数据一致。

2.硬件与数据库安装 

主从库硬件最好一致。oracle 数据库版本需要一致,在 Windows 用超级用户

登陆安装。

安装路径一致(如 D:\App\Administrator),数据文件存放位置一致(如

E:\OracleDB\Orcl),归档日志文件在(E:\OracleDB\Flash\Orcl\ARCHIVELOG

文件夹下,联机日志文件默认。(从库只需要安装数据库软件,数据从主库传输

后完成,也可以安装与主库一致,包括实例。)

配置环境数据库用户必须有 sysdba 权限

下面配置环境:

主库 ip 192.168.1.11 数据库实例名:orcl db_unique_name: primary

从库 ip 192.168.1.12 数据库实例名:orcl db_unique_name: standby

3.主备库配置过程 

3.1 主库配置 

Ø 在主库启动数据库到 mount 模式,开启归档模式与 force logging

flashback

Cmd 下 sqlplus “/as sysdba” 之后执行以下命令

shutdown immediate

startup mount

alter database archivelog;

alter database force logging;

alter database flashback on;

Ø 创建 standby log files(备用日志文件)

从库使用 standby log files 来保存从主库接收到的重做日志。既然主要是从库

在使用,那为什么需要在主库上也建立 standby log files?原因主要由两个:

1) 主库可能转换为备库,而备库是需要有 standby log files

2) 如果主库建立了 standby log files 那备库会自动建立。

建立 standby 如要注意以下几点:

1) standby log files 的大小和 redo log files 一样。查询 redo log files 文件

大小(默认 50M,3 个):

select group#,bytes/1024/1024 as M from v$log ;

2) 一般而言, standby redo 日志文件组数要比 primary 数据库的

online redo 日志文件组数至少多一个。 standby redo 日志组数量基于

primary 数据库的线程数(这里的线程数可以理解为 rac 结构中的

rac 节点数) 有一个推荐的公式可以做参考:(每线程的日志组数+1)*

最大线程数。

假设现在节点是 1 个,则=(3+1)*1=4

如果是双节点 则=(3+1)*2=8

这里我们创建 4 standby logfile:

另:不建议组号 group#紧挨着 redo,因为后续 redo 有可能调整,

这里我们从建立从 21 24 standby logfile 

alter database add standby logfile group 21 'E:\OracleDB\Orcl\redo021.log' size 50M;

alter database add standby logfile group 22 'E:\OracleDB\Orcl\redo022.log' size 50M;

alter database add standby logfile group 23 'E:\OracleDB\Orcl\redo023.log' size 50M;

alter database add standby logfile group 24 'E:\OracleDB\Orcl\redo024.log' size 50M;

注意:系统默认 REDO 文件太小,个数也不够,一般都要做改动,比如大小 512M

个数 6 个,这样就先做好 REDO,的改变之后,再做 standby

Ø 修改系统参数 spfile 文件(13 个参数)

  1. alter system set db_unique_name='primary' scope=spfile; 

2) Alter system set log_archive_config='DG_CONFIG=(primary,standby)' 

scope=spfile;

3) alter system set log_archive_dest_1='location=E:\OracleDB\flash\Orcl\ARCHIVELOG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary' scope=spfile;

4) Alter system set log_archive_dest_2='SERVICE=standby LGWR ASYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=

standby' scope=spfile;      

5) Alter system set log_archive_dest_state_1 ='enable' scope=spfile;

6) Alter system set log_archive_dest_state_2='enable' scope=spfile;

7) Alter system set fal_server='standby' scope=spfile;

8) Alter system set fal_client='primary' scope=spfile;

9) Alter system set archive_lag_target=1800 scope=spfile;

10) Alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;

11) Alter system set standby_file_management=auto scope=spfile;

12) Alter system set db_file_name_convert='standby','primary' scope=spfile;

13) Alter system set log_file_name_convert='standby','primary' scope=spfile;

Ø 创建 pfile 参考文件

Alter database open;

Shutdown immediate;

Startup

Create pfile from spfile;

Pfile 在默认路径下 D:\app\Administrator\product\11.2.0\dbhome_1\database\

INITorcl.ORA.

Ø 创建备库的控制文件(此步骤可以不要):

alter database create standby controlfile as 'D:\oracle\control01.ctl';

 

Ps:蓝色字体部分配置重启oracle 会报错,需要到配置文件中修改该段配置,配置文件地址:G:\app\Administrator\product\11.2.0\dbhome_1\database

,startup启动命令用: startup pfile = 'G:\app\Administrator\product\11.2.0\dbhome_1\database\INITorcl.ORA';

Ø 创建密码文件

一般密码文件存放在 D:\app\Administrator\product\11.2.0\dbhome_1\database\

文件名为:PWDorcl.ORA. 如果未能找到,则需要手动创建,命令为:

cmd 命令下输入 Orapwd file=D:\app\Administrator\product\11.2.0\dbhome_1\database\PWDorcl.ora passoword=123 entries=5 (其中 123 sys

的密码)

 

Ø 配置主库网络监听

ORACLE_HOME\NETWORK\ADMIN

Listener.ora

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = CLRExtProc)

(ORACLE_HOME = D:\app\graceli\product\11.2.0\dbhome_1) (PROGRAM = extproc)

(ENVS =

"EXTPROC_DLLS=ONLY:D:\app\graceli\product\11.2.0\dbhome_1\bin\oraclr11.dll")

)

(SID_DESC =

(GLOBAL_DBNAME = orcl)

(ORACLE_HOME = D:\app\graceli\product\11.2.0\dbhome_1)

(SID_NAME = orcl)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)

)

ADR_BASE_LISTENER = D:\app\graceli

注意:如果服务器多网卡,两台服务期间用直连线直连,IP 地址 192.168.1.11

为对应的计算机名。

Tnsnames.ora

# tnsnames.ora Network Configuration File:

D:\app\graceli\product\11.2.0\dbhome_1\tnsnames.ora

# Generated by Oracle configuration tools.PRIMARY =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

STANDBY =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

ORACLR_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)

(CONNECT_DATA =

(SID = CLRExtProc)

(PRESENTATION = RO)

)

)ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

注意:如果服务器多网卡,两台服务期间用直连线直连,IP 地址 192.168.1.11

为直连的 IP

红色字体为添加的部分。

测试监听,重启监听,用网络名连接测试监听是否正常。

Cmd 命令下

Lsnrctl stop

Lsnrctl start

重启数据库 sqlplus 登陆下

Shutdown immediate

Startup

测试监听 cmd 命令下

Tnsping primary

Sqlplus sys/[email protected] as sysdba (123 sys 密码)

如果不能连接,检查防火墙。

主机配置完成。

3.2备库配置 

Ø 文件拷贝与目录建立

在备库建立与主库一致 的文件夹

将主库 D:\App\Administrator 目录下的 admincfgtoollogsdiag ,oradata目录及

E:\OracleDB\ 下的 flash 目录以及密码文件拷贝到备库相同的路径下。

建立一个与主库位置一样的 standby redo 文件所在的文件夹(也就是

E:\OracleDB\Orcl\),否则数据拷贝的时候没有文件夹拷贝不过去,这部分文件

用系统拷贝,不需要人工拷贝。

将主库的 listener.ora tnsnames.ora 拷贝到备库相同的路径下。修改 listener.ora (G:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN 目录中)

中的 IP 为备库的 IP

Ø 在备库新建实例(如备库实例跟随数据库安装,跳过这步)

在备库上注册 oracle 实例到服务中,cmd命令如下:

Oradim -new -sid orcl orcl 为实例名)

Ø 在备库上启动监听

Lsnrctl start

Ø 备库参数文件修改与启动备库

拷贝主库创建的 pfile 参数文件 INITorcl.ora 拷贝到备库的 d:\app 目录下,做

以下修改。

*.db_file_name_convert='primary','standby'

*.db_unique_name='standby'

*.fal_client='standby'

*.fal_server='primary'

*.log_archive_dest_1='location=E:\OracleDB\flash\Orcl\ARCHIVELOG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'

*.log_archive_dest_2='SERVICE=primary LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=primary'

用参数文件启动备库

Startup nomount pfile='D:\app\INITorcl.ora'

 

在备库需要创建flash_recovery_area文件夹

 

 

3.3复制主库 

Ø RMAN 建立备份

在主库 startup

Cmd 下> rman target sys/oracle oracle sys 用户的密码)

需要在目录下新建tmp文件夹

RMAN>backup full database format='E:\OracleDB\tmp\FOR_STANDBY_%u%p%s.RMN' include current controlfile for standby;

将当前 archivelog 归档

RMAN>sql 'alter system archive log current';

Rman 的备份集拷贝到 standby 库相同的路径。

Ø 复制数据库

在主库

RMAN>connect auxiliary sys/oracle@standby (其中 oracle为备库 sys 的密码)

RMAN>duplicate target database for standby nofilenamecheck;

Windows 10 环境下oracle 11g r2 dg配置详解
Alter database mount standby database; (可以省略,rman复制的时候已经将备库设置为mount状态了)Ø 备库启动 Standby

Alter database recover managed standby database disconnect from session(开启实时同步?);

至此 DG 搭建完成。

备库除了shutdown状态之外,都可以同步数据

Alter system switch logfile;切换到归档日志,修改数据之后手动修改

 

4.验证是否搭建成功

4.1主、备库执行查询命令

状态查询命令:Select name,sequence#,applied,completion_time from v$archived_log order by completion_time desc,sequence# desc;

select sequence#,appliedfrom v$archived_logorder by sequence#asc;

两边sequence#序号一致,说明已经同步

下面在主库切换活动日志,然后查询日志同步情况

Windows 10 环境下oracle 11g r2 dg配置详解

Alter system switch logfile;(通过此命令将redo日志切换到归档日志,过一会辅助数据库同步数据,通过状态查询命令查看?

 

5 关于 switchover(正常主备切换) 

(1)首先查询主库切换状态 

Select switchover_status from v$database;

TO STANDBY 表示可以切换,如果是其它的需要根据情况处理后再切

换。

(2)在主库将 primary 切换到 physical standby 

主库执行以下命令

Alter database commit to switchover to physical standby with session shutdown;

Shutdown immediate

Startup nomount

Windows 10 环境下oracle 11g r2 dg配置详解

Alter database mount standby database;

Alter database recover managed standby database disconnect from session;

 


(3)在备库,switchover 到 primary: 

Alter database commit to switchover to primary;

Shutdown immediate

Startup

Alter system switch logfile;

 


Windows 10 环境下oracle 11g r2 dg配置详解

 

在新主库和新备库执行如下命令:

Select name,sequence#,applied,completion_time from

v$archived_log order by completion_time desc,sequence# desc;

在新主库执行:alter system switch logfile;

两边 sequence#一致,说明已经同步,dataguard 切换成功

 

可以将备库打开通过软件连接,在主库修改数据,查看备库数据是否同步判断是否切换成功

 

6.相关错误解决和说明:

ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID (DBD ERROR: OCIServerAttach)

相关报错文档说明:https://www.cnblogs.com/wjshan0808/archive/2013/04/13/3017627.html

 

7.相关名称说明:

搭建DG时,突然想起oracle这些为数众多的name,以下是概念整理,仅代表个人观点

DB_NAME:

①是数据库名,长度不能超过8个字符,记录在datafile、redolog和control file中

②在DataGuard环境中DB_NAME相同而DB_UNIQUE_NAME不同

③在RAC环境中,各个节点的DB_NAME 都相同,但是INSTANCE_NAME不同

④DB_NAME还在动态注册监听的时候起作用,无论是否定义了SERVICE_NAME,PMON进程都会使用DB_NAME动态注册监听

 

DBID:

①DBID可以看做是DB_NAME在数据库内部的表示,它是在数据库创建的时候用DB_NAME结合算法计算出来的

②它存在于datafile和control file中,用来表示数据文件的归属,所以DBID是唯一的,对于不同的数据库,DB_NAME可以是相同的,但是DBID一定是唯一的,例如在DataGuard中,主备库的DB_NAME相同,但是DBID一定不同(看过一个很形象的例子,就是可以有同名的人,但是身份证号码一定不同)

 

DB_UNIQUE_NAME:
①在DataGuard中,主备库拥有相同的DB_NAME,为了区别,就必须有不同的DB_UNIQUE_NAME

②DB_UNIQUE_NAME在DG中会影响动态注册的SERVICE_NAME,即如果采用的是动态注册,则注册的SERVICE_NAME为DB_UNIQUE_NAME,但是实例还是INSTANCE_NAME,即SID

 

INSTANCE_NAME:

①数据库实例的名称,INSTANCE_NAME默认值是SID,一般情况下和数据库名称(DB_NAME)相同,也可不同

②initSID.ora 和orapwSID 文件要与INSTANCE_NAME保持一致

③INSTANCE_NAME会影响进程的名称

 

SID:

①是操作系统中的环境变量,和ORACLE_HOME,ORACLE_BASE用法相同

②在操作系统中要想得到实例名,就必须使用ORACLE_SID。且ORACLE_SID必须与INSTANCE_NAME的值一致

 

SERVICE_NAME:

①数据库和客户端相连是使用的服务名

②在DataGuard中,如果采用动态注册,建议在主备库使用相同的service_names

③在DataGuard中,如果采用静态注册,建议在主备库上的listener中输入相同的服务名(service_name)

④如果采监听采用了静态注册,那么SERVICE_NAME就等于Listener.ora 文件中的GLOBAL_DATABASE_NAME的值

 

GLOBAL_DATABASE_NAME:

①GLOBAL_DATABASE_NAME 是listener配置的对外网络连接名称,可以是任意值

②在客户端配置监听的tnsnames.ora 文件中的service_name 与这个GLOBAL_DBNAME 保持一致就可以了

③配置静态监听注册时,需要输入SID和GLOBAL_NAME

 

8.相关概念说明:

主备切换:这一般是数据库的安全策略,对于一些安全性要求比较高的系统,数据库通常是由主服务器和备份服务器组成,主备同时运行,主服务器有数据改动后,立刻会同步到备份服务器。所以在日常运维工作中,为了防患于未然,经常会进行主备切换,就是把生产对接的服务器从主数据库切换到备份库上,使用备份库运行一段时间,看看备份库运行是否正常,数据是否正确等。

 

 

参考文档:http://www.docin.com/p-453570668.html

 

 

相关文章: