• linux下配置oracle 10G DATAGUARD(笔记一)


     

    Centos 5+10g+DATAGUARD配置说明

    DATAGUARD介绍

    Oracle Dataguard是自9I后引进的新特性,为防止任何可能引起数据丢失的元素,无论是因为人为差错,操作系统崩溃,还是自然和恐怖灾害(哈哈,夸张了些)。说白了它是在主节点与备用节点间通过日志同步来保证数据的同步,可以实现快速切换与灾难性恢复。Data guard只是在软件上对数据库进行设置,并不需要额外购买任何组件能在对主数据库影响很小的情况下,实现主备数据库的同步,而主备机的数据差异只在在线日志部分,所以被不少企业作为了数据容灾方案。

    Primary 主数据库

    前面提到,Data Guard包含一个primary数据库即被大部分应用访问的生产数据库,该库即可以是单实例数据库,也可以是RAC 

    Standby 备用数据库

    同一个Data Guard中你可以最多创建9standby数据库。一旦创建完成,Data Guard通过应用primary数据库的redo自动维护每一个standby数据库。Standby数据库同样即可以是单实例数据库,也可以是RAC结构。关于standby数据库,通常分两类:逻辑standby和物理standby

    DG保护模式

    Dataguard提供了三种保护模式

    1、 最大保护模式(maximum protection

    要求所有事务提交前不仅些redo不仅被写到本地的online redo log中,同时还要提交到standbyredo log中,并确认其中一个可用,最后才会在primary上提交。

    2、 最高性能(maximum performance

    事务可以随时提交,当前primaryredo也要至少写入一个standby数据库,但它可以是不同步的。

    3、 最高可用性(maximum availability

    要求所有事务在提交前必须保障redo数据至少在一个standby数据库可用,不过与之不同的是,如果出现故障导入无法同时写入standby数据库redo logprimary数据库并不会shutdown,而是自动转为最高性能模式,等standby数据库恢复正常之后,它又会再自动转换成最高可用性模式

    配置要求 

    1、 硬件及操作系统需求

    • 同一个Data Gurid配置中的所有oracle数据库必须运行于相同的平台。比如inter架构下的32位linux系统可以与inter架构下的32位linux系统组成一组Data Guard。另外,如果服务器都运行于32位的话,64位HP-UX也可以与32位HP-UX组成一组Data Guard。
    • 不同服务器的硬件配置可以不同,比如cpu啦,内存啦,存储设备啦,但是必须确保standby数据库服务器有足够的磁盘空间用来接收及应用redo数据。
    • primary 数据库和standby数据库的操作系统必须一致,不过操作系统版本可以略有差异,比如(linux as4&linux as5),primary数据库和standby数据库的目录路径也可以不同。

    2、 软件需求

    • Data Guard 是Oracle企业版的一个特性,明白了吧,标准版是不支持地。
    • 通过Data Guard的SQL应用,可以实现滚动升级服务器数据库版本(要求升级前数据库版本不低于10.1.0.3)。
    • 同一个Data Guard配置中所有数据库初始化参数:COMPATIBLE的值必须相同。
    • Primary 数据库必须运行于归档模式 ,并且务必确保在primary数据库上打开FORCE LOGGING,以避免用户通过nologging等方式避免写redo造成对应的操作无法传输到standby数据库。
    • Primary 和standby数据库均可应用于单实例或RAC架构下 ,并且同一个data guard配置可以混合使用逻辑standby和物理standby 。
    • Primary 和standby数据库可以在同一台服务器,但需要注意各自的数据文件存放目录,避免重写或覆盖。
    • 使用具有sysdba系统权限的用户管理primary和standby数据库。
    • 建议数据库必须采用相同的存储架构。比如存储采用ASM/OMF的话,那不分primarty或是standby也都需要采用ASM/OMF。

    另外还有很重要一点,注意各服务器的时间设置,不要因为时区/时间设置的不一置造成同步上的 问题

    更详细的内容可以看看三思笔记《一步一步学Dataguard》下载地址

    http://blog.oracle.com.cn/html/24/t-135124.html

    安装环境(配置物理standby

    Guard1:

    IP:192.168.1.79

    OS ver: Centos 5 64bit

    Oracle ver: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit

    SID:orcl79

    Guard2:

    IP:192.168.1.76

    OS ver: Centos 5 64bit

    Oracle ver: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit(no database)

    SID:orcl76

    两台机器都已经安装好ORACLE10G,测试成功,且都工作在noarchivelog模式,采用文件系统存放数据文件。Standby只安装数据库软件

    安装步骤

    Primarystandby安装oracle 10G

    Primary设置

    1)修改主库属性

    我这里选用192.168.1.79作为primary

    [oracle@centos79 ~]$ sqlplus /nolog

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Aug 14 13:45:14 2009

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

    SQL> conn / as sysdba

    Connected.

    SQL> alter database force logging;

    alter database force logging

    *

    ERROR at line 1:

    ORA-12920: database is already in force logging mode

    之前改过了。

    SQL>

    2)修改数据库为归档模式

    SQL> archive log list   

    Database log mode              Archive Mode

    Automatic archival             Enabled

    Archive destination            USE_DB_RECOVERY_FILE_DEST

    Oldest online log sequence     3

    Next log sequence to archive   5

    Current log sequence           5

    SQL>

    现在数据库已经运行在归档模式下。

    3)创建密码文件

    同一个Dataguard中所有数据库必须拥有独立的密码文件,并且保证sys用户拥有相同密码来保证redo的传输。

    [oracle@centos79 dbs]$ orapwd file='/usr/local/ora10/product/10.2.0/db_1/dbs/orapworcl.ora' password=system entries=10

    4)配置standby redo log

    Suroot用户在/home下创建存放standby redo log目录

    SQL> shutdown immediate

    SQL> startup mount

    Alter database add standby logfile group 4('/home/oracle/oracle/dgredo/standby_redo4a.log','/home/oracle/oracle/dgredo/standby_redo4b.log') size 50M;

    6)创建primary数据库初始化参数

    通过修改创建的pfile,然后重新生成spfile,

    SQL> create pfile from spfile;

    File created.

    SQL>

    备份一份pfile.

    cp /usr/local/ora10/product/10.2.0/db_1/dbs/initorcl.ora /home/oracle/oracle/

    7)设置主库参数文件

    *.db_name='orcl'

    *.DB_UNIQUE_NAME='primary'

    *.log_archive_config='DG_CONFIG=(primary,standby)'

    *.log_archive_dest_1='location=/usr/local/ora10/flash_recovery_area/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' DB_UNIQUE_NAME='primary'

    *.log_archive_dest_2='SERVICE=orcl76 arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby'

    *.LOG_ARCHIVE_DEST_STATE_1=ENABLE

    *.LOG_ARCHIVE_DEST_STATE_2=ENABLE

    *.remote_login_passwordfile='EXCLUSIVE'

    ------------------------------------#standby角色参数

    *.FAL_SERVER=orcl76

    *.FAL_CLIENT=orcl79

    DB_FILE_NAME_CONVERT=’oradata/orcl’,’oradata/orcl’

    LOG_FILE_NAME_CONVERT=’oradata/orcl’,’oradata/orcl’

    *.STANDBY_FILE_MANAGEMENT=AUTO

    8)用pfile启动数据库

    SQL> Shutdown immediate

    SQL> startup pfile='/usr/local/ora10/product/10.2.0/db_1/dbs/initorcl.ora'

    SQL> create spfile from pfile='/usr/local/ora10/product/10.2.0/db_1/dbs/initorcl.ora';

    SQL> shutdown immediate

    SQL> startup

    9)修改listener.ora

    [oracle@centos79 admin]$ cat listener.ora

    # listener.ora Network Configuration File: /usr/local/ora10/product/10.2.0/db_1/network/admin/listener.ora

    # Generated by Oracle configuration tools.

    SID_LIST_LISTENER =

     (SID_LIST =

        (SID_DESC =

          (SID_NAME = PLSExtProc)

          (ORACLE_HOME = /usr/local/ora10/product/10.2.0/db_1)

          (PROGRAM = extproc)

        )

     )

    LISTENER =

     (DESCRIPTION_LIST =

        (DESCRIPTION =

          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

          (ADDRESS = (PROTOCOL = TCP)(HOST = centos79)(PORT = 1522))

        )

     )

    LISTENER1 =

     (DESCRIPTION_LIST =

        (DESCRIPTION =

          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

          (ADDRESS = (PROTOCOL = TCP)(HOST = centos79)(PORT = 1523))

        )

     )

    10)修改tnsnames.ora文件

    [oracle@centos79 admin]$ cat tnsnames.ora

    # tnsnames.ora Network Configuration File: /usr/local/ora10/product/10.2.0/db_1/network/admin/tnsnames.ora

    # Generated by Oracle configuration tools.

    LISTENER_ORCL =

     (ADDRESS = (PROTOCOL = TCP)(HOST = centos79)(PORT = 1522))

    ORCL79 =

     (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = centos79)(PORT = 1522))

        (ADDRESS = (PROTOCOL = TCP)(HOST = centos76)(PORT = 1522))

        (CONNECT_DATA =

          (SERVER = DEDICATED)

          (SERVICE_NAME = orcl)

        )

     )

    ORCL76 =

     (DESCRIPTION =

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

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

        (CONNECT_DATA =

          (SERVER = DEDICATED)

          (SERVICE_NAME = orcl)

        )

     )

    ORCL254 =

     (DESCRIPTION =

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

        (CONNECT_DATA =

          (SERVER = DEDICATED)

          (SERVICE_NAME = orcl)

        )

     )

    EXTPROC_CONNECTION_DATA =

     (DESCRIPTION =

        (ADDRESS_LIST =

          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

        )

        (CONNECT_DATA =

          (SID = PLSExtProc)

          (PRESENTATION = RO)

        )

     )

    [oracle@centos79 admin]$

    确保tnsping两台机器都能 ping

    10)备份数据库

    RMAN> backup full database format '/home/oracle/oracle/backup_%T_%s_%p.bak';

    11)创建standby数据控制文件

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

    Database altered.

    SQL>

    11)拷贝密码文件,数据文件,standby controlfile到备机

     [oracle@centos79 orcl]$ scp /home/oracle/oracle/dgredo/standby.ctl root@192.168.1.76:/usr/local/ora10/oradata/orcl/

    Standby配置

    1)创建对应目录

    $ORACLE_BASEoradata,admin,flash_recovery_area目录

    2)拷贝文件,包括数据文件,standby controlfile,全库备份文件,参数文件,监听和服务文件

    [root@centos79 dbs]# scp initorcl.ora orapworcl.ora oracle@192.168.1.76:/usr/local/ora10/product/10.2.0/db_1/dbs/

    root@centos79 admin]# scp listener.ora sqlnet.ora tnsnames.ora oracle@192.168.1.76:/usr/local/ora10/product/10.2.0/db_1/network/admin/

    3)创建控制文件

    [oracle@centos76 orcl]$ mv standby.ctl /usr/local/ora10/oradata/orcl/control01.ctl

    [oracle@centos76 orcl]$ cp control01.ctl /usr/local/ora10/oradata/orcl/control02.ctl

    [oracle@centos76 orcl]$ cp control01.ctl /usr/local/ora10/oradata/orcl/control03.ctl

    [oracle@centos76 orcl]$

    4)配置listener,tnsname

    Lintener.ora文件如下。

    [oracle@centos76 admin]$ cat listener.ora

    # listener.ora Network Configuration File: /usr/local/ora10/product/10.2.0/db_1/network/admin/listener.ora

    # Generated by Oracle configuration tools.

    SID_LIST_LISTENER =

     (SID_LIST =

        (SID_DESC =

          (SID_NAME = PLSExtProc)

          (ORACLE_HOME = /usr/local/ora10/product/10.2.0/db_1)

          (PROGRAM = extproc)

        )

     )

    LISTENER =

     (DESCRIPTION_LIST =

        (DESCRIPTION =

          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

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

        )

     )

    LISTENER1 =

     (DESCRIPTION_LIST =

        (DESCRIPTION =

          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

          (ADDRESS = (PROTOCOL = TCP)(HOST = centos76)(PORT = 1522))

        )

     )

    TNSNAMES.ORA文件如下

    [oracle@centos76 admin]$ cat tnsnames.ora

    # tnsnames.ora Network Configuration File: /usr/local/ora10/product/10.2.0/db_1/network/admin/tnsnames.ora

    # Generated by Oracle configuration tools.

    LISTENER_ORCL =

     (ADDRESS = (PROTOCOL = TCP)(HOST = centos79)(PORT = 1522))

    ORCL79 =

     (DESCRIPTION =

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

        (CONNECT_DATA =

          (SERVER = DEDICATED)

          (SERVICE_NAME = orcl)

        )

     )

    ORCL76 =

     (DESCRIPTION =

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

        (CONNECT_DATA =

          (SERVER = DEDICATED)

          (SERVICE_NAME = orcl)

        )

     )

    ORCL254 =

     (DESCRIPTION =

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

        (CONNECT_DATA =

          (SERVER = DEDICATED)

          (SERVICE_NAME = orcl)

        )

     )

    EXTPROC_CONNECTION_DATA =

     (DESCRIPTION =

        (ADDRESS_LIST =

          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

        )

        (CONNECT_DATA =

          (SID = PLSExtProc)

          (PRESENTATION = RO)

        )

     )

    5)设置备库参数文件

    *.db_name='orcl'

    *.DB_UNIQUE_NAME='standby'

    *.log_archive_config='DG_CONFIG=(primary,standby)'

    *.log_archive_dest_1='location=/usr/local/ora10/flash_recovery_area/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' DB_UNIQUE_NAME='standby'

    *.log_archive_dest_2='SERVICE=orcl79 arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=parimary'

    *.LOG_ARCHIVE_DEST_STATE_1=ENABLE

    *.LOG_ARCHIVE_DEST_STATE_2=ENABLE

    *.remote_login_passwordfile='EXCLUSIVE'

    ------------------------------------#standby角色参数

    *.FAL_SERVER=orcl79

    *.FAL_CLIENT=orcl76

    DB_FILE_NAME_CONVERT=’oradata/orcl’,’oradata/orcl’

    LOG_FILE_NAME_CONVERT=’oradata/orcl’,’oradata/orcl’

    *.STANDBY_FILE_MANAGEMENT=AUTO

    6)创建密码文件

    [oracle@centos76 ~]$ orapwd file='/usr/local/ora10/product/10.2.0/db_1/dbs/orapworcl76.ora' password=system entries=20

    7)在备库上建立spfile

    $ sqlplus '/as sysdba'
    SQL> create spfile from pfile;

    启动物理备库
    SQL> startup nomount
    SQL> alter database mount standby database;

    备库做rman恢复
    $ rman target /       (
    要求主备库rman备份文件的存放路径和文件名一致)
    RMAN> restore database;

    Starting restore at 18-AUG-09

    Starting implicit crosscheck backup at 18-AUG-09

    using target database control file instead of recovery catalog

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=153 devtype=DISK

    Crosschecked 8 objects

    Finished implicit crosscheck backup at 18-AUG-09

    Starting implicit crosscheck copy at 18-AUG-09

    using channel ORA_DISK_1

    Crosschecked 4 objects

    Finished implicit crosscheck copy at 18-AUG-09

    searching for all files in the recovery area

    cataloging files...

    no files cataloged

    using channel ORA_DISK_1

    channel ORA_DISK_1: starting datafile backupset restore

    channel ORA_DISK_1: specifying datafile(s) to restore from backup set

    restoring datafile 00001 to /usr/local/ora10/oradata/orcl/system01.dbf

    restoring datafile 00002 to /usr/local/ora10/oradata/orcl/undotbs01.dbf

    restoring datafile 00003 to /usr/local/ora10/oradata/orcl/sysaux01.dbf

    restoring datafile 00004 to /usr/local/ora10/oradata/orcl/users01.dbf

    channel ORA_DISK_1: reading from backup piece /home/oracle/oracle/backup_20090818_11_1.bak

    channel ORA_DISK_1: restored backup piece 1

    piece handle=/home/oracle/oracle/backup_20090818_11_1.bak tag=TAG20090818T165957

    channel ORA_DISK_1: restore complete, elapsed time: 00:00:36

    Finished restore at 18-AUG-09

    8)备库启动redo apply

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

    Database altered.

    SQL>

    Data guard的优点:

    1.支持所有的DDLDML语句

    2.不管是什么数据类型、表的类型,任何DDLDML语句都可以应用在物理备用数据库上。

    3.可以减轻主数据库的备份压力

    4.standby的中的数据文件可以用来快速恢复主数据库的数据文件

    5.逻辑standby可以减轻主数据库的工作压力

    6.物理standby也可以用只读来打开,可以分担一部分非实时的查询的工作

    7.逻辑standby数据是近实时更新的,而且也可以让用户进行查询操作

    8.逻辑standby可以在standby中建立索引和物化视图以方便用户的查询

  • 相关阅读:
    js 将内容复制到剪切板上
    javascript刷新父页面的各种方法汇总
    jQuery 使得文本框获得焦点
    layui switch 开关监听 弹出确定状态转换
    layui 图片上传+表单提交+ Spring MVC
    python爬虫实例--网易云音乐排行榜爬虫
    Python爬虫html解析工具beautifulSoup在pycharm中安装及失败的解决办法
    python爬虫实例--博客园首页Java目录博文爬虫
    让js中的函数只有一次有效调用的三种常用方法
    spring项目获取ServletContext
  • 原文地址:https://www.cnblogs.com/zeromyth/p/1549217.html
Copyright © 2020-2023  润新知