程序员

DATAGUARD的单实例搭建、切换、检查 文档

2018-09-27  本文已影响0人  wangol

       

 摘    要

搭建data guard环境,利用RMAN DUPLICATE命令创建physical standby。 创建备库之前需要有备库的参数文件;同时连接主数据库和备用数据库,启动备库到nomount状态。备库必须工作在recover managed模式下才能应用主库的redo数据。当dataguard创建成功后,在计划需求下手工的switchover,或者在主库故障发生的情况下手工的执行failover,以确保正常的生产工作。为了确保dataguard的正常工作,必须经常检查dataguard的健康状况来确保dataguard的安全稳定。

一:系统环境介绍

我们在进行DATAGUARD搭建的时候,需要首先确定要进行dataguard搭建的服务器的内存,磁盘,操作系统等各方面的情况,以此来确定相应的实施方案。

1.1 服务器硬件介绍

内存的大小

[root@nxqpri ]# free -g

total       used       free     shared    

23         23          0 

磁盘的规划

[root@nxqpri ]#df -h

Filesystem            Size  Used Avail Use% Mounted o

/dev/sda1              29G  6.7G   21G  25% /

/dev/sda2             1.0T  234G  738G  25% /u01

tmpfs                  12G     0   12G   0% /dev/shm

CPU的个数

[root@nxqpri ~]#cat /proc/cpuinfo |grep physical |wc -l

48

服务器的型号

[root@nxqpri ~]#dmidecode |grep "Product Name"

Product Name: PowerEdge R710

1.2 服务器软件介绍

操作系统版本:

[root@nxqpri ~]#cat /etc/issue |grep Linux

Red Hat Enterprise Linux Server release 5.5 (Tikanga)

操作系统的内核信息

[root@nxqpri ~]#uname -a

Linux nxqpri 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

数据库的版本信息

SQL>select * from v$version;

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit

1.3 网络环境介绍

数据库的服务器只配置了内网网络

主库的IP地址

[root@nxqpri ~]#ifconfig eth0

eth0      Link encap:Ethernet  HWaddr D4:AE:52:63:94:53  

          inet addr:192.168.1.252  Bcast:192.168.1.255  Mask:255.255.255.0

备库的IP的地址

[root@nxqstd ~]#ifconfig eth0

eth0      Link encap:Ethernet  HWaddr D4:AE:52:64:16:83  

          inet addr:192.168.1.254 Bcast:192.168.1.255  Mask:255.255.255.0

二:DATAGUARD的搭建

2.1 primary database(主库)的搭建

1.使用OUI安装数据库软件 

在primary(主库)搭建数据库软件,建立lsnrctl监听,采用dbca搭建实例,在standby(备库)上搭建数据库软件,建立监听,但是不需要采用dbca建立实例。

    使用DBCA创建数据库,全局数据库名:orcl  实例名:orcl

2.以oracle身份登录系统,连接主库,启动到 mount状态,数据库处于正常启动状态先停库再启动

SQL>Startup mount

3.修改数据库强制记录日志

SQL>alter database force logging;

4. 确定数据库是否处于归档模式库,如果创建数据库时没有选择归档,将数据库改为归档模式

a.查询数据库是否处于归档

SQL> archive log list;

b.更改数据库为归档模式(改模式不能在Startup启动模式下)

SQL>alter database archivelog;

5.开启闪回数据库(不是必须的)

SQL> alter database flashback on;

Database altered.

6.根据spfile文件创建pfile,关闭数据库。

   SQL>Create pfile from spfile 

   SQL>shutdown immediate

7.修改pfile 文件

a.备份修改文件

#cp $ORACLE_HOME/dbs/initorcl.ora $ORACLE_HOME/dbs/initorcl.ora.bak

#vim $ORACLE_HOME/dbs/initorcl.ora

b.在参数文件文件里面添加如下内容

为每个数据库指定唯一性名称   

db_unique_name='pdb'  

允许数据库发送和接收日志

log_archive_config='dg_config=(pdb,sdb)'

两个参数连接的是网络字符名

fal_server=sdb

fal_client=pdb

表示的是本地归档日志的存储路径

log_archive_dest_1='location=‘/u01/app/archivelog'

表示当数据库处于什么角色的时候,将什么日志,以什么样的方式传输到哪台远端服务器

log_archive_dest_2='service=sdb lgwr sync affirm valid_for=(online_logfiles,primary_role)  db_unique_name=sdb'

允许重做日志传输到指定目的地

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=ENABLE

当设置成auto的时候,你对primary database的数据文件的增加,resize等操作的时候,standbydatabase将会自动的进行同步而不需要DBA在standby进行人工的干预

standby_file_management=AUTO

***** /u01/app/archivelog主备服务器上该目录比较存在

8.采用pfile文件启动数据库。(确定数据库是否能正常启动)

SQL>startup pfile=/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora

9.为主数据库创建监听,在oracle用户下

[oracle@nxqpri admin]$ cd /u01/app/oracle/product/11.2.0/db_1/network/admin

创建监听后添加以下内容,连接服务名默认为orcl

[oracle@nxqpri admin]$ vi  listener.ora

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

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

      (SID_NAME = orcl)

    )

    (SID_DESC =

      (SID_NAME = PLSExtProc)

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

      (PROGRAM = extproc)

    )

  )

创建连接服务服务监听

[oracle@nxqpri admin]$ vi  tnsnames.ora 

PDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.252)(PORT = 5530))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

  )

SDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.254)(PORT = 5530))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

2.2 NFS的搭建(可以不用nfs)

通过合理的使用NFS,能够简化文件的传输和降低磁盘的压力。

1、在主库上面(192.168.1.252)上修改文件

 [root@nxqpri ~]#   vi /etc/exports

     /u01/app/archivelog   192.168.1.0/24(rw,no_root_squash,async)

[root@nxqpri ~]# chkconfig --list|grep portmap

portmap         0:off   1:off   2:off   3:on    4:on    5:on    6:off

[root@nxqpri ~]#  service portmap start

[root@nxqpri ~]# service nfs start

2.在备用数据库上面(192.168.1.254)进行nfs挂载

查看能否识别到主库(192.168.1.252)上面的nfs磁盘:

[root@nxqst ~]# showmount -e 192.168.1.190

     Export list for 192.168.1.190:

       /u01/e3data 192.168.1.0/24

如果能够识别的到,那么进行挂载

# mount -t nfs -o rw,bg,tcp,hard,nointr,wsize=32768,rsize=32768 192.168.1.252:/u01/app/archivelog   /u01/app/archivelog

在生产环境操作的时候,如果网络带宽的速度没有磁盘的速度快,一般要加上相关的参数进行限制

mount -t nfs -o rw,bg,tcp,hard,nointr,wsize=32768,rsize=32768 192.168.1.5:/dgbackup    /dgbackup

2.3:使用RMAN备份数据库(主库)

1.备份当前的控制文件

RMAN > rman target sys/oracle

RMAN > backup format '/u01/app/archivelog/bk_%U' current controlfile for standby

此处的路径为NFS挂载的路径

2.备份数据和归档

RMAN > backup format '/u01/app/archivelog/dbk_arch_%U' database plus archivelog;

也可以选择不备份归档日志文件

2.2 physical standby database(备库)创建

1.安装数据库软件,本实验选择安装软件的路径与主库相同

  这个步骤只安装软件,不安装数据库,软件的版本也应该和主库的一样

2.参考主库创建备库上相应的文件目录(注意目录名及位置不能写错,否则创建过程会失败)

 需要添加的文件目录如下:

闪回区的相关目录添加:

[oracle@nxqpri ~]$ cd  $ORACLE_BASE

[oracle@nxqpri oracle]$ mkdir flash_recovery_area

[oracle@nxqpri flash_recovery_area]$  mkdir ORCL

[oracle@nxqpri ORCL]$  mkdir  onlinelog

Dump文件相关目录的添加

[oracle@nxqpri ~]$ cd $ORACLE_BASE

[oracle@nxqpri oracle]$ mkdir admin

[oracle@nxqpri admin]$ mkdir orcl

[oracle@nxqpri orcl]$ mkdir {a,b,c,dp,u}dump

[oracle@nxqpri orcl]$ mkdir pfile

数据库参数文件放置位置目录的添加

[oracle@nxqpri orcl]$ cd $ORACLE_BASE

[oracle@nxqpri oracle]$ mkdir oradata/

[oracle@nxqpri oracle]$ cd oradata/

[oracle@nxqpri oradata]$mkdir orcl

归档日志目录添加

$ mkdir/u01/app/archivelog

3.传输相关的文件

 将主库上面的参数文件,密码文件传输到备用数据库上面去,在备用数据库上面放在的位置应该和主库该文件放置的位置一样。

参数文件

[oracle@nxqpri ]$scp /u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora  

oracle@192.168.1.254:/u01/app/oracle/product/11.2.0/db_1/dbs/

密码文件

[oracle@nxqpri ]$scp /u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl.ora  

oracle@192.168.1.254:/u01/app/oracle/product/11.2.0/db_1/dbs/

注意:要是ssh的端口做了修改的话,我们需要在scp过程的时候,添加 –P [端口数] 参数来进行传输。

4、备用数据库参数的修改

参数的含义同主库的含义一样

db_unique_name='sdb'

log_archive_config='dg_config=(pdb,sdb)'

fal_server=pdb

fal_client=sdb

log_archive_dest_1='location=/u01/app/archivelog'

log_archive_dest_2='service=pdb lgwr sync affirm valid_for=(online_logfiles,primary_role)  db_unique_name=pdb'

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=ENABLE

standby_file_management=AUTO

5. 为备库创建监听(方法同主库)

netca

6. 为备库创建网络服务命名(方法同主库)

[root@dgsto-pri u01]# vi /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora

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

# Generated by Oracle configuration tools.

HPPRI =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = hppri)

    )

  )

7.此时启动两台服务器的监听,并确认是否能够正常的连接

lsnrctl start 启动监听

lsnrctl stop 停止监听

lsnrctl status 查看监控运行状态

tnsping + 实例名  检查是否能识别到其他实例

sqlplus sys/oracle@egap as sysdba  检查是否能登录数据库

sqlplus sys/oracle@egapdb as sysdba 检查是否能登录数据库

8.使用initsdb.ora启动数据库到nomount状态。

SQL> startup nomount pfile=/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora

9. 启动rman使用 rman duplicate 创建备用数据库

[oracle@nxqstd ]$ rman target sys/oracle@pdb auxiliary sys/oracle

Recovery Manager: Release 10.2.0.1.0 - Production on Tue Nov 11 18:01:00 2008

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

connected to target database: DB (DBID=1434261387)

connected to auxiliary database: DB (not mounted)

RMAN> duplicate target database for standby nofilenamecheck;

在启用恢复模式之前可以先用建好standbylog日志文件

10.修改数据库为恢复管理模式,以使备库能够应用主库的redo 数据,达到同步

SQL> alter database recover managed standby database disconnect from session;

11. 查看备用数据库的日志应用情况

SQL>  select sequence#,first_time,next_time,applied from v$archived_log order by   sequence#;

SEQUENCE# FIRST_TIM NEXT_TIME APP

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

        13 11-NOV-08 11-NOV-08 YES

        14 11-NOV-08 12-NOV-08 YES

        15 12-NOV-08 12-NOV-08 YES

        16 12-NOV-08 12-NOV-08 YES

12.为两数据库分别创建standby日志文件

主库

SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/standbylog01.log' size 500m;

SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/standbylog02.log' size 500m;

SQL> alter database add standby logfile group 7 '/u01/app/oracle/oradata/orcl/standbylog03.log' size 500m;

SQL> alter database add standby logfile group 8 '/u01/app/oracle/oradata/orcl/standbylog04.log' size 500m;

备库

停止redo应用

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/standbylog01.log' size 500m;

Database altered.

SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/standbylog02.log' size 500m;

Database altered.

SQL> alter database add standby logfile group 7 '/u01/app/oracle/oradata/orcl/standbylog03.log' size 500m;

Database altered.

再起动redo应用

SQL> alter database recover managed standby database disconnect from session;

Database altered

11.再次查看备库日志应用情况

SQL>  select sequence#,first_time,next_time,applied from v$archived_log order by   sequence#;

SEQUENCE# FIRST_TIM NEXT_TIME APP

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

        15 11-NOV-08 11-NOV-08 YES

        16 11-NOV-08 12-NOV-08 YES

        17 12-NOV-08 12-NOV-08 YES

        18 12-NOV-08 12-NOV-08 YES

12.确定相关教程都已经启动

SQL> select process,status from v$managed_standby;

PROCESS   STATUS

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

ARCH      CLOSING

ARCH      CLOSING

MRP0      WAIT_FOR_LOG

RFS       IDLE

RFS       IDLE

查询归档日志序列和磁盘空间

select sequence#,applied,deleted from v$archived_log;

快速查看DG的报错信息

select error from v$archive_dest where target='STANDBY'

至此物理standby已经搭建成功

三:手工的switchover与failover

3.1 手工的switchover

1.查看主数据库可转换的状态

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS

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

SESSIONS ACTIVE

2.执行切换命令转换primary 到 physical standby

SQL>alter database commit to switchover to physical standby with session shutdown

Database altered.

如果查询到的可转换状态为to standby,则切换命令为

SQL>alter database commit to switchover to physical standby

3.关闭数据库并启动到mount状态

SQL> shutdown immediate;

SQL> startup mount;

Database mounted.

4. 查看备库可转换的状态

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS

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

TO PRIMARY

5.将备库 转换为primary

SQL> alter database commit to switchover to primary;

Database altered.

6.将新的主库打开

SQL>shutdown immediate;

SQL> startup ;

Database opened.

注:在打开新的主数据库时,如果新的主数据库在作为备用库时曾以READ ONLY的方式打开过,则应重启数据库,否则可直接执行如下操作

SQL> alter database open;

Database altered.

7.Sdb作为新备库启动,设置恢复管理模式

SQL> alter database recover managed standby database disconnect from session;

Database altered.

8.查看新备库pdb的日志应用情况

3.2 手动的failover

1.对备用数据库进行失败转移初始化

SQL> alter database recover managed standby database finish force;

Database altered.

SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

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

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

当进行失败转移后,数据库的保护模式将由最大可用模式变为最大性能模式

2.将备库转换为主库并打开新的主库

SQL> alter database commit to switchover to primary;

Database altered.

SQL> alter database open;

Database altered.

4、DATAGUARD的日常检查工作

1.确定主库,并查看当前的日志号

SQL> select database_role from v$database;     

DATABASE_ROLE

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

PRIMARY

SQL> archive log list

Database log mode           Archive Mode

Automatic archival           Enabled

Archive destination          /u01/app/archivelog

Oldest online log sequence    417

Next log sequence to archive   420

Current log sequence         420

2:确定备用数据库不存在日志断点:

SQL> select * from v$archive_gap;

no rows selected  

3:确定备用数据库,并查看当前应用的日志序号

SQL> select sequence#,applied from v$archived_log;

 SEQUENCE# APP

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

       414 YES

       415 YES

       416 YES

       417 YES

       418 YES

       419 YES

4.在主库查看当前日志传输是否正常

SQL> col status for a10

SQL> col destination for a10

SQL> col error a10

SQL> col error for a10

SQL> select dest_id,status,destination,error from v$archive_dest where dest_id <=2;

   DEST_ID STATUS     DESTINATIO ERROR

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

         1 VALID      /u01/app/archivelog

         2 VALID      sdb

5.在备库上面确认相关的进程已经启动

SQL> select process,status,sequence# from v$managed_standby;  

PROCESS   STATUS        SEQUENCE#

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

ARCH      CLOSING             419

ARCH      CLOSING             418

MRP0      WAIT_FOR_LOG        420

RFS       IDLE                  0

RFS       IDLE                420

RFS       IDLE                  0

通过以上的过程可以确认,DG是处于健康状态的

6.已经被应用的日志的删除

 因为相关的日志已经在备用数据库上面被引用,基于空间的考虑,我们可以删除一些日志,只保留部分日志。

相关删除脚本如下:

6.1 建立相关的定时任务

[root@nxqpri ~]# crontab -l

0 03 * * *  su  - oracle -c "/home/oracle/rman_del.sh"

相关删除的脚本

[oracle@nxqpri ~]$ cat rman_del.sh 

rman target sys/oracle  msglog=/home/oracle/log/`date '+%Y%m%d'`.log cmdfile=/home/oracle/rman_del.rman

[oracle@nxqpri ~]$ cat rman_del.rman 

run {

  #allocate channel cha_full type disk;

  #CONFIGURE CONTROLFILE AUTOBACKUP ON;

  #crosscheck backup;

  #crosscheck archivelog all;

  delete noprompt archivelog until time "sysdate-10";

  #release channel cha_full;

    }

附Switchover_Status值的含义

NOT ALLOWED

当前的数据库不是带有备用数据库的主数据库

PREPARING DICTIONARY

该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备

PREPARING SWITCHOVER

接受用于切换的重做数据时,逻辑备用配置会使用它

RECOVERY NEEDED

备用数据库还没有接收到切换请求

SESSIONS ACTIVE

在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话

SWITCHOVER PENDING

适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库

SWITCHOVER LATENT

切换没有完成并返回到主数据库

TO LOGICAL STANDBY

主数据库已经收到了来自逻辑备用数据库的完整的字典

TO PRIMARY

该备用数据库可以转换为主数据库

TO STANDBY

该主数据库可以转换为备用数据库

上一篇下一篇

猜你喜欢

热点阅读