数据库
oracle数据库自启动和关闭脚本调用
数据库灾备恢复小结
DMS使用文档
Oracle12C安装文档_李光升
Centos配置yum源的操作步骤-李光升
CCS数据库突然卡顿问题解决-徐铭
Centos 7.9静默安装oracle 12cR2详细步骤
mysql5.7数据库sql语句数据类型隐式转换的反逻辑BUG
RDS MySQL临时文件导致实例磁盘空间满且出现“锁定中”状态
关于Mysql引擎Myisam和InnoDB的使用
MySQL查询语句中in和exists区别详解-知识点
Mysql 的存储过程中 WITH AS 的语法和使用
Mysql 性能调优-详解
oracle数据库DG搭建
SUSE linux 配置时钟同步服务NTP/Chrony
oracle数据库实例开启操作文档
oracle数据库实例关闭操作文档
oracle数据库DBS备份配置文档v2
ALiYun ECS CENTOS数据上传到OSS操作手册
Oracle - LOGMINER配置方法
oracle sysaux表空间爆满清理unified auditing数据
sysaux表空间爆满WRI$_ADV_OBJECTS占用严重
SAP权限对象
SYSAUX表空间WRI$\_ADV\_OBJECTS表过大清理V2
oracle:表访问方式
ORA性能诊断调优
数据字典(DICT)和性能事件类型(EVENT)
日志挖掘LogMiner
RMAN sql_id “0az7czjdw8z7j” 执行计划异常
Oracle11g Active Data Guard搭建、管理
ORACLE LOGMINER配置v2
oracle日志组调整
ECS linux服务器挂载nas磁盘失败
oracle数据库修改字符集
datapump数据泵导入导出
OA系统数据库ADG架构搭建
IPS数据库SQL执行异常:ORA-00600
oracle 12c 创建PDB
oracle数据库监听异常
lvm:阿里云磁盘扩容,lvm扩容
Redis基本操作
SAP S4 CLIENT COPY(800->400)
日常数据库操作
PGSQL操作
# ORA-00054: resource busy问题处理
OA数据库服务器故障分析报告
CCS数据库生产数据库(北京中心)覆盖到VER环境数据库(乌兰察布):使用nonpdb to pdb迁移方式
WINDOWS环境Django框架连接MySQL数据库配置
Django开发学习实战
什么是向量嵌入?
OA数据库服务器内次异常增长问题分析
基于AI的自动化服务器管理
AI技术发展趋势及其在农牧食品行业的创新应用
IPS数据库日志表数据归档&表分区
国产编程模型GLM-4.6海外爆火:性能媲美ClaudeSonnet,性价比优势显著
免费开源的零代码平台 / 无代码平台,敲敲云 v2.2.0 版本
数据库原理与应用
AI发展近况分析
ORACLE ADG环境下解除ADG关系并激活备库为独立数据库
麦肯锡重磅报告:关于未来的生存指南,当57%的工作被自动化,我们如何与AI结成利益共同体
【Oracle】Cursor(游标)
ORACLE数据库在曾经的备库(路径一致)进行不完全恢复
获取执行计划的6种方法
人工智能行业的发展已进入“系统竞争”时代
2026年AI与机器人发展趋势
事务未提交导致行锁等待问题处理
MongoDB日常操作命令
2026年人工智能前沿技术趋势与应用落地分析
Doris开发
本文档使用「觅思文档专业版」发布
-
+
首页
Oracle11g Active Data Guard搭建、管理
# Oracle11g Active Data Guard搭建、管理 Oracle11g Active Data Guard搭建、管理 Data Guard与RAC不同的是。在普通情况下。Standby仅仅有一个节点处于活动状态,全部的应用都连接到主server。 仅仅有当server发生问题时,才考虑切换到备用server。 在Oracle 11g曾经版本号中的的Data Guard物理备用数据库。能够以仅仅读的方式打开数据库。但此时MediaRecovery利用日志进行数据同步的过程就停止了,假设物理备用数据库处于恢复的过程中数据库就不能打开查询。也就是说日志应用和仅仅读打开两个状态是相互排斥的,而Oracle 11g Active Data Guard功能攻克了这个矛盾,在利用日志恢复数据的同一时候能够用仅仅读的方式打开数据库,用户能够在备用数据库上进行查询、报表等操作,这类似逻辑Data Guard备用数据库的功能(查询功能方面),可是,数据同步的效率更高、对硬件的资源要求更低。这样能够更大程度地发挥物理备用数据库的硬件资源的效能。 Oracle 11g物理Active Data Guard实时查询(Real-time query)特性。备库在这样的特性的支持下,Oracle能够最大限度满足备库作为报表库或者查询分析类型数据库的需求。 利用oracle 11g的 Duplicate From Active Database技术,使用rman通过网络连接主库数据库进行复制。 一、环境介绍 1. 主数据库环境 操作系统版本号: OEL6.4 x64 数据库版本号 : Oracle 11.2.0.4.0x64 数据库sid名 : orcl 数据库db\_unique\_name:orcl\_primary 2. 备库环境 操作系统版本号: OEL6.4 x64 数据库版本号 : Oracle 11.2.0.4.0x64 (仅仅安装oracle数据库软件,no netcadbca) 数据库sid名 : orcl 数据库db\_unique\_name:orcl\_standby 配置hosts文件 # cat /etc/hosts 192.168.10.205 oradb205 oradb205.localdomain 192.168.10.206 oradb206 oradb206.localdomain 数据库须要开启归档模式(主、备库都改动): SQL> shutdown immediate SQL> startup mount SQL> alter database archivelog; SQL> alter database open; SQL> archive log list; DG的三种保护模式: Maximum Protection 最大保护 | MaximumPerformance最高性能(默认模式) | Maximum Availability 最高可用性 查看DG处于何种保护模式 SQL> selectdb\_unique\_name,protection\_mode,protection\_level from v$database; 设置保护模式(3中模式。可选) SQL> alter database set standbydatabase to maximize performance; SQL> alter database set standbydatabase to maximize availability; SQL> alter database set standbydatabase to maximize protection; 二、SQL*NET 配置 在创建备库前,要确认两台server的数据库之间能通信,假设我们要用 RMAN 的 duplicate from active database 命令创建备库的话。 我们须要配置监听和 TNS 名。 尽管数据库会自己主动注冊监听,但假设要使用 RMAN的 duplicate 命令创建备库。备库必须首先处于 NOMOUNT 状态。在 NOMOUNT 状态下。数据库实例不会自己主动注冊监听。你必须配置静态监听。另外必需要注意的一点是。NOMOUNT 状态下的数据库必须使用专用模式(dedicated server)连接。 两台server上的 TNS 名字文件必须配置好,让主备库能用 LOG\_ARCHIVE\_DEST\_N 和 FAL\_SERVER 參数(稍后会介绍这些參数)中的服务名(Service Names)找到对方。详细配置应类似下例。 改动主备库listener.ora,tnsnames.ora文件例如以下,备库依据自身情况改动 SDU=32767 为DG优化网络传输參数 改动主库监听配置$ORACLE\_HOME/network/admin/listener.ora ********************* listener.ora ******************************* # listener.ora Network Configuration File:/data/oracle/app/oracle/product/11.2.0/dbhome\_1/network/admin/listener.ora # Generated by Oracle configuration tools. SID\_LIST\_LISTENER = (SID\_LIST = (SID\_DESC = (SDU=32767) (GLOBAL\_DBNAME = orcl\_primary) (ORACLE\_HOME =/data/oracle/app/oracle/product/11.2.0/dbhome\_1) (SID\_NAME = orcl) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.10.205)(PORT = 1521)) ) ADR\_BASE\_LISTENER =/data/oracle/app/oracle *********************listener.ora ******************************* 改动备库监听配置同上,除了HOST地址更改为备库server地址 ********************* listener.ora ******************************* SID\_LIST\_LISTENER = (SID\_LIST = (SID\_DESC = (SDU=32767) (GLOBAL\_DBNAME = orcl\_standby) (ORACLE\_HOME =/data/oracle/app/oracle/product/11.2.0/dbhome\_1) (SID\_NAME = orcl) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.10.206)(PORT = 1521)) ) ADR\_BASE\_LISTENER =/data/oracle/app/oracle *********************listener.ora ******************************* 改动配置tnsname.ora文件(主、备库都都为例如以下) 说明:orcl\_primary是主库的服务名,orcl\_standby是备库的服务名。 $ vi$ORACLE\_HOME/network/admin/tnsnames.ora ******************* tnsnames.ora **************************** # listener.ora Network Configuration File:/data/oracle/app/oracle/product/11.2.0/dbhome\_1/network/admin/listener.ora # Generated by Oracle configuration tools. SID\_LIST\_LISTENER = (SID\_LIST = (SID\_DESC = (SDU=32767) (GLOBAL\_DBNAME = orcl\_primary) (ORACLE\_HOME =/data/oracle/app/oracle/product/11.2.0/dbhome\_1) (SID\_NAME = orcl) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.10.205)(PORT = 1521)) ) ADR\_BASE\_LISTENER =/data/oracle/app/oracle [oracle@oradb205 admin]$ cat tnsnames.ora orcl\_primary = (DESCRIPTION = (SDU=32767) (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.10.205)(PORT = 1521)) (CONNECT\_DATA = (SERVER = DEDICATED) (SERVICE\_NAME = orcl\_primary) ) ) orcl\_standby = (DESCRIPTION = (SDU=32767) (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.10.206)(PORT = 1521)) (CONNECT\_DATA = (SERVER = DEDICATED) (SERVICE\_NAME = orcl\_standby) #(UR = A) ) ) for\_db = (DESCRIPTION = (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.10.205)(PORT = 1521)) ) *******************tnsnames.ora **************************** 測试服务名连通性: $ tnsping orcl\_primary $ tnsping orcl\_standby 如今主备库之间依然能够互相通信了 三、在主库上改动dataguard配置相关的各个參数 1、开启force logging模式 SQL> alter database forcelogging; SQL> select open\_mode,log\_mode,force\_logging,flashback\_on from v$database; OPEN\_MODE LOG\_MODE FOR FLASHBACK\_ON ---------- ------------ ---------------------------- ------------ --- ------ READ WRITE ARCHIVELOG YES NO 作用:无论什么操作都会生成redo日志,应该看到 force\_logging 列为 YES。 特点:1.在数据库mount状态和open状态都能够启动forcelogging模式 2.暂时表空间和暂时回滚段动作不会生成redo日志 3. alter database noforce logging;关闭forcelogging 2、设置 db\_unique\_name參数 主、备库都必须设置为唯一。这个是DG里的标识,假设没有。使用 alter system 进行设置: SQL> show parameter db\_unique\_name; SQL> alter system set db\_unique\_name=orcl\_primaryscope=spfile; 主库设置名为orcl\_primary,备库设置为orcl\_standby 3、让主库知道 Data Guard配置里的另外一个备库的名字 SQL> alter system set log\_archive\_config = 'dg\_config=(orcl\_primary,orcl\_standby)'; 4、配置归档位置和重做日志传输 SQL> alter system set log\_archive\_dest\_1 = 'location=use\_db\_recovery\_file\_dest valid\_for=(all\_logfiles, all\_roles) db\_unique\_name=orcl\_primary'; 这个命令指定高速恢复区作为归档位置。此归档位置用于在全部数据库角色下归档全部的日志文件。 官方文档里说使用 valid\_for=(online\_logfiles, all\_roles),这将导致备库无法归档备用日志文件。由于它们不是在线日志。 但假设使用 all\_logfiles 选项,主备库将都能归档在线以及备用日志。假设你想在备库进行备份。并同一时候备份归档日志的话,必须使用 all\_logfiles。 5、配置重做日志传输到备库: SQL> alter system set log\_archive\_dest\_2 = 'service=orcl\_standby lgwr sync valid\_for=(online\_logfile,primary\_role) db\_unique\_name=orcl\_standby'; 这条语句说,假设这是主库,就使用服务名orcl\_standby 传输在线日志。目标库名叫 orcl\_standby 。 要注意STANDBY\_ARCHIVE\_DEST 參数不须要。已经被官方弃用。当调试时。不少人好心建议我设置此參数。但设置此參数后启动数据库,仅仅会报 ORA-32004: obsolete or deprecated parameter(s) specified for RDBMSinstance错。 6、设置參数 FAL\_SERVER。 指定当日志传输出现故障时。备库到哪里去找缺少的归档日志。设置了这个參数,备库就会主动去寻找那些缺少的日志,并要求主库进行传输。 SQL> alter system set fal\_server='orcl\_standby'; 注意 FAL\_CLIENT 參数在11g里已经弃用。 7、当主库加入或删除数据文件时,这些文件也会在备库加入或删除。 启用此功能的方法例如以下: SQL> alter system set standby\_file\_management=auto; 8、加入备用日志(standby redo ) 再次。我们要确认主库有备用日志文件(StandbyLog Files)。备库使用备用日志文件来来保存从主库接收到的重做日志。 主库上也建立备用日志文件有两个原因:一是主库可能转换成备库。备库须要备用日志,二是假设主库建了备用日志。备库会自己主动建。 备用日志应该跟在线日志一样大,组数应该至少跟在线日志一样多,或者很多其它。 我喜欢给备用日志一个跟在线日志不同范围的编号。比方在线日志组是1到6,备用日志就是11到16。 SQL> alter database add standby logfilegroup 11 ('/data/oracle/app/oracle/oradata/orcl/std\_redo11.log') size100M; SQL> alter database add standby logfilegroup 12 ('/data/oracle/app/oracle/oradata/orcl/std\_redo12.log') size100M; SQL> alter database add standby logfilegroup 13 ('/data/oracle/app/oracle/oradata/orcl/std\_redo13.log') size100M; 查看redo 信息 SQL> select group#,type, member fromv$logfile; 9、重新启动数据库 SQL> shutdown immediate SQL> startup 10、其他 SQL> alter system set local\_listener='for\_db'; 11、创建主库主库pfile參数文件 SQL> create pfile='/home/oracle/initdg.ora' from spfile; 12、创建好了主库的 pfile后,将其拷贝到备库server $ scp /home/oracle/initdg.ora 192.168.10.206:/home/oracle/ 四、备库环境准备 13、在备库改动传递过来的pfile文件,注意红色字体部分(根据备库机器配置不同。更改相关配置) 使用备库的 SID 改动其名字。 你须要对 pfile 做例如以下改动: 依据你备库的配置和文件位置。你可能须要改动 AUDIT\_FILE\_DEST。CONTROL\_FILES 和 DISPATCHERS 參数(或许还有其它须要改动的參数)。 LOG\_ARCHIVE\_DEST\_1 參数中的 db\_unique\_name 改动为备库的相应唯一名(这里是 orcl\_standby)。 LOG\_ARCHIVE\_DEST\_2 參数,改动为主库相应的服务名和数据库唯一名(这里是 orcl\_primary)。 FAL\_SERVER 參数改动指向主库的服务名。 添加例如以下參数: db\_unique\_name=ORCL\_standby db\_file\_name\_convert 和 log\_file\_name\_convert。假设主备库的数据文件、日志文件位置不同,须要设置这两个參数。 $ vim /home/oracle/initdg.ora ****************************************************** orcl.\_\_db\_cache\_size=2835349504 orcl.\_\_java\_pool\_size=16777216 orcl.\_\_large\_pool\_size=184549376 orcl.\_\_oracle\_base='/data/oracle/app/oracle'#ORACLE\_BASEset from environment orcl.\_\_pga\_aggregate\_target=2516582400 orcl.\_\_sga\_target=3774873600 orcl.\_\_shared\_io\_pool\_size=0 orcl.\_\_shared\_pool\_size=671088640 orcl.\_\_streams\_pool\_size=0 *.audit\_file\_dest='/data/oracle/app/oracle/admin/orcl/adump' *.audit\_trail='db' *.compatible='11.2.0.4.0' *.control\_files='/data/oracle/app/oracle/oradata/orcl/control01.ctl','/data/oracle/app/oracle/fast\_recovery\_area/orcl/control02.ctl' *.db\_block\_size=8192 *.db\_domain='' *.db\_name='orcl' *.db\_recovery\_file\_dest='/data/oracle/app/oracle/fast\_recovery\_area' *.db\_recovery\_file\_dest\_size=20480M *.db\_unique\_name='orcl\_standby' *.diagnostic\_dest='/data/oracle/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.fal\_server='orcl\_primary' *.local\_listener='for\_db' *.log\_archive\_config='dg\_config=(orcl\_primary,orcl\_standby)' *.log\_archive\_dest\_1='location=use\_db\_recovery\_file\_destvalid\_for=(all\_logfiles, all\_roles) db\_unique\_name=orcl\_standby' *.log\_archive\_dest\_2='service=orcl\_primary lgwrsync valid\_for=(online\_logfile,primary\_role) db\_unique\_name=orcl\_primary' *.memory\_target=6000M *.open\_cursors=300 *.processes=150 *.remote\_login\_passwordfile='EXCLUSIVE' *.sessions=610 *.standby\_file\_management='AUTO' *.undo\_tablespace='UNDOTBS1' ****************************************************** 14、创建备用数据库的password文件 使用oracle帐号登录。设置的password要保证主库、备用库是同样。 也能够复制主库password文件到备库。 $ rm $ORACLE\_HOME/dbs/orapw$ORACLE\_SID $ orapwd file=$ORACLE\_HOME/dbs/orapw$ORACLE\_SID password=sysoracle entries=4 备注: 假设你不是使用 SSL 做重做日志传输验证(一般来说不会),那么你须要使用password文件做验证。你必须创建password文件,而且设置參数 REMOTE\_LOGIN\_PASSWORDFILE 为 EXCLUSIVE 或 SHARED。一般数据库默认就有password文件。而且此參数默觉得 EXECUSIVE。 先检查下这两项。假设不是默认。设置方法例如以下: SQL> alter system set remote\_login\_passwordfile=exclusive scope=spfile; 測试远程登录 $ sqlplus sys/sysoracle@orcl\_primary as sysdba $ sqlplus sys/sysoracle@orcl\_standby as sysdba 15、将备库启动到nomount状态,然后连接主库进行RMAN duplicate操作 SQL> conn /as sysdba SQL> create spfile frompfile='/home/oracle/initdg.ora'; SQL> startup nomount 备注: 若启动出现 ORA-32004: obsoleteor deprecated parameter(s) specified for RDBMS instance,则查看日志。 文本格 式的alert文件在哪里呢?看一下动态视图V$DIAG\_INFO吧。 SQL> select * from v$diag\_info ; $ tail -f /data/oracle/app/oracle/diag/rdbms/orcl\_standby/orcl/trace/alert\_orcl.log 看看有无类似过期參数提示: WARNING: The background\_dump\_dest init.ora parameter has beendeprecated. 16、RMAN同一时候连接主库与备库 在备库机器上运行(主库为启动startup。备库为nomount状态) $ rman target sys/sysoracle@orcl\_primary auxiliary sys/sysoracle@orcl\_standby Recovery Manager: Release 11.2.0.4.0 -Production on Tue May 20 11:45:02 2014 Copyright (c) 1982, 2011, Oracle and/or itsaffiliates. All rights reserved. connected to target database: ORCL(DBID=4079000510) connected to auxiliary database: ORCL (notmounted) RMAN> 17、RMAN通过网络在线duplicate复制主库数据到备库 RMAN> duplicate target database for standby nofilenamecheck from active database; Starting Duplicate Db at 20-MAY-14 using target database control file insteadof recovery catalog allocated channel: ORA\_AUX\_DISK\_1 channel ORA\_AUX\_DISK\_1: SID=315 devicetype=DISK …… 省略 Finished Duplicate Db at 20-MAY-14 RMAN> exit Recovery Manager complete. 18、将备库置于active dataguard模式下 在Oracle 11g之前。物理备库(physical Standby)在应用redo的时候,数据库须要处于mount状态。从11g開始,应用redo的时候。物理备库能够处于read-only模式,这就称为Active Data Guard 。通过Active Data Guard。能够在物理备库进行查询或者导出数据,从而降低对主库的訪问和压力。 $ sqlplus /nolog SQL> conn /as sysdba 查看状态 SQL> select open\_mode,database\_role,db\_unique\_name from v$database; OPEN\_MODE DATABASE\_ROLE DB\_UNIQUE\_NAME -------------------- ---------------------------------------------- MOUNTED PHYSICAL STANDBY orcl\_standby 1)打开备库(Dataguard仅仅能启动备库到readonly模式) SQL> alter database open; 2)启用实时重做应用 选项“USING CURRENT LOGFILE”的含义是当备库收到日志后,尽快完毕恢复。 SQL> alter database recover managed standby database using current logfile disconnect from session; 取消备库的自己主动恢复 取消Redo Apply SQL> alter database recover managed standby database cancel; 3)查看状态 状态“READ ONLY WITH APPLY”即表示此时备库处于Read Only状态的同一时候能够接受主库传过来的日志进行恢复,以便达到备库能够即时查看到主库变化的目的。 SQL> select open\_mode,database\_role,db\_unique\_name from v$database; OPEN\_MODE DATABASE\_ROLEDB\_UNIQUE\_NAME -------------------- ---------------------------------------------- READ ONLY WITH APPLY PHYSICAL STANDBY orcl\_standby 查看日志状态 SQL> select status from v$standby\_log; STATUS ---------- ACTIVE ACTIVE UNASSIGNED SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- /data/oracle/app/oracle/fast\_recovery\_area/ORCL\_STANDBY/onlinelog/o1\_mf\_3\_9qon4l1s\_.log /data/oracle/app/oracle/fast\_recovery\_area/ORCL\_STANDBY/onlinelog/o1\_mf\_2\_9qon4hjg\_.log /data/oracle/app/oracle/fast\_recovery\_area/ORCL\_STANDBY/onlinelog/o1\_mf\_1\_9qon4f3v\_.log /data/oracle/app/oracle/fast\_recovery\_area/ORCL\_STANDBY/onlinelog/o1\_mf\_11\_9qon4nh8\_.log MEMBER -------------------------------------------------------------------------------- /data/oracle/app/oracle/fast\_recovery\_area/ORCL\_STANDBY/onlinelog/o1\_mf\_12\_9qon4s8k\_.log /data/oracle/app/oracle/fast\_recovery\_area/ORCL\_STANDBY/onlinelog/o1\_mf\_13\_9qon4y3c\_.log 6 rows selected 五、改动dataguard的数据保护模式为最高可用性模式 依据oracle文档的解释。最高可用性数据保护模式须要先满足下面几个条件 Table 6-1 Required Redo Transport Attributes for DataProtection Modes Maximum Availability Maximum Performance Maximum Protection AFFIRM or NOAFFIRM NOAFFIRM AFFIRM SYNC ASYNC SYNC DB\_UNIQUE\_NAME DB\_UNIQUE\_NAME DB\_UNIQUE\_NAME Minimum Requirements for Maximum Protection Mode Redo Archival Process LGWR Network Transmission Mode SYNC Disk Write Option AFFIRM Standby Redo Logs? Yes Standby Database Type Physical Only For example: log\_archive\_dest\_2='service=testdb\_standby LGWR SYNC AFFIRM' 主库上查看DG状态 SQL> select db\_unique\_name,protection\_mode,protection\_level from v$database; DB\_UNIQUE\_NAME PROTECTION\_MODEPROTECTION\_LEVEL -------------------------------------------------- -------------------- ORCL\_PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE 备库上查看DG状态 SQL> select db\_unique\_name,protection\_mode,protection\_level from v$database; DB\_UNIQUE\_NAME PROTECTION\_MODEPROTECTION\_LEVEL -------------------------------------------------- -------------------- orcl\_standby MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE 在主库上设置DG保护模式为最高可用性模式 SQL> alter database set standby database to maximize availability; 再次查看主库、备库,发现DG保护模式都已经变了。 主库 SQL> select db\_unique\_name,protection\_mode,protection\_level from v$database; DB\_UNIQUE\_NAME PROTECTION\_MODEPROTECTION\_LEVEL -------------------------------------------------- -------------------- ORCL\_PRIMARY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY 备库 SQL> select db\_unique\_name,protection\_mode,protection\_level from v$database; DB\_UNIQUE\_NAME PROTECTION\_MODEPROTECTION\_LEVEL -------------------------------------------------- -------------------- orcl\_standby MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY 将备库shutdown后,主库和备库的PROTECTION\_LEVEL将变为RESYNCHRONIZATION SQL> select db\_unique\_name,protection\_mode,protection\_level from v$database; DB\_UNIQUE\_NAME PROTECTION\_MODEPROTECTION\_LEVEL -------------------------------------------------- -------------------- orcl\_standby MAXIMUM AVAILABILITY RESYNCHRONIZATION 备库运行 取消Redo Apply SQL> alter database recover managedstandby database cancel; SQL> shutdown immediate SQL> selectdb\_unique\_name,protection\_mode,protection\_level from v$database; 六、体验实时查询(Real-timequery)特性 (可选) 1)主库上创建表空间、用户以及表并初始化数据 (1)创建表空间并查看表空间创建结果和状态 SQL> create tablespace test\_tbs datafile '/data/oracle/app/oracle/oradata/orcl/test\_tbs01.dbf' size 10m; SQL> select * from v$tablespace where name = 'TEST\_TBS'; SQL> select ts#,status,bytes,name fromv$datafile where ts# = 8; (2)创建用户并授权 SQL> create user islandstar identifiedby 123456 default tablespace test\_tbs; SQL> grant dba to islandstar; (3)创建表并初始化数据 $ sqlplus /nolog SQL> conn islandstar/123456 SQL> create table t (x varchar2(8)); SQL> insert into t values ('islandstar'); SQL> commit; SQL> select * from t; X -------- Secooler 4)验证主库所创建表空间、用户以及表并初始化数据是否在备库应用成功 (1)查看备库表空间 SQL> select * from v$tablespace where name = 'TEST\_TBS'; TS# NAME INCBIG FLA ENC ---------- --------------------------------- --- --- --- 8SECOOLER\_TBS YES NO YES SQL> select ts#,status,bytes,name from v$datafile where ts# = 8; TS# STATUS BYTES ---------- ------- ---------- NAME -------------------------------------------------------------------------------- 8 RECOVER 10485760 /data/oracle/app/oracle/oradata/orcl/test\_tbs01.dbf 创建成功。可是此时备库数据文件的状态是“RECOVER”。 (2)查看备库用户及数据是否存在 方法同主库 主库上的变化已经即使的在备库上得到应用。 这便是Oracle 11g物理Active Data Guard实时查询(Real-time query)特性的体现。 ****************** Active Data Guard 维护篇 ************************** Data Guard 启动\关闭顺序: 启动顺序:先standby ,后primary; 关闭顺序:先primary 后standby; 主库没有遗漏 SQL> select * from v$archive\_gap; 查看日志能否正确从主库同步到备用库,查看主备库 SQL> col standby\_dest for a12 SQL> col archived for a10 SQL> col applied for a10 SQL> col status for a10 SQL> select sequence#,standby\_dest,archived,applied,status from v$archived\_log; 仅仅须要保证2边sequence序列号一致且最新的app返回YES了,就说明备库接收到应用且恢复了。 正常操作关闭DG时。再次启动DG循序为: 1、先启动备库,再启动主库 $ sqlplus / as sysdba SQL> startup 2、在备库运行命令:打开实时应用状态模式 SQL> alter database recover managed standby database using current logfile disconnect from session; 非正常情况下关闭DG后,重新启动DG时须要操作 1、检查主、备库的protection\_level值,若当中一点为RESYNCHRONIZATION,说明实时同步已经有问题。 SQL> select db\_unique\_name,protection\_mode,protection\_level from v$database; DB\_UNIQUE\_NAME PROTECTION\_MODEPROTECTION\_LEVEL -------------------------------------------------- -------------------- ORCL\_PRIMARY MAXIMUM AVAILABILITY RESYNCHRONIZATION Oracle的data guard在主库设置为最大可用模式不能实现时。自己主动降级为最大性能模式。 这种结果使得日志同步不再实时。 解决方法(在主库运行): 1、依据最大可用模式的最低要求,将log\_archive\_dest\_2调整为lgwr sync affirm。 SQL> show parameter log\_archive\_dest\_2 若包括有lgwr sync affirm ,则运行 SQL> alter system switch logfile; 强制日志切换。不一定就归档当前的重做日志文件(若自己主动归档打开,就归档前的重做日志。若自己主动归档没有打开,就不归档当前重做日志。 ) 若无lgwr sync affirm ,则运行例如以下两句命令 SQL> alter system setlog\_archive\_dest\_2 = 'service=orcl\_standby lgwr sync affirm valid\_for=(online\_logfile,primary\_role) db\_unique\_name=orcl\_standby'; SQL> alter system switch logfile; 2、查看备库open\_mode是否为“READ ONLY WITH APPLY”。否则运行后面一条语句,打开实时应用状态模式: SQL> select open\_mode,database\_role,db\_unique\_name from v$database; OPEN\_MODE DATABASE\_ROLEDB\_UNIQUE\_NAME -------------------- ---------------------------------------------- READ ONLY WITH APPLY PHYSICAL STANDBY orcl\_standby SQL> alter database recover managed standby database using current logfile disconnect from session; ****************** 主备库切换 Switchover ************************** 物理Data Guard角色转换步骤 Step 1 验证主库能否运行角色转换到备库(原主库运行): 1.查看switchover状态 SQL> SELECT SWITCHOVER\_STATUS FROM V$DATABASE; SWITCHOVER\_STATUS -------------------- TO STANDBY 附:A:switchover\_status出现session active/not allowed Step 2 開始把物理主库改变为物理备库(原主库运行) SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; 注:假设有活动的session能够使用此选项,否则转换会遇到ORA-01093错误,也能够杀掉活动会话或等活动会话后进行转换 当出现session active的时候表示还有活动的session,则执行 SQL> Alter database commit to switchover tophysical standby with session shutdown; Step 3 关闭并重新启动主库(原主库运行) SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; Step 4 验证备库能否运行角色转换到主库(原备库运行) SQL> SELECT SWITCHOVER\_STATUS FROM V$DATABASE; SWITCHOVER\_STATUS -------------------- TO PRIMARY Step 5 開始把物理备库转换成物理主库(原备库运行) SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; --假设报ORA-16139: mediarecovery required,可能是因为未应用日志引起,可先运行 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; Step 6 打开备库。然后关闭重新启动.(原备库运行) SQL> ALTER DATABASE OPEN; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP; Step 7 验证是否转换成功(原备库运行) SQL> ALTER SYSTEM SWITCH LOGFILE; Setp 8 应用归档日志(原主库上运行) SQL> ALTERDATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 此步若提示报错: ORA-01153: an incompatible media recoveryis active 则先运行 SQL> alter database recover managed standby database cancel; 再运行 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 最后。重新启动一下数据库(原备库运行) SQL> shutdownimmediate; SQL> startup ****************** 网络优化 ************************** 1、Oracle Net Session DataUnit (SDU) Size Oracle Net在将数据进行网络传输的时候,先将数据放在SDU中,该參数在10gR2默觉得2k,适当添加大小。能够提高网络性能和利用率。 Oracle推荐该參数取值为32767(最大值),有两种办法调整该參数。 配置listener.ora和tnsnames.ora,添加SDU描写叙述。须要注意。在connect descriptor中配置SDU并不正确动态服务注冊生效,通过动态注冊服务的connect,将继承sqlnet.ora中的DEFAULT\_SDU\_SIZE配置。添加例如以下: (SDU=32767) 2、Network Device QueueSizes 为了避免tcp上的缓存溢出,须要添加网络设备的队列大小。 以Linux为例,存在两种队列:transmit queue(传送队列)/receive queue(接收队列)。 发送队列由txqueuelen控制。接收队列由netdev\_max\_backlog控制。 改动/etc/sysctl.conf,添加例如以下: # for Oracle data guard optimize net.core.netdev\_max\_backlog = 20000 改动/etc/rc.local 。添加例如以下: # for Oracle data guard optimize echo 1 > /proc/sys/net/ipv4/route/flush ifconfig eth0 txqueuelen 10000 ****************** 闪回数据库在data guard中的使用 ************************** 可用于暂时开发数据查询、測试。 測试完成再恢复备库到正常DG状态 1、物理备库须要先开启闪回数据库 检查数据库的flashback database模式和闪回日志存放的文件夹。 SQL> select flashback\_on from v$database; SQL> show parameter db\_recovery\_file 2、取消备库日志应用,并创建一个激活之前的还原点 SQL> select process,status fromv$managed\_standby; SQL> recover managed standby database cancel; SQL> create restore point test\_scn guarantee flashback database; 准备主数据库 3、归档当前日志文件。 在主数据库上,切换日志使得还原点(在步骤 1 中创建)的 SCN 将在物理备数据库上被归档: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; 当使用备重做日志文件时。这个步骤是必须的以确保数据库能被正确地闪回到还原点。 4、延迟指向将被激活的备的日志归档目的地。 SQL> ALTER SYSTEM SETLOG\_ARCHIVE\_DEST\_STATE\_2=DEFER; SQL> show parameter log\_archive\_dest\_state\_2 NAME TYPE VALUE ----------------------------------------------- ------------------------------ log\_archive\_dest\_state\_2 string DEFER 激活物理备数据库 在物理备数据库上。运行下述步骤: 5、激活物理备数据库并打开到open状态: SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE; SQL> ALTER DATABASE OPEN; 一旦备数据库已经被激活,你能执行报表工具或执行其他測试并激活几天甚至几周,独立于主数据库。 警告:当数据库被激活时。它不从主数据库接收重做数据库并不能提供灾难保护。建议至少有 两个物理备数据库參与配置,使得主数据库保持对数据丢失的保护。 恢复激活的数据库回到物理备数据库 在你完毕測试之后。你须要又一次与主数据库同步激活的数据库。在激活的数据库上运行 以下语句以高速闪回它到保障的还原点并将它又一次与主数据库同步: 1、备库运行 SQL> shutdown immediate SQL> startup mount SQL> flashback database to restore point test\_scn; SQL> alter database convert to physical standby; SQL> select status from v$instance; SQL> shutdown immediate SQL> startup mount SQL> recover managed standby database disconnect; 2、又一次同意归档到物理备数据库目的地 在主数据库上,运行以下语句来又一次同意归档到物理备数据库: SQL> ALTER SYSTEM SET LOG\_ARCHIVE\_DEST\_STATE\_2=ENABLE
徐铭
2024年5月29日 10:09
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期