ORACLE-----DG的搭建

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

一、备库分类:


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

二、备库工作原理:



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

三、四种搭建DG方式:


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

四、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> 



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

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

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

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

PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE




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

主备切换
1、sqlplus 命令方式,要求非常高,命令一个都不能错 (推荐)
2、oem 要求网络必须好,配置好oem,要求cpu必须足够,点鼠标的方式,不太推荐
3、dgbroker 工具,需要配置 (推荐)
 

五、搭建方法:


步骤:
主库
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;

 

转载于:https://my.oschina.net/liubaizi/blog/813316

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值