Oracle 12c dataguard云上挖坑记

--为某机场贵宾业务部署oracle 12c到百度云

项目需求

据称现有环境为多节点RAC,管理成本高,主要体现在没有专业技术人家对基础设施进行维护。迁移到云上以后,基础设施维护就节省掉了。而且后边容量扩充易如反掌,远程维护之类也比物理环境去现场操作方便许多。

但在云上,oracle RAC实现的两个前提条件--共享存储及心跳网络,不被正式支持,因此要在云上部署oracle RAC用于生产环境,不是一个好的解决方案。经过多轮讨论,一致同意在百度云部署单实例oracle 12c,以dataguard方式来保护数据可用性。当然,相对与RAC,单实例的系统负载能力要差很多;同样是两个节点,RAC两节点是同时对外提供读写服务,而单实例dataguard,只有一台设备对外提供服务,而另一台只能做备用,与主库进行数据同步而已。考虑到实际业务访问量不大的情况,这样做也在可接受范围。

基础设施

两台云主机,临时绑定公网ip,20M独享带宽。资源配置为:cpu 8core,内存32G,系统盘50G,云盘1000G。云主机默认没有swap,因此用这1000G云盘的部分做swap,其余用于安装目录及数据目录。

操作系统版本已经有别人选好,版本为CentOS release 6.8,我没有自主权,不然就选centos 7。不过6也好,关防火墙没centos 7那么繁琐。曾经在阿里云部署了几套oracle 11g,用的centos 7,在执行正式安装指令./runInstaller 时,多要一步操作,即以oracle帐号帐号执行 export DISPLAY=:1,不然无法进行下一步。具体参考我以前的文章“阿里云部署oracle 11g”,连接地址为http://blog.51cto.com/sery/2107701

软件使用oracle 12c,有正式授权,让我自己去官网下载。这还真费事,先下载到自己的个人电脑(不能直接用wget,需要输入用户名及密码验证—也许我不懂怎么在命令行拼接这个下载的url),再上传到云主机。接近4G的文件,下载、上传花了太多时间,唉!

oracle安装前的准备

主要步骤有:准备交换分区及数据分区、修改主机名、修改系统相关配置及依赖包、准备桌面环境。

◎准备准备交换分区及数据分区

◆准备交换分区


fdisk /dev/vdb

mkswap /dev/vdb1

swapon /dev/vdb1

Fdisk操作过程中,分区代码选“82”,大小为18G。执行完上述操作后,用命令free –m检查是否生效。

由上图可知,交换分区确实被加载到系统。为了让交换分区随系统开机加载,需要修改文件/etc/fstab,加入的内容等描述完加数据分区以后,一并贴出。

◆准备数据分区


fdisk /dev/vdb

mkfs.ext4 /dev/vdb2

mkdir /u01

mount /dev/vdb2 /u01

为使挂接永久生效,需要对文件/etc/fstab做修改,加入交换分区及数据分区以后,/etc/fstab文件的内容如下所示:

修改完以后,重启一下系统,用df –h 及 free –m 执行一下,看是否自动挂载交换分区及数据分区。

◎修改主机名

云服务器的主机名,总是莫名其妙,看起来很是不爽。改主机名,有两个目的,一个是登录系统便于辨识,另外一个原因是服务器之间通讯用短词比ip地址省事。需要注意的是,操作系统版本不一样,修改主机名的方式也可能不同。比如centos 7,就有一个/etc/hostname文件来关联。对于centos 6及以前版本,与主机名有关系的文件大概有:/etc/sysconfig/network,/etc/sysconfig/network-scriptes/ifcfg-eth0,/etc/hosts。有时候出问题,很可能就在这些文件里主机名的设定,建议挨个检查。下面只列出两个云主机的/etc/hosts内容:


[[email protected] ~]# more   /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4   localhost4.localdomain4

::1         localhost localhost.localdomain   localhost6 localhost6.localdomain6

#192.168.0.4 instance-umns7cw3-2   instance-umns7cw3-2.novalocal

192.168.0.4   oradb162

192.168.0.5   oradb95


[[email protected] ~]# more   /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4   localhost4.localdomain4

::1         localhost localhost.localdomain   localhost6 localhost6.localdomain6

192.168.0.5 oradb95 oradb95.novalocal

192.168.0.4 oradb162

改完后,如果执行hostname没见效果,再检查一遍与主机名相关文件的设置,然后重启系统试试。主机名生效后,用设定的名称代替ip地址,两机互ping测试网络连通性。

◎准备桌面环境

大部分情况下,我都用远程桌面方式安装oracle,这有助于把控整个安装过程,直观了解安装进展及发生的问题。桌面环境由xwindow及vncserver组成,默认情况下,云主机是没有安装这两个工具。多次实践证明,vncserve配合xwindow为最佳组合,安装完就能用,不蓝屏或灰屏。具体的安装步骤如下:


yum groupinstall "X   Window System" "Desktop" -y

yum install tigervnc-server   -y

安装完这两个工具以后,只需要启动vncserver,设置好用户名和密码,注意输出,用客户端连接的时候需要使用。

连接成功以后,没有黑屏灰屏,恭喜!

◎修改系统相关配置及依赖包

步骤比较繁杂,因为经常要安装部署oracle,我就写了一个脚本,该脚本在11g及12c都有效,其内容为:


[[email protected] ~]# more oracle_rep.bash

#!/bin/bash

#writed by sery 2012-05-16

#########################################

#install depending packages                       #

#########################################

yum install gcc* gcc-* gcc-c++-*   glibc-devel-* glibc-headers-* compat-libstdc* \

libstdc* elfutils-libelf-devel*   libaio-devel* \

sysstat* unixODBC-* pdksh-* ksh   compat-libcap1

########################################

#add groups,user and create dir        #

########################################

/usr/sbin/groupadd -g 501 oinstall

/usr/sbin/groupadd -g 502 dba

useradd -u 1000 -g oinstall -G dba   oracle

mkdir /u01/app/

mkdir -p /u01/app/oraInventory

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01/app

chmod -R 775 /u01/app

##############################################

#modify    sysctl.conf                                    #

##############################################

cat >> /etc/sysctl.conf   <<done

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000   65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

fs.aio-max-nr = 1048576

done

sysctl -p

###############################################

#modify    /etc/security/limits.conf                          #

###############################################

cat >> /etc/security/limits.conf   << done

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

done

################################################

#modify /etc/pam.d/login                                  #

################################################

echo "session    required       pam_limits.so">>/etc/pam.d/login

################################################

# setting user oracle env                                   #

################################################

cat >> /home/oracle/.bash_profile   <<done

export ORACLE_SID=gbdb

export ORACLE_UNQNAME=oradb162

export ORACLE_base=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/12.2.0

export PATH=$ORACLE_HOME/bin:$PATH

done

依赖包安装那步,可能有重复(安装xwindow桌面环境可能会顺带安装了一些依赖),不过如果已经安装过相关的包,执行过程会自动跳过,不会有任何风险存在。执行这个脚本,完事后检查一下相关目录是否生成,配置文件是否被修改。

正式安装oracle

用vnc客户端连接到云主机,进入系统桌面以后,至少开一个终端窗口,以root帐号执行指令“xhost +”,切换帐号到oracle ,指令为 “su – oracle”。再开一终端窗口,以root帐号把下载来的oracle解包,命令如下:


unzip   linuxx64_12201_database.zip

执行完毕,将在当前路径生成目录database,把此目录复制到/home/oracle

,执行命令:


chown –R oracle:oinstall   /home/oracle/database

现在切换到oracle帐号那个终端窗口,执行“./runInstaller”,只要能出安装界面,一般都不会有问题。

往下进行的时候,选择只安装数据库软件,即第2个选项。再往下,会检查依赖包,交换分区等,如有问题,会有输出提示,按提示处理即可。安装软件所需要的时间,跟资源配置相关,资源越好(cpu、内存、硬盘)、速度越快,安装时间也就越短。

安装完软件,检查一下目录,看看/u01/app/oracle路径下,文件目录是否都生成了。12c正确安装以后,不需要执行netca来配置监听器,默认已经弄好了,直接以oracle帐号启动即可:


[[email protected] ~]$ su – oracle

[[email protected] ~]$ lsnrctl start

[[email protected] ~]$ lsnrctl status

LSNRCTL for Linux: Version 12.2.0.1.0 -   Production on 14-JUN-2018 14:47:13

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version   12.2.0.1.0 - Production

Start Date                14-JUN-2018 10:32:21

Uptime                    0 days 4 hr. 14 min. 52   sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Log File           /u01/app/oracle/diag/tnslsnr/oradb95/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oradb95)(PORT=1521)))

The listener supports no services

The command completed successfully

上述操作在两个服务器都相同。

创建数据库(仅在主库操作)

继续在vnc客户端进行操作。终端窗口,以oracle帐号执行“dbca”,弹出图形操作界面,选择“Create a database(创建一个数据库)”。

下一步选“typical configuration”,字符集选GBK(这个是对方要求的,也可以创建完后再更改),密码设置设置建议不要用特殊字符,如“[email protected]_”这类的,在连接数据库的时候,会比较恼火!如果选择了“Advanced configuration(高级定制方式)”,就顺手把归档项给选上。由于是旧的项目迁移,没有选择12c的新特性“容器数据库”。内存管理,可工具自己系统资源的情况自行调整(拉滚动条即可)。

高级定制还可以把EM配置上,12c的em还是管理数据库还是很方便的,特别是扩充系统表空间(默认系统表空间、系统辅助白空间太小,不太适应真实应用)。

连续点几个“Next”,到汇总界面后,基本就没什么问题了。

如果对创建的数据库不满意,在没有正式导入数据投入生产以前,再用dbca进行删除即可。

数据库创建成功后,实例自动启动,可查看系统进程进行验证。更进一步,执行命令:


[[email protected] ~]# su   - oracle

[[email protected] ~]$ sqlplus / as sysdba;

SQL*Plus: Release 12.2.0.1.0 Production   on Fri Jun 15 10:35:53 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> select   count(*) from v$session;

COUNT(*)

----------

46

如果得到如上的结果,可以认为一切正常。

前边我强调过,oracle 默认系统表空间太小,需要调整。有两种方法:一种是sqlplus客户端进去执行alter 语句,另一种是em浏览器方式。其实都是去操纵那个sql语句而已。下边以图形方式来演示这个更改过程,看起来更直观一些.

鼠标点左侧“+SYSTEM”,选中文件那行,如下图:

点菜单“操作”下拉列表框,选“调整大小”项,弹出具体的操作框,如下两图所示:

填写大小为2G,不急着确定,点“显示 SQL”,可得到实际sql语句如下:


ALTER DATABASE DATAFILE   '/u01/app/oracle/oradata/GBDB/datafile/o1_mf_system_fl1mqhrq_.dbf' RESIZE 2G;

瞧,是不是跟sqlplus敲代码的效果一样呢?默认是810M,现在点“确定”按钮是更改生效。到oracle数据库目录实际查看,看文件大小是否发生改变。


[[email protected] datafile]$ cd /u01/app/oracle/oradata/GBDB/datafile/

[[email protected] datafile]$ du -hs *

551M    o1_mf_sysaux_fl1msk5v_.dbf

2.1G      o1_mf_system_fl1mqhrq_.dbf

2.3M    o1_mf_temp_fl1mw9p0_.tmp

71M     o1_mf_undotbs1_fl1mtnct_.dbf

5.1M    o1_mf_users_fl1mtojb_.dbf

嘿嘿,没骗人呢,文件大小确实变化了。再用此方法,把辅助表空间调成1G的容量。

Datagurd实现过程

主备两机都需要操作,而且操作方法有差异,在描述中,我会特别标明,不至于让他人困惑。

两台服务器的监听器随oracle 12c的安装已经自动配置完成,默认监听并没有生成文件,需要手动或者执行netca去生成。

◆主库的监听文件内容为:


[[email protected] admin]$ pwd

/u01/app/oracle/product/12.2.0/network/admin

[[email protected] admin]$ more listener.ora

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

# Generated by Oracle configuration   tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

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

)

)

SID_LIST_LISTENER=

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = gbdb)

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

(SID_NAME = gbdb)

)

)

◆备库的监听文件内容为:


[[email protected] admin]$ pwd

/u01/app/oracle/product/12.2.0/network/admin

[[email protected] admin]$ more listener.ora

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

# Generated by Oracle configuration   tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

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

)

)

SID_LIST_LISTENER=

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = gbdb)

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

(SID_NAME = gbdb)

)

)

◎配置本地命名服务

两台服务器进行相同的操作。继续在vnc客户端,终端窗口以oracle帐号执行netca(开始用文本编辑器编写tnsname.ora文件,总是不行。比如第一行要定格,不要有空格等,书写要求太严。后用图形创建,创建完查看文件,即不出错,又了解实质)。鼠标选取第三项,如图所示:

选取“add”点“Next”按钮,“Service Name”填“gbdb”,接着点几次“Next”,到填“Host name”这里填写“oradb162(与/etc/hosts设定相一致)”,如下图所示:

配置完这个,再重复此操作,把oradb95给加上。执行完毕后,tnsname.ora的内容为:


[[email protected] admin]$ more tnsnames.ora

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

# Generated by Oracle configuration   tools.

ORADB162 =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = gbdb)

)

)

ORADB95 =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME =   gbdb)

)

)

这样再也不用担心书写格式、写漏括号“)”啥的了。

得检验这些设置有没有用,在两台服务器分别执行如下指令进行验证:


[[email protected] admin]$ tnsping oradb95

TNS Ping Utility for Linux: Version   12.2.0.1.0 - Production on 15-JUN-2018 12:08:46

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

Used parameter files:

Used TNSNAMES adapter to resolve the   alias

Attempting to contact (DESCRIPTION =   (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb95)(PORT = 1521)))   (CONNECT_DATA = (SERVICE_NAME = oradb95)))

OK   (0 msec)

[[email protected] admin]$ tnsping oradb162

TNS Ping Utility for Linux: Version   12.2.0.1.0 - Production on 15-JUN-2018 12:08:51

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

Used parameter files:

Used TNSNAMES adapter to resolve the   alias

Attempting to contact (DESCRIPTION =   (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb162)(PORT = 1521)))   (CONNECT_DATA = (SERVICE_NAME = oradb162)))

OK   (0 msec)

◎主库启用归档及force logging强制记录日志

1、归档操作:检查主库是否处于归档,如果不是,则启用它,具体指令如下(启用要在mount下进行):


SQL> archive   log list;

Database   log mode              No Archive Mode

Automatic   archival             Disabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     11

Current log sequence           13

SQL> alter   database archivelog;

Database altered.

SQL> archive   log list;

Database   log mode              Archive Mode

Automatic   archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     11

Next log sequence to archive   13

Current log sequence           13

SQL> alter database open;

Database altered.

2、force logging强制记录日志:先检查是否启用,如未则启用之(可在数据库open状态下执行),步骤如下:


SQL> select   force_logging from v$database;

FORCE_LOGGING

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

NO

SQL> alter   database force logging;

Database altered.

SQL> select   force_logging from v$database;

FORCE_LOGGING

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

YES

◎为备库准备控制文件

在主库上执行如下操作,生成的文件存放到一个临时的位置,后边等其它文件都到齐后,再把它移动到合适的位置。我参考好多文档,都在创建者玩意,但实际上我用rman复制方式创建备库,根本就不需要这个控制文件。分析原因,应该是这样:备库以 startup nomount pfile 方式启动实例,只读取参数文件而已;主库以rman同时连主备库,以指令“duplicate target database”从主库复制所需文件,也包括了控制文件。


SQL> alter   database create standby controlfile as '/home/oracle/gdbd.ctl';

Database altered.

◎主库创建standby redo log

尽量与主库现有的日志文件大小相一致,创建的组不少于系统现有的。


查当前日志组大小

SQL> select   GROUP#,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;

GROUP#     SIZE_M STATUS           ARC

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

1        200 CURRENT          NO

2        200 INACTIVE         YES

3        200 INACTIVE         YES

查存储路径

SQL> select   MEMBER from v$logfile;

MEMBER

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

/u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log

/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log

/u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_2_fl1mvv0q_.log

/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_2_fl1mvvfs_.log

/u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_1_fl1mvty3_.log

/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_1_fl1mvvgd_.log

6 rows selected.

###一个组两个成员,路径不同,大小内容完全一致。

[[email protected] ~]# diff   /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log

[[email protected] ~]# du   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log

204804    /u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/o1_mf_3_fl1mvvkc_.log

[[email protected] ~]#   du /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log

204804    /u01/app/oracle/oradata/GBDB/onlinelog/o1_mf_3_fl1mvv1j_.log

创建新的日志组,也存放在两个位置

SQL> alter   database add standby logfile group 4   ('/u01/app/oracle/oradata/GBDB/onlinelog/standby01.log','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/stabdy01.log')   size 200M;

Database altered.

SQL> alter   database add standby logfile group 5   ('/u01/app/oracle/oradata/GBDB/onlinelog/standby02.log','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/stabdy02.log')   size 200M;

Database altered.

SQL> alter   database add standby logfile group 6   ('/u01/app/oracle/oradata/GBDB/onlinelog/standby03.log','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/stabdy03.log')   size 200M;

Database altered.

SQL> alter   database add standby logfile group 7 ('/u01/app/oracle/oradata/GBDB/onlinelog/standby04.log','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/onlinelog/stabdy04.log')   size 200M;

Database altered.

 

验证所创建的组

SQL> select   group#,thread#,sequence#,archived,status from v$standby_log;

 

    GROUP#    THREAD#    SEQUENCE# ARC STATUS

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

4          0          0 YES UNASSIGNED

5          0          0 YES UNASSIGNED

6          0          0 YES UNASSIGNED

7          0          0 YES UNASSIGNED

◎准备初始化参数文件

主库上生成文件,复制到备库,然后两个参数文件都需要做修改,以符合实际需求。主库上对参数的修改,可以直接在sqlplus里执行alter语句,但这不太保险,一旦出错,容易给自己造成压力。建议修改参数文件前,做个原始备份,然后修改此参数文件。万一将来以此修改过的参数文件生成服务器参数文件(spfile)出现异常,备份的那个参数文件就是后悔药。

◆执行以下指令生成参数文件:


SQL>   create pfile='/home/oracle/initgd.ora' from   spfile;

File created.

修改修改前做个原始备份

[[email protected] ~]$ pwd

/home/oracle

[[email protected] ~]$ cp   initgd.ora initgd.ora.bk20180617

复制一份参数文件initgd.ini到备库服务器的/home/oracle目录,等待修改。

◆修改主库参数文件/home/oracle/initgb.ora

在源文件的基础上增加如下内容(一行太长,有些行自动换行了,书写时请注意):


*.db_unique_name='oradb162'

*.fal_client='oradb162'

*.fal_server='oradb95'

*.log_archive_config='DG_CONFIG=(oradb162,oradb95)'

*.log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/gbdb/   VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradb162'

*.log_archive_dest_2='SERVICE=oradb95   LGWR ASYNC VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=oradb95'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.standby_file_management='AUTO'

◆准备库参数文件/home/oracle/initgb.ora

从主库复制文件,用同样路径。把所需文件放在/home/oracle目录,一来没权限不足的问题,而来不会与其它数据文件混在一起,等dataguard运行起来以后,这些文件就基本不再使用,不干扰后期维护。

备库参数文件/home/oracle/initgb.ora的内容如下,与主库不同的地方,特别用底色做了标记。


[[email protected] ~]$ more initgb.ora

gbdb.__data_transfer_cache_size=0

gbdb.__db_cache_size=7918845952

gbdb.__inmemory_ext_roarea=0

gbdb.__inmemory_ext_rwarea=0

gbdb.__java_pool_size=67108864

gbdb.__large_pool_size=100663296

gbdb.__oracle_base='/u01/app/oracle'#ORACLE_BASE   set from environment

gbdb.__pga_aggregate_target=3388997632

gbdb.__sga_target=10099884032

gbdb.__shared_io_pool_size=536870912

gbdb.__shared_pool_size=1442840576

gbdb.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/gbdb/adump'

*.audit_trail='db'

*.compatible='12.2.0'

*.control_files='/u01/app/oracle/oradata/GBDB/controlfile/o1_mf_fl1mvrh4_.ctl','/u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile

controlfile/o1_mf_fl1mvrls_.ctl'

*.db_block_size=8192

*.db_create_file_dest='/u01/app/oracle/oradata'

*.db_name='gbdb'

*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area/gbdb'

*.db_recovery_file_dest_size=8016m

*.diagnostic_dest='/u01/app/oracle'

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

*.local_listener='LISTENER_GBDB'

*.open_cursors=300

*.pga_aggregate_target=3209m

*.processes=640

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=9627m

*.undo_tablespace='UNDOTBS1'

*.db_unique_name='oradb95'

*.fal_client='oradb95'

*.fal_server='oradb162'

*.log_archive_config='DG_CONFIG=(oradb162,oradb95)'

*.log_archive_dest_1='LOCATION=/u01/app/oracle/fast_recovery_area/gbdb/   VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradb95'

*.log_archive_dest_2='SERVICE=oradb162 LGWR ASYNC   VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=oradb162'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.standby_file_management='AUTO'

两台云服务器(主备库)资源配置、操作系统版本、oracle软件、目录结构完全一样,因此不需要做日志和数据文件转换。书写参数文件一定要仔细认真,我在这里踩了个大坑,整个端午节都耗在上边了。

参数文件里边有几个值,要特别留意。db_name、db_unique_name、service,该怎么填?与哪些项目想关联,是必须弄清楚的。

(1)     db_name:主备库用同样的名称,这里用的值是gbdb,oracle系统账号环境变量.bash_profile里边定义。

(2)     db_unique:主库与备库不同,主库定义为oradb162,备库为oradb95,与系统的/etc/hosts定义相同,也可以不同。也可以在oracle系统账号环境变量.bash_profile里边也设定一下。

(3)     service:这个最容易引起混淆,个人认为,应该是从tnsname.ora取值,取的是那个net service name,不是代码块里边那个service(代码块顶头的那行,没有括号,而真正的service,使用相同的设置gbdb,与sid也设定得一样了)。

我犯的低级错误就在参数文件的log_archive_dest_1这一行,因为这行很长,转换到下一行了,担心不是一个正行,因此使用了删除,未曾留心,把DB_UNIQUE_NAME=oradb162的字符“a”给删掉,变成DB_UNIQUE_NAME=ordb162,配置完以后,死活不能同步数据。查看oracle告警日志,有log1目标找不到的信息,一直以为是监听器监或者是是本地名称服务tnsnames设置的问题呢。Sqlplus执行“ show parameter log_archive_dest”能得到一些有用信息。

◆备库服务器创建所需目录

创建这些目录的依据来自参数文件/home/oracle/initgb.ora,需逐个核对创建。

1、 创建控制文件目录:


[[email protected] ~]$ mkdir   /u01/app/oracle/oradata/GBDB/controlfile -p

[[email protected] ~]$ mkdir   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile -p

2、 创建归档日志目录:


[[email protected] ~]$mkdir /u01/app/oracle/fast_recovery_area/gbdb -p

这步重复了,在创建控制文件目录时,已经创建过了。

3、 创建审计文件目录:


[[email protected] ~]$ mkdir -p /u01/app/oracle/admin/gbdb/adump

◆备库服务器准备密码文件及控制文件

这两个文件都来自于主库服务器,直接同步或者复制过来,注意不要改变文件的属主,即这些文件的属主是oracle和oinstall。

1、 根据参数文件的定义,我们需要把控制文件分别同步到目录(这个步骤其实是多此一举了)/u01/app/oracle/oradata/GBDB/controlfile/,/u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile/。


[[email protected] ~]$  cp gdbd.ctl /u01/app/oracle/oradata/GBDB/controlfile [[email protected] ~]$  cp gdbd.ctl   /u01/app/oracle/fast_recovery_area/gbdb/GBDB/controlfile/

2、 复制数据库密码文件到目录/u01/app/oracle/product/12.2.0/dbs.


[[email protected] ~]$ cp orapwgbdb /u01/app/oracle/product/12.2.0/dbs

文件位于什么位置,一定要跟定义及oracle规定相符合。一些人写的文档,不做强调,一顿乱贴;在哪个机器操作,主机命名,模棱两可,给初学者带来很多麻烦和困扰。

实际上,备库有参数文件和密码文件就够了。如果在执行数据库复制过程出现异常,极有可能是备库的目录没有被创建,根据提示创建就行。控制文件会自动被复制过来,因此无需手动搞一遍。

◎复制数据库到备库

分五个步骤,有顺序地进行。

◆第一步:主库以mount参数启动实例:


SQL> startup mount   pfile='/home/oracle/initgb.ora';

ORACLE instance started.

Total System Global Area 1.0100E+10 bytes

Fixed Size                 12170040 bytes

Variable Size            1979714760 bytes

Database Buffers         8086618112 bytes

Redo Buffers               21381120 bytes

Database mounted.

参数文件有错的话,换成原始备份的那个,就可以恢复到正常状况,比直接sql里改参数要保险一些。

◆第二步,备库启动oracle实例。一定要安装好oracle软件,复制主库的密码文件到对应的位置,还有那个参数文件,位置随意,能读取就行。


[[email protected] ~]$ sqlplus / as   sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jun   19 12:59:58 2018

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

Connected to an idle instance.

SQL> startup nomount   pfile='/home/oracle/initgb.ora';

ORACLE instance started.

Total System Global Area 1.0100E+10 bytes

Fixed Size                 12170040 bytes

Variable Size              1979714760 bytes

Database Buffers         8086618112 bytes

Redo Buffers               21381120 bytes

注意:主库是mount参数,备库是nomount。nomount不需要使用控制文件。

◆第三步,rman连主备库,这个是在主库上进行的操作:


[[email protected] oradata]$rman target sys/[email protected] auxiliary   sys/[email protected]

Recovery Manager: Release 12.2.0.1.0 - Production   on Tue Jun 19 12:46:55 2018

Copyright (c) 1982, 2017, Oracle and/or its   affiliates.  All rights reserved.

connected to target database: GBDB (DBID=2214703447,   not open)

connected to auxiliary database: GBDB (not   mounted)

注意:连接字串只有@后边的服务名不同,其它要一样哟。为了不引起混乱,也可以简化成“rman target /  auxiliary sys/[email protected]”。

◆第四步,复制数据库到备库,还是在主库执行呢,就在rman提示符里边。


RMAN>duplicate target database   for standby from active database nofilenamecheck;

………大量输出,略…………………

这一步是容易出问题的地方,要注意看输出,最可能的原因就是需要的目录没有手工创建。另外,如果跟我想法相同(主备目录结构相同、oracle sid也相同),那么用rman复制时把参数“nofilenamecheck”加上。

◆第五步,主库打开数据库。


SQL> alter database open;

Database altered.

◎启动备库,使其与主库同步


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

Database altered.

复制完数据库以后,备库把自己切换成mount状态了,因此无需人为干涉。

◎验证主备同步状况

暴力一点,主库上创建一个表空间,等待片刻,分别查看两边文件的生成情况。


SQL> create tablespace   WUHUSER  datafile   ‘/u01/app/oracle/oradata/whcrm/wuhuser01.fbf’ size 10G;

登录到到备库,查看目录,看是否自动生成数据文件。


[[email protected] oradata]$ pwd

/u01/app/oracle/oradata

[[email protected] oradata]$ ls -al

total 4194332

drwxr-xr-x    4 oracle oinstall       4096 Jun   19 10:43 .

drwxrwxr-x 10 oracle oinstall       4096 Jun 18 14:15 ..

drwxr-xr-x    3 oracle oinstall       4096 Jun   18 22:17 gbdb

drwxr-xr-x    3 oracle oinstall       4096 Jun   18 15:27 GBDB

-rw-r-----  1 oracle oinstall 4294975488 Jun 19 13:19   wuhuser01.dbf

同时也查看两边的oracle告警日志,做进一步核实。再增一法,主备库查归档情况。


主库执行

SQL> alter system switch logfile;

System altered

SQL> select   SEQUENCE#,FIRST_TIME,NEXT_TIME ,APPLIED from v$archived_log;

…………………………省略若干…………………

SEQUENCE# FIRST_TIM NEXT_TIME APPLIED

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

46   19-JUN-18 19-JUN-18 NO

46   19-JUN-18 19-JUN-18 YES

47   19-JUN-18 19-JUN-18 NO

47   19-JUN-18 19-JUN-18 YES

48   19-JUN-18 19-JUN-18 NO

48 19-JUN-18 19-JUN-18 NO

94 rows selected.


备库执行

select SEQUENCE#,FIRST_TIME,NEXT_TIME ,APPLIED   from v$archived_log;

…………………………省略若干…………………

SEQUENCE# FIRST_TIM NEXT_TIME APPLIED

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

37   19-JUN-18 19-JUN-18 YES

38   19-JUN-18 19-JUN-18 YES

39   19-JUN-18 19-JUN-18 YES

40   19-JUN-18 19-JUN-18 YES

41   19-JUN-18 19-JUN-18 YES

42   19-JUN-18 19-JUN-18 YES

43   19-JUN-18 19-JUN-18 YES

44   19-JUN-18 19-JUN-18 YES

45   19-JUN-18 19-JUN-18 YES

46   19-JUN-18 19-JUN-18 YES

47 19-JUN-18   19-JUN-18 YES

SEQUENCE#   FIRST_TIM NEXT_TIME APPLIED

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

48 19-JUN-18 19-JUN-18   IN-MEMORY

 

34 rows selected.

Dataguard主备角色切换

 

为保证可靠性,需要进行主库->备库,备库->主库;原主库->主库,原备库->备库。能变过去也能变回来,方为好手。

切换有操作顺序,需先在主库操作,使其变成备库,然后才可以在备库进行切换。

◎主库切换成备库

查看主库切换状态:


SQL> select switchover_status   from v$database;

SWITCHOVER_STATUS

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

TO STANDBY

主库变备库:


SQL> alter database commit to   switchover to standby;

Database altered.

主库再启动实例(现在角色是standby备库了)


SQL> startup   mount;

ORACLE instance started.

Total System Global Area 1.0100E+10 bytes

Fixed Size                 12170040 bytes

Variable Size            1979714760 bytes

Database Buffers         8086618112 bytes

Redo Buffers               21381120 bytes

Database mounted.

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

Database altered.

◎备库变主库

主库活着的话,执行“select switchover_status from v$database;”得到的输出为“NOT ALLOWED”。主库转换成备库完成后,再执行这个指令,这时输出为:


SQL> select switchover_status   from v$database;

SWITCHOVER_STATUS

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

TO PRIMARY

备库角色切换到主库


SQL> alter   database commit to switchover to primary;

Database altered.

数据库打开,这步别忘记了。


SQL> alter database open;

Database altered.

重复执行上述步骤,又可以把角色还原。为防止意外,我强烈建议他们再增加一个云主机,把oracle安装好,一旦主库故障,立即把备库提升成主库,同时把预留的那台做数据库服务,使之成为新的standby备库。发生故障的主库修复以后,准备好oracle,留着备用。

原文地址:http://blog.51cto.com/sery/2130594

时间: 2024-10-03 21:26:11

Oracle 12c dataguard云上挖坑记的相关文章

基于Oracle的私有云架构探析(连载一)

沃趣科技高级数据库专家 魏兴华 概述 云是当今最为热门的一个话题或者说技术,在数据库界也一样,Oracle 12G这个名字不硬生生被掰弯成了Oracle 12C,数据库云在我看来能给企业带来的第一价值是节省资源,提高服务器资源的利用率,随着更快速CPU.更廉价大内存的出现,企业传统孤岛式的数据库使用方式,一个主机一个实例,会导致大量的资源浪费,想当年在阿里B2B,有多少服务器的CPU利用率平均只有15%,现在都在倡导绿色数据中心,只有数据库整合了,消耗的电少了,空调吹的少了,数据中心才能绿,地球

Oracle 12c 使用scott等普通用户的方法

目录: 一.前言 二.使用普通用户 三.自动启动PDB 一.前言 最近电脑上安装了oracle 12c数据库,想体验下新特性.安装完后,便像11g一样在dos窗口进行下面的操作: SQL*Plus: Release 12.1.0.2.0 Production on 星期日 8月 9 13:06:33 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. 连接到: Oracle Database 12c Enterprise Edi

Oracle 12c新特性对于业务上的一些影响总结

1.不可见字段 在Oracle 11g R1中,Oracle以不可见索引和虚拟字段的形式引入了一些不错的增强特性.继承前者并发扬光大,Oracle 12c R1中引入了不可见字段思想.在之前的版本中,为了隐藏重要的数据字段以避免在通用查询中显示,我们往往会创建一个视图来隐藏所需信息或应用某些安全条件. 在12c R1中,你可以在表中创建不可见字段.当一个字段定义为不可见时,这一字段就不会出现在通用查询中,除非在SQL语句或条件中有显式的提及这一字段,或是在表定义中有DESCRIBED.要添加或是

centos 7部署oracle 12c rac 上菜了

oracle 12c 发布用很长一段时间了,虽然在近期部署了几套单实例oracle 12c,但一直都没有机会在生产环境实施12c rac,当然,既不能把现有的11g rac干掉,替换成12c rac,又没有新的项目找上来,但总不能等需要干活的时候再学习测试,未雨绸缪,正好从青龙那里化缘来一台配置不错的技嘉迷你pc,正好用它来做测试,安装上proxmox,虚拟出一堆系统,然后就有条件测试部署oracle 12c rac . Oracle实现负载均衡,完全不依赖于其它第三方工具,自己全部搞定,真是牛

在CentOS 7 上安装Oracle 12c 【赠安装包】

Oracle 概述 Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好.使用方便.功能强,适用于各类大.中.小.微机环境.它是一种高效率.可靠性好的 适应高吞吐量的数据库解决方案. Oracle 12C简介 Oracle数据库最新版本为Oracle Database 12c.Oracle数据库12c 引入了一

安装_CentOS7上安装Oracle 12C

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任. 深蓝的blog: 实验环境:Oracle VM VirtualBox 4.2.12 操作系统:CentOS 7(LINUX7)64bit 数据库  :Oracle 12C 64bit 实验目标:熟悉LINUX7下安装Oracle12C 操作演示: (1).安装Linux7操作系统 略 (2).官网下载oracle软件包 略 (3).下载oracle12C官方文档 略 (4).上传ora

在Fedora20上安装Oracle 12c

本文将引导大家在Fedora20的环境下成功安装Oracle12c. 安装前的准备 编辑/etc/hosts文件,添加本机名称 编辑/etc/selinux/config文件 编辑/etc/redhat-release 做如下查询,以确定要修改的项目 sysctl -a | grep fs.file-max sysctl -a | grep kernel.sem sysctl -a | grep kernel.shmmni sysctl -a | grep kernel.shmall sysct

阿里云上Oracle 11g RAC安装配置手册

有印象的用户可能发现,阿里云早在2016年深圳云栖大会就官方发布了对Oracle RAC的支持,但是相关产品却一直没能同步推出,相信大家都翘首以盼了许久许久.一个好消息是,近期阿里云将紧密推出两款新产品:共享块存储和ECS多网卡.这两款产品将打通众多关键云下应用上云的最后一公里,为用户提供更多的便利.在我们能正式体验到新产品之前,阿里云技术服务团队也将云上的Oracle RAC安装配置手册放出,希望能给大家提供更多不同的体验和选择. 一.安装说明 阿里云上Oracle RAC的安装部署,重点需要

史上最详细Oracle 12c搭建过程(内附源码包)

简介 Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好.使用方便.功能强,适用于各类大.中.小.微机环境.它是一种高效率.可靠性好的适应高吞吐量的数据库解决方案. 优点 可用性强可扩展性强数据安全性强稳定性强 操作系统要求 物理内存不少于4Gswap交换分区不少于8G磁盘空间不少于30G挂载分区文件类型为x