ORACLE DG介绍(物理无实例)

来源:互联网 发布:淘宝如何申请信用卡 编辑:程序博客网 时间:2024/05/02 01:35
DG是dataguard,也叫standby,是oracle提供的一种容灾解决方案,只有企业版可用,标准版是不能用的,DG最多可以有一个主节点,9个从节点。可分为逻辑和物理两类,这里注意区分一下,逻辑的是通过redo转换成SQL语句,然后再standby上执行该SQL语句实现的同步,物理standby是接受主节点的redo数据后,以介质恢复的方式进行同步,这是这两者的本质区别。

DG的三种模式:
最大保护:主节点事务提交前,redo写入在线日志,而且从节点也要写入到standby redolog中,并且保证在从库中至少一个节点可用,在主节点才提交事务,注意,最大保护模式,从节点故障,主库会被shutdown。

最高性能:这种模式,主节点随时提交事务,事务提交时,redo至少写入一个从节点,但是写入不一定同步。

最高可用性:这种模式和最大保护有点类似,不同的是,从库故障,主库不会shutdown,而是转为最高性能模式,从库恢复后,转回最高可用性模式。

物理standby只能read only打开,此时只接受redo,不应用redo。应用redo,就不能打开。11G,可以以open read only模式打开,继续应用redo.所以大部分时间,物理standby都是在mount状态。
逻辑standby正常情况下就是read write模式,而且由于是应用sql语句实现同步,所以物理结构可以不一致。

硬件以及操作系统需求:
主库和从库运行的操作系统平台必须相同,版本可以有差异,数据库安装路径可以不同。主从服务器的配置差异最好不要太大,要不切换角色的时候,配置差的切换后,性能会有影响。
主库必须是归档模式,并且force logging模式,从库可以是非force logging。一个主节点,可以有逻辑从节点,可以有物理从节点,但是时区和时间设置必须一致,否则同步会出现问题。

相关参数:
DB_NAME:DG中所有数据库都相同
DB_UNIQUE_NAME:为每一个数据库指定唯一的名称。
LOG_ARCHIVE_CONFIG:该参数用来控制从远端数据库接收或发送REDO数据,通过DG_CONFIG属性罗列同一个Data Guard中所有DB_UNIQUE_NAME(含Primary数据库和Standby数据库),以逗号分隔,SEND/NOSEND属性控制是否可以发送,RECEIVE/NORECEIVE属性控制是否能够接收。例如:log_archive_config='DG_CONFIG=(PRIMARY_P,STANDBY_S)'
LOG_ARCHIVE_DEST_n:归档文件的生成路径,例如:log_archive_dest_1='LOCATION=/opt/oracle/archive/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRIMARY_P'
LOG_ARCHIVE_DEST_STATE_n:指定参数值为ENABLE,允许redo 传输服务传输redo 数据到指定的路径,LOG_ARCHIVE_DEST_n对应使用。
FAL_SERVER:指定一个数据库SID,通常该库为primary 角色
FAL_CLIENT:指定一个数据库SID,通常该库为standby 角色
LOG_ARCHIVE_MAX_PROCESSES:指定归档进程数量,默认4.可以指定1-30.
STANDBY_FILE_MANAGEMENT:如果primary 数据库数据文件发生修改(如新建,重命名等)则按照本参数的设置在standby 中做相应修改。设为AUTO 表示自动管理。设为MANUAL表示需要手工管理.

实施步骤:
1.主节点启用force logging,设置归档模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
alter database force logging;
取消:alter database no force logging;
2.如果没有密钥文件,需要用orapwd创建一下:
orapwd file= password= entries= force= nosysdba=
说明:
file 创建的密码文件
password 创建的口令(sys用户)
entries=MAX_USER 口令文件中可以存放的最大用户数。即拥有sysdba和sysoper身份登陆的用户数
force=(Y/N) 强制覆盖已存在的密码文件
nosysdba= sysdba用户不可以登陆
例如:
orapwd file=$ORACLE_HOME/dbs/testpwd.ora password=testoracle entries=1 force=y
3.主库创建standby controlfile和pfile
alter database create standby controlfile as 'controlfile.ctl';
create pfile='xxxx' from spfile;
4.热备
主库:
SQL> select 'alter tablespace '||name||' begin backup;' from v$tablespace;

'ALTERTABLESPACE'||NAME||'BEGINBACKUP;'
-------------------------------------------------------------
alter tablespace SYSTEM begin backup;
alter tablespace SYSAUX begin backup;
alter tablespace UNDOTBS1 begin backup;
alter tablespace TEMP begin backup;                  ---这个不需要copy文件
alter tablespace TBS_MRPMUSIC begin backup;
alter tablespace TBS_WAPMUSIC begin backup;
alter tablespace TBS_MUSICTEST begin backup;
alter tablespace TBS_MRPMUSIC_IDX begin backup;
记得copy完,end backup
5.复制数据文件,控制文件,参数文件,密码文件到备库。
6.配置standby数据库
配置监听
配置tnsnames.ora
7.启动standby
修改好参数文件后,启动到nomount
startup nomount pfile='xxxx';  --nomount
ALTER DATABASE MOUNT STANDBY DATABASE;   --启动到mount
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; --启用redo应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; --启用redo实时应用
8.停止standby
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CALCEL;--停止redo应用
shutdown immediate;

8.failover和switchover
failover:主节点故障,激活从节点,替代服务。
switchover:主从角色互换,比如硬件升级。
物理switchover:
主节点:
select switchover_status from v$database; --如果是TO STANDBY,那么可以主节点可以转换为备节点。
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate;
startup mount;
备节点:
select switchover_status from v$database; --如果是to primary,那么可以切换为主节点。
alter database commit to switchover to primary; --注意转换的时候不能处于open read write模式。
alter database open;
物理failover:
检查归档日志是否连续:
备节点:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; --如果没有记录,那么正常,如果有记录,那么需要把归档日志从主节点复制到从节点。
select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;这个是检查归档是否完整。
alter database recover managed standby database finish force;--启动failover
alter database commit to switchover to primary; --转换为主节点。
alter database open;
做fialover其实说明主节点已经不可用,在最大保护和最高可用模式下,直接failover即可,不需要再检查归档,因为这时候主节点可能已经无法打开了。
9.以read only模式打开standby
alter database recover managed standby database cancel;  --取消redo应用
alter database open; --打开
alter database recover managed standby database disconnect from session; --恢复到redo应用,不需要shutdown,启用redo应用即可。

10.模式切换:
maximize protection ---> maximize availability ----> maximize performance
当在把dataguard的保护级别按这上面的顺序减低的时候,不需要primary库在mount状态,primary在open状态就可以直接执行保护模式更改命令
maximize protection <--- maximize availability <---- maximize performance
当在把dataguard的保护级别按这上面的顺序升高的时候,需要primary库在mount状态,如果在open更改会报错误
select DATABASE_ROLE,open_mode,PROTECTION_MODE,PROTECTION_LEVEL from v$database; --查看保护模式
切换主库保护模式的语法:
ALTER DATABASE SET STANDBY DATABASE 
TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE }

SQL> alter database set standby database to maximize performance;
SQL> alter database set standby database to maximize availability;
SQL> alter database set standby database to maximize protection;
以上都是在主库操作,备库会随之改变。
原创粉丝点击