数据库容灾
dg :dataguard
standby:备库
node
物理备库---主库当中的数据同步到备库中,只能工做在mount状态 但在11g能够工做在open状态,不停的应用主库传递过来的日志
逻辑备库---主库传递到备库中,作的是SQL应用,工做在open中,不会同步在主库中
11g:快照备库---经过咱们的物理备库转为快照备库,工做在open状态,用来作测试
将物理备库转为快照备库,测试昨完后,将快照备库转为物理备库,咱们的快照备库就不存在了
sql
全部的同步产品都是记录数据块的更改信息获得日志流(物理备库),或者经过日志挖掘获得SQL语句来达到数据同步(逻辑备库),根据产品的同步机制,来到达数据的同步。
日志流数据同步(块恢复的操做):物理同步即物理备库,要求主库的结构和备库的结构是如出一辙,才能保证主库中的数据和备库中的数据如出一辙
日志挖掘(逻辑备库):主库的结构和备库的结构能够不一致,不必定能达到时时同步
数据库加了密,或者没有打开附加日志,日志挖掘就会不全,备库就没办法和主库一致
数据库
1.远程/本地切换--经常使用
2.备份(经常使用)(rman备份用在数据量很少的状况下,一般能在半个小时内完成备份,rman会消耗内存占用I/O,超过半个小时,咱们就用DG的方式备份)
3.读写分离----lg 逻辑备库11g开始
-----物理备库也能够作一些报表操做,日志挖掘
4.测试---特别是数据库开发的项目
逻辑备库,11g可使用快照备库
vim
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
步骤:
主库
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
主备切换的两种方式:
在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的搭建。
主库挂掉了
把备库的ip地址改成主库的
d>help failover
手动切库
1.standby---primary
备库
alter database commit to switchover to primaty with session shutdown;
shutdown immediate
startup
2.主库已经没办法用了。咱们就从新克隆库,再搭建dg
主
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;