ORACLE-----DG的搭建

数据库容灾
dg :dataguard
standby:备库
 node

1、备库分类:


物理备库---主库当中的数据同步到备库中,只能工做在mount状态 但在11g能够工做在open状态,不停的应用主库传递过来的日志
逻辑备库---主库传递到备库中,作的是SQL应用,工做在open中,不会同步在主库中
11g:快照备库---经过咱们的物理备库转为快照备库,工做在open状态,用来作测试
将物理备库转为快照备库,测试昨完后,将快照备库转为物理备库,咱们的快照备库就不存在了
 sql

2、备库工做原理:



全部的同步产品都是记录数据块的更改信息获得日志流(物理备库),或者经过日志挖掘获得SQL语句来达到数据同步(逻辑备库),根据产品的同步机制,来到达数据的同步。
日志流数据同步(块恢复的操做):物理同步即物理备库,要求主库的结构和备库的结构是如出一辙,才能保证主库中的数据和备库中的数据如出一辙
日志挖掘(逻辑备库):主库的结构和备库的结构能够不一致,不必定能达到时时同步
数据库加了密,或者没有打开附加日志,日志挖掘就会不全,备库就没办法和主库一致
 数据库

3、四种搭建DG方式:


1.远程/本地切换--经常使用
2.备份(经常使用)(rman备份用在数据量很少的状况下,一般能在半个小时内完成备份,rman会消耗内存占用I/O,超过半个小时,咱们就用DG的方式备份)
3.读写分离----lg 逻辑备库11g开始
-----物理备库也能够作一些报表操做,日志挖掘
4.测试---特别是数据库开发的项目
逻辑备库,11g可使用快照备库
 vim

4、DG实现方式:


1.日志传输服务
主库日志经过什么方式传递给备库
备库经过什么方式接收或取回主库日志
日志在传递时,是否要求主库日志和备库日志如出一辙
备库日志是否容许跟主库的日志有差别
备库在接受日志时,是否容许有时间差
备库要求时时同步,主备日志一致
主库日志跟备库日志有时间差,主库当中的误操做均可以在备库中找到
主库日志与备库日志不一致,采用延迟同步,日志也将有差别
lgwr:联机日志(online)---sync|async //派生出lsnr进程将主库中的日志传到备库中 log buffer |online sync |async ---
arc:归档日志(archivelog)主库传过来的是归档日志,主备日志会有时间差 ,最多能够设置30个进程 arcivelog|async
备库在接受到归档日志时,直接
主库传的是归档日志,直接放到备库的归档日志中,再应用,使用于没有联机日志的时候


主库传日志,备库应用的方式:
logxtpmode==sync
lgwr ----sync/async online---rfs---standb online

alter database recover managed standbydatabase disconnect from session;//应用归档日志

alter database recover managed standby database using current logfile disconnect from session;//时时应用联机日志,即时时同步

alter database recover managed standby database delay 60; //日志在备库中延迟1个小时应用

alter database recover mangaged standby database cancel;

arc---archivelog
pply

switchover---
switchover to <备库名>

参数设置:
log_archive_config='dg_config(pridb_unique_name,stddb_unique_name,...)' //dg中有哪些成员哪几个备库,10g最多9个,11g最多30个
log_archive_dest_n[1...31] //指定日志存放的路径
log_archive_dest_1=locationg='/' db_unique_name=' 主库名'; //表示主库的日志存放的路径
log_archive_dest_2=service='service_names' db_unqiue_name='std(备库名字)' ; //须要在备库设置

SQL> show parameter log_archive_dest; //enable表示日志路径可用,disable表示日志路径不可用服务器

SQL> show parameter log_archive_min;  //日志传递最小成功数至少要保证有多少个备库能传递成功,有多少个备库值就设置为几

NAME      TYPE  VALUE
------------------------------------ ----------- ------------------------------
log_archive_min_succeed_dest      integer  1



备库:
rfs:备库接收进程,若是主库没有传递日志过来,备库主动去抓取日志过来。
须要设置几个参数 (fetch archive log=fal)
fal_client=db_unique_name(备库pri)
fal_server=db_unique_name(主库std)
log_archive_dest_1=location='/' db_unique_name=(std) //只有备库要切为主库时才须要设置他
log_archive_dest_2=service='service_names' db_unqiue_name='pri';
log_archive_config='dg_config(pri[send|nosend],std[receive|noreceive])';
若是要传送链接日志,须要在主库中 须要设置
log_archive_dest_2=service='service_names' <arc async>|<lger sync 表示传的logbuffer中的内容|async表示传的是online中的内容 |<delay|nodelay>表示是否容许有延迟> db_unqiue_name='pri';
 网络

      SQL> show parameter fal_

NAME      TYPE  VALUE
------------------------------------ ----------- ------------------------------
fal_client      string
fal_server      string
SQL> session



2.角色转换服务
1>switchover :正常切换
主库和备库均可以正常工做时,通常用在硬件或软件升级时,主库切为备库,备库切为主库
2>failover:故障切换
主库出了问题,没办法提供对外服务,须要将备库切换为主库,原来的主库将不是DG成员,切换完成后,11g中可对原来的主库进行实例化,或者设置为备库再用switchover切换成主库

3.保护模式
1>最大保护模式 ---工做在这种模式可保证数据零丢失,主库作了任何操做,主库中的online log都必须传递到备库联机日志中,不然主库不能进行事务提交。若是有缘由没法传递到备库中,备库没法访问,主库将会直接当机。
开机顺序:备库---主库
关机顺序:主库---备库

2>最大性能模式---主库所作任何操做,能够不当即传递到备库中去,能够容许有延迟。备库接收到日志后,也能够当即应用,也能够延迟应用
开关机顺序没有影响
3>最大可用性能模式---能够保证数据的零丢失,主库中作的操做必须将联机日志成功传递到备库,才能够作事务提交,若是备库没法访问时,会自动转移到最大性能模式,直到备库恢复后,又恢复回来
开机顺序:备库---主库
关机顺序:主库---备库
 架构

SQL> select protection_mode from v$database; //查看数据工做在什么模式下

PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCEoracle




架构:主库和备库的平台必须一致,操做系统位数必须一致,系统版本可存在差别
数据库的版本也必须一致
服务器硬件也最好同样
切换-----必须一致【内存,硬盘,cpu】
备份-----能够不一致【备份的空间必须足够】

主备切换
一、sqlplus 命令方式,要求很是高,命令一个都不能错 (推荐)
二、oem 要求网络必须好,配置好oem,要求cpu必须足够,点鼠标的方式,不太推荐
三、dgbroker 工具,须要配置 (推荐)
 app

5、搭建方法:


步骤:
主库
1.修改参数
2.主备开启强制日志记录
3.备库若是为逻辑备库,须要在主库开启附加日志 【物理备库不须要这一步】
4.打开闪回功能【快照备库须要】
5.配置网络
6.备份【10g须要11g不须要】
7.打开dgbroker功能【要使用dgbroker搭建dg】
8.建立备库联机日志【1.备库要时时应用日志 using curent logfile 2.作切换,备变主,主变备】

备库:
1.安装和主如出一辙的环境
2.修改参数,将备库加入DG中
3.准备参数文件
4.拷贝主库密码文件到备库
5.建立存放备库文件目录
6.配置网络
7.rman克隆备库
8.配置DG,可使用dgbroker功能
9.验证数据的同步
 

物理备库搭建:


1.主库

startup mount;//启动到mount
alter database archivelog; //打开归档模式
alter database open
SQL> archive log list; //查看归档模式是否已经开启
alter system set db_unique_name=pupdb scope=spfile;//修改数据库名字
show parameter log_archive_c
alter system set log_archive_config='dg_config=(pupdb,supdb)'; //给主备命名
shutdown immediate
startup
show parameter log_archive_
select force_logging from v$database ;//查看强制日志记录是否打开
alter database force logging ;//打开强制日志记录,nologging 关闭强制记录
show parameter db_u
show parameter service_n

配置网络:
[oracle@64ora ~]$ vim /u01/grid/11g/network/admin/listener.ora

# listener.ora Network Configuration File: /u01/grid/11g/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = updb.com)
      (ORACLE_HOME = /u01/oracle/11g)
      (SID_NAME = updbdb)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = pupdb)
      (ORACLE_HOME = /u01/oracle/11g)
      (SID_NAME = updb)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = updb_DGMGRL)
      (ORACLE_HOME = /u01/oracle/11g)
      (SID_NAME = updb)
    )
)



LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 64ora.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/oracle

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent



全局数据库名
<show patameter db_n> + <show parameter db_domin>

[oracle@64ora ~]$ vim /u01/oracle/11g/network/admin/tnsnames.ora
 

PUPDB =
   (DESCRIPTION =
       (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.224.135)(PORT = 1521))
        )
        (CONNECT_DATA =
           (SERVICE_NAME = pupdb)
         )
    )

SUPDB =
   (DESCRIPTION =
       (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.224.136 )(PORT = 1521))
        )
        (CONNECT_DATA =
           (SERVICE_NAME = supdb)
         )
    )


 

建立备库联机日志,须要比主库多一个组
alter database add standby logfile group 11 ‘/u01/oracle/oradata/updb/sredo01.log’ size 50m
alter database add standby logfile group 12 ‘/u01/oracle/oradata/updb/sredo02.log’ size 50m
alter database add standby logfile group 13 ‘/u01/oracle/oradata/updb/sredo03.log’ size 50m
alter database add standby logfile group 14 ‘/u01/oracle/oradata/updb/sredo04.log’ size 50m
 

select group# from v$standby_log;

SQL> select group# from v$standby_log;

    GROUP#
----------
11
12
13
14


alter system switch logfile


备库:(没有库)
create pfile from spfile ;//从主库拷一个到备库
vim /initupdb.ora
compatible //软件版本留下

*.control_files='/u01/oracle/oradata/updb/control01.ctl','/u01/oracle/   //软件版本留下
*.fast_recovery_area/updb/control02.ctl'
*.db_block_size=8192
*.db_domain='com'
*.db_name='updb'
*.db_recovery_file_dest='/u01/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.db_unique_name='SUPDB'
*.diagnostic_dest='/u01/oracle'
*.log_archive_config='dg_config=(pupdb,supdb)'
*.undo_tablespace='UNDOTBS1'



建立路径:
[root@64clone dbs]# mkdir /u01/oracle/oradata/updb -p
[root@64clone dbs]# mkdir /u01/oracle/fast_recovery_area/updb -p
[root@64clone dbs]# mkdir /u01/oracle/admin/updb/adump -p
[root@64clone dbs]# mkdir /u01/oracle/admin/updb/dpdump -p
建立密码文件:
cd /u01/oracle/11g/dbs
orapwd file=orapwdupdb password=oracle

网络配置:

[root@64clone dbs]# vim /u01/oracle/11g/network/admin/tnsnames.ora

PUPDB =
   (DESCRIPTION =
       (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.224.135)(PORT = 1521))
        )
        (CONNECT_DATA =
           (SERVICE_NAME = pupdb)
         )
    )

SUPDB =
   (DESCRIPTION =
       (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.224.136 )(PORT = 1521))
        )
        (CONNECT_DATA =
           (SERVICE_NAME = supdb)
         )
    )



[root@64clone dbs]# vim /u01/grid/11g/network/admin/listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = updb)
      (ORACLE_HOME = /u01/oracle/11g)
      (SID_NAME = updb)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = supdb)
      (ORACLE_HOME = /u01/oracle/11g)
      (SID_NAME = updb)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = supdb_DGMGRL)
      (ORACLE_HOME = /u01/oracle/11g)
      (SID_NAME = updb)
    )
  )



LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 64clone.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /u01/oracle

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent


重启监听

startup nomount
rman target sys/oracle@pupdb auxiliary sys/oracle@supdb

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

rman完成后,备库默认进入mount模式
select open_mode,database_role from v$database; //能够看到是什么库
show parameter broke_
alter system set dg_broker_start=true; //主备都要打开db_broker_start 功能
create spfile from pfile //用文本参数文件建立一个二进制参数文件

dgmgrl sys/oracle@pupdb //主备均可完成
d>>help //查看里面的命令
d>>help create //查看如何建立
d>>create configuration dgc as primary database is pupdb connect identifier is pupdb(链接字符串,即tnsname里面定义的链接别名);
d>>help add //查看如何建立备库
d>>add database supdb as connect identifier is supdb maintained as physical;
d>>show configuration; //查看DG 状况

DGMGRL> show configuration;

Configuration - dgc

  Protection Mode: MaxPerformance
  Databases:
    pupdb - Primary database
    supdb - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
DISABLED


d>>show database verbose pupdb

修改日志传输的模式和standbyFile //主备都要修改
d>>show database verbose pupdb
d>>edit database pupdb set property logxptmode=sync
d>>edit database pupdb set propery standbyfilemanagement=auto;
d>>edit database supdb set property logxptmode=sync
d>>edit database supdb set propery standbyfilemanagement=auto;
d>>enable configuration //启用配置

d>>show configuration
d> show database verbose supdb //
Database Status:
SUCCESS

有success才代表成功了,如过不成功查看错误缘由,若是备库是因为参数文件致使的,那么
备库中用spfile 传建一个pflie
startup mount

再执行enabel configuration 命令

验证:
desc v$archived_log //能够经过比对日志号是否相同
select sequence#,applied from v$archived_log

主备切换的两种方式:

switchover---


在dgbroker 中切换主备
d>>switchover to supdb
select open_mode,database_role from v$database ;

手动切库
1.primary---standby
查看主备日志是否同步了,肯定两个库的主备关系
select sequence#,applied from v$archived_log
 

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE  OPEN_MODE
---------------- --------------------
PRIMARY   READ WRITE                            //主库
SQL> select database_role,open_mode from v$database; 

DATABASE_ROLE  OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY   //备库



主库:
alter database commit to switchover to physical standby [with session shutdown]; //在主库中切换,with session shutdown 其余用户不能够作操做了
shutdown immediate
startup nomount
alter database mount standby database ;


2.standby---primary
备库:
alter database commit to switchover to primary with session shutdown
shutdown immediate
startup

3.新备库中执行
alter database recover managed standby database disconnect from session;//在备库中应用主库传来的日志,mrp进程作块恢复的操做

alter database recover managed standby database using current logfile disconnect from session; //前提是必须是要有联机日志

验证:切换日志,而后再验证

切完以后在咱们的dgbroker 中已经不可以认出主备库了,咱们只有删掉主备里的dg参数文件,从新建一次
 

SQL> show parameter dg_

NAME      TYPE  VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1      string  /u01/oracle/11g/dbs/dr1PUPDB.d
 at
dg_broker_config_file2      string  /u01/oracle/11g/dbs/dr2PUPDB.d
 at
dg_broker_start       boolean  TRUE
SQL> alter system set  dg_broker_start=false; 
再根据参数文件的路径,删掉参数文件的物理文件
登陆到dgbroker里,从新进行DG的搭建。


 



 

failover----


主库挂掉了
把备库的ip地址改成主库的
d>help failover

手动切库
1.standby---primary
备库
alter database commit to switchover to primaty with session shutdown;
shutdown immediate
startup
2.主库已经没办法用了。咱们就从新克隆库,再搭建dg






 

手工

11g—10g—9i



1.alter database archivelog
2.alter database force logging //强制日志记录
3.alter system set log_archive_config='dg_config=(pupdb,supdb)';
alter system set log_archive_dest_1=location='/u01/orache/arc' db_unique_name=pupdb;
alter system set log_archive_dest_2=service=supdb [lgwr sync 默认传归档,加上传联机]db_unique_name=supdb;
alter system set standby_filemanagement=auto;
alter system set db_unique_name=pupdb scope=spflie;
alter system set fal_service=pupdb;
<alter system set fal_client=supdb;>
重启数据库
4.配置网络,不用配置dg_broker的网络
5.tnsping pupdb|tnsping supdb
6.备份(10g,9i)

备:
1.alter database archivelog
2.alter database force logging //强制日志记录
3.alter system set log_archive_config='dg_config=(pupdb,supdb)';
alter system set log_archive_dest_1=location='/u01/orache/arc' db_unique_name=supdb;
alter system set log_archive_dest_2=service=pupdb [lgwr sync 默认传归档,加上传联机]db_unique_name=supdb;
alter system set standby_filemanagement=auto;
alter system set db_unique_name=pupdb scope=spflie;
alter system set fal_service=pupdb;
alter system set fal_client=supdb;
重启数据库

2.拷贝主库的密码文件
3.配置网络
4.rman 克隆
5.验证
alter database recover managed standby database disconnect from session;
alter database recover managed standby database using current logfile disconnect from session; //两条任选一条,运用日志
alter database recover managed standby database cancel; //取消运用日志
在sqlplus 中作的切库操做,不会写如到dgbroker 中的参数文件里,因此用sqlplus切库后,在dgbroker中是不会有改变的



快照备库搭建:

 


1. 在dgbroker中物理备库转为快照备库/将快照备库转为物理备库

d>>help convert

2.在sqlplus 中 物理备库---->快照备库

1>搭建一个物理备库
2>停物理备库日志应用
alter database recover managed standby database cancel;
3>一致性关闭数据库,启动到mount;
select open_mode from v$database ; //若是数据库原本就是mount状态,就无需关机这一步
4> 转换物理备库为快照备库
alter database convert to snapshot standby;
5>打开快照备库
alter database open ;
能够在快照备库里作测试操做
测试完毕后
快照备库----->物理备库
1>关闭快照备库
shutdown immediate
startup mount
2>将快照备库转为物理备库
alter database covert to physical standby ;
shutdown immediate;
startup mount;
3>从新启用物理日志
alter database recover managed standby database disconnect from session
 

逻辑备库搭建:





1.sqlplus 中 物理备库---->逻辑备库


1> 备库
停掉日志应用
alter databse recover managed standby database cancel
2>主库:
exec dbms_logstdby.build ;//在主库生成logminer 的数据字典

3>备库
启动到mount状态
startup mount
alter database recover to logical standby apply immediate //将物理备库转为逻辑备库,当即应用日志
alter database open resetlogs;
alter database start logical standby apply; //启用归档日志

alter database start logical standby apply immediate; //启用联机日志

打开主库的附加日志功能


2.sqlplus 中 逻辑备库---->主库
switchover ---logical
1>logical standby

alter database prepare to switchover to primary ; //逻辑备库切换前的准备操做
select database_role from v$database;//角色不会发生变化

2>primary
alter database perpare to switchover to logical standby ;//主库切换前的准备操做

3>logical standby
alter database commit to switchover to primary; // 备库切为主库

4>primary
alter database commit to switchover to logical standby; //主库切为备库
alter database start logical standby apply [immediate];

failover--- 1>logical standby alter database prepare to switchover to primary ; alter database commit to switchover to primary;  

相关文章
相关标签/搜索