龙空技术网

Oracle 12c Data Guard-部署切换一步搞定(上)

删库跑路吧 378

前言:

现在我们对“oracle12c12201”大约比较讲究,咱们都想要知道一些“oracle12c12201”的相关资讯。那么小编也在网络上汇集了一些对于“oracle12c12201””的相关资讯,希望各位老铁们能喜欢,姐妹们一起来了解一下吧!

技能目标:

· 了解什么是Oracle Data Guard

· 了解Oracle Data Guard备库的两种类型

· 了解Oracle Data Guard 的三种保护模式

· 了解Oracle Data Guard 的Active Data Guard

· 会安装Oracle Database数据库

· 会配置Oracle Data Guard 实现数据同步

· 会互换Oracle Data Guard数据库角色

12.1 案例分析

12.1.1 案例概述

Oracle公司的Oracle Database 数据库,市场占用率有着绝对的优势,它运行稳定、数据安全、性能可靠是用户对它好评的集中体现。Oracle Data Guard在Oracle Database数据库软件里进行设置,就能够实现对主数据库影响很小的前题下,将主数据库的数据,同步到备用数据库里,以防范主数据库的损坏造成数据丢失。因此,在企业应用中Oracle常常被作为数据库容灾的优先选择方案。

12.1.2 案例前置知识点

1.什么是Data Guard

Data Guard 翻译成为中文"数据保护",作用就是保护数据的安全,防范和减少数据库里数据丢失。企业里的应用场景是,将生产数据库(或称主库 Primary)里的数据,通过 Data Guard的功能,传输到备用数据库(或称备库 Standby),以保护数据不丢失。

2.Data Guard的2种类型

Data Guard可以分为物理备库(Physical Standby)和逻辑(Logic Standby)两种。二者的最大差别在于,物理备库应用的是主库的归档日志,而逻辑备库应用的是主库的归档日志中提取的SQL语句。由于两者这一点的区别,决定了物理备库无论从逻辑结构和物理结构都是和主库保持一致,而逻辑备库则只需保证逻辑结构一致。在企业级的应用中,使用最多的是物理Standby。

3.Data Guard 的3种保护模式

从Data Guard的保护模式分,可以分为三种不同的保护模式:

· 最大保护(Maximize Protection):这种模式的配置可以保证主库和备库的数据完全同步,任何情况下主库的损毁都不会导致已提交数据的丢失。如果主库和备库之间的网络出现问题,或者备库本身出现问题,都会导致主库停止数据处理。

· 最大可用(Maximize Availability):这种模式和上面一种类似,也是会保证主库和备库的同步,区别在于当网络或备库不可用时,主库仍然可以继续数据处理。

· 最大性能(Maximize Performance):这是Data Guard默认的保护模式,主库和备库是异步的。这种模式可能在主库出现损毁时,丢失一部分数据。但是这种模式对主库负荷最小,因此具有最好的性能。

4.Data Guard 的Active Data Guard

Active Data Guard简称为ADG,是从Oracle 11gR2 版本起,对以前版本 Data Guard功能的一个新扩展。其最大的特点是,备用数据库在应用日志恢复数据同时,可以处于只读状态(Open Read Only),从而扩展了备用数据库的用途,不仅可以作为数据冗灾服务器,还可以作为只读数据库服务器,可供报表系统的数据查询提取。

5.Data Guard 基础架构

图12.1是Data Guard的常见基础物理架构。

图12.1 Data Guard基础架构

Data Guard基础物理架构中有两个数据库:生产数据库、备用数据库。

1)生产数据库(或称主库 Primary Database)

生产数据库(图12.1 左边部分),是供业务系统实时进行读写的数据库,上面存储的数据,随着业务的写入而变化。

2)备用数据库(或称备库 Standby Database)

备用数据库(图12.1 右边部分),通过网络接收主数据库传输过来的归档日志,在本地数据库里恢复归档日志,实现数据与主库同步。

12.1.3 案例环境

1. 本案例实验环境

本案例操作系统的环境见表12-1、数据库环境的要求见表12-2。

表12-1 操作系统环境

表12-2 数据库环境

2. 案例需求

1) CentOS7.3搭建Oracle 12c Data Guard环境。

2) 手动执行主备切换操作。

3. 案例实现思路

1) 安装2 台CentOS 7.3 64bit Linux服务器系统,用于搭建 Oracle Data Guard。

2) 在2台Linux 服务器系统里安装Oracle Database 12.2.0.1 数据库软件。

3) 在2台服务器里同时创建相名 SID(ORCL)名字的数据库实例,而且Oracle数据库sys和system帐号密码相同。

4) 配置主库(DB-01)启用 Data Guard 功能。

5) 配置备库(DB-02)启用 Data Guard 功能。

6) 验证主库与备库数据同步功能成功。

7) 配置主库(DB-01)、备库(DB-02)角色互换,且互换角色后数据同步成功。

12.2 案例实施

12.2.1 安装Oracle Database的系统参数配置

两台Linux系统,均需要执行如下步骤,以完成Oracle Database数据库的安装。

1.检查确认Linux系统版本。

[root@DB-01 ~]# cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

2. 关闭Firewall防火墙。

[root@DB-01 ~]# systemctl stop firewalld.service

[root@DB-01 ~]# systemctl disable firewalld.service

3. 关闭SELinux防火墙。

[root@DB-01 ~]# vi /etc/selinux/config

SELINUX=enforcing

修改为

SELINUX=disabled

4. 禁用 THP 功能,添加如下一行参数。

[root@DB-01 /]# vi /etc/default/grub

GRUB_CMDLINE_LINUX="rhgb quiet transparent_hugepage=never"

5. 重新生成新的Linux grup启动菜单

[root@DB-01 /]# grub2-mkconfig -o /boot/grub2/grub.cfg

Generating grub configuration file ...

Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64

Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img

Found linux image: /boot/vmlinuz-0-rescue-710d8540242f4334820c5acc6160db07

Found initrd image: /boot/initramfs-0-rescue-710d8540242f4334820c5acc6160db07.img

done

6. 修改系统配置文件sysctl.conf,添加如下参数。

[root@DB-01 /]# vi /etc/sysctl.conf

fs.file-max = 6815744

kernel.sem = 250 32000 100 128

kernel.shmmni = 4096

kernel.shmall = 1073741824

kernel.shmmax = 4398046511104

kernel.panic_on_oops = 1

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

net.ipv4.conf.all.rp_filter = 2

net.ipv4.conf.default.rp_filter = 2

fs.aio-max-nr = 1048576

net.ipv4.ip_local_port_range = 9000 65500

7. 修改系统配置文件limits.conf,添加如下参数。

[root@DB-01 /]# vi /etc/security/limits.conf

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

oracle soft stack 10240

oracle hard stack 32768

oracle soft memlock 3145728

oracle hard memlock 3145728

8. 修改系统配置文件login,添加如下参数。

[root@DB-01 /]# vi /etc/pam.d/login

session required pam_limits.so

9. 修改系统配置文件profile,增加oracle用户相关配置,添加如下参数。

[root@DB-01 ~]# vi /etc/profile

if [ $USER = "oracle" ]; then

if [ $SHELL = "/bin/ksh" ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

fi

10. 安装Oracle依赖的软件包

[root@DB-01 ~]# yum -y install bc binutils compat-libcap1 gcc gcc-c++ glibc glibc*.i686 glibc-devel glibc-devel*.i686 ksh libaio libaio-*.i686 libaio-devel libaio-devel*.i686 libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel libstdc++devel*.i686 libXi libXi*.i686 libXtst libXtst*.i686 libxcb libxcb*.i686 libX11 libX11*.i686 libXau libXau*.i686 make sysstat unixODBC unixODBC-devel unixODBC*.i686

11. 创建组

[root@DB-01 ~]# groupadd -g 54321 oinstall

[root@DB-01 ~]# groupadd -g 54322 dba

[root@DB-01 ~]# groupadd -g 54323 oper

[root@DB-01 ~]# groupadd -g 54324 backupdba

[root@DB-01 ~]# groupadd -g 54325 dgdba

[root@DB-01 ~]# groupadd -g 54326 kmdba

[root@DB-01 ~]# groupadd -g 54327 asmdba

[root@DB-01 ~]# groupadd -g 54328 asmoper

[root@DB-01 ~]# groupadd -g 54329 asmadmin

[root@DB-01 ~]# groupadd -g 54330 racdba

12. 创建oracle系统帐号

[root@DB01 /]# useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,racdba oracle

13. 设置oracle帐号密码

[root@DB-01 ~]# passwd oracle

Changing password for user oracle.

New password: #输入密码为 oracle123

BAD PASSWORD: The password is shorter than 8 characters

Retype new password: #再次输入密码为 oracle123

passwd: all authentication tokens updated successfully.

14. 编辑oracle帐号配置文件,增加oracle帐号相关环境变量,添加如下参数。

[root@DB-01 ~]# vi /home/oracle/.bash_profile

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1

export ORACLE_SID=orcl

export PATH=$ORACLE_HOME/bin:$PATH:/u01/app/grid/product/12.2.0/grid/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:

export TERM=xterm

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export TEMP=/tmp

export TMPDIR=/tmp

15. root帐号创建安装目录。

[root@DB-01 ~]# mkdir /u01

[root@DB-01 ~]# chmod -R 777 /u01

[root@DB-01 ~]# chown oracle.oinstall /u01

16. 使用oracle帐号创建安装目录。

[oracle@DB-01 ~]$ mkdir -p $ORACLE_BASE

[oracle@DB-01 ~]$ mkdir -p $ORACLE_HOME

17. 上传oracle安装文件到/tmp并解压。

[oracle@DB-01 /]$ cd /tmp/

[oracle@DB-01 tmp]$ ls -l linuxx64_12201_database.zip

-rw-r--r-- 1 oracle oinstall 3453696911 Jul 2 17:37 linuxx64_12201_database.zip

[oracle@DB-01 tmp]$

[oracle@DB-01 tmp]$ unzip linuxx64_12201_database.zip

18. 重启系统

使用root帐号登录重启系统。

[root@DB-01 ~]# reboot

12.2.2 安装Oracle Database数据库软件

两台Linux系统,均需要执行如下步骤,以完成Oracle Database数据库的安装。

1. 以oracle帐号登录Linux系统,如图12.2所示。

图12.2 oracle帐号登录系统

2. 如图12.3,以oracle帐号进入database软件安装目录,执行安装程序。

图12.3 oracle帐号执行安装程序

3. 如图12.4,不勾选Oracle的支持,然后点击安装向导中的Next。

图12.4 oracle安装向导更新界面

4. 如图12.5,未输入email 地址的警告,选择Yes继续。

图12.5 未输入邮件地址的警告

5. 如图12.6,选择安装类型为只安装软件,点击Next继续。

图12.5 只安装软件

6. 如图12.6,选择安装类型为单实例,点击Next继续。

图12.6 单实例安装

7. 如图12.7,选择安装类型为企业版本,点击Next继续。

图12.7 安装企业版

8. 如图12.8,确认安装路径,点击Next继续。

图12.8 确认安装路径

9. 如图12.9,确认安装目录及组信息,点击Next继续。

图12.9 确认安装路径及组信息

10. 如图12.10,确认系统组信息,点击Next继续。

图12.10 确认系统组信息

11. 如图12.11,oracle自动系统检查。

图12.11 系统检查

12. 如图12.12,安装任务总结,点击Install继续。

图12.12 安装任务总结

13. 如图12.13,oracle软件正在安装中。

图12.13 oracle软件安装中

14. 如图12.14,安装向导提示用root帐号,在shell命令终端执行执行2个脚本,执行完成后,点击安装向导OK。

图12.14 提示用root帐号执行2个脚本

15. 如图12.15,数据库软件安装完成,点击close结束安装。

图12.15 数据库软件安装完成

12.2.3 创建数据库监听服务

两台Linux系统,均需要执行如下步骤,以完成Oracle数据库监听服务的建立。

1. 如图12.16,oracle帐号,执行netca启动网络配置助手。

图12.16 启动网络配置助手

2. 如图12.17,选择监听程序配置,点击Next继续。

图12.17 选择监听程序配置

3. 如图12.18,选择添加监听服务,点击Next继续。

图12.18 添加监听服务

4. 如图12.19,接受默认的监听服务名,点击Next继续。

图12.19 监听服务名

5. 如图12.20,协议为TCP,点击Next继续。

图12.20 服务协议

6. 如图12.21,配置监听服务端口为默认的1521,点击Next继续。

图12.21 监听服务端口

7. 如图12.22,配置向导询问是否配置其它监听,选择NO,点击Next继续。

图12.22 配置其它监听

8. 如图12.23,监听服务配置完成,点击Next继续。

图12.23 监听服务配置完成

9. 如图12.24,监听服务配置完成,点击Finish退出网络配置助手。

图12.24 退出网络配置助手

12.2.4 创建数据库实例

两台Linux系统,均需要执行如下步骤,以完成Oracle数据库实例的建立。

按前期规划,如表12-3所示,完成数据库的创建。

表12-3 数据库环境

1. 如图12.25,oracle帐号执行dbca数据库创建助手命令。

图12.25 执行数据库创建命令

2. 如图12.26,选择创建数据库操作,点击Next继续。

图12.26 创建数据库

3. 如图12.27,选择高级安装配置,点击Next继续。

图12.27 选择高级安装模式

4. 如图12.28,选择数据库类型为单实例,使用通用传输模版,点击Next继续。

图12.28 选择实例类型及模版

5. 如图12.29,数据库实例信息,输入规划的orcl,同时不勾选Create as Container database,点击Next继续安装。

图12.29 输入实例名字信息

6. 如图12.30,数据存储选择使用默认的存储属性,点击Next继续安装。

图12.30 默认存储属性

7. 如图12.31,快速恢复选项,选择Enable Archive,点击Edit archive mode parameters,编辑归档参数。

图12.31 启用归档

8. 如图12.32, 在Archive log destinations的第1行中,输入 location=/u01/archivelog,点击OK返回主界面,点击Next继续安装。

图12.32 指定归档存放路径

9. 如图12.33,网络配置中使用前面步骤已创建好的监听,点击Next继续安装。

图12.33 网络配置

10. 如图12.34,数据库Vault配置选择全部不需要启用,点击Next继续安装。

图12.34 Vault配置

11. 如图12.35,数据库内存管理配置。

图12.35 内存配置

Memory target: 这个是根据服务器内存自动计算的, 比如总的是 8G 使用 40% 用给ORACLE, Oracle再计划划多少给PGA。

12. 如图12.36,数据库进程配置。

图12.36 进程配置

13. 如图12.37,数据库字符集配置。

图12.37 进程配置

14. 如图12.38,连接模式配置。

图12.38 连接模式配置

15. 如图12.39,数据库示例,点击Next继续安装。

图12.39 数据库示例

16. 如图12.40,数据库企业管理器配置,点击Next继续安装。

图12.40 数据库企业管理器

17. 如图12.41,数据库默认用户sys和system密码配置,根据前期规划输入密码为ORACLEdba123,点击Next继续安装。

图12.41 用户密码配置

18. 如图12.42,数据库创建选项,点击Next继续安装。

图12.42 数据库创建选项

19. 如图12.43,数据库创建总结,点击Finish继续安装。

图12.43 数据库创建总结

20. 如图12.44,数据库实例创建中。

图12.44 数据库创建中

21. 如图12.45,数据库实例创建完成,点击Close退出配置助手。

图12.45 数据库创建完成

12.2.5 配置Data Guard功能

两台均是以oracle帐号登录Linux系统,进行Oracle Data Guard功能的配置。

按前期规划,如表12-4所示,在2台Oracle数据库环境里,完成Data Guard的配置。

表12-4 Data Guard环境

1. 主库(DB-01),配置监听文件listener.ora。

将HOST=DB-01 改为 HOST=0.0.0.0

同时添加 # Add the following lines 提示下的所有行,请注意排版格式。

[oracle@DB-01 ~]$ vi /u01/app/oracle/product/12.2.0/db_1/network/admin/listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/product/12.2.0/db_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

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

)

)

#Add the following lines

SID_LIST_LISTENER =

(SID_DESC =

(GLOBAL_DBNAME =orcl)

(ORACLE_HOME = /u01/app/oracle/product/12.2.0/db_1)

(SID_NAME = orcl)

)

2. 主库(DB-01),重启监听服务。

[oracle@DB-01 ~]$ lsnrctl stop

[oracle@DB-01 ~]$ lsnrctl start

3. 主库(DB-01),配置网络连接名文件tnsnames.ora。

将第一个HOST=DB-01 改为 HOST=0.0.0.0

将第二个HOST=DB-01 改为 HOST=192.168.1.52

同时添加 # Add the following lines 提示下的所有行,请注意排版格式。

[oracle@DB-01 ~]$ vi /u01/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

LISTENER_ORCL =

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

ORCL =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

#Add the following lines

ORCLDG =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

4. 主库(DB-01),确认处于归档模式。

[oracle@DB-01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 3 11:35:47 2018

Copyright (c) 1982, 2016, Oracle. All rights reserved.

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> archive log list;

Database log mode Archive Mode

Automatic archival Enabled

Archive destination /u01/archivelog

Oldest online log sequence 1

Next log sequence to archive 2

Current log sequence 2

SQL>

5. 主库(DB-01)数据库使用命令,启动强制日志(Forced Logging) 模式。

SQL> alter database force logging;

Database altered.

6. 主库(DB-01),查询重做日志(redo log)的数量,本案例环境重做日志的数量是3个。

SQL> select thread#,groups from v$thread;

THREAD# GROUPS

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

1 3

7. 主库(DB-01),查询重做日志(redo log)的大小,本例重做日志每个大小是200M。

SQL> select thread#,group#,bytes/1024/1024 MB from v$log;

THREAD# GROUP# MB

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

1 1 200

1 2 200

1 3 200

8. 主库(DB-01),查询重做日志(redo log)的位置,添加备用日志(standby log)位置与重做日志路径相同。

SQL> select member from v$Logfile;

MEMBER

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

/u01/app/oracle/oradata/orcl/redo03.log

/u01/app/oracle/oradata/orcl/redo02.log

/u01/app/oracle/oradata/orcl/redo01.log

9. 主库(DB-01),添加4组(4是根据重做日志数量+1计算而来)备用日志(standby log)。

SQL> alter database add standby logfile thread 1 GROUP 4 '/u01/app/oracle/oradata/orcl/standlog4.ora' SIZE 200M;

Database altered.

SQL> alter database add standby logfile thread 1 GROUP 5 '/u01/app/oracle/oradata/orcl/standlog5.ora' SIZE 200M;

Database altered.

SQL> alter database add standby logfile thread 1 GROUP 6 '/u01/app/oracle/oradata/orcl/standlog6.ora' SIZE 200M;

Database altered.

SQL> alter database add standby logfile thread 1 GROUP 7 '/u01/app/oracle/oradata/orcl/standlog7.ora' SIZE 200M;

Database altered.

10. 主库(DB-01),确认备用日志(standby log)添加成功。

SQL> SELECT THREAD#,GROUP#,bytes/1024/1024 MB,ARCHIVED,STATUS FROM V$STANDBY_LOG;

HREAD# GROUP# MB ARC STATUS

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

1 4 200 YES UNASSIGNED

1 5 200 YES UNASSIGNED

1 6 200 YES UNASSIGNED

1 7 200 YES UNASSIGNED

11. 主库(DB-01),执行Data Guard参数修改,唯一数据库名为规划的orcl。

SQL> alter system set DB_UNIQUE_NAME=orcl scope=spfile;

System altered.

12. 主库(DB-01),执行Data Guard参数修改,归档日志为规划的orcl、orcldg。

SQL> alter system set log_archive_config='DG_CONFIG=(orcl,orcldg)' scope=spfile;

System altered.

13. 主库(DB-01),执行Data Guard参数修改,指定本地归档日志位置。

SQL> alter system set log_archive_dest_1='LOCATION=/u01/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' scope=spfile;

System altered.

14. 主库(DB-01),执行Data Guard参数修改,指定远程归档日志位置。

SQL> alter system set log_archive_dest_2='SERVICE=orcldg LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg' scope=spfile;

System altered.

15. 主库(DB-01),执行Data Guard参数修改,启用本地归档参数功能。

SQL> alter system set log_archive_dest_state_1=enable scope=spfile;

System altered.

16. 主库(DB-01),执行Data Guard参数修改,启用远程归档参数功能。

SQL> alter system set log_archive_dest_state_2=enable scope=spfile;

System altered.

17. 主库(DB-01),执行Data Guard参数修改,远程密码策略为EXCLUSIVE。

SQL> alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;

System altered.

18. 主库(DB-01),执行Data Guard参数修改,最大归档日志进程数量为30个。

SQL> alter system set LOG_ARCHIVE_MAX_PROCESSES=30 scope=spfile;

System altered.

标签: #oracle12c12201