wwwlehu6.vip乐虎官网三思笔记

【DG】[三思笔记]一步一步学DataGuard



它有诸八个名字,有人叫它dg,有人叫它多少卫士,有人叫它data
guard,在oracle的各项特色中它富有举足轻理的身价,它就是(掌声)………………….Oracle
Data
Guard。而对此本身而言,笔者必然要亲切的叫它:DG(注:首倘诺因为打着方便)。

重重未实际接触过dg的初学者或者会无形中觉得dg是一个备份复苏的工具。笔者要说的是,那种形容不完全错,dg拥有备份的遵从,有些景况下它甚至足以与primary数据库完全一模一样,不过它存在的指标并不仅仅是为了还原数据,应该说它的留存是为着
确定保证集团数目标高可用性,数据拥戴以及灾荒恢复生机 (注意这些字眼,灾殃复苏)
。dg提供周全的劳动包罗:创设,维护,管理以及监察和控制standby数据库 ,
确认保证数据安全 ,
管理员能够通过将部分操作转移到standby数据库执行的艺术革新数据库质量 。前面这一长串大家能够把它们了解成形容词,千万不要被其花哨的修饰所迷惑,要引发关键,要负有透明现象看本质的能力,假设没有那就要努力学习去拥有,上面笔者来举贰个例证,比如我们夸人会说它聪明勇敢善良等等,那一个就属于形容词,不重要,重点在于大家到底想形容这厮是老实人依然混蛋。然后再回去探望oracle对dg功用上的刻画,数据珍重和磨难复苏应该都足以总结为高可用性,那么大家能够清晰的定点dg的用途了,就是创设高可用的商号数据库应用环境。

一、 Data
Guard配置(Data Guard Configurations)

Data
Guard是一个聚众,由3个primary数据库(生产数据库)及三个或多个standby数据库(最多九个)组成。组成Data
Guard的数据库通过Oracle
Net连接,并且有或者分布于分化地段。只要各库之间能够相互通讯,它们的情理地点并没有何范围,至于操作系统就更不在乎了(有些意况下),只要永葆oracle就行了。

您即能够由此命令行方式管理primary数据库或standby数据库,也足以通过Data
Guard broker提供的专用命令行界面(D氯霉素GMuranoL),或然经过OEM图形化界面管理。

1. Primary
数据库

前方提到,Data
Guard包蕴1个primary数据库即被多数用到访问的生育数据库,该库即能够是单实例数据库,也能够是RAC。

2. Standby
数据库

Standby数据库是primary数据库的复制(事务上等同)。在同3个Data
Guard中您能够最多创建七个standby数据库。一旦创设达成,Data
Guard通过行使primary数据库的redo自动维护每2个standby数据库。Standby数据库同样即能够是单实例数据库,也能够是RAC结构。关于standby数据库,平时分两类:逻辑standby和物理standby,怎样区分,两类各有怎么着特色,如何搭建,那上边内容就是前边的章节主要介绍的,在此间呢三思先简单白话一下:

l
逻辑standby

就如你请人帮您版画画像,基本器官是都会有的,这点你放心,但是各器官地点啦大小啦肤色啦就不必然跟你自个儿一致了。

l
物理standby

就像是拿相机拍照,你长什么样出来的照片正是何许,眼睛相对在鼻子上头。或然说就好像您去照镜子,里外都以您,哇哈哈。具体到数据库正是不单文件的情理结构同样,甚至连块在磁盘上的积存地方都以一模一样的(暗许情形下)。

干什么会如此吗?那事就得从一道的体制说起了。逻辑standby是经过收到primary数据库的redo
log并转换到sql语句,然后在standby数据库上执行SQL语句(SQL
Apply)达成协同,物理standby是因此接受并使用primary数据库的redo
log以介质恢复的措施(Redo Apply)达成同台。

别的,不明白大家是还是不是注意到形容词上的底细:对于相机拍戏而言,有种傻瓜相机作用强大而操作方便,而对此摄影,尽管是最简便的画法,也亟需非凡多的演练才能左右。那几个细节是还是不是也印证逻辑standby比较物理standby须求操小编拥有越多的操作技能呢?

二、 Data
Guard服务(Data Guard Services)

l
REDO传输服务(Redo
Transport Services)

决定redo数据的传导到2个或多少个归档目标地。

l
Log应用服务(Log
Apply Services)

接纳redo数据到standby数据库,以保持与primary数据库的业务一致。redo数据即能够从standby数据库的归档文件读取,也可一向采纳standby
redo log文件(若是实时应用打开了的话)。

l
角色转换服务(Role
Transitions)

Dg中只有二种剧中人物:primary和standby。所谓角色转换正是让数据库在这八个脚色中切换,切换也分二种:switchover和failover

switchover:转换primary数据库与standby数据库。switchover能够保险不会丢掉数据。

failover:当primary数据库出现故障并且不可能被随即过来时,会调用failover将贰个standby数据库转换为新的primary数据库。在最大爱抚格局或最高可用性格局下,failover可以确认保证不会丢掉数据。

注:上述各概念简要了然即可,那里写的太简单,不要一字不苟,不然你会越看越繁杂,相关服务在前面章节将会有详实介绍,不仅有间接的讲述,还会有示范,再加上通俗的图纸,就算你一看不懂,再看自然懂:)

三、 Data
Guard体贴形式(Data Guard Protection Modes)

对于Data
Guard而言,其在世逻辑分外简单,好好活,做有含义的事,做黑多黑多有含义的事:)

出于它提供了二种数据爱惜的形式,大家又贴心的叫它:有三模:

l
最大有限援助(马克西姆um
protection):

那种格局可以保障绝无多少丢失。要落实这一步当然是有代价的,它须求有所的政工在付出前其redo不仅被写入到本地的online
redo log,还要同时提交到standby数据库的standby redo
log,并承认redo数据至少在1个standby数据库可用(假诺有五个的话),然后才会在primary数据库上提交。假若出现了如何故障导致standby数据库不可用的话,primary数据库会被shutdown。

l
最高品质(马克西姆um
performance):

那种格局提供在不影响primary数据库品质前提下最高级别的数据保护策略。事务能够随时提交,当前primary数据库的redo数据也要求至少写入一个standby数据库,然而那种写入能够是分裂台的。

假定互联网条件卓越的话,那种模式能够提供类似最高可用性的数据敬服而仅对primary数据库有微小的个性影响。

l
最高可用性(马克西姆um
availability):

那种情势提供在不影响primary数据库可用前提下最高级其他数据爱抚策略。其落到实处情势与最大怜惜情势类似,也是要求具有事情在付给前务必保持redo数据至少在三个standby数据库可用,可是与之不一样的是,如若出现故障导入不可能同时写入standby数据库redo
log,primary数据库并不会shutdown,而是自行转为最高品质格局,等standby数据库苏醒平常之后,它又会再自行转换来最高可用性情势。

最大保卫安全及最高可用性须求至少五个standby数据库redo数据被一起写入。两种格局都急需钦命LOG_ARCHIVE_DEST_n伊始化参数。LOG_ARCHIVE_DEST_n很关键,你看着很纯熟是吧,我保管,假设你完完整整学完dataguard,你会对它更熟。

四、 Data
Guard优点总计

l
横祸复苏及高可用性 

l
周详的数量爱护 

l
有效行使系统财富 

l
在高可用及高品质之间愈加灵敏的平衡机制 

l
故障自动物检疫查及缓解方案 

l
集中的易用的管理情势 

l
自动化的角色转换 

不时开篇的传授,相信我们早就看的出来,下面这几条都以形容词,看看就好,记住更好,跟人穷白活的时候常见能够用上:)

同3个Data
Guard配置包涵三个 Primary 数据库和最多八个 Standby 数据库。 Primary的创办就背着了,Standby数据库开始能够透过primary数据库的备份创立。一旦创建并计划成standby后,dg负责传输primary数据库redo
data到standby数据库,standby数据库通过使用接收到的redo
data保持与primary数据库的政工一致。

一、 Standby数据库类型

前章我们大约介绍了Standby数据库,并且也知晓其平时分为两类:物理standby和逻辑standby,同时也简要的讲述了其各自的特点,上边大家就有关地点拓展部分稍深入的钻研:

1.
物理standby

大家领略物理standby与primary数据库完全一模一样(暗中认可意况下,当然也得以差别,事无相对嘛),Dg通过redo应用维护物理standby数据库。平日在不使用恢复的时候,可以以read-only方式打开,假诺数据库钦赐了迅猛恢复生机区的话,也得以被一时的置为read-write形式。

l
Redo应用

大体standby通过采取归档文件或间接从standby系统中通过oracle恢复生机机制应用redo文件。恢复生机操作属于块对块的运用(不清楚?那就清楚成块复制,将redo中发出了变化的块复制到standby)。即使正在采用redo,数据库不可能被open。

Redo应用是情理standby的基本,务须要搞领悟其定义和规律,后续将有特别章节介绍。

l
Read-only模式

以read-only格局打开后,你能够在standby数据库执行查询,也许备份等操作(变相减轻primary数据库压力)。此时standby数据库如故能够一而再接收redo数据,不过并不会接触操作,直到数据库苏醒redo应用。也正是说read-only方式时无法实施redo应用,redo应用时数据库肯定处于未打开状态。如若要求的话,你能够在三种处境间转移,比如先采纳redo,然后read-only,然后切换数据库状态再利用redo,呵呵,人生就是循环,数据库也是一模一样。

l
Read-write模式

倘使以read-write形式打开,则standby数据库将暂停从primary数据库接收redo数据,并且临时失去横祸爱戴的职能。当然,以read-write方式打开也决不一无所能,比如您可能须要临时调试一些数量,不过又不便于在正式库操作,那就足以一时半刻将standby数据库置为read-write情势,操作完事后将数据库闪回到操作前的意况(闪回之后,Data
Guard会自动同步,不须求重建standby)。

l
物理standby特点

Ø
灾祸苏醒及高可用性

物理standby提供了3个宏观而且极高速的磨难苏醒及高可用性的消除方案。越发简单管理的switchover/failover剧中人物转换及最更短的计划内或陈设外停机时间。

Ø
数据爱护

应用物理standby数据库,Dg能够保险就算面对无法预料的磨难也能够不丢掉数据。后面也涉嫌物理standby是按照块对块的复制,因此对象、语句统统无关,primary数据库上有什么,物理standby也会有哪些。

Ø
分担primary数据库压力

由此将一些备份职责、仅查询的供给变换来大体standby,能够使得节约primary数据库的cpu以及i/o能源。

Ø
进步品质

大体standby所使用的redo应用技术利用最底部的回复机制,这种机制能够绕过sql级代码层,因此成效最高。

2.
逻辑standby

逻辑standby是逻辑上与primary数据库相同,结构得以不一致。逻辑standby通过sql应用与primary数据库保持一致,也正因如此,逻辑standby能够以read-write格局打开,你能够在别的时候访问逻辑standby数据库。同样有益也有弊,逻辑standby对于某些数据类型以及一些ddl,dml会有操作上的限定。

l
逻辑standby的特点:

除了那些之外上述物理standby中涉嫌的近乎魔难恢复生机,高可用性及数据珍贵等之外,还有下列一些表征:

Ø
有效的行使standby的硬件财富

除灾难苏醒外,逻辑standby数据库还可用来此外业务须要。比如通过在standby数据库创造额外的目录、物化视图等升高查询质量并满足一定业务要求。又比如成立新的schema(primary数据库并不设有)然后在这一个schema中实践ddl大概dml操作等。

Ø
分担primary数据库压力

逻辑standby数据库能够在更新表的时候照旧维持开拓状态,此时这个表可同时用于只读访问。那使得逻辑standby数据库可以同时用于数据保养和表格操作,从而将主数据库从那么些表格和查询职责中脱身出来,节约宝贵的
CPU和I/O能源。

Ø
平滑升级

比如跨版本升级啦,打小补丁啦等等,应该说利用的空中十分大,而带来的高危害却非常小(前提是假如你有着丰裕的技术实力。其它固然物理standby也能够落到实处部分升官操作,但万一跨平台的话只怕就非常小概,所以此项就不做为物理standby的风味列出了),笔者个人认为这是一种值的引进的在线的轮转的坦荡的升级换代格局。

二、 Data
Guard操作界面(形式)

做为oracle环境中一项尤其重庆大学的性状,oracle提供了各个格局搭建、操作、管理、维护Data
Guard配置,比如:

l
OEM(Oracle
Enterprise Manager) 

Orcale
EM提供了二个窗口化的保管方法,基本上你只需求点点鼠标就能一心dg的布局管理保障等操作(当然三思还是锲而不舍一步一步学rman中的观点,在可能的情事下,尽恐怕不借助视窗化的功能,所以那种操作办法不做详细介绍),其实质是调用oracle为dg专门提供的八个管理器:Data
Guard Broker来实施管理操作。

l
Sqlplus命令行情势

命令行格局的军管,本类别小说中重视选拔的方法。不要一听到命令行就被吓倒,data
guard的管制命令并不多,你只要求在脑袋瓜里多少挪出那么一丢丢地点用来记念就能够了。

l
D奇霉素G翼虎L(Data
Guard broker命令行方式)

便是Data
Guard Broker,可是是命令行方式的操作。

l
起先化参数文件

本身感到不可能把参数化参数视为一种操作方式,应该说,在此地,通过伊始化参数,越多是提供更灵敏的Data
Guard配置。

三、 Data
Guard
 的软硬件须要

一 、 硬件及操作系统需要

l
同一个Data
Gurid配置中的全体oracle数据库必须运维于同一的阳台。比如inter架构下的31个人linux系统能够与inter框架结构下的三十二位linux系统组成一组Data
Guard。其余,假如服务器都运转于3一人的话,六十五个人HP-UX也得以与三贰十一位HP-UX组成一组Data
Guard。

l
区别服务器的硬件配置能够分裂,比如cpu啦,内存啦,存款和储蓄设备啦,不过必须保险standby数据库服务器有丰硕的磁盘空间用来接受及运用redo数据。

l
primary数据库和standby数据库的操作系统必须一致,可是操作系统版本能够略有差别,比如(linux
as4&linux as5),primary数据库和standby数据库的目录路径也能够分化。

② 、 软件须要

l
Data
Guard是Oracle公司版的二个天性,精晓了呢,标准版是不支持地。

l
通过Data
Guard的SQL应用,能够兑现滚动升级服务器数据库版本(需求升级前数据库版本不低于10.1.0.3)。

l
同二个Data
Guard配置中保有数据库初阶化参数:COMPATIBLE的值必须一致。

l
P rimary数据库必须运转于归档格局,并且务必保管在primary数据库上开拓FO大切诺基CE
LOGGING,以幸免用户通过nologging等格局制止写redo造成相应的操作不能传输到standby数据库。

l
P rimary和standby数据库均可选择于单实例或RAC架构下
,并且同1个data guard配置可以勾兑使用逻辑standby和情理standby 。

l
Primary和standby数据库能够在同等台服务器,但须要小心各自的数据文件存放目录,制止重写或掩盖。

l
使用具有sysdba系统权限的用户管理primary和standby数据库。

l
建议数据库必须采纳同一的仓库储存架构。比如存款和储蓄采取ASM/OMF的话,那不分primarty或是standby也都亟待利用ASM/OMF。

其它还有很重庆大学学一年级点,注意各服务器的岁月设置,不要因为时区/时间设置的不一置造成同步上的题材

四、 分清某某REDO
LOGS(Online Redo Logs, Archived Redo Logs, Standby Redo Logs)

黑多黑多的redo,想必诸位早已晕头并吐过多次了吗。哎,说实话作者讲述的时候也很惨痛。那块涉及到中国和英国文之间的精通。小编又不能够过度白话,不然看完本身那篇作品再看其它有关文书档案的连锁概念大概你都不精晓人家在说怎么,那种误人子弟的工作笔者不能够干(大概干过,但主观愿望上必将是不想的),更何况小编也是看各乱杂七杂八文档被误过XXXXXXXXXXXXXXXXX次(X=9),深受其害,坚决不可能再让跟小编一样受尽苦楚,历经磨难的DDMM们因为看小编的文书档案被再度九16次啊玖拾六遍。

但是已到关键时刻,此处不把redo混清楚,后头就得被redo混了,所以那里自身要用尽本身全方位的唾沫+最近截止笔者拥有已成体系的认识再给大家浅显的白话二遍。注:基础概念仅一笔带过,水太大了也倒霉,要响应胡书记号召,书写节约型笔记。

REDO:普通话直译是重做,与UNDO对应(天哪又扯出个概念,你看不见作者看不见作者看不见小编)。重做如何?为何要重做呢?首先重做是oracle对操作的拍卖体制,我们操作数据(增册改)并非一向反映到数据文件,而是先被记录(就是online
redo
log喽),等时机合适的时候,再由相应的进度操作提交到数据文件(详细可见:
数据写进程中各样触发条件及逻辑)。你是或不是想说只要把拥有的online
redo
logs都保留下去,不就也便是拥有了数据库做过的保有操作了呢?en,小编得以10分负总责的报告你,你说的对,oracle跟你想到一块去了还要也将其落到实处了,那正是archived
redo logs,简称archive log即归档日志。大家再回来看Data
Guard,由于standby数据库的数据一般都源于于primary数据库,怎么来的吧,通过奥迪Q3FS进度接收primary数据库的redo,保存在本土,便是Standby
redo
logs喽,然后standby数据库的AHighlanderCn再将其写入归档,正是standby服务器的archived
redo
logs。保存之后数据又是怎么转移的吧,二种艺术,物理standby通过redo应用,逻辑standby通过sql应用,不管是哪类采用,应用的是怎么着吗?是redo
log中的内容(暗中同意情形下利用archived redo
logs,如若打开了实时应用,则直接从standby redo
logs中读取),至于哪些选取,那正是redo应用和sql应用机制的事务了(也许后头我们会深深聊一聊这一个话题,很复杂也很有趣)。

针对上述剧情大家试着计算一下,看看是还是不是得出有个别结论:

对于primary数据库和逻辑standby数据库,online
redo log文件肯定是必须的,而对于物理standby是不是还亟需redo
log呢?终究物理standby平时不会有写操作,所以物理standby应该不会生成有redo数据。为确认保障数据库的作业一致性必然须求有归档,也便是说不管primary或standby都必须运转于归档形式。

standby
redo
logs是standby数据库特有的文书(假诺安顿了的话),就自笔者的性子比如文件存款和储蓄个性,配置特点等等都与online
redo logs相当类似,不过它存款和储蓄的是吸收接纳自primary数据库的redo数据,而online
redo logs中著录的是本机中的操作记录。

上边包车型大巴讲述我们尽量意会,能够领略最佳,驾驭不了也没涉及,笔者始终认为,只要坚持不渝的上学下去,总会大功告成。上面进入实战章节,先来个不难的,创设物理standby。

一、 准备工作 

任凭物理standby依然逻辑standby,其开首成立都以要依靠primary数据库,因为这一个准备工作中最要害的一有个别,正是对primary数据库的配置。

1、 打开Forced
Logging模式

将primary数据库置为FO途锐CE
LOGGING方式。通过下列语句:

SQL>
alter database force logging; 

提示:关于FORCE
LOGGING

或是大家精通有一对DDL语句能够透过点名NOLOGGING子句的法子制止写redo
log(指标是增高速度,某个时候真的有效),钦命数据库为FOLANDCE
LOGGING格局后,数据库将会记录除一时表空间或临时回滚段外所有的操作而忽视类似NOLOGGING之类的钦命参数。要是在推行force
logging时有nologging之类的讲话在履行,则force
logging会等待直到那类语句全体履行。FO奥迪Q5CE
LOGGING是做为固定参数保存在支配文件中,由此其不受重启之类操作的熏陶(只实行一回即可),如若想收回,能够因此alter
database no force logging语句关闭强制记录。

② 、 创制密码文件(如若不设有的话)

急需小心的是,同2个Data
Guard配置中享有数据库必须都抱有独立的密码文件,并且必须确认保证同三个Data
Guard配置中具备数据库服务器的SYS用户拥有同样密码以保证redo数据的顺畅传输,因为redo传输服务通过验证的互联网会话来传输redo数据,而对话使用含有在密码文件中的SYS用户密码来申明。

3、 配置Standby
Redo Log

对此最大保证和最高可用性情势,Standby数据库必须配备standby
redo log,并且oracle推荐全体数据库都选择LGWR
ASYNC形式传输,当然你今后恐怕还不驾驭LGWR
ASYNC是怎么着难题,没提到,你连忙就会掌握了。

Oracle建议您在创建standby时就考虑standby
redolog配置的难题。standby redologs与online
redologs卓殊相近,应该说两者只是服务对象不相同,别的参数属性甚至操作的命令格式差不多都一样,你在统一筹划standby
redologs的时候完全可以借鉴创造online
redologs的思绪,比如四个文本组啦,每组五个文本冗余之类的。除些之外呢,oracle提供了有些专业的建议如下:

l
确认保障standby
redo log的文件大小与primary数据库online redo log文件大小相同。

以此很好精晓的吧,正是为了接收和采纳方便嘛。

l
成立适当的日志组

相似而言,standby
redo日志文件组数要比primary数据库的online
redo日志文件组数至少多2个。推荐standby
redo日志组数量依照primary数据库的线程数(那里的线程数能够知晓为rac结构中的rac节点数)。

有叁个引进的公式能够做参考:(每线程的日志组数+1)*最大线程数

诸如primary数据库有七个线程,各样线程分配两组日志,则standby日志组数提议为6组,使用这几个公式能够减低primary数据库实例LGW牧马人进度锁住的可能性。

提示:逻辑standby数据库有恐怕须要视工作量充实越多的standby
redo log文件(或追加归档进程),因为逻辑standby须要同时写online redo
log文件。

Standby
redo log的操作方法与online redo
log大致一样,只但是在开立或删除时需求多钦赐二个standby关键字,例如添加:

SQL>
alter database add standby logfile group 4 (‘e:ora10goradatajsspdgSTANDBYRD0 1 .LOG’)
size 20 M; 

去除也一致简单:

SQL>
alter database drop standby logfile group 4; 

此外,从可信性方面考虑,建议在primary数据库也创立standby
redologs,那样只要产生切换,不会影响primary做为standby的健康运转。

声明standby
redo log文件组是不是中标创设

例如:

SQL>
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM
V$STANDBY_LOG; 

肆 、 设置伊始化参数

对此primary数据库,供给定义多少个primary角色的初始化参数控制redo传输服务,还有多少个附加的standby剧中人物的参数供给添加以控制接收redo数据库并选择(switchover/failover后primary/standby剧中人物也许交流,所以提出对于两类角色相关的 伊始化参数都进展示公布局)。

下列参数为primary剧中人物相关的初阶化参数:

DB_NAME 

专注保持同二个Data
Guard中兼有数据库DB_NAME相同。

例如:DB_NAME=jssweb

DB_UNIQUE_NAME 

为每三个数据库内定3个唯一的称呼,该参数一经钦点不会再发生变化,除非您主动修改它。

例如:DB_UNIQUE_NAME=jssweb

LOG_ARCHIVE_CONFIG 

该参数通过DG_CONFIG属性罗列同一个Data
Guard中有所DB_UNIQUE_NAME(含primary db及standby db),以逗号分隔

例如:LOG_ARCHIVE_CONFIG=’DB_CONFIG=(jssweb,jsspdg)’

CONTROL_FILES 

没啥说的,控制文件所在路径。

LOG_ARCHIVE_DEST_n 

归档文件的生成路径
。该参数非凡主要,并且属性和子参数也特意多(那里不一一列举,前边用到时独自讲解尽管您黑好奇,提议间接查询oracle官方文书档案。Data
guard白皮书第一4章专门介绍了该参数各属性及子参数的效率和设置)。 例如:

LOG_ARCHIVE_DEST_1= 

‘LOCATION=E:ora10goradatajssweb VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jssweb’ 

LOG_ARCHIVE_DEST_STATE_n 

钦定参数值为ENABLE,允许redo传输服务传输redo数据到钦赐的门径。
该参数共持有五个属性值,效率各不一样。

REMOTE_LOGIN_PASSWORDFILE 

推介设置参数值为EXCLUSIVE可能SHARED,注意保管平等Data
Guard配置中具有db服务器sys密码相同。

LOG_ARCHIVE_FORMAT 

点名归档文件格式。

LOG_ARCHIVE_MAX_PRODUCESSES 

点名归档进度的数目(1-30),私下认可值平日是4

以下参数为standby角色相关的参数,建议在Primary数据库
的起头化参数中也展开 设置,那样在role
transition后(Primary转为Standby)也能健康运转:

FAL_SERVER 

钦赐1个数据库SID,经常该库为primary剧中人物。

例如:FAL_SERVER=jssweb

FAL_CLIENT 

点名二个数据库SID,平时该库为standby剧中人物。

例如:FAL_CLIENT=jsspdg

提示:FAL是Fetch
Archived Log的缩写

DB_FILE_NAME_CONVERT 

在做duplicate复制和传导表空间的时候那类参数讲过不少遍,该参数及上述内容中同名参数功用,格式等完全相同。

LOG_FILE_NAME_CONVERT 

同上

STANDBY_FILE_MANAGEMENT 

假设primary数据库数据文件发生修改(如新建,重命名等)则依照本参数的安装在standby中做相应修改。设为AUTO表示自动管理。设为MANUAL表示供给手工业管理。

例如:STANDBY_FILE_MANAGEMENT=AUTO

只顾:下边列举的那一个参数仅只是对于primary/standby两剧中人物恐怕会相关的参数,还有一部分基础性参数比如*_dest,*_size等数据库相关的参数在切切实实配置时也急需基于实际景况做出适度修改。

五 、 确认保障数据库处于归档情势

SQL>
archive log list; 

数据库日志方式存档格局

自动存档
启用

……. 

若是当前primary数据库并未处于归档形式,可由此下列命令将数据库置为归档方式:

SQL>
STARTUP MOUNT; 

SQL>
ALTER DATABASE ARCHIVELOG; 

SQL>
ALTER DATABASE OPEN; 

 

手把手** 
创建
 **物理standby

① 、 创建备份(手工复制数据文件或透过MuranoMAN)
—primary库操作

二 、 创立控制文件
–primary库操作

因而下列语句为standby数据库成立控制文件

SQL>
alter database create standby controlfile as
‘d:backupjsspdg01.ctl’; 

留神啊,控制文件一般需求有多份,你要么手工业将上述文件复制几份,要么用命令多创建多少个出来。此外,创建完控制文件之后到standby数据库成立完结那段时日内,要有限援救primary数据库不再有结构性的转移(比如扩张表空间等等),不然primary和standby同步时会有非凡态。

三 、 创设起头化参数文件

l
成立客户端初阶化参数文件

例如:

SQL>
create pfile=’d:backupinitjsspdg.ora’ from
spfile; 

l
修改开头化参数文件中的参数

根据真实情形修改吧,注意primary和standby分歧剧中人物的性格配置,注意文件路径。

肆 、 复制文件到standby服务器

足足三有的:数据文件,控制文件,修改过的开首化参数文件,注意路径。

5、 配置standby数据库

万一你看过三思在此以前”一步一步学rman”类别,看过”duplicate复制数据库”,或看过”传输表空间复制数据”体系,那么对于开创一个新的数据库应该特别熟知了,上边再不难描述一出手续:

1) .创立新的OracleService(windows环境下须求)。

wwwlehu6.vip乐虎官网,2) .成立密码文件,注意保持密码与primary数据库一致。

3) .配置监听并运维

4) .修改primary和standby的tnsnames.ora,各自扩展对应的Net
Service Name。

5) .创战胜务器端的初叶化文件

6、 启动standby

专注啊,咱们前边说过的,物理standby极少情状下能够以read-write格局打开,某个意况下能够以read-only形式打开,所以暗中同意情状下,加载到mount状态即可。

SQL>
STARTUP MOUNT; 

启动redo应用

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM
SESSION; 

启航实时应用

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE
DISCONNECT FROM SESSION; 

提示:disconnect
from session
 子句并非必须,该子句用于钦定运维完应用后活动退出到命令操作符前,就算不钦命的话,当前session就会直接停留处理redo应用,借使想做此外操作,就只可以新建3个接连。

7、 停止standby

好端端情形下,大家停止也应当是先截至redo应用,能够通过下列语句:

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
CALCEL; 

然后再甘休standby数据库

SQL>
SHUTDOWN IMMEDIATE; 

自然你非要直接shutdown也没难点,dg本来便是用来容灾的,别说你生停standby,正是一直拔电源也不怕。

 

 

为了最大的下落硬件需要,此处创设的data
guard处于相同台机械,但其成立进程与多机并无异。做为演示用的言传身教充裕了,我们分两等级配置,分别是安顿primary数据库和配置standby数据库,如下:

一、 Primary数据库配置及相关操作

① 、 确认主库处于归档方式

SQL>
archive log list; 

数据库日志方式存档形式

自动存档
启用

存档终点
E:ora10goradatajssweb

最早的同步日志种类148

下二个存档日志类别150

此时此刻日记序列150

SQL> 

② 、 将primary数据库置为FO奥德赛CE
LOGGING情势。通过下列语句:

SQL>
alter database force logging; 

数据库已变更。

③ 、 创制standby数据库控制文件

SQL>
alter database create standby controlfile as
‘d:backupjsspdg01.ctl’; 

数据库已改变。

肆 、 创造primary数据库客户端起初化参数文件

注:主要此处修改项较多,为了有利于,大家先是制造并修改pfile,然后再通过pfile重建spfile,你当然也能够经过alter
system set命令直接改动spfile内容。

SQL>
create pfile from
spfile; 

文本已创设。

将该初阶化参数文件复制一份,做为standby数据库的客户端发轫化参数文件

SQL>
host copy e:ora10gproduct10.2.0db_1databaseinitjssweb.ora
d:backupinitjsspdg.ora 

已复制 1
个文件。

SQL> 

修改客户端伊始化参数文件,扩张下列内容

DB_UNIQUE_NAME=jssweb 

LOG_ARCHIVE_CONFIG=’DG_CONFIG=(jssweb,jsspdg)’ 

LOG_ARCHIVE_DEST_1=’LOCATION=E:ora10goradatajssweb
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=jssweb’ 

LOG_ARCHIVE_DEST_2=’SERVICE=jsspdg
LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=jsspdg’ 

LOG_ARCHIVE_DEST_STATE_1=ENABLE 

LOG_ARCHIVE_DEST_STATE_2=ENABLE 

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 

#——–配置standby剧中人物的参数用于剧中人物转换

FAL_SERVER=jss pdg 

FAL_CLIENT=jss web 

DB_FILE_NAME_CONVERT=’oradatajsspdg’,’oradatajssweb’ 

LOG_FILE_NAME_CONVERT=’oradatajsspdg’,’ oradata jssweb’ 

STANDBY_FILE_MANAGEMENT=AUTO 

通过pfile重建spfile

SQL>
shutdown immediate 

… 

SQL>
create spfile from pfile=’initjssweb.ora’; 

文本已创制。

五 、 复制数据文件到standby服务器(情势体系,不详述)

小心须要复制全数数据文件,备份的操纵文件及客户端起先化参数文件

陆 、 配置listener及net
service names(格局三种,不详述)。

完之后重启listener:

E:ora10g>lsnrctl
stop 

E:ora10g>lsnrctl
start 

由此tnsping测试tnsnames是不是科学有效:

E:ora10g>tnsping
jssweb 

… 

Attempting
to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = jss)(PORT =
1521)) (CONNECT_ 

DATA
= (SERVER = DEDICATED) (SERVICE_NAME =
jssweb))) 

OK
(30 毫秒)

E:ora10g>tnsping
jsspdg 

… 

Attempting
to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = jss)(PORT =
1521)) (CONNECT_ 

DATA
= (SERVER = DEDICATED) (SERVICE_NAME =
jsspdg))) 

OK
(10 毫秒)

二、 Standby数据库配置及连锁操作

① 、 通过ORADIM创设新的OracleService

贰 、 成立密码文件,注意保持sys密码与primary数据库一致。

E:ora10g>orapwd
file=e:ora10gproduct10.2.0db_1databasePWDjsspdg 

.ora
password=verysafe entries=30 

三 、 创设目录

E:ora10gproduct10.2.0adminjsspdg>mkdir
adump 

四 、 复制文件,不做过多描述

⑤ 、 修改开端化参数文件

追加下列参数

db_unique_name=jsspdg 

LOG_ARCHIVE_CONFIG=’DG_CONFIG=(jssweb,jsspdg)’ 

DB_FILE_NAME_CONVERT=’oradatajssweb’,’oradatajsspdg’ 

LOG_FILE_NAME_CONVERT=’oradatajssweb’,’oradatajsspdg’ 

LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc 

LOG_ARCHIVE_DEST_1=’LOCATION=E:ora10goradatajsspdg
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=jsspdg’ 

LOG_ARCHIVE_DEST_STATE_1=ENABLE 

#—下列参数用于剧中人物切换

LOG_ARCHIVE_DEST_2=’SERVICE=jssweb
LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=jssweb’ 

LOG_ARCHIVE_DEST_STATE_2=ENABLE 

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 

FAL_SERVER=jssweb 

FAL_CLIENT=jsspdg 

STANDBY_FILE_MANAGEMENT=AUTO 

瞩目同时修改*_dest的路径。

通过该pfile创建spfile

SQL>
create spfile from
pfile=’D:backupinitjsspdg.ora’; 

文本已开立。

6、 启动standby到mount

SQL>
startup mount; 

ORACLE
例程已经运营。

Total
System Global Area 167772160 bytes 

Fixed
Size 1289484 bytes 

Variable
Size 62915316 bytes 

Database
Buffers 96468992 bytes 

Redo
Buffers 7098368 bytes 

数据库装载达成。

7、 启动redo应用

SQL>
alter database recover managed standby database disconnect from
session; 

数据库已改变。

捌 、 查看同步景况

先是连接到primary数据库

SQL>
show parameter instance_name; 

NAME
TYPE VALUE 


———– —————————— 

instance_name
string jssweb 

SQL>
alter system switch logfile; 

系统已变更。

SQL>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

51 

连接到standby数据库

SQL>
show parameter instance_name; 

NAME
TYPE VALUE 


———– —————————— 

instance_name
string jsspdg 

SQL>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

51 

玖 、 暂停应用

通过下列语句暂停redo应用。

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
CANCEL; 

数据库已转移。

留意,此时只是近日redo应用,并不是甘休Standby数据库,standby仍会维持接收只可是不会再利用接收到的存档,直到你重新运营redo应用停止。

哈哈,成功鸟!以后你是否想清楚怎么把standby变成primary呢?接着往下看~~~~~

第3节的时候我们就涉嫌了角色切换,大家也听别人讲了其操作简便但用处广泛,同时大家也估摸其属于primary与standby之间的竞相,那么在primary和standby数据库(之一)上都亟需有操作,并且切换又分了:switchover和failover,前者是无毒切换,不会丢掉数据,而后者则有恐怕会丢掉数据,并且切换后原primary数据库也不再是该data
guard配置的一片段了.针对区别standby(逻辑或物理)的处理情势也不完全一样。en,内容也挺多地。大家仍旧先差不多驾驭下概念,然后再通超过实际战去印证。

剧中人物转换前的准备工作

l
检查各数据库的开端化参数,首要确认对两样角色相关的起初化参数都进展了正确的配备。

l
确认保障恐怕变成primary数据库的standby服务器已经处在archivelog模式。

l
确认保障standby数据库的暂时文件存在并合营primary数据库的一时文件

l
确认保障standby数据库的RAC实例唯有多个地处open状态。(对于rac结构的standby数据库,在角色转换时只好有二个实例startup。其余rac实例必须统统shutdown,待剧中人物转换截止后再startup)

Switchover :

无损转换,平常是用户手动触发或许有陈设的让其活动触发,比如硬件升级啦,软件升级啦之类的。通常它给你带来的工作量特别小而且都以可预测的。其实施分八个级次,第三步,primary数据库转换为standby剧中人物,第一步,standby数据库(之一)转换为primary脚色,primary和standby只是简单的剧中人物交流,那也作证了大家日前关于剧中人物转换是primary/standby互动的测度。

Failover :

不得预见原因造成primary数据库故障并且长时间内无法上涨就须要failover。如若是那种切换那您将要小心点了,有只怕只是虚惊一场,甚至连你可能损失的脑细胞的数据都能预估,但假使运气倒霉又从不完备的备份苏醒策略而且primary数据毫无处于最大数据敬爱或最高可用性方式地话,黑黑,哭是没用地,表太难熬了,来,让三思GG安慰安慰你,那种情状下吧丢失数据有可能是在所难免的,并且只要其故障不能修复,那它甚至连高速修复成为standby的机遇也都失去了啊,咦,你脑门怎么好像在往外冒水,难道是强效净肤液,你的脸也突然好白皙哟~~~~

在实践failover在此以前,尽恐怕将原primary数据库的可用redo都复制到standby数据库。

留意,假如要转移角色的standby处于maximum
protection形式,供给你首先将其切换为maximum
performance形式(什么什么,你不亮堂怎么变换情势?oooo,对对,大家还尚未操作过,这块并不复杂,接下去会经过专门章节斟酌),那里先提供表露一下,转换standby数据库到MAXIMIZE
PEXC60FO牧马人MANCE执行下列SQL即可:

SQL>
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE
PERFORMANCE; 

等standby切换为新的primary之后,你能够再轻易变动数据库的爱护形式。

你是还是不是有疑点关于为什么待切换剧中人物的standby不可能处于maximum
protection方式吗?这么些其实很好理解,大家在率先节学习二种尊崇情势的时候就介绍过其各自的表征,脑袋瓜好使的同室应该还有印象,maximum
protection格局供给保险绝无多少丢失,由此其对于提交业务对应的redo数据一致性要求尤其高,此外,要是处在maximum
protection格局的primary数据库依旧与standby数据库有多少传输,此时alter
database语句更改standby数据库保养形式会失利,那也是由maximum
protection形式特点决定的。

上边分别演示switchover和failover的历程:

一、 物理standby的Switchover

小心操作步骤的顺序,很要紧的哟。

① 、 检查是否协助switchover操作
–primary数据库操作

登陆primary数据库,查询v$database视图的switchover_status列。

E:ora10g>set
oracle_sid=jssweb 

E:ora10g>sqlplus
“/ as sysdba” 

SQL*Plus:
Release 10.2.0.3.0 – Production on 星期四 12月 13 09:41:29 2007

Copyright
(c) 1982, 2006, Oracle. All Rights Reserved. 

已连接。

SQL>
select
switchover_status from v$database;
 

SWITCHOVER_STATUS 

——————– 

TO
STANDBY 

万一该列值为”TO
STANDBY”则象征primary数据库援助转换为standby角色,不然的话你就须求再行检查一下Data
Guard配置,比如看看LOG_ARCHIVE_DEST_n之类参数值是还是不是正确有效等等。

贰 、 运转switchover
–primary数据库操作

第②将primary转换为standby的角色,通过下列语句:

SQL>
alter
database commit to switchover to physical
standby;
 

数据库已变更。

语句执行完结后,primary数据库将会转移为standby数据库,并自动备份控制文件到trace。

③ 、 重运行到mount
–原primary数据库操作

SQL>
shutdown
immediate
 

ORA-01507:
未装载数据库

ORACLE
例程已经倒闭。

SQL>
startup
mount
 

ORACLE
例程已经起步。

Total
System Global Area 167772160 bytes 

Fixed
Size 1289484 bytes 

Variable
Size 104858356 bytes 

Database
Buffers 54525952 bytes 

Redo
Buffers 7098368 bytes 

数据库装载完毕。

④ 、 检查是还是不是支持switchover操作
–待转换standby数据库操作

待原primary切换为standby剧中人物之后,检查待转换的standby数据库switchover_status列,看看是或不是扶助剧中人物转换。

E:ora10g>set
oracle_sid=jsspdg 

E:ora10g>sqlplus
” / as sysdba” 

SQL*Plus:
Release 10.2.0.3.0 – Production on 星期四 12月 13 10:08:15 2007

Copyright
(c) 1982, 2006, Oracle. All Rights Reserved. 

已连接。

SQL>
select switchover_status from v$database; 

SWITCHOVER_STATUS 

——————– 

TO
PRIMARY 

SQL> 

那时候待转换standby数据库switchover_status列值应该是”TO_P智跑IMA安德拉Y”,如再不检查其初阶化参数文件中的设置,提醒一下,比着原primary数据库的开首化参数改改。

⑤ 、 转换角色到primary
–待转换standby数据库操作

透过下列语句转换standby到primary剧中人物:

SQL>
alter database commit to switchover to
primary; 

数据库已改变。

在意:待转换的物理standby能够处于mount形式或open
read only格局,但无法处于open read write方式。

六 、 完结更换,打开新的primary数据库

SQL>
alter database open; 

数据库已改变。

注:假如数据库处于open
read-only形式以来,需求先shutdown然后直接startup即可。

柒 、 验证一下

新的primary数据库

SQL>
show parameter db_unique 

NAME
TYPE VALUE 


———– —————————— 

db_unique_name
string jsspdg 

SQL>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

67 

SQL>
alter
system switch logfile;
 

系统已转移。

SQL>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

68 

新的standby数据库

SQL>
show parameter db_unique 

NAME
TYPE VALUE 


———– —————————— 

db_unique_name
string jssweb 

SQL>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

68 

转移成功。

物理standby的failover

留意几点: 

l
failover之后,原primary数据库暗中同意不再是data
guard配置的一局地。 

l
多数气象下,别的逻辑/物理standby数据库不直接参预failover的经过,由此那一个数据库不需要做任何操作。 

l
有个别情形下,新的primary数据库配置之后,须要再度创建别的具有的standby数据库。 

除此以外,假若待转换剧中人物的standby处于maximum
protection或maximum
availability形式以来,归档日志应该是连连存在的,那种状态下您能够平昔从第 3 步执行,不然提议你按照操作步骤从第贰步开首执行。 

诚如景况下failover都是表示primary数据库瘫痪,最起码也是起不来了,由此那体系型的切换基本上不须求primary数据库做什么操作。所以下列步骤中只要有提到primary和standby执行的,只是提议您只要primary还足以用,那就实施一下,就算它能用你却不进行,也没提到,不影响standby数据库的切换:) 

一 、 检查归档文件是不是延续

查询待转换standby数据库的V$A中华VC生殖器疱疹E_GAP视图,确认归档文件是还是不是连接:

SQL>
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM
V$ARCHIVE_GAP; 

未选定行

假设回去的有记录,依照列出的记录号复制对应的归档文件到待转换的standby服务器。这一步卓殊首要,必须保障全数已转移的归档文件均已存在于standby服务器,不然恐怕会数据分裂导致转换时报错。文件复制之后,通过下列命令将其参预数据字典:

SQL>
ALTER DATABASE REGISTER PHYSICAL LOGFILE
‘filespec1’; 

贰 、 检查归档文件是还是不是完整

分别在primary/standby执行下列语句:

SQL>
select distinct thread#,max(sequence#) over(partition by thread#) a
from v$archived_log; 

该语句取妥帖前数据库各线程已归档文件最大序号,若是primary与standby最大序号不均等,必须将多出的序号对应的归档文件复制到待转换的standby服务器。不过既然是failover,有大概primary数据库此时一度黔驴技穷打开,甚至无法访问,那你只好任其自然喽,三思在那边替你默念:苍天啊,大地啊,哪路的神明二妹能来保佑小编们不丢数据呀!

3、 启动failover

实施下列语句:

SQL>
alter database recover managed standby database finish
force; 

数据库已变更。

FO奔驰G级CE关键字将会结束当前运动的汉兰达FS过程,以便及时实施failover。

剩余的手续就与前方switchover很相像了

四 、 切换物理standby剧中人物为primary

SQL>
alter database commit to switchover to
primary; 

数据库已改成。

五 、 运营新的primary数据库。

若是当前数据库已mount,直接open即可,假使处在read-only形式,须要首先shutdown
immediate,然后再向来startup。

SQL>
alter database open; 

数据库已改成。

脚色转换工作实现。剩下的是补救措施(针对原primary数据库),由于此时primary数据库已经不再是data
guard配置的一有的,大家要求做的正是尝尝看看是不是恢复生机原primary数据库,将其改造为新的standby服务器。具体操作格局得以分为二类:1.重建
2.备份苏醒。所关联的技巧前面包车型地铁泛滥成灾作品中均有关系,此处不再赘述。

稠人广众没有固定的骨干,能够留下永恒的反是那些默默的小剧中人物,这一节出场的都以重量级选手,它们即便不是中流砥柱,但她俩比主演更要紧(有时候)。

一、 READ
ONLY/W中华VITE形式打开物理STANDBY

前面提到关于物理standby能够使得分担primary数据库压力,进步能源利用,实际上说的正是其一。以read
only或read
write形式打开物理standby,你能够变换一些询问任何啦,备份啦之类的操作到standby数据库,以那种艺术来分担部分primary的压力。上面我们来演示一下,怎么样切换standby数据库的开辟形式,其实,非常不难。例如,以Read-only情势打开物理standby:

此处要分两种情形:

1) .standby数据库处于shutdown状态

直接startup即可。

SQL>
startup 

ORACLE
例程已经起步。

…… 

2) .standby数据库处于redo应用状态。

第②打消redo应用:

SQL>
alter database recover managed standby database
cancel; 

数据库已改变。

下一场再打开数据库

SQL>
alter database open ; 

数据库已改成。

晋升:open的时候不需求附加read
only子句,oracle会依照决定文件判断是或不是是物理standby,从而自动运营到read
only形式,直接startup也是同理。

3) .若是想从open状态再切换回redo应用状态,并不必要shutdown,直接启用redo应用即可,例如:

SQL>
select status from v$instance; 

STATUS 

———— 

OPEN 

SQL>
alter
database recover managed standby database disconnect from
session;
 

数据库已转移。

SQL>
select status from v$instance; 

STATUS 

———— 

MOUNTED 

正如演示中我们所观察的,操作有一丢丢纵横交叉,并且由于只读打开时就不能够利用,尽管大家能够查询,可是查询的结果确是与primary不一致步的,那点大大下跌了物理standby做报表服务分担主库压力的可能,对于那点吗,大家有多个缓解方案:

① 、 改用逻辑standby,由于逻辑standby是打开状态下的实时应用,由此数据同步应该是没啥难题了(只要
primary的数据类型和操作逻辑standby都能被协助),当然逻辑standby有逻辑standby 的题材,那一个看完前面包车型地铁逻辑standby相关章节,您就知晓了。 

贰 、 据称oracle11g周全改进了物理standby,最优秀的本性正是在read
only打开情势下,能够边接收边应用了(那下不用担心查询的多少比不上时的标题了),您能够设想升级您的数据库到最新版本,当然新本子也有新本子的题材,比如各样从未暴表露来的bug,想想就揪心是或不是:)

为此您看,做技术其实并不困难,难的是做决择。这么引申过来看一看,总经理们不易于呀,怪不得越大的公司主脑袋上头发越少呢,为了保持本人到底卫生深远的发型,小编小编,笔者恐怕采纳干技术吗~~~~

管制影响standby的primary数据库事件

为幸免大概的谬误,你必须明白primary数据库的一点事件或然影响standby数据库,并且询问怎么着处理。

少数景况下,primary数据库的一些改动会活动通过redo数据传播到standby数据库,由此不必要在standby数据库做额外的操作,而一些景况,则须求您手工业调整。

下列事件会由redo传输服务及redo应用自动处理,不须要dba的干预,分别是:

l
ALTEENVISIONDATABASE ENABLE|DISABLE THREAD
语句(重要针对rac环境,如今中央已废弃,因为ENABLE|DISABLE
INSTANCE子句完全能够达成类似功用)

l
修改表空间状态(例如read-write到read-only,online到offline)

l
创造修改删除表空间或数据文件(即使起先化参数STANDBY_FILE_MANAGEMENT被安装为AUTO的话,这一点在前方第2章的时候关系过)

下列工作则必要dba手工业干预:

1、 增长修改删除数据文件或表空间

近来提到了,起始化参数STANDBY_FILE_MANAGEMENT可以控制是不是自动将primary数据库扩张删除表空间、数据文件的更动继承到standby。

l
假如该参数值设置为auto,则自动创造。

l
要是设置为manual,则供给手工业复制新创立的数据文件到standby服务器。

但是须要专注一点,假如数据文件是从其它数据库复制而来(比如通过tts),则不管STANDBY_FILE_MANAGEMENT参数值如何设置,都必须同时复制到standby数据库,并小心要修改standby数据库的决定文件。

上边分别通过示范演示STANDBY_FILE_MANAGEMENT参数值为AUTO/MANUAL值时扩大及删除数据文件时的情况:

1) .STANDBY_FILE_MANAGEMENT设置为AUTO,扩大及删除表空间和数据文件

咱俩先来看看起头化参数的装置:
—-standby数据库操作

SQL>
show parameter standby_file 

NAME
TYPE VALUE 


———– —————————— 

standby_file_management
string AUTO 

A) .扩大新的表空间
–primary数据库操作

SQL>
create tablespace mytmp datafile ‘e:ora10goradatajsswebmytmp01.dbf’ size
20m; 

表空间已制造。

检查刚添加的数据文件

SQL>
select name from v$datafile; 

NAME 

———————————————– 

E:ORA10GORADATAJSSWEBSYSTEM01.DBF 

E:ORA10GORADATAJSSWEBUNDOTBS01.DBF 

E:ORA10GORADATAJSSWEBSYSAUX01.DBF 

E:ORA10GORADATAJSSWEBUSERS01.DBF 

E:ORA10GORADATAJSSWEBWEBTBS01.DBF 

E:ORA10GORADATAJSSWEBMYTMP01.DBF 

已选择6行。

切换日志

SQL>
alter system switch logfile; 

系统已变更。

B) .验证standby库
–standby数据库操作

SQL>
select name from v$datafile; 

NAME 

—————————————————- 

E:ORA10GORADATAJSSPDGSYSTEM01.DBF 

E:ORA10GORADATAJSSPDGUNDOTBS01.DBF 

E:ORA10GORADATAJSSPDGSYSAUX01.DBF 

E:ORA10GORADATAJSSPDGUSERS01.DBF 

E:ORA10GORADATAJSSPDGWEBTBS01.DBF 

E:ORA10GORADATAJSSPDGMYTMP01.DBF 

已选择6行。

SQL>
select name from v$tablespace; 

NAME 

—————————— 

SYSTEM 

UNDOTBS1 

SYSAUX 

TEMP 

USERS 

WEBTBS 

MYTMP 

已选择7行。

能够看来,表空间和数据文件已经自行创制,你是还是不是意外为何数据文件路径自动变成了jsspdg,赫赫,因为我们设置了db_file_name_convert嘛。

C) .删除表空间
–primary数据库操作

SQL>
drop tablespace mytmp including contents and
datafiles; 

表空间已删除。

SQL>
select name from v$datafile; 

NAME 

————————————————– 

E:ORA10GORADATAJSSWEBSYSTEM01.DBF 

E:ORA10GORADATAJSSWEBUNDOTBS01.DBF 

E:ORA10GORADATAJSSWEBSYSAUX01.DBF 

E:ORA10GORADATAJSSWEBUSERS01.DBF 

E:ORA10GORADATAJSSWEBWEBTBS01.DBF 

SQL>
alter system switch logfile; 

系统已变更。

提醒:使用including子句删除表空间时,

D) .验证standby数据库
–standby数据库操作

SQL>
select name from v$datafile; 

NAME 

————————————————– 

E:ORA10GORADATAJSSPDGSYSTEM01.DBF 

E:ORA10GORADATAJSSPDGUNDOTBS01.DBF 

E:ORA10GORADATAJSSPDGSYSAUX01.DBF 

E:ORA10GORADATAJSSPDGUSERS01.DBF 

E:ORA10GORADATAJSSPDGWEBTBS01.DBF 

SQL>
select name from v$tablespace; 

NAME 

—————————— 

SYSTEM 

UNDOTBS1 

SYSAUX 

TEMP 

USERS 

WEBTBS 

已选择6行。

得出结论,对于开头化参数STANDBY_FILE_MANA博来霉素ENT设置为auto的话,对于表空间和数据文件的操作完全不用dba手工业干预,primary和standby都能很好的拍卖。

2) .STANDBY_FILE_MANAGEMENT设置为MANUAL,扩张及删除表空间和数据文件

A) .扩充新的表空间
–primary数据库操作

SQL>
create tablespace mytmp datafile ‘e:ora10goradatajsswebmytmp01.dbf’ size
20m; 

表空间已开立。

自小编批评刚添加的数据文件

SQL>
select name from v$datafile; 

NAME 

———————————————– 

E:ORA10GORADATAJSSWEBSYSTEM01.DBF 

E:ORA10GORADATAJSSWEBUNDOTBS01.DBF 

E:ORA10GORADATAJSSWEBSYSAUX01.DBF 

E:ORA10GORADATAJSSWEBUSERS01.DBF 

E:ORA10GORADATAJSSWEBWEBTBS01.DBF 

E:ORA10GORADATAJSSWEBMYTMP01.DBF 

已选择6行。

切换日志

SQL>
alter system switch logfile; 

系统已改成。

B) .验证standby库
–standby数据库操作

SQL>
select name from v$datafile; 

NAME 

—————————————————- 

E:ORA10GORADATAJSSPDGSYSTEM01.DBF 

E:ORA10GORADATAJSSPDGUNDOTBS01.DBF 

E:ORA10GORADATAJSSPDGSYSAUX01.DBF 

E:ORA10GORADATAJSSPDGUSERS01.DBF 

E:ORA10GORADATAJSSPDGWEBTBS01.DBF 

E:ORA10GPRODUCT10.2.0DB_1DATABASEUNNAMED00006 

已选择6行。

SQL>
select name from v$tablespace; 

NAME 

—————————— 

SYSTEM 

UNDOTBS1 

SYSAUX 

TEMP 

USERS 

WEBTBS 

MYTMP 

已选择7行。

可以看来,表空间已经自行成立,不过,数据文件却被起了个怪名字,手工业修改其与primary数据库保持一致,如下(注意执行命令之后手工复制数据文件到standby):

SQL>
alter database create datafile
‘E:ORA10GPRODUCT10.2.0DB_1DATABASEUNNAMED00006’ 

2
as ‘E:ora10goradatajsspdgmytmp01.dbf’ ; 

数据库已变更。

C) .删除表空间
–primary数据库操作

SQL>
drop tablespace mytmp including contents and
datafiles; 

表空间已去除。

SQL>
select name from v$datafile; 

NAME 

————————————————– 

E:ORA10GORADATAJSSWEBSYSTEM01.DBF 

E:ORA10GORADATAJSSWEBUNDOTBS01.DBF 

E:ORA10GORADATAJSSWEBSYSAUX01.DBF 

E:ORA10GORADATAJSSWEBUSERS01.DBF 

E:ORA10GORADATAJSSWEBWEBTBS01.DBF 

SQL>
alter system switch logfile; 

系统已转移。

D) .验证standby数据库
–standby数据库操作

SQL>
select name from v$datafile; 

NAME 

—————————————————- 

E:ORA10GORADATAJSSPDGSYSTEM01.DBF 

E:ORA10GORADATAJSSPDGUNDOTBS01.DBF 

E:ORA10GORADATAJSSPDGSYSAUX01.DBF 

E:ORA10GORADATAJSSPDGUSERS01.DBF 

E:ORA10GORADATAJSSPDGWEBTBS01.DBF 

E:ORA10GPRODUCT10.2.0DB_1DATABASEUNNAMED00006 

已选择6行。

SQL>
select name from v$tablespace; 

NAME 

—————————— 

SYSTEM 

UNDOTBS1 

SYSAUX 

TEMP 

USERS 

WEBTBS 

MYTMP 

已选择7行。

哟,数据还在啊。赶紧分析分析,查看alert_jsspdg.log文件,发现如下(尤其注意粗体):

File
#6 added to control file as ‘UNNAMED00006’
because 

the
parameter STANDBY_FILE_MANAGEMENT is set to
MANUAL 

The
file should be manually created to continue. 

Errors
with log
E:ORA10GORADATAJSSPDGLOG1_753_641301252.ARC 

MRP0:
Background Media Recovery terminated with error
1274
 

Fri
Jan 18 09:48:45 2008 

那下精通了,为何有个UNNAMED00006的数据文件,也精晓为何standby数据库没能删除新加的表空间了吧,原来是后台的redo应用被停掉了,重启redo应用再来看看:

SQL>
alter database recover managed standby database disconnect from
session; 

数据库已变更。

SQL>
select name from v$datafile; 

NAME 

———————————————- 

E:ORA10GORADATAJSSPDGSYSTEM01.DBF 

E:ORA10GORADATAJSSPDGUNDOTBS01.DBF 

E:ORA10GORADATAJSSPDGSYSAUX01.DBF 

E:ORA10GORADATAJSSPDGUSERS01.DBF 

E:ORA10GORADATAJSSPDGWEBTBS01.DBF 

留意,既使您在primary数据库执行删除时添加了including子句,在standby数据库如故只会将表空间和数据文件从数据字典中剔除,你还亟需手工业删除表空间关系的数据文件。

重新得出结论,开端化参数STANDBY_FILE_MANA丙胺博莱霉素ENT设置为manual的话,对于表空间和数据文件的操作必须有dba手工业插足,你肯定会问,这太费事了,那本人干脆配置dg的时候一贯把伊始化参数设置为auto不就好了嘛,en,你想的很好,不过三思需求提示您地是,假若您的储存选拔文件系统,那本来没不通常,不过倘若选拔了裸设备,你就非得将该参数设置为manual。

2、 重命名数据文件

设若primary数据库重命令了1个或八个数据文件,该项修改并不会自行传播到standby数据库。因为此,假如你想让standby和数据文件与primary保持一致,那你也只好本身手工操作了。那会儿尽管STANDBY_FILE_MANAGEMENT也帮不上忙啦,不管它是auto依旧manual。

上面通过演示做个示范:

A) .将重命名的数据文件所在表空间offline
–primary数据库操作

SQL>
alter tablespace webtbs offline; 

表空间已改成。

B) .手工业将数据文件改名(操作系统)
–primary数据库操作

措施八种,不详述。

C) .通过命令修改数据字典中的数据文件路径,并online表空间
–primary数据库操作

SQL>
alter tablespace webtbs rename datafile 

2
‘E:ORA10GORADATAJSSWEBWEBTBS01.DBF’ to 

3
‘E:ORA10GORADATAJSSWEBTBSWEB01.DBF’; 

表空间已变更。

SQL>
alter tablespace webtbs online; 

表空间已转移。

D) .暂停redo应用,并shutdown
–standby数据库操作

SQL>
alter database recover managed standby database
cancel; 

数据库已转移。

SQL>
shutdown immediate 

ORA-01109:
数据库未打开

…… 

E) .手工业将数据文件改名(操作系统)
–standby数据库操作

主意体系,不详述。

F) .重启standby,修改数据文件路径(数据字典)
–standby数据库操作

SQL>
startup mount 

ORACLE
例程已经运维。

Total
System Global Area 167772160 bytes 

Fixed
Size 1289484 bytes 

Variable
Size 150995700 bytes 

Database
Buffers 8388608 bytes 

Redo
Buffers 7098368 bytes 

数据库装载完结。

SQL>
alter database rename file 

2
‘E:ORA10GORADATAJSSPDGWEBTBS01.DBF’ to 

3
‘E:ORA10GORADATAJSSPDGTBSWEB01.DBF’; 

数据库已变更。

G) .重新开动redo应用。

SQL>
alter database recover managed standby database disconnect from
session; 

数据库已改变。

H) .切换日志
–primary数据库操作

对open
resetlogs的primary数据库standby的恢复

当primary数据库被以resetlogs打开未来,dg提供了一些方案,能够让您飞速的复原物理standby
,当然那是有标准的,不或者具备的情事都得以便捷上升。 大家都知道alter
database open
resetlogs之后,数据库的scn被重置,约等于此时其redo数据也会从头开端。当物理standby接收到新的redo数据时,redo应用会活动获得这一部分redo数据。对于物理standby而言,只要数据库没有使用resetlogs之
后 的redo数据,那么那一个进程是不须要dba手工业参加的。

下表描述
其余 处境下什么样一同standby与primary数据库。

Standby数据库状态

Standby服务器操作

解决方案

没有应用resetlog之前的redo数据

自动应用新的redo数据

无须手工介入

应用了resetlog之 后 的redo数据,不过standby打开了flashback。

可以应用,不过需要dba手工介入

1. 手工flashback到应用之前

2. 重启redo应用,以重新接收新的redo数据。

应用了resetlog之 后 的redo数据,而且没有flashback。

完全无法应用

重建物理standby是唯一的选择

很绕是啊,举个例子你就了然了:

假定primary数据库当前生成的archive
sequence#正如:…26,27,28,然后在28的时候实施了resetlogs,又转移了新的1,2,3…..,那么standby能够不荒谬接收并应用26,27,28及新产生的1,2,3….

借使primary数据库在28的时候发出多少出现故障,recover到27,然后resetlogs,又变化了新的1,2,3…..,这些时候(大家留意,招子放亮点):假如standby还不曾利用28,刚刚应用到27,则standby还足以继承接收新的redo数据1,2,3…..并运用。

万一那时不幸,standby由于是实时应用,已经采纳了28的redo数据,那么一旦standby打开了flashback,不幸中的幸亏啊,那时候只必要dba手工业介绍先flashback到27,然后再接受并运用新的1,2,3….

设若那时十三分不幸,standby由于是实时应用,已经选取了28的redo数据,并且standby也没有打开flashback,那么,重建物理standby是您唯一的选项。

这下大家都知道了啊,赶紧起立击手感激yangtingkun大大的友情客串及印象示例,很浅显,很易懂:)。

监控primary/standby数据库

本节最首要介绍部分监察dg配置的主意,
先给大家提供1个报表(描述不一样事件的差异音讯监察和控制途径):

primary数据库事件

primary监控途径

standby监控途径

带有enable|disable thread子句的alter database命令

Ø Alert.log 

Ø V$THREAD 

Ø Alert.log 

当前数据库角色,保护模式,保护级别,switchover状态,failover快速启动信息等

Ø V$DATABASE 

Ø V$DATABASE 

Redo log切换

Ø Alert.log 

Ø V$LOG 

Ø V$LOGFILE的status列

Ø Alert.log 

重建控制文件

Ø Alert log 

Ø Alert log 

手动执行恢复

Ø Alert log 

Ø Alert log 

表空间状态修改(read-write/read-only,online/offline) 

Ø DBA_TABLESPACES 

Ø Alert log 

Ø V$RECOVER_FILE 

创建删除表空间或数据文件

Ø DBA_DATA_FILES 

Ø Alert log 

Ø V$DATAFILE 

Ø Alert log 

表空间或数据文件offline

Ø V$RECOVER_FILE 

Ø Alert log 

Ø DBA_TABLESPACES 

Ø V$RECOVER_FILE 

Ø DBA_TABLESPACES 

重命名数据文件

Ø V$DATAFILE 

Ø Alert log 

Ø V$DATAFILE 

Ø Alert log 

未被日志记录或不可恢复的操作

Ø V$DATAFILE view 

Ø V$DATABASE view 

Ø Alert log 

恢复的进程

Ø V$ARCHIVE_DEST_STATUS 

Ø Alert log 

Ø V$ARCHIVED_LOG

Ø V$LOG_HISTORY

Ø V$MANAGED_STANDBY 

Ø Alert log 

Redo传输的状态和进度

Ø V$ARCHIVE_DEST_STATUS 

Ø V$ARCHIVED_LOG

Ø V$ARCHIVE_DEST 

Ø Alert log 

Ø V$ARCHIVED_LOG 

Ø Alert log 

数据文件自动扩展

Ø Alert log 

Ø Alert log 

执行 OPEN RESETLOGS或CLEAR UNARCHIVED LOGFILES

Ø Alert log 

Ø Alert log 

修改初始化参数

Ø Alert log 

Ø Alert log 

总结起来
首要 通过二 个地点:

1、
Alert Log
 

一句话:一定要养成有事没事定期不定期随时查看alert.log的好习惯同时越发注意alert中的提醒平常不检点间会发现它的升迁能够让您的思路柳暗花明。

二 、动态质量视图

先也是一句话:做为oracle自个儿自愿能动维护的一批虚拟表它的机能足够强烈通过它能够即刻得到当前数据库状态及处理速度同理可得好处多多也需特别关爱前面示例也会多处用到我们要擦亮双眼。

l
先来点与还原速度相关的v$视图应用示范:

A) .查看进度的活动地方—
v$managed_standby 

该视图正是专为显示standby数据库
相关进度的 当前 状态消息,例如:

SQL>
select process,client_process,sequence#,status from
v$managed_standby; 

PROCESS
CLIENT_P SEQUENCE# STATUS 


——– ———- ———— 

ARCH
ARCH 763 CLOSING 

ARCH
ARCH 762 CLOSING 

MRP0
N/A 764 WAIT_FOR_LOG 

RFS
LGWR 764 IDLE 

RFS
N/A 0 IDLE 

PROCESS列突显进度音讯

CLIENT_PROCESS列呈现相应的主数据库中的进度

SEQUENCE#列展现归档redo的队列号

STATUS列显示的长河景况

通过上述查询能够摸清primary开了三个归档进度,使用lgwr同步传输情势与standby通讯,已经收取完763的日志,正等待764。

B) .确认redo应用速度—v$archive_dest_status

该视图展现归档文件路径配置音讯及redo的使用情状等,例如:

SQL>
select
dest_name,archived_thread#,archived_seq#,applied_thread#,applied_seq#,db_unique_name 

2
from v$archive_dest_status where
status=’VALID’; 

DEST_NAME
ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD# APPLIED_SEQ#
DB_UNIQUE_ 



———- 

LOG_ARCHIVE_DEST_1
1 765 0 0 jsspdg 

LOG_ARCHIVE_DEST_2
0 0 0 0 jssweb 

STANDBY_ARCHIVE_DEST
1 764 1 764 NONE 

C) .检查归档文件路径及成立音信—v$archived_log

该视图查询standby数据库归档文件的一对叠加音讯,比如文件创造时间啦,创制进程啦,归档序号啦,是不是被运用啦之类,例如:

SQL>
select name,creator,sequence#,applied,completion_time from
v$archived_log; 

NAME
CREATOR SEQUENCE# APP COMPLETION_TIM 


——- ———- — ————– 

E:ORA10GORADATAJSSPDGLOG1_750_641301252.ARC
ARCH 750 YES 18-1月 -08

E:ORA10GORADATAJSSPDGLOG1_749_641301252.ARC
ARCH 749 YES 18-1月 -08

E:ORA10GORADATAJSSPDGLOG1_751_641301252.ARC
ARCH 751 YES 18-1月 -08

E:ORA10GORADATAJSSPDGLOG1_752_641301252.ARC
ARCH 752 YES 18-1月 -08

E:ORA10GORADATAJSSPDGLOG1_753_641301252.ARC
ARCH 753 YES 18-1月 -08

E:ORA10GORADATAJSSPDGLOG1_754_641301252.ARC
ARCH 754 YES 18-1月 -08

D) .查询归档历史—v$log_history

该视图查询standby库中兼有已被运用的归档文件消息(不论该归档文件是不是还设有),例如:

SQL>
select first_time,first_change#,next_change#,sequence# from
v$log_history; 

FIRST_TIME
FIRST_CHANGE# NEXT_CHANGE# SEQUENCE# 


————- ———— ———- 

2008-01-03
12:00:51 499709 528572 18 

2008-01-08
09:54:42 528572 539402 19 

2008-01-08
22:00:06 539402 547161 20 

2008-01-09
01:05:57 547161 560393 21 

2008-01-09
10:13:53 560393 561070 22 

l
再来点与log应用相关的v$视图应用示范:

A) .查询当前数量的着力音讯—v$database音讯。

比如,查询数据库剧中人物,爱惜形式,怜惜级别等:

SQL>
select
database_role,db_unique_name,open_mode,protection_mode,protection_level,switchover_status  from
v$database; 

DATABASE_ROLE
DB_UNIQUE_NAME OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
SWITCHOVER_STATUS 



——————– ——————– 

PHYSICAL
STANDBY jsspdg MOUNTED MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
SESSIONS ACTIVE 

再比如,查询failover后飞速运营的音信

SQL>
select
fs_failover_status,fs_failover_current_target,fs_failover_threshold, 

2
fs_failover_observer_present from
v$database; 

FS_FAILOVER_STATUS
FS_FAILOVER_CURRENT_TARGET FS_FAILOVER_THRESHOLD
FS_FAIL 



——- 

DISABLED

B) .检查选用方式(是不是启用了实时应用)—v$archive_dest_status

查询v$archive_dest_status视图,即使打开了实时应用,则recovery_mode会展现为:MANAGED
REAL TIME APPLY,例如:

SQL>
select recovery_mode from v$archive_dest_status where
dest_id=2; 

RECOVERY_MODE 

———————– 

MANAGED
REAL TIME APPLY 

C) .Data
guard事件—v$dataguard_status

该视图展现那么些被电动触发写入alert.log或服务器trace文件的风浪。平时是在您困难访问到服务器查询alert.log时,能够一时造访本视图查看一些与dataguard相关的新闻,例如:

SQL>
select message from v$dataguard_status; 

MESSAGE 

—————————————————————————- 

ARC0:
Archival started 

ARC1:
Archival started 

ARC0:
Becoming the ‘no FAL’ ARCH 

安不忘危干活

正如作者辈打小就被交代饭前肯定要洗手,在开创逻辑standby往日,准备干活一样不可或缺。

在开创逻辑standby从前,首先检查primary数据库的动静,确定保障primary数据库已经为开创逻辑standby做好了全套预备干活,比如说是还是不是运维了归档,是或不是启用了forced
logging等,那有的能够参见创立物理standby时的准备干活。

除了那么些之外呢,由于逻辑standby是经过sql应用来维持与primary数据库的联合。sql应用与redo应用是有相当的大分别地,那事儿大家前面提到过,redo应用实际上是情理standby端进行recover,sql应用则是分析redo文件,将其转移为sql语句在逻辑standby端执行,因而,须要小心:

l
并非所有的数据类型都能被逻辑standby援救;

援助的数据类型有:

BINARY_DOUBLE、BINARY_FLOAT、BLOB、CHAR、CLOB
and NCLOB、DATE、INTERVAL YEAR TO MONTH、INTERVAL DAY TO
SECOND、LONG、LONG
RAW、NCHAR、NUMBER、NVARCHAR2、RAW、TIMESTAMP、TIMESTAMP WITH LOCAL
TIMEZONE、TIMESTAMP WITH TIMEZONE、VARCHAR2 and VARCHAR

提示:

下列项目在获取standby援救时索要专注包容性:

Ø
clob,须求primary数据库的合营级别运转于10.1或更高

Ø
含lob字段的目录组织表(IOT),需求primary数据库的十二分级别运营于10.2或更高

Ø
不含lob字段的目录组织表(IOT),要求primary数据库的匹配级别运维于10.1或更高

不支持的数据类型有:

BFILE、Encrypted
columns、ROWID, UROWID、XMLType、对象类型、VAOdysseyRAYS、嵌套表、自定义类型。

洗衣杀菌能够用肥皂或洗手液,检查数据库是或不是有不被逻辑standby扶助的指标也一如既往有大致方法,大家能够通过询问视图DBA_LOGSTDBY_UNSUPPO科雷傲TED来鲜明主数据库中是还是不是包蕴不支持的对象 :

SQL>
SELECT * FROM DBA_LOGSTDBY_UNSUPPORTED; 

提示:关于DBA_LOGSTDBY_UNSUPPORTED

该视图显示蕴含不被帮助的数据类型的表的列名及该列的数据类型。注意该视图的ATT奔驰M级IBUTES列,列值会显得表不被sql应用支撑的由来。

l
并非全数的囤积类型都能被逻辑standby协理;

支撑簇表(Cluster
tables)、索引社团表(Index-organized tables)、堆协会表(Heap-organized
tables),不支持段压缩(segment compression)存款和储蓄类型

l
并非全体的pl/sql包都能被SQL应用支撑。

那些或然修改系统元数据的包不会被sql应用支撑,由此即使它们在primary执行过,并且被成功传输到逻辑standby端,也不会实施,例如:DBMS_JAVA,
DBMS_REGISTRY, DBMS_ALERT, DBMS_SPACE_ADMIN, DBMS_REFRESH,
DBMS_REDEFINITION, DBMS_SCHEDULER, and DBMS_AQ等。

只有dbms_job例外,primary数据库的jobs会被复制到逻辑standby,可是在standby数据库不会实施这一个job。

l
并非全体的sql语句都能在逻辑standby执行;

暗许意况下,下列sql语句在逻辑standby会被sql应用自动跳过:

ALTER
DATABASE 

ALTER
MATERIALIZED VIEW 

ALTER
MATERIALIZED VIEW LOG 

ALTER
SESSION 

ALTER
SYSTEM 

CREATE
CONTROL FILE 

CREATE
DATABASE 

CREATE
DATABASE LINK 

CREATE
PFILE FROM SPFILE 

CREATE
MATERIALIZED VIEW 

CREATE
MATERIALIZED VIEW LOG 

CREATE
SCHEMA AUTHORIZATION 

CREATE
SPFILE FROM PFILE 

DROP
DATABASE LINK 

DROP
MATERIALIZED VIEW 

DROP
MATERIALIZED VIEW LOG 

EXPLAIN 

LOCK
TABLE 

SET
CONSTRAINTS 

SET
ROLE 

SET
TRANSACTION 

此外,还有一大批ddl操作,同样也不会在逻辑standby端执行,由于数量较重,此处不再一一列举,感兴趣的话请google查看官方文书档案。

l
并非全部的dml操作都能在逻辑standby端SQL应用;

保卫安全逻辑standby与primary的数据库同步是通过sql应用完成,SQL应用转换的SQL语句在推行时,对于insert幸而说,对于update,delete操作则必须可以唯一定位到数据库待更新的那条记下。难点就在此地,假若primary库中表设置不当,只怕就不只怕肯定唯一尺度。

您大概会说能够经过rowid唯一嘛!!同学,千万要谨记啊,逻辑standby,为何叫逻辑standby呢,它跟物理standby有什么不同呢,就是因为它只是逻辑上与primary数据库相同,物理上只怕与primary数据仓库储存在不小差别,一定要认识到,逻辑standby的物理构造与primary是不均等的(固然开头逻辑standby是通过primary的备份创造),由此想通过rowid更新明显是不佳使的,就不能够再将其做为唯一标准。那咋做泥,OK,话题被引入,上边请听三思向您一一道来:

什么样保管primary库中各表的行可被唯一标识

Oracle
通过主键、唯一索引/约束补充日志(supplemental
logging)来鲜明待更新逻辑standby库中的行。当数据库启用了补充日志(supplemental
logging),每一条update语句写redo的时候会增大列值唯一音讯,比如:

v
假使表定义了主键,则主键值会随同被更新列一起做为update语句的一局地,以便执行时分别哪些列应该被更新。

v
假诺没有主键,则非空的唯一索引/约束会随同被更新列做为update语句的一部分,以便执行时分别哪些列应该被更新,就算该表有四个唯一索引/约束,则oracle自动选取最短的卓殊。

v
假若表即无主键,也从不定义唯一索引/约束,全数可定长度的列连同被更新列作为update语句的一局地。更显眼的话,可定长度的列是指那么些除:long,lob,long
raw,object type,collection类型外的列。

规定在主数据库上,补充日志是还是不是被启用,能够查询v$database,如下:

SQL>
select supplemental_log_data_pk,supplemental_log_data_ui from
v$database; 

SUP
SUP 


— 

YES
YES 

故而,Oracle
建议您为表创造2个主键或非空的唯一索引/约束,以尽量保险sql应用能够有效应用redo数据,更新逻辑standby数据库。

推行下列语句检查sql应用是或不是唯一识别表列,找出不被援救的表

SQL>
SELECT OWNER, TABLE_NAME FROM
DBA_LOGSTDBY_NOT_UNIQUE 

2>
WHERE (OWNER, TABLE_NAME) NOT IN

3>
(SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)

4>
AND BAD_COLLUMN = ‘Y’; 

提示:

关于DBA_LOGSTDBY_NOT_UNIQUE

该视图突显全部即没主键也没唯一索引的表。若是表中的列包涵丰硕多的音信平常也可支撑在逻辑standby的创新,不被补助的表经常是由于列的概念包括了不帮忙的数据类型。

注意BAD_COLUMN列值,该列有八个值:

Y:表示该表中有利用大数据类型的字段,比如LONG啦,CLOB啦之类。若是表中除log列某个行记录完全匹配,则该表不能成功运用于逻辑standby。standby会尝试维护那个表,可是你不能够不保险应用不允许

N:表示该表拥有丰裕的新闻,能够协助在逻辑standby的换代,不过还是提出你为该表创造三个主键或许唯一索引/约束以增强log应用功用。

如若某张表你能够肯定数据是唯一的,可是因为功效方面包车型地铁考虑,不想为其制造主键或唯一约束,,咋做呢,没涉及,oracle想到了那或多或少,你能够创建叁个disable的primary-key
rely约束:

关于primary-key
RELY约束:

设若你能够承认表中的行是唯一的,那么能够为该表创立rely的主键,RELY约束并不会促成系统爱抚主键的支付,主你对二个表成立了rely约束,系统则会假定该表中的行是唯一,那样能够提供sql应用时的性质。然则急需留意,由于rely的主键约束只是一旦唯一,假设实在并不唯一的话,有大概会造成错误的换代哟。

始建rely的主键约束格外简单,只要在业内的创导语句后增加RELY
DISABLE即可,例如:

SQL>
alter table jss.b add primary key (id) rely
disable; 

表已改成。

创制步骤

① 、 创立物理standby

最方便的创始逻辑standby的方法正是先创建一个物理standby,然后再将其转换来逻辑standby,因而首先步正是先创立一个大体standby。注意,在将其更换为逻辑standby前,能够随时运行和应用redo,然而只要您决定将其更换为逻辑standby,就必须先结束该物理standby的redo应用,以制止提前利用含LogMiner字典的redo数据,造成转换为逻辑standby后,sql应用时logMiner字典数据不足而影响到逻辑standby与primary的正规同步。

2、 设置primary数据库

在头里创造standby时大家早就安装过不少个先河化参数用于primary与物理standby的剧中人物切换,小编想说的是,对于逻辑standby的角色切换,那个参数同样好使。

可是注意,假诺希望primary数据库可以不奇怪切换为逻辑standby剧中人物的话,那么您还须求设置相应的log_archive_dest_N,并且valid_for属性,要求转移成:(STANDBY_LOGFILES,STANDBY_ROLE)。

接下来须求生成LogMiner字典消息,通过履行下列语句生成(
不可能不执行):

SQL>
EXECUTE DBMS_LOGSTDBY.BUILD; 

该进程专门用来转移记录的元数据新闻到redo
log,那样改动才会被传输到逻辑standby,然后才会被逻辑standby举行SQL应用。

提示:

Ø
该进程会自动启用primary数据库的填补日志(supplemental
logging)功用(假设未启用的话)。

Ø
该进程执行要求等待日前抱有工作达成,因而要是当前有较长的工作运转,大概该进程执行也急需多花一些等候时间。

Ø
该进程是经过闪回查询的主意来获取数据字典的一致性,由此oracle开端化参数UNDO_RETENTION值要求安装的十足大。

三 、 转换物理standby为逻辑standby

施行下列语句,转换物理standby为逻辑standby:

SQL>
alter database recover to logical standby
NEW_DBNAME; 

关于db_name(注意啊,那可不是db_unique_name,差异于物理standby,逻辑standby是二个全新的数据库,由此建议你钦赐1个唯一的,与primary分裂的数据库名),假设当前使用spfile,则数据库会活动修改当中的相干新闻,若是选拔的pfile,在下次履行shutdown的时候oracle会提示您去修改db_name初步化参数的值。

唤醒:执行该语句前务必确定保证已经暂停了redo应用,此外转换是单向的,即只好由物理standby向逻辑standby转换,而不能由逻辑standby转成物理standby。那并不仅仅是因为dbname发生了修改,更器重的原故是逻辑standby仅是数量与primary一致,别的如存款和储蓄结构,scn等根据dbid都不可同日而语相同。

其它,该语句执行进度中,供给使用全体的LogMiner字典相关的redo数据。这一部分操作完全依靠于primary数据库DBMS_LOGSTDBY.BUILD的施行以及传输到standby后有多少多少须求被使用。即使primary数据库执行DBMS_LOGSTDBY.BUILD战败,则转移操作也不会有结果,那时候你大概只能先cancel掉它,解决primary数据库的难题未来再品尝进行转换。

4、 重建逻辑standby的密码文件

驷比不上舌是出于转换操作修改了多少库名,因而密码文件也须要重建,那几个操作大家做的可比多,那里就不详述了。

⑤ 、 调整逻辑standby早先化参数

所以要调整初阶化参数,一方面是出于此处大家的逻辑standby是从物理standby转换成的,有些参数并不切合甚至大概导致错误,比如log_archive_dest_n参数的装置。另一方面,由于逻辑standby会有读写操作,由此需求读写本地online
redologs及并发生archivelogs,务必索要专注当地的archivelogs路径不要与利用接收自primary数据库的redo数据变化的archivelogs路径争持。当然归根到底是因为逻辑standby是从物理standby转换而来,因而standby的初叶化参数就要求第三遍调动(第1回是创建物理standby),那里怎么要选择从物理standby转换呢?很简单,因为前面测试进程中成立了四个standby,所以作者觉着一贯转换3个就是逻辑standby,操作更省事儿:)

理所当然我信任,看完那个体系,假诺您对此开创的流程可见充裕清楚,完全能够跳过先创立物理standby的历程,直接开立逻辑standby。

至于修改开始化参数的格局有两种,通过alter
system
set也得以,或许先生成pfile修改相关参数,然后再依据修改过的pfile生成spfile也足以。

陆 、 打开逻辑standby

出于逻辑standby与primary数据库事务并差别,因而首先次打开时必须钦定resetlogs选取,如下:

SQL>
alter database open resetlogs; 

然后能够因而执行下列sql命令应用redo数据:

SQL>
alter database start logical standby apply
immediate; 

若果想结束逻辑standby的sql应用,能够透过下列命令:

SQL>
alter database stop logical standby apply
immediate; 

若是当前架构为1个primary+二个大体standby,大家转移在这之中2个物理standby成为逻辑standby,专用于查询服务,另2个物理standby用于实践备份操作及提供灾备。那里大家平素借用此前创制的情理standby,只演示创建进程,大家若是当前primary数据库状态不错,没有此外不被逻辑standby援救的对象或项目。

为了方便分别当前操作的数据库,大家设置一下操作符:

SQL>
set sqlprompt JSSWEB> –表示primary数据库

SQL>
set sqlprompt JSSPDG> –表示物理standby

SQL>
set sqlprompt JSSLDG> –表示逻辑standby

一、 成立物理standby

此步跳过,如有不明,具体可参考第1片段。

提拔:表忘记暂停该standby的redo应用

JSSLDG>alter
database recover managed standby database
cancel; 

数据库已变更。

二、 设置primary数据库

是因为有早先时代创设物理standby时的基础,此处primary数据库的起首化参数能够不做修改,最根本的是绝不忘记生成LogMiner字典消息。

JSSWEB>execute
dbms_logstdby.build; 

PL/SQL
进度已成功做到。

三、 转换物理standby为逻辑standby

推行下列语句,转换物理standby为逻辑standby:

JSSLDG>show
parameter db_name; 

NAME
TYPE VALUE 


———– —————————— 

db_name
string jssweb 

JSSLDG> alter
database recover to logical standby jssldg;
 

数据库已改成。

JSSLDG>shutdown
immediate 

ORA-01507:
未装载数据库

ORACLE
例程已经倒闭。

JSSLDG>startup
mount; 

ORACLE
例程已经起步。

Total
System Global Area 167772160 bytes 

Fixed
Size 1289484 bytes 

Variable
Size 79692532 bytes 

Database
Buffers 79691776 bytes 

Redo
Buffers 7098368 bytes 

数据库装载完成。

JSSLDG>show
parameter db_name; 

NAME
TYPE VALUE 


———– —————————— 

db_name
string JSSLDG 

JSSLDG>select
database_role from v$database; 

DATABASE_ROLE 

—————- 

LOGICAL
STANDBY 

四、 重建逻辑standby的密码文件

E:ora10g>orapwd
file=e:ora10gproduct10.2.0db_1databasePWDjssldg.ora password=verysafe
entries=30 

留意保持sys密码与primary数据库一致。

五、 调整逻辑standby初叶化参数

瞩目归档文件路径不要争执:

JSSLDG>alter
system set log_archive_dest_1=’location=E:ora10goradataJSSLDGarc
valid_for=(online_logfiles,all_roles)
db_unique_name=JSSLDG’; 

系统已改成。

JSSLDG>alter
system set log_archive_dest_2=’location=E:ora10goradataJSSLDGstd
valid_for=(standby_logfiles,standby_role)
db_unique_name=JSSLDG’; 

系统已变更。

其余,由于事先大家创造JSSLDG时未尝成立standby
redologs,但对此逻辑standby的sql应用,standby
redologs是必须的,因而我们在这里也要为该standby创造几组standby
redologs:

JSSLDG>alter
database add standby logfile group 4
(‘E:ora10goradataJSSLDGstandbyrd01.log’) size
20m; 

数据库已变更。

JSSLDG>alter
database add standby logfile group 5
(‘E:ora10goradataJSSLDGstandbyrd02.log’) size
20m; 

数据库已转移。

JSSLDG>alter
database add standby logfile group 6
(‘E:ora10goradataJSSLDGstandbyrd03.log’) size
20m; 

数据库已改变。

JSSLDG>select
member from v$logfile; 

MEMBER 

———————————————————- 

E:ORA10GORADATAJSSLDGREDO01.LOG 

E:ORA10GORADATAJSSLDGREDO02.LOG 

E:ORA10GORADATAJSSLDGREDO03.LOG 

E:ORA10GORADATAJSSLDGSTANDBYRD01.LOG 

E:ORA10GORADATAJSSLDGSTANDBYRD02.LOG 

E:ORA10GORADATAJSSLDGSTANDBYRD03.LOG 

已选择6行。

六、 开辟逻辑standby

是因为逻辑standby与primary数据库事务并不一致,因而首先次打开时务必内定resetlogs选拔,如下:

SQL>
alter database open resetlogs; 

数据库已改成。

然后实施下列sql命令应用redo数据:

SQL>
alter database start logical standby apply
immediate; 

数据库已改成。

七、 检查一下

率先在primary数据库执行:

JSSWEB>
select *from jss.b; 

ID 

———- 

已选择3行。

JSSWEB>
insert into jss.b values (4); 

已创建 1
行。

JSSWEB>
insert into b values (5); 

已创建 1
行。

JSSWEB>
insert into b values (6); 

已创建 1
行。

JSSWEB>
commit; 

付给成功。

JSSWEB>
alter system switch logfile; 

系统已变更。

查询物理standby的共同情形,由于大体standby处于mount状态,不可能直接询问,由此大家要求先暂停redo应用,然后以read
only方式打开数据库再实践查询:

JSSPDG>alter
database recover managed standby database
cancel; 

数据库已变更。

JSSPDG>alter
database open read only; 

数据库已转移。

JSSPDG>select
* from jss.b; 

ID 

———- 

已选择6行。

查询逻辑standby的同步情状:

JSSLDG>select
* from jss.b; 

ID 

———- 

已选择6行。

提醒:细心观望,发现逻辑standby有有些很好,从primary接收到的redo文件,应用过之后会自行删除,节省磁盘空间。

Ok,逻辑standby也创立完结了,大家再回过头来回想回想我们最伊始的比方:

对于相机拍戏而言,有种傻瓜相机功用强大而操作便捷,而对此版画,就算是最简易的画法,也亟需万分多的演习才能操纵。那个细节是否也证实逻辑standby相比较物理standby须要操作者拥有越多的操作技能呢?

方今看起来,操作呢比较物理standby是稍稍复杂了一小点,但机理呢与物理standby南平小异,作用吗也有失的就比物理standby强到哪个地方,重如果最初准备干活略嫌繁琐(越发你的数据库系统相比较宏大时,究竟有那么多支持和不匡助的数据类型/操作/语句必要dba手工业处理),这么看来,画画的好像是要比搞水墨画的更珍视基本功啊,然而事物要辩证着看,爱好油画的情侣千万莫因而而深感心寒,从实用角度看,搞雕塑不知要比画画强多少倍啊,成效在那摆着吗,要出片子按下快门就成啦!对于standby也是这么,你到底是想要物理的,还是想要逻辑的吧,那是个难题~

有关剧中人物转换的有些定义在大体standby章节的时候已经讲了重重,在概念和操作方法上两者基本一致,可是假如你实在深切通晓了物理standby和逻辑standby,你会意识到,对于逻辑standby而言,不管是switchover依然failover,怎么操作起来,都这么怪怪的呢~~~ 

逻辑standby之switchover 

要在primary和逻辑standby之间切换剧中人物,一般是从操作primary开头。

提示:

比方primary或逻辑standby是rac结构,切记只保留叁个实例运转,其它实例全部shutdown。等剧中人物转换操作实现将来再开行别的实例,角色转换的操作会自动传播到这一个实例上,并不需求你再对这一个实例单独做拍卖。

一、 预备工作

壹 、检查primary和逻辑standby的开头化参数设置,常规的检查包含:

·确保fal_server,fal_client值设置科学

·确保log_archive_dest_n参数设置科学

更加多恐怕波及的伊始化参数能够参照2.1中的第⑤小章

率先来看近来的primary数据库:

JSSWEB>
show parameter fal 

NAME
TYPE VALUE 


———– —————————— 

fal_client
string jssweb 

fal_server
string jsspdg 

JSSWEB>
show parameter name_convert 

NAME
TYPE VALUE 


———– —————————— 

db_file_name_convert
string oradatajsspdg, oradatajssweb 

log_file_name_convert
string oradatajsspdg, oradatajssweb 

JSSWEB>
show parameter log_archive_dest 

NAME
TYPE VALUE 


———– —————————— 

log_archive_dest
string 

log_archive_dest_1
string LOCATION=E:ora10goradatajss 

webarc
VALID_FOR=(ALL_LOGFIL 

ES,ALL_ROLES)
DB_UNIQUE_NAME=j 

ssweb 

log_archive_dest_2
string service=jsspdg 

OPTIONAL
LGWR SYNC AFFIRM VALI 

D_FOR=(ONLINE_LOGFILES,PRIMARY 

_ROLE)
DB_UNIQUE_NAME=jsspdg 

……………. 

……………. 

……………. 

log_archive_dest_state_1
string ENABLE 

log_archive_dest_state_2
string defer 

由于那里primary的发轫化参数并不适于,为了制止其更换之后发出错误,大家要求超前做些修改:

JSSWEB>
alter system set
log_archive_dest_2=’location=e:ora10goradatajsswebstd
valid_for=(standby_logfiles,standby_role)
db_unique_name 

=jssweb’; 

系统已变更。

JSSWEB>
alter system set
log_archive_dest_1=’location=e:ora10goradatajsswebarc
valid_for=(online_logfiles,all_roles)
db_unique_name=jss 

web’; 

系统已转移。

JSSWEB>
alter system set
log_archive_dest_state_2=’enable’; 

系统已改变。

JSSWEB>
alter system set fal_server=’jssldg’; 

系统已变更。

–xx_file_name_convert那四个参数无法动态修改,因而咱们率先修改spfile,然后再重启一下数据库

JSSWEB>
alter system set db_file_name_convert=’oradatajssldg’,’oradatajssweb’
scope=spfile; 

系统已改成。

JSSWEB>
alter system set
log_file_name_convert=’oradatajssldg’,’oradatajssweb’
scope=spfile; 

系统已变更。

JSSWEB>
startup force 

下一场再看看待转换的逻辑standby

JSSLDG>
show parameter fal 

NAME
TYPE VALUE 


———– —————————— 

fal_client
string 

fal_server
string 

JSSLDG>
show parameter file_name 

NAME
TYPE VALUE 


———– —————————— 

db_file_name_convert
string oradatajssweb, oradatajssldg 

log_file_name_convert
string oradatajssweb, oradatajssldg 

JSSLDG>
show parameter log_archive 

NAME
TYPE VALUE 


———– —————————— 

log_archive_config
string DG_CONFIG=(jssweb,jsspdg,jssld 

g) 

log_archive_dest
string 

log_archive_dest_1
string location=E:ora10goradatajss 

ldgarc
valid_for=(online_log 

files,all_roles)
db_unique_nam 

e=jssldg 

log_archive_dest_10
string 

log_archive_dest_2
string location=E:ora10goradataJSS 

LDGstd
valid_for=(standby_lo 

gfiles,standby_role)
db_unique 

_name=JSSLDG 

………………….. 

………………….. 

对于待转换的逻辑standby中,有个别开首化参数也足以不设置,可是走到这一步了,顺手全安装3次。

JSSLDG>
alter system set fal_server=’jssweb’; 

系统已转移。

JSSLDG>
alter system set fal_client=’jssldg’; 

系统已改变。

JSSLDG>
alter system set log_archive_dest_3=’service=jssweb lgwr async
valid_for=(online_logfiles,primary_role)
db_unique_name=jssweb’; 

系统已变更。

② 、检查primary数据库是还是不是计划了standby
redologs

JSSWEB>
select * from v$standby_log; 

未选定行

对此逻辑standby数据库,standby
redologs是必须的,因而大家必要为目前的primary创立多少个standby redologs。

JSSWEB>
alter database add standby logfile group 4
(‘e:ora10goradatajsswebstandbyrd01.log’) size
20m; 

数据库已改成。

………………… 

………………….. 

……………………. 

JSSWEB>
alter database add standby logfile group 8
(‘e:ora10goradatajsswebstandbyrd05.log’) size
20m; 

数据库已改变。

二、 检查primary数据库状态

在最近的primary数据库查询v$database视图中的switchover_status列,查看当前primary数据库状态。

JSSWEB>
select switchover_status from v$database; 

SWITCHOVER_STATUS 

——————– 

TO
STANDBY 

一旦该查询重回TO
STANDBY 或SESSIONS
ACTIVE则代表景况平常,能够执行转换操作,假诺否的话,就必要您先检查一下当前的dataguard配置,看看是还是不是

三、 准备变换primary为逻辑standby

实践下列语句,将primary置为准备变换的图景:

JSSWEB>
alter
database prepare to switchover to logical
standby;
 

数据库已改成。

查阅一下switchover_status的事态,哟,果然变成准备ing啦~~

JSSWEB>
select switchover_status from v$database; 

SWITCHOVER_STATUS 

——————– 

PREPARING
SWITCHOVER 

四、 预备变换逻辑standby为primary

咱俩必将要读书oracle这种逻辑,甭管想做如何,都得先有个备选的经过~

JSSLDG>
alter
database prepare to switchover to primary;
 

数据库已改成。

JSSLDG>
select switchover_status from v$database; 

SWITCHOVER_STATUS 

——————– 

PREPARING
SWITCHOVER 

五、 再次检查primary数据库状态

JSSWEB>
select switchover_status from v$database; 

SWITCHOVER_STATUS 

——————– 

TO
LOGICAL STANDBY 

在意:那步纵然不做哪些操作,但检查结果却非常关键,它一向涉及到switchover转换是还是不是能够成功。逻辑standby执行完prepare命令之后,就会扭转对应的LogMiner字典数据(仿佛大家眼下创制逻辑standby时,primary会生成LogMiner字典数据一致),只有它平常生成并发送至当前的primary,转换操作才可以继续下去。不然当前的primary数据库在转换完之后,恐怕就错过了从新的primary接收redo数据的能力了。

故而,假设上述查询的回来结果不是:TO
LOGICAL
STANDBY的话,你大概就须要撤除此次转换,检查原因,然后再重新操作了。

提示:

注销转换能够通过下列语句:

ALTER
DATABASE PREPARE TO SWITCHOVER CANCEL;
 

亟需各自在primary和逻辑standby执行。

六、 转换primary为逻辑standby

举办下列语句:

JSSWEB>
alter
database commit to switchover to logical
standby;
 

数据库已转移。

该语句须求等待日前primary全数事务全体得了。同时该语句也会活动拒绝用户发布的新业务或涂改需求。为保证该操作尽或许快的推行,最佳自初阶切换操作起就不准全数用户的操作。

该命令执行完事后,这些primary就已经成为新的逻辑standby了。不过在新primary执行完转换从前,不要关闭当前那么些数据库。

七、 双重检查逻辑standby状态

逻辑standby在吸收到前primary的变换新闻,并行使完相关的redo数据今后,会自行刹车sql应用,然后查询switchover_status的状态,应该为:TO
PRIMARY

JSSLDG>
select switchover_status from v$database; 

SWITCHOVER_STATUS 

——————– 

TO
PRIMARY 

八、 更换逻辑standby为primary

末段的行事总会在逻辑standby上操作,通过上列语句,将该逻辑standby转换为新的primary。

JSSLDG>
alter
database commit to switchover to primary;
 

数据库已改成。

改换实现

九、 发轫新逻辑standby的sql应用

最后运转新逻辑standby的sql应用。

JSSWEB>
alter database start logical standby apply; 

数据库已转移。

提醒:还记的大家的jsspdg吗,即便它也是standby(物理),可是它今后也毫无这些dataguard配置中的一员了,那也是由于逻辑standby本人性情决定的,每四个逻辑standby都一定于是贰个区别于primary的数据库(DBID都不如),由此在逻辑standby落成了转移之后,也正是原primary已经熄灭,因而原primary配置的情理standby也错过了主导参照,不过原primary配置的逻辑standby不会有影响。

逻辑standby之failover 

前边学习物理standby的failover时咱们关系过,failover有恐怕会丢掉数据(视当前的数据库尊敬形式而定),对于逻辑standby也一如既往;物理standby在做failover演示时还论及过,全数的操作都会在standby端执行,对于逻辑standby那也同样,甚至对于明明提及在前primary执行的,你不履行,也没提到,毕竟对于failover,大家假使的正是,primary已经over了:) 

一、 预备干活要尽量

准备干活能够从以下多少个方面起初:

壹 、 检查及处理丢失的存档

就算本步不是必须的,但假使指望尽大概少丢失数据,除了数据爱惜方式之外,本步操作也很是重要。要是那时候primary仍可被访问,首先检查当前的存档日志序号与逻辑standby是不是一律:

JSSLDG>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

24 

JSSWEB>
select sequence#,applied from
dba_logstdby_log; 

SEQUENCE#
APPLIED 


——– 

23
YES 

24
YES 

已选择2行。

晋升:如若primary的数据库已经力不从心打开,您就只可以平昔到磁盘上查看归档目录中的序号来与standby端做相比了。

设若差异序号,则将primary尚未发送至standby的归档文件手工业复制到待转换的逻辑standby服务器,然后在standby端通过
ALTE奥迪Q5DATABASE REGISTE途乐 LOGICAL LOGFILE ”; 命令将文件手工业注册

借使standby与primary的存档序号相同,但有些序号的applied状态为no,建议您检查一下当前standby是还是不是运维了SQL应用:)。

二 、 检查待转换逻辑standby的日记应用意况

可以经过询问v$logstdby_progress视图:

JSSWEB>
select applied_scn,latest_scn from
v$logstdby_progress; 

APPLIED_SCN
LATEST_SCN 


———- 

1259449
1259453 

要是两值一致,表示全部接收到的存档都已经应用了。

③ 、 检查及改正待转换逻辑standby的初阶化参数配置

确认待转换的逻辑standby配置了不利的存档路径,不仅是写本地的存档,还要有写远程的存档,不然转换完之后,那台新的primary就成了光杆司令了。

JSSWEB>
show parameter log_archive_dest 

………………….. 

本来一般的话,大家都以援引在开创standby的还要将一些用来剧中人物切换的开始化参数也安插好(primary和standby端都应那样),以减小切换时操作的流年,进步切换作用。

二、 激活新的primary数据库

第贰查看当前操作的剧中人物

JSSWEB>
select database_role,force_logging from
v$database; 

DATABASE_ROLE
FOR 


— 

LOGICAL
STANDBY YES 

留神,如若当前force_logging为no,务必执行:Alter
database force logging;

转换standby角色为primary

JSSWEB>
alter
database activate logical standby database finish
apply;
 

数据库已改变。

该语句首若是终止待转换的逻辑standby中中华VFS进程,并运用完当前拥有已吸收接纳但未曾接纳的redo数据,然后甘休sql应用,将数据库转换到primary剧中人物。

JSSWEB>
select database_role,force_logging from
v$database; 

DATABASE_ROLE
FOR 


— 

PRIMARY
YES 

大抵到这一步,大家得以说剧中人物转换的工作早就完成了,可是注意,活还从未干完!

那里与逻辑standby的switchover同理,切换完之后,原dg配置就失效了(不仅原物理standby没了,原逻辑standby也失去了参考,看看,逻辑standby的failover确实威力巨大呀,怪不得逻辑standby用的人这么人呢,环境脆弱肯定是原因之一啊),因而我们要求做些设置,重新将原先的standby再投入到新的dg配置环境中。

三、 修补别的standby

专注啊,逻辑standby的修补可并不像物理standby那样简单,每种逻辑standby都一定于是独立的数据库,假诺你不期望重建逻辑standby的话呢,oracle倒是也提供了任何消除方案(固然不必然好使):

壹 、 在各样原逻辑standby中创建数量库链,连接受新的primary

注意,数据库链中用来连接新primary的用户必须具有SELECT_CATALOG_ROLE角色。

JSSLDG2>
alter session disable guard; 

会话已改成。

JSSLDG2>
create database link getjssweb connect to jss identified by jss using
‘jssweb’; 

数据库链接已开立。

JSSLDG2>
alter session enable guard; 

会话已转移。

说爱他美(Aptamil)下数据链是还是不是能够健康访问:

JSSLDG2>
select sysdate from dual@getjssweb; 

SYSDATE 

————– 

23-2月
-08

提示:关于alter
session enable|disable
guard语句,用于允许或禁止用户修改逻辑standby中的结构。例如:

JSSLDG2>
conn jss/jss 

已连接。

JSSLDG2>
select *from b; 

ID 

———- 

已选择8行。

JSSLDG2>
alter table b rename to a; 

alter
table b rename to a 

第 1
行出现错误:

ORA-16224:
Database Guard 已启用

JSSLDG2>
alter session disable guard; 

会话已改变。

JSSLDG2>
alter table b rename to a; 

表已转移。

二 、 重新起动SQL应用

在相继逻辑standby执行下列语句运行sql应用(注意更新dblinkName):

JSSLDG2>
alter database start logical standby apply new primary
getjssweb; 

数据库已改变。

一旦你运气好,等语句执行完事后,复苏进程就到位了。假若您11分不幸的相遇了ORA-16109错误,那么小编不得不告诉您,只怕你得重建逻辑standby了。所以,祝你好运吧:)

话语顺遂实施完现在,我们来证爱他美下:

JSSWEB>
alter system switch logfile; 

系统已转移。

JSSWEB>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

862 

JSSLDG2>
select sequence#,applied from
dba_logstdby_log; 

SEQUENCE#
APPLIED 


——– 

862
NO 

只顾:出现难题了!!

日志是传输过去了,但是逻辑standby并不曾起来应用,怎么回事?

咱们先来确认一下standby的各进度情形:

JSSLDG2>
select process,status,group#,thread#,sequence#,block#,blocks from
v$managed_standby; 

PROCESS
STATUS GROUP# THREAD# SEQUENCE# BLOCK#
BLOCKS 



———- ———- ———- 

ARCH
CLOSING 2 1 4 16385 1836 

ARCH
CLOSING 6 1 862 1 18 

RFS
IDLE N/A 0 0 0 0 

RFS
IDLE 3 1 863 2 1 

看起来也是常规的,接收完了862,正在等候863,然则,为啥不利用呢。

手工业查询一下新primary生成的存档日志情状:

JSSWEB>
select sequence#,name,COMPLETION_TIME from v$archived_log where
sequence#>855; 

SEQUENCE#
NAME COMPLETION_TIME 



——————- 

856
E:ORA10GORADATAJSSWEBARCLOG1_856_641301252.ARC 2008-02-21
10:15:42 

857
E:ORA10GORADATAJSSWEBARCLOG1_857_641301252.ARC 2008-02-21
10:16:46 

858
E:ORA10GORADATAJSSWEBARCLOG1_858_641301252.ARC 2008-02-23
14:15:18 

859
E:ORA10GORADATAJSSWEBARCLOG1_859_641301252.ARC 2008-02-23
14:56:55 

860
E:ORA10GORADATAJSSWEBARCLOG1_860_641301252.ARC 2008-02-23
14:57:03 

861
E:ORA10GORADATAJSSWEBARCLOG1_861_641301252.ARC 2008-02-23
16:58:14 

861
jssldg2 2008-02-23 16:58:16 

862
E:ORA10GORADATAJSSWEBARCLOG1_862_641301252.ARC 2008-02-23
17:08:57 

862
jssldg2 2008-02-23 17:08:57 

863
E:ORA10GORADATAJSSWEBARCLOG1_863_641301252.ARC 2008-02-23
17:19:48 

863
jssldg2 2008-02-23 17:20:59 

864
E:ORA10GORADATAJSSWEBARCLOG1_864_641301252.ARC 2008-02-23
17:21:11 

864
jssldg2 2008-02-23 17:21:13 

已选择13行。

发现了一丝丝划痕,大家的切换操作是早上3点左右拓展的,时期还爆发了系列号为860,861等等的归档文件,但从没传输至standby,是或不是因为这么些文件中富含了一有些应被采取的数目,由此造成standby接收到的新primary传输过来的存档scn与最后动用的scn不总是,所以不可能利用?再来验证一下:

JSSLDG2>
select applied_scn,latest_scn from
v$logstdby_progress; 

APPLIED_SCN
LATEST_SCN 


———- 

1259449
1284126 

果真如此,应用的scn与最后的scn确实不包容,剩下的就好化解了,把富有猜忌的应传输到standby的归档文件手工业复制到standby,然后经过alter命令注册一下:

JSSLDG2>
alter database register logical logfile
‘E:ora10goradatajssldg2stdLOG1_859_641301252.ARC’; 

数据库已改成。

JSSLDG2>
alter database register logical logfile
‘E:ora10goradatajssldg2stdLOG1_860_641301252.ARC’; 

数据库已改变。

JSSLDG2>
alter database register logical logfile
‘E:ora10goradatajssldg2stdLOG1_861_641301252.ARC’; 

数据库已转移。

提拔:复制文件的时候尽量把看似时间段的归档文件都拷过来,不用顾虑无用归档会不会影响到使用,oracle会自动判断归档中的scn,对于曾经选取过的健康意况下是不会重新使用的,因而我们把859,860,861全体复制过来。

再查看一下使用状态:

JSSLDG2>
select sequence#,applied from
dba_logstdby_log; 

SEQUENCE#
APPLIED 


——– 

862
CURRENT 

863
CURRENT 

嘿嘿,已经上马选择了。逻辑standby复苏成功!想起官方文书档案中有一句提醒,说的是在开辟新的primary数据库,生成数据字典在此以前,不要执行别的DDL,不然就不得不重建逻辑standby了,推测就是担心执行ddl后不幸触发日志切换,造成逻辑standby接收新primary传来的归档文件不总是,不可能八面后珑使用。

切换实现以往,在修补逻辑standby的同时,顺手打扫一下沙场,比如设置新primary数据库的备份策略,以及考虑什么修复前故障的primary等等,dba那份工作,人前看起来光鲜,假若你已经下定狠心要从事那行,那对于人后的费力一定要有深入心情准备哟,你看看像上边那种处境,primary只要随便宕个机,引之而来的工作量就够大家忙活的。

大概这一个时候dba供给的不单是保持清晰的大脑,还要能开拓思路,此时我们更无妨考虑在做剧中人物切换和修复损坏的primary之间做个选拔,终究哪个更快,哪个更省心一些呢,

您看,干dba那行,不仅压力大,不仅要本领过硬,不仅要耐心细致,关键时刻还要有限支撑清醒的血汗,额地神耶,太刺激啦,太有挑衅啦~~

监察逻辑standby

与物理standby的治本均等,oracle提供了一名目繁多动态品质视图来查阅逻辑standby的景况,有一对大家眼下已经接触过,而有一些,我们还尚未用过。。。。。

1、 DBA_LOGSTDBY_EVENTS 

能够把该视图看成逻辑standby操作日志,由此只要发生了错误,能够透过该视图查看近来逻辑standby都做了些什么。默许境况下,该视图保留100条事件的记录,可是你能够经过DBMS_LOGSTDBY.APPLY_SET()进程修改该参数。

例如:

JSSLDG2>
select event_time,status,event from
dba_logstdby_events; 

EVENT_TIME
STATUS EVENT 



—————————————- 

二〇〇九-03-06
08:58:11 ORA-16112: 日志挖掘和采纳正在停止

2010-03-06
09:02:00 ORA-16111: 日志挖掘和动用正在运维

二〇〇八-03-06
09:52:53 ORA-16128: 已成功完毕用户运维的终止利用操作

二零一零-03-12
15:52:53 ORA-16111: 日志挖掘和动用正在起步

二〇〇八-03-12
16:09:17 ORA-16226: 由于不支持而跳过 DDL ALTE奥迪Q5 DATABASE OPEN

二〇〇八-03-05
17:21:46 ORA-16111: 日志挖掘和动用正在起步

………………………… 

2、 DBA_LOGSTDBY_LOG 

该视图用来记录当前的存档日志应用景况,等同于物理standby中的v$archived_log,多数意况下,你只需求关注SEQUENCE#,APPLIED,即查看日志序号和是或不是使用,当然该视图还是能够提供更加多音信,比如动用的scn,应用时间等,例如:

JSSLDG2>
select sequence#,first_change#,next_change#,timestamp,applied from
dba_logstdby_log; 

SEQUENCE#
FIRST_CHANGE# NEXT_CHANGE# TIMESTAMP
APPLIED 



——– 

869
1319212 1319811 2008-03-12 16:09:15 CURRENT 

平常状态下,该查询只会回去几条记下,假使说你的数据库操作十三分频仍,恐怕记录数会稍多一些,但假若记录数分外多,这你大概就必要关心一下,是或不是出了什么样难题,难道sql应用尚未运维?

3、 V$LOGSTDBY_STATS 

从名字就大概猜的出来,该视图突显的是场合消息,没错,你猜对了,该视图正是用来显示LogMiner的计算信息及气象。

JSSLDG2>
select *from v$logstdby_stats; 

NAME
VALUE 


————— 

number
of preparers 1 

number
of appliers 5 

maximum
SGA for LCR cache 30 

parallel
servers in use 9 

maximum
events recorded 100 

preserve
commit order TRUE 

transaction
consistency FULL 

record
skip errors Y 

record
skip DDL Y 

record
applied DDL N 

……………………. 

4、 V$LOGSTDBY_PROCESS 

该视图突显当前log应用服务的连锁新闻。常用来诊断归档日志逻辑应用的性质难点(前面优化部分会有关联),包涵的音讯也很广:

v
身份消息:SID,SE翼虎IAL#,SPID

v
SQL应用进程:老总酷路泽DINATO中华V,
READEKuga, BUILDE奥德赛, PREPARE中华V, ANALYZECR-V, 或APPLIE帕杰罗

v
进程近日的图景:见status_code或status列

v
该进度方今操作redo记录最徐熙媛(Barbie Hsu)CN:high_scn列

例如:

JSSLDG2>
select sid,serial#,spid,type,status,high_scn from
v$logstdby_process; 

SID
SERIAL# SPID TYPE STATUS HIGH_SCN 




———- 

145
1 508 高管本田CR-VDINATO牧马人 ORA-16116: 无可用工作 1319851

146
2 2464 READELAND ORA-16240: 正在等待日志文件 (线程号 1, 系列号 870) 13一九八五1

143
1 1512 BUILDEENCORE ORA-16116: 无可用工作 1319722

142
1 陆仟 PREPARE中华V ORA-16116: 无可用工作 1319721

139
1 2980 ANALYZE奥迪Q7 ORA-16116: 无可用工作 13一九六六7

135
1 1648 APPLIE奥迪Q3 ORA-16116: 无可用工作 1319410

138
1 2332 APPLIE凯雷德 ORA-16116: 无可用工作 13一九四五9

132
1 2200 APPLIEEnclave ORA-16116: 无可用工作 1319423

134
1 4020 APPLIEXC90 ORA-16116: 无可用工作

……………………………………. 

5、 V$LOGSTDBY_PROGRESS 

该视图彰显log应用服务当前进展情况,比如当前应用到逻辑standby的scn及时间,sql应用起来选取的scn及时间,最终接受及运用的scn和时间等等。

例如:

JSSLDG2>
select * from v$Logstdby_progress; 

APPLIED_SCN
APPLIED_TIME RESTART_SCN RESTART_TIME LATEST_SCN LATEST_TIME
MINING_SCN MINING_TIME 




——————- 

1319810
2008-03-12 16:06:51 1319662 2008-03-12 16:03:22 1319810 2008-03-12
16:45:33 1319811 2008-03-12 16:06:51 

6、 V$LOGSTDBY_STATE 

该视图就最简便了,正是体现sql应用的大体情状,比如primary库的dbid啦,是或不是运维了实时应用啦,当前sql应用的景观啦之类。

在意state列,该列或然有下述的二种状态:

v
INITIALIZING:
LogMiner session已开立并开端化

v
LOADING
DICTIONAMuranoY: SQL应用调用LogMiner字典

v
WAITING
ON GAP: SQL应用正等待日志文件,恐怕有刹车

v
APPLYING:
SQL应用正在工作

v
WAITING
FO昂Cora DICTIONA汉兰达Y LOGS: SQL应用等待LogMiner字典消息

v
IDLE:
SQL应用工作12分美好,已经干的没什么可干了:)

例如:

JSSLDG2>
select * from v$Logstdby_state; 

PRIMARY_DBID
SESSION_ID REALTIME_APPLY STATE 



—————————— 

3408827880
42 Y APPLYING 

治本逻辑standby

1、 收到到的归档文件

前章曾经关系,逻辑standby应用完归档后会自动删除该归档文件,该本性你倘诺觉着不爽,没涉及,执行上边那一个进程,屏蔽掉它:

JSSLDG2>
EXECUTE DBMS_LOGSTDBY.APPLY_SET(‘LOG_AUTO_DELETE’,
FALSE); 

升迁:这种操作并非毫无意义,比如说逻辑standby打开了flashback
database,那若是您想复苏到事先的某些时间点,然后再接着应用,就不能够不要有该时间点后对应的存档,如若LOG_AUTO_DELETE为TRUE的话,显著使用过的存档就不设有了,想回都回不去。

2、 启航实时应用

暗中同意意况下,log应用服务会等待单个归档文件全体收到之后再起步应用(在前头redo传输服务中大家介绍了不一致情势的传输格局),借使standby端使用了standby
redologs,就能够打开实时应用(real-time
apply),那样dg就不供给再等待接受完归档文件,只要rfs将redo数据写入standby
redologs,即可通过M奥迪Q5P/LSP实时写向standby,那样就足以不择手段维持standby与primary的同台。

要运转逻辑standby的实时应用,只必要在开发银行逻辑standby应用时累加immediate子句即可,前边大家曾经重重次的彩排过,例如:

JSSLDG2>
ALTER DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE; 

3、 定义DBA_LOGSTDBY_EVENTS视图中事件记录的相干参数。

Dba_logstdby_events视图前面刚讲过,里面著录了逻辑standby的有个别操作事件,如果您期望修改该视图中记录的风浪消息的话,能够因此下列的措施:

譬如,希望该视图能够保留方今999条事件,能够因而执行下列语句:

JSSLDG2>
select *from v$logstdby_stats where name=’maximum events
recorded’; 

NAME
VALUE 


————— 

maximum
events recorded 100 

JSSLDG2>
alter database stop logical standby apply; 

数据库已变更。

JSSLDG2>
execute
dbms_logstdby.apply_set(‘max_events_recorded’,’999′);
 

PL/SQL
进度已成功做到。

JSSLDG2>
alter database start logical standby apply
immediate; 

数据库已变更。

JSSLDG2>
select *from v$logstdby_stats where name=’maximum events
recorded’; 

NAME
VALUE 


————— 

maximum
events recorded 999 

再比如说,你只要想在视图中记录ddl操作的新闻,能够通超过实际行下列语句:

JSSLDG2>
execute
dbms_logstdby.apply_set(‘RECORD_APPLIED_DDL’,’TRUE’); 

4、 点名对象跳过使用,请用DBMS_LOGSTDBY.SKIP

暗中认可情状下,接收自primary的redo数据中,全部能够被standby帮忙的操作都会在逻辑standby端执行,假设你希望跳过对少数对象的一点操作的话,DBMS_LOGSTDBY.SKIP就能被派上用场了。

先来看望dbms_logstdby.skip的语法:

DBMS_LOGSTDBY.SKIP

stmt
IN VARCHAR2, 

schema_name
IN VARCHAR2 DEFAULT NULL, 

object_name
IN VARCHAR2 DEFAULT NULL, 

proc_name
IN VARCHAR2 DEFAULT NULL, 

use_like
IN BOOLEAN DEFAULT TRUE, 

esc
IN CHAR1 DEFAULT NULL); 

除stmt外,此外都以可选参数,并且看字面意思就能领略其所指,上边不难描述一下stmt参数调用的重要字都以钦定值,详细见下列:

STMT关键字 

饱含的操作 

NON_SCHEMA_DDL 

不属于格局对象的兼具别的ddl操作 

提示:使用该重大字时, SCHEMA_NAME 和 OBJECT_NAME 两参数也不能够不钦赐。 

SCHEMA_DDL 

创办修改删除形式对象的持有ddl操作 ( 例如 :
tables, indexes, and columns) 

提示:使用该重庆大学字时, SCHEMA_NAME 和 OBJECT_NAME 两参数也务必钦命。 

DML 

Includes
DML statements on a table (for example: INSERT, UPDATE, and
DELETE) 

CLUSTER 

AUDIT
CLUSTER 

CREATE
CLUSTER 

DROP
CLUSTER 

TRUNCATE
CLUSTER 

CONTEXT 

CREATE
CONTEXT 

DROP
CONTEXT 

DATABASE
LINK 

CREATE
DATABASE LINK 

CREATE
PUBLIC DATABASE LINK 

DROP
DATABASE LINK 

DROP
PUBLIC DATABASE LINK 

DIMENSION 

ALTER
DIMENSION 

CREATE
DIMENSION 

DROP
DIMENSION 

DIRECTORY 

CREATE
DIRECTORY 

DROP
DIRECTORY 

INDEX 

ALTER
INDEX 

CREATE
INDEX 

DROP
INDEX 

PROCEDURE 

ALTER
FUNCTION 

ALTER
PACKAGE 

ALTER
PACKAGE BODY 

ALTER
PROCEDURE 

CREATE
FUNCTION 

CREATE
LIBRARY 

CREATE
PACKAGE 

CREATE
PACKAGE BODY 

CREATE
PROCEDURE 

DROP
FUNCTION 

DROP
LIBRARY 

DROP
PACKAGE 

DROP
PACKAGE BODY 

DROP
PROCEDURE 

PROFILE 

ALTER
PROFILE 

CREATE
PROFILE 

DROP
PROFILE 

ROLE 

ALTER
ROLE 

CREATE
ROLE 

DROP
ROLE 

SET
ROLE 

ROLLBACK
STATEMENT 

ALTER
ROLLBACK SEGMENT 

CREATE
ROLLBACK SEGMENT 

DROP
ROLLBACK SEGMENT 

SEQUENCE 

ALTER
SEQUENCE 

CREATE
SEQUENCE 

DROP
SEQUENCE 

SYNONYM 

CREATE
PUBLIC SYNONYM 

CREATE
SYNONYM 

DROP
PUBLIC SYNONYM 

DROP
SYNONYM 

TABLE 

ALTER
TABLE 

CREATE
TABLE 

DROP
TABLE 

TABLESPACE 

CREATE
TABLESPACE 

DROP
TABLESPACE 

TRUNCATE
TABLESPACE 

TRIGGER 

ALTER
TRIGGER 

CREATE
TRIGGER 

DISABLE
ALL TRIGGERS 

DISABLE
TRIGGER 

DROP
TRIGGER 

ENABLE
ALL TRIGGERS 

ENABLE
TRIGGER 

TYPE 

ALTER
TYPE 

ALTER
TYPE BODY 

CREATE
TYPE 

CREATE
TYPE BODY 

DROP
TYPE 

DROP
TYPE BODY 

USER 

ALTER
USER 

CREATE
USER 

DROP
USER 

VIEW 

CREATE
VIEW 

DROP
VIEW 

诸如,你想跳过jss用户下对tmp1表的dml操作,能够通超过实际施下列语句达成(执行该进度前需求先结束redo应用):

JSSLDG2>
alter database stop logical standby apply; 

数据库已改变。

JSSLDG2>
execute
dbms_logstdby.skip(‘DML’,’JSS’,’TMP1′);
 

PL/SQL
进程已成功达成。

JSSLDG2>
alter database start logical standby apply; 

数据库已改成。

提示:DBMS_LOGSTDBY.SKIP的效应11分强大,限于篇幅,那里仅举示例,而且由于其操作十三分灵活,此篇笔者也不只怕就其用法做个一一列举,因而,更增加的操作方法就留待看官们下头自行发现去啊:)

修改逻辑standby端数据

大家前边提到,逻辑standby2个极具实用价值的风味正是能够边查询边应用,因而将其做为报表服务器专供查询是个很不利的想法,而且逻辑standby相对于物理standby而言更具灵活性,比如我们得以在逻辑standby上,对一些表创设primary库上并不方便人民群众创制的目录,约束,甚至足以做dml,ddl操作(当然,须要专注不要毁掉了与primary之间联合的逻辑关系)。不过鉴于此时dg依然控制着对逻辑standby表的读写操作,因而,借使你想对逻辑standby中的数据做些什么的话,alter
session database disable|enable
guard语句就必须牢记在心了,它有着像“芝麻开门”一样神奇的力量,不信?下边我们就来感受一下吧。

1、 逻辑standby端执行ddl

在逻辑standby端初阶了redo应用的状态下,执行ddl操作:

JSSLDG2>
create table tmp55 as select * From b; 

create
table tmp55 as select * From b 

第 1
行出现谬误:

ORA-01031:
权限不足

探望,出错了吗~~~

JSSLDG2>
alter session disable guard; 

会话已转移。

JSSLDG2>
create table tmp55 as select * From b; 

表已开立。

唯有关闭了guard保养之后,才能操作数据,然后别忘了再启用guard,以制止不上心的操作对逻辑standby的布置造成影响。

JSSLDG2>
alter session enable guard; 

会话已转移。

升迁:oracle建议依然尽量不要在逻辑standby执行实施dml之类操作,避防破解其与primary之间联合的逻辑关系,当然,那只是个建议,要是您曾经仔细看完了3.1章,并且对数码库表结构及仓库储存结构了如指掌,这您就爱干嘛爱嘛。

2、 裁撤对象同步

假如说,有个别表大概数额不需求dataguard爱惜(比如有个别在逻辑standby端生成的计算表),那个时候就必要DBMS_LOGSTDBY.SKIP,前头已经介绍过了dbms_logstdby.skip的骨干用法,上边大家来具体演示一下!

上面我们只要standby端有一批表名为tmp初阶的表,那张表不再供给保证与primary的联手,那么依据步骤执行下列语句,sql应用即可跳过那几个表:

老规矩,先停了redo应用

JSSLDG2>
alter database stop logical standby apply; 

数据库已变更。

JSSLDG2>
execute
dbms_logstdby.skip(‘SCHEMA_DDL’,’JSS’,’TMP%’);
 

–跳过对象的ddl操作

PL/SQL
进程已成功做到。

JSSLDG2>
execute
dbms_logstdby.skip(‘DML’,’JSS’,’TMP%’);
 

–跳过对象的dml操作

PL/SQL
进程已成功做到。

JSSLDG2>
ALTER DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE; 

数据库已转移。

留神其中的%,该符号为通配符,作用与在sql语句中的相同。

OK,下边来测试一下,先看看逻辑standby中表的音讯,大家选取两张表,一张是大家前边早已钦赐了跳过的表tmp1,另一张是经常表b:

JSSLDG2>
select max(aa) from jss.tmp1; 

Max(aa) 

——————– 

JSSLDG2>
select max(id) from jss.b; 

Max(id) 

———- 

JSSLDG2>
select sequence#,applied from
dba_logstdby_log; 

SEQUENCE#
APPLIED 


——– 

872
YES 

下一场在primary数据库执行插入操作

JSSWEB>
select max(aa) from jss.tmp1; 

Max(aa) 

——————– 

JSSWEB>
insert into jss.tmp1 values (‘i’); 

已创建 1
行。

JSSWEB>
insert into jss.b values (10); 

已创建 1
行。

JSSWEB>
commit; 

交给成功。

JSSWEB>
alter system switch logfile; 

系统已转移。

JSSWEB>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

873 

再来看看逻辑standby端的一道意况:

JSSLDG2>
select sequence#,applied from
dba_logstdby_log; 

SEQUENCE#
APPLIED 


——– 

873
YES 

明明日志已经收到,再看看数据:

JSSLDG2>
select max(id) from b; 

Max(id) 

———- 

10 

JSSLDG2>
select max(aa) from jss.tmp1; 

Max(aa) 

——————– 

b表已使用,而tmp1表则无变化。

3、 复原对象同步

倘使说有些表有个别时候打消了伙同,未来梦想再苏醒同步,没难题,DBMS_LOGSTDBY家大业余大学,它还有个叫UNSKIP的门下正是专职干部这些的。

咱俩来看一下dbms_logstdby.unskip的语法:

DBMS_LOGSTDBY.UNSKIP

stmt
IN VARCHAR2, 

schema_name
IN VARCHAR2, 

object_name
IN VARCHAR2); 

三项均为必选参数,各参数的定义与skip进程同样,那里不再复述。

此地我们来演示恢复生机tmp%表的联合署名。

JSSLDG2>
select *from dba_logstdby_skip; 

ERROR
STATEMENT_OPT OWNER NAME U E PROC 



——————– 

N
SCHEMA_DDL JSS TMP% Y 

N
DML JSS TMP% Y 

N
DML JSS TMP1 Y 

…….. 

JSSLDG2>
alter database stop logical standby apply; 

数据库已改变。

JSSLDG2>
execute
dbms_logstdby.unskip(‘DML’,’JSS’,’TMP1′); 

–本步操作是为消除历史遗留难点,不用关怀

PL/SQL
进度已成功做到。

JSSLDG2>
execute
dbms_logstdby.unskip(‘DML’,’JSS’,’TMP%’);
 

PL/SQL
进程已成功做到。

JSSLDG2>
execute
dbms_logstdby.unskip(‘SCHEMA_DDL’,’JSS’,’TMP%’);
 

PL/SQL
进度已成功做到。

跳过同步已经撤回了,紧接着我们必要再调用dbms_logstdby.instantiate_table进度重新联合一下跳地的目的,将skip那段时日,primary对tmp1表所做的操作同步过来(就小编看来,instantiate_table进度实际上是借助dblink重建了叁回对象),以保证与primary的均等。Dbms_logstdby.instantiate_table的语法如下:

DBMS_LOGSTDBY.INSTANTIATE_TABLE

schema_name
IN VARCHAR2, 

table_name
IN VARCHAR2, 

dblink
IN VARCHAR2); 

使用DBMS_LOGSTDBY.INSTANTIATE_TABLE进度重新履行一入手拉手(执行前别忘了暂停redo应用):

JSSLDG2>
EXECUTE
DBMS_LOGSTDBY.INSTANTIATE_TABLE(‘JSS’,’TMP1′,’GETJSSWEB’);
 

PL/SQL
进程已成功做到。

JSSLDG2>
select *from jss.tmp1; 

AA 

——————– 

已选择9行。

数码已重建,上面测试一下该表的redo应用是或不是苏醒了。

JSSWEB>
insert into jss.tmp1 values (‘j’); 

已创建 1
行。

JSSWEB>
insert into jss.tmp1 values (‘k’); 

已创建 1
行。

JSSWEB>
commit; 

提交成功。

JSSWEB>
alter system switch logfile; 

系统已变更。

JSSWEB>
select max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

877 

启航逻辑standby端的redo应用,看看对象的施用情形:

JSSLDG2>
alter database start logical standby apply
immediate; 

数据库已转移。

JSSLDG2>
select sequence#,applied from
dba_logstdby_log; 

SEQUENCE#
APPLIED 


——– 

875
YES 

876
YES 

877
YES 

JSSLDG2>
select *from jss.tmp1; 

AA 

——————– 

已选择11行。

OK,恢复生机不荒谬啦!

小心啊,此处大家领略明了的知晓我们事先只操作了tmp1一张表,如若是明媒正娶使用的话,那您恐怕有必不可军长有着tmp开始的表都同步一下,不然有大概会造成数据丢失的哟。

尤其事件的操纵

日子紧任务急,呵呵,那里三思就只描述流程,进程就不做示范了,相信你的灵气,你早晚能看懂。

1、 导入传输表空间

v
第一步:屏蔽guard保护,逻辑standby端操作

SQL>
ALTER SESSION DISABLE GUARD; 

v
第2步:导入传输表空间,逻辑standby端操作

具体操作步骤可参看三思事先的笔记:使用可传输表空间的特色复制数据!

v
第②步:苏醒guard爱惜(可能直接退出本session也成),逻辑standby端操作

SQL>
ALTER SESSION ENABLE GUARD; 

v
第肆步:导入传输表空间,primary端操作

同第②步。

2、 使用物化视图

SQL应用不帮助下列对物化视图的ddl操作:

v
create/alter/drop
materialized view 

v
create/alter/drop
materialized view log 

于是,对于现有逻辑standby,primary端对物化视图的操作不会传播到standby端。不过,对于primary成立物化视图之后创建逻辑standby,则物理视图也会存在于逻辑standby端。

v
对于同时设有于primary和逻辑standby的ON-COMMIT物化视图,逻辑standby会在业务提交时自动刷新,而对此ON-DEMAND的物化视图不会活动刷新,须要手动调用dbms_mview.refresh进度刷新。

v
对于逻辑standby端建立的ON-COMMIT物化视图会自动珍视,ON-DEMAND物化视图也照旧须要手工业调用dbms_mview.refresh进度刷新。

3、 触发器及约束的运作形式

默许景况下,约束和触发器同样会在逻辑standby端寻常工作。

对此有sql应用维护的自律和触发器:

v
约束:由于封锁在primary已经济检察查过,因而standby端不要求再一次检查

v
触发器:primary端操作时结果被记录,在standby端直接被使用。

尚无sql应用维护的羁绊和触发器:

v
约束有效

v
触发器有效

优化逻辑standby

1、 创建Primary
Key RELY 约束

好几景况下能够使得增强sql应用效用,具体可参见第1片段率先章。

2、 变动计算新闻

其一很不难了然嘛,因为cbo要用,生成格局即可用analyze,也得以用dbms_stats包。看您个人喜好了。

3、 调动进度数

A) .调整APPLIER进程数

首先查看当前有空的applier进度数:

JSSLDG2>
SELECT COUNT(*) AS IDLE_APPLIER FROM
V$LOGSTDBY_PROCESS 

2
WHERE TYPE = ‘APPLIER’ and status_code =
16166; 

IDLE_APPLIER 

———— 

提示:

status_code
= 16166 表示经过是悠闲状态,能够见到”STATS”为”ORA-16116: no work
available”,当然空闲的applier进度数为0不肯定意味着接纳使用卓殊繁忙,也有大概是因为眼前没什么须求利用的日记,由此照旧选择进度都没运维:)

反省事务的应用意况:

JSSLDG2>
select name,value from v$logstdby_stats where name like
‘TRANSACTION%’; 

NAME
VALUE 


——- 

transactions
ready 896 

transactions
applied 871 

假使ready-applied的值比applier进度数的两倍还要大,则印证你有供给考虑扩充applier进度的数量了,反之假若applied与ready的值大概大,或然其差比applier进度数还小,则表达applier进度数偏多,你有必不可少考虑拾叁分减小进度的数额。

只要承认当前applier进度都丰富繁忙,要扩大applier进度,可按如下步骤操作:

停止sql应用

ALTER
DATABASE STOP LOGICAL STANDBY APPLY;

调整applier进程数为20,私下认可是四个

EXECUTE
DBMS_LOGSTDBY.APPLY_SET(‘APPLY_SERVERS’,
20); 

重启sql应用

ALTER
DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE; 

B) .调整PREPARER进程数

亟待调动preparer进度数的火候不多,日常只有一种情景:applier进程有空暇,transactions
ready还广大,但尚无空余的preparer进程,那时候你只怕必要充实部分preparer进度。

要反省种类是不是存在那种情景,能够通过下列的sql语句:

第二检查空闲preparer进程数量:

SELECT
COUNT(*) AS IDLE_PREPARER FROM V$LOGSTDBY_PROCESS WHERE TYPE =
‘PREPARER’ and status_code = 16166; 

反省作业的应用情状:

select
name,value from v$logstdby_stats where name like
‘TRANSACTION%’; 

翻看当前空余的applier进程数:

SELECT
COUNT(*) AS IDLE_APPLIER FROM V$LOGSTDBY_PROCESS WHERE TYPE =
‘APPLIER’ and status_code = 16166; 

倘诺确实必要调动preparer进度数量,能够依照下列步骤,例如:

停止sql应用

ALTER
DATABASE STOP LOGICAL STANDBY APPLY;

调动preparer进度数量为4(默许唯有贰个preparer进度)

EXECUTE
DBMS_LOGSTDBY.APPLY_SET(‘PREPARE_SERVERS’, 4);

重启sql应用

ALTER
DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

4、 调整LC奥迪Q5使用的内部存款和储蓄器

执行下列语句,查询当前LC宝马X3可用的最大内存:

JSSLDG2>
select * from v$logstdby_stats where name=’maximum SGA for LCR
cache’; 

NAME
VALUE 


——————– 

maximum
SGA for LCR cache 30 

要追加LC牧马人可用的内部存储器,根据下列步骤操作:

停止sql应用:

JSSLDG2>
alter database stop logical standby apply; 

数据库已转移。

调动内部存储器大小,注意暗中同意单位是M:

JSSLDG2>
execute
dbms_logstdby.apply_set(‘MAX_SGA’,100); 

PL/SQL
进度已成功做到。

重启sql应用

JSSLDG2>
alter database start logical standby apply
immediate; 

数据库已改变。

5、 调动业务应用措施

暗中同意情形下逻辑standby端事务应用顺序与primary端提交顺序相同。

若果您愿意逻辑standby端的作业应用不要遵照顺序的话,能够根据下列的步调操作:


 停止sql应用:

SQL>
ALTER DATABASE STOP LOGICAL STANDBY APPLY; 


 允许工作不依据primary的交付顺序应用

SQL>
EXECUTE DBMS_LOGSTDBY.APPLY_SET(‘PRESERVE_COMMIT_ORDER’,
‘FALSE’); 


 重新启航sql应用

SQL>
ALTER DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE; 

苏醒逻辑standby依照作业提交顺序应用的话,依照下列步骤:


 依然先甘休sql应用:

SQL>
ALTER DATABASE STOP LOGICAL STANDBY APPLY; 


 重置参数PRESE奥德赛VE_COMMIT_O本田UR-VDE冠道的先导值:

SQL>
EXECUTE
DBMS_LOGSTDBY.APPLY_UNSET(‘PRESERVE_COMMIT_ORDER’); 


 重新开动sql应用:

SQL>
ALTER DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE; 

于data
guard的数据选用而言,幕后的编剧是LOG_ARCHIVE_DEST_n。本章节大家要学习的内容会无独有偶,那三回,希望您能理清要上学的要害。

至于redo传输服务(Redo
Transport
Services),它不但决定着传输redo数据到别的数据库,同时还管理着消除由于互联网中断造成的归档文件未收到的经过。

一 、怎么着发送数据

在primary数据库,DataGuard能够运用归档进度(A宝马X5Cn)或许日志写进程(LGWSportage)收集redo数据并传导到standby,但是不管你选用归档进程也好,日志写进度也好,都由二个宗旨参数来支配,它就是:LOG_ARCHIVE_DEST_n,所以,大家先来:

1、认识LOG_ARCHIVE_DEST_n参数

LOG_ARCHIVE_DEST_n(n从1到10)定义redo文件路径。该参数定义必须经过location或service指明归档文件路径。location表示当地路径,service常常是net
service name,即接收redo数据的standby数据库。

提示:

对此每贰个LOG_ARCHIVE_DEST_n参数,还有三个应和的LOG_ARCHIVE_DEST_STATE_n参数。LOG_ARCHIVE_DEST_STATE_n参数用来钦点相应的LOG_ARCHIVE_DEST_n参数是不是见效,拥有陆个属性值:

l
ENABLE:默许值,表示同意传输服务。

l
DEFEHaval:该属性钦点相应的log_archive_dest_n参数有效,但暂不使用。

l
ALTEQX56NATE:禁止传输,然而一旦别的相关的指标地的连年通通失败,则它将变成enable。

l
RESET:成效与DEFETiguan属性类似,可是若是传输指标地在此以前有过不当,它会去掉其拥有错误新闻。

比如说:钦命位置归档路径

LOG_ARCHIVE_DEST_1=’LOCATION=/arch1/chicago/’

LOG_ARCHIVE_DEST_STATE_1=ENABLE

又例如,钦点redo传输服务

LOG_ARCHIVE_DEST_2=’SERVICE=jsspdg’

LOG_ARCHIVE_DEST_STATE_2=ENABLE

当然,LOG_ARCHIVE_DEST_n参数的性质远不止这一个。

那个参数都足以经过alter
system
set语句直接联机械修理改,修改会在primary下次日志切换时生效,当然你一向shutdown再重启数据库的话也会即时生效:)比如:

SQL>
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=’SERVICE=jsspdg
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)’;

除show
parameter
log_archive_dest外,还足以因而询问V$A奥德赛C风肿E_DEST视图的章程查看参数配置,并且V$A奥迪Q7C尖锐湿疣E_DEST视图还足以看出更详尽的一路新闻。

2、使用ARCn归档redo数据

暗中同意景况下,redo传输服务使用A路虎极光Cn进度归档redo日志。可是A奥迪Q5Cn归档进程只援救最高质量的尊崇形式。假若standby数据库处于其余类型的爱惜方式,那你必须运用LGW昂Cora传输redo数据(为啥会这么呢,三思再来白话几句,大家通晓对于最大保障和最高可用性三种情势而言,其实强调的都以一些,redo数据必须实时应用于standby数据库,大家再看来归档,归档是做哪些吧?是备份已到位切换的redolog,实现切换的redolog代表着什么吧?表明该redo中颇具数据均已交由至数据文件,那好大家再回过头来看,数据已成功提交的redo并且成功了切换还被复制了一份做为归档,那些时候才准备起先传输到standby数据库,那与最大保证和最高可用所要求的实时应用差的几乎不是一点半点,未来,你是还是不是精晓了干吗ALANDCn归档进程只好帮忙最高质量的尊敬形式)。

1).开头化参数控制AGL450Cn归档行为

影响A中华VCn进度的开头化参数有:

LOG_ARCHIVE_DEST_n及LOG_ARCHIVE_MAX_PROCESSES。

关于LOG_ARCHIVE_DEST_n参数的布局后边介绍了一部分,我们领略该参数的片段属性与ATiggoCn进度有关,而LOG_ARCHIVE_MAX_PROCESSES开始化参数则可视作是专为A索罗德Cn进衡量身构建,该参数用来钦命最大可被调用的AHavalCn进程的多少,注意大家内定的是最大值,相当于说数据库在运作进度中是会根据归档的任务劳顿程度自动调节归档进度数量的。当然假如说你觉着您的种类归档职责比较繁重,能够通过安装较多的存档进程数量增进归档并发度,不过那个数字也不是越高越好,过高的存档进程数量有只怕反倒影响系统品质(所谓物极必反正是其一意思,所以那中间是内需您来把握平衡的,当然那上边更加多涉及到调优了,非本章所要讲解之根本,就不多说了)。调整该参数能够由此下列语句:

ALTER
SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = n;

注:n>0
and n<=30

2).A猎豹CS6Cn的存档进程

primary数据库日志产生切换时就会运营归档:

l
在primary数据库(假诺有1个归档进度),一旦AQX56C0历程完结redolog的存档,A卡宴C1进度即早先传输该归档到standby数据库的内定路线。

l
在standby数据库,XC90FS进程轮流将redo数据写入standby
redo
log,再由standby数据库中的A凯雷德Cn过程将其写入归档,然后通过REDO应用或SQL使用将数据利用到standby数据库。

如图:[024_1.gif]

wwwlehu6.vip乐虎官网 1

除此以外,因为当地的存档进度与长途归档进度间并无联系,注意借使当地存在删除完结备份的存档的方针,需求在剔除此前率先肯定这么些归档已经被传输到standby数据库。

3、使用LGWR归档redo数据

选拔LGW卡宴进程与行使A汉兰达Cn进程有肯定差别,LGW大切诺基无须等待日志切换及达成归档。

Standby数据库的LGWHaval进度会先选择1个standby
redo
log文件映射primary数据库当前redolog的sequence(以及文件大小),一旦primary数据库有redo数据产生,视LOG_ARCHIVE_DEST_n开头化参数中sync或async属性设置,以协同或非同步方式传输到standby数据库。

要一连下边包车型客车剧情,我们务必先通晓与LGW福特Explorer归档进度密切相关的多少个LOG_ARCHIVE_DEST_n参数的习性,假使选取LGWSportage归档redo数据,那么在LOG_ARCHIVE_DEST_n中必须钦赐SE路虎极光VICE和LGWEvoque属性以允许日志传输服务使用LGW中华V进度来传送redo数据到长途归档指标地。大家还索要钦命SYNC(同步)照旧ASYNC(异步)的传输情势,倘诺钦定SYNC属性(假若不肯定钦命的话,暗中同意是SYNC),则primary数据库任何会发出redo操作都会联合触发互连网I/O,并且等到网络I/O全体做到才会连续上面包车型大巴交由,而假使钦赐了ASYNC属性,则会primary数据库的操作会先记录online
redologs,然后再传输到standby。下边详细看看其流程:

1).LGWKoleos同步归档的流程

譬如说初步化参数中有如下设置:

LOG_ARCHIVE_DEST_1=’LOCATION=E:ora10goradatajssweb

LOG_ARCHIVE_DEST_2=’SERVICE=jsspdg
LGWR SYNC NET_TIMEOUT=30′

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

假若设置LOG_ARCHIVE_DEST_n伊始化参数SYNC属性,提议还要设置NET_TIMEOUT属性,该属性决定互联网连接的过期时间,固然超时仍无响应,则会回来错误消息。

图:[024_2.gif]

wwwlehu6.vip乐虎官网 2

来得了primary数据库LGWKoleos写online
redologs的同时,同步传输redo数据到standby数据库的长河。

咱俩还是分两某个来解读:

l
在primary数据库,LGW瑞鹰提交redo数据到LNSn(LGW智跑Network Server
process)进程(n>0),LNSn运行互连网传输。

l
standby数据库的OdysseyFS(Remote
File Server)将吸收到的redo数据写入standby
redolog。尤其注意,在此时期,primary数据库的事务会一贯维持,直到全数全体含LGWLX570SYNC属性的LOG_ARCHIVE_DEST_n钦点路线均已做到接受。

只要primary数据库执行日志切换,就会级联触发standby的ATiguanCn将standby
redo写入归档,然后经过redo应用(M景逸SUVP进程)或sql应用(LSP进度)读取归档文件将数据运用至standby数据库。(假诺启用了实时应用的话,MLacrosseP/LSP会间接读取standby
redolog并运用到standby数据库,无须再等待归档)。

2).LGWRAV4差异台归档的流程

诸如开端化参数中有如下设置:

LOG_ARCHIVE_DEST_1=’LOCATION=E:ora10goradatajssweb

LOG_ARCHIVE_DEST_2=’SERVICE=jsspdg
LGWR ASYNC’

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

ASYNC格局归档就不必要再钦赐NET_TIMEOUT了,因为LGW福特Explorer与LNSn之间已非亲非故乎,所以钦赐不钦点NET_TIMEOUT就都没任何影响了,因而对此异步传输而言,即使互连网现身故障导致primary与standby之间通讯中断,也并不会潜移默化到primary数据库的提交。

图:[024_3.gif]

wwwlehu6.vip乐虎官网 3

呈现了LNSn进度异步传输redo数据到standby数据库EnclaveFS进程的历程。

粗粗步骤与联合传输相同,差异只在LNSn进程那里,LGWLAND写多少到online
redolog,LNSn进度访问online
redolog并传输数据到长途standby的WranglerFS而不再与本地LGW奇骏之间有联系。standby数据库方面包车型客车处理逻辑依旧不变。

如曾几何时候发送

那小节包涵多个内容,发送什么,以及发送给哪个人:

1、 通过VALID_FO奥迪Q5属性钦定传输及收受指标

valid_for,字面掌握正是基于xx有效,再合作其redo_log_type,database_role属性,大家大概能够将其知晓为:为钦赐剧中人物设置日志文件的存档路径,首要目标是为了帮忙一旦爆发剧中人物切换操作后数据库的正规运作。

redo_log_type可安装为:ONLINE_LOGFILE,STANDBY_LOGFILE,ALL_LOGFILES

database_role可安装为:P奥迪Q5IMA帕杰罗Y_ROLE,STANDBY_ROLE,ALL_ROLES

注意valid_for参数是有默许值的,假诺不设置的话,其暗许值等同于:

valid_for=(ALL_LOGFILES,ALL_ROLES) 

推荐介绍主动设置该参数而不用选用暗中认可值,有些情状下暗中同意的参数值不必然合适,比如逻辑standby就不像物理standby,逻辑standby处于open情势,不仅有redo数据同时还包括三种日志文件(online
redologs,archived redologs以及standby
redologs)。多数动静下,逻辑standby生成的online redologs与standby
redologs生成在同样的目录内。由此,推荐你对种种*dest设置合适的valid_for属性。

2、 通过DB_UNIQUE_NAME属性钦命数据库

DB_UNIQUE_NAME属性首要是为有个别数据库内定唯一的数据库名称,那就使得动态添加standby到含有RAC结构的primary数据库的dg配置成为恐怕,并且对于log_archive_dest_n中的service属性,其属性值对应的也决然是db_unique_name,也正因有了db_unique_name,redo数据在传输进程中才能肯定传输到你愿意被传输到的数据库上。当然要保证传输redo数据到钦点服务器,除了db_unique_name,log_archive_dest_n之外,还有3个起初化参数:log_archive_config。

关于log_archive_config呢,大家前边有过局地接触,在第2有的第①节中也有一对简易的牵线,log_archive_config开头化参数还包蕴几本特性,能够用过控制数据库的传输和接受,SEND,NOSEND,RECEIVE,NORECEIVE:

l
SEND允许数据库发送数据到远端

l
RECEIVE则允许standby接收来自其余数据库的多少

l
NOSEND,NORECEIVE自然正是不准喽。

比如,设置primary数据库不收受任何归档数据,能够做如下的设置:

LOG_ARCHIVE_CONFIG=’NORECEIVE,DG_CONFIG=(jssweb,jsspdg)’ 

自然,你一样也须求小心,一旦做了以上的安装,那么如若该服务器发生了脚色切换,那它还是也远非接收redo数据的能力啊。

出错了咋整

对于存档战败的拍卖,LOG_ARCHIVE_DEST_n参数有多少个属性可以用来支配一旦向归档进程中出现故障时应当使用什么方式,它们是:

一 、REOPEN
钦命时间后再度尝试归档

运用REOPEN=seconds(暗中同意=300)属性,在钦命时间重新尝试向归档指标地展开归档操作,假若该参数值设置为0,则只要失利就不会再尝试再一次连接并发送,直到下次redo数据再被归档时会重新尝试,不过并不会归档到曾经破产的存档目标地,而是向替代人员的存档目标地发送。

② 、ALTEPAJERONATE
钦命板凳人员的存档目标地

alternate属性定义一个替代人员的存档指标地,所谓替代人员正是倘诺主归档目标地因种种原因不大概运用,则临时向alternate属性中钦定的门路写。

内需专注一点,reopen的性质会比alternate属性优先级要高,假诺你钦命reopen属性的值>0,则lgwr/arch会首先尝试向主归档指标地写入,直到达到最大重试次数,假设依旧写入退步,才会向alternate属性钦定的门道写。

3、MAX_FAILURE
控制退步尝试次数

max_failure属性钦赐贰个最大退步尝试次数,大家应该能够联想到reopen,没错两者平常是应当协作使用,reopen内定战败后重新尝试的小运周期,max_failure则控制退步尝试的次数,如例:

LOG_ARCHIVE_DEST_1=’LOCATION=E:ora10goradatajsspdg
REOPEN=60 MAX_FAILURE=3′

管制归档中断

设若primary数据库中的归档日志没能成功发送至standby数据库,就会产出归档中断。当然一般状态下您不需求操心这或多或少,因为dg会自动物检疫查和测试并尝试复制丢失的存档以缓解中断难题,通过什么化解吗?FAL(Fetch
Archive Log)。

FAL分server和client,前边创立步骤中讲开始化参数时或者大家也注意到了。FAL
client自动主动要求传输归档文件,FAL server则响应FAL
client发送的呼吁。多好的两口子啊。

FAL机制会自动处理下列类似的存档中断难点:

l
当创造物理或逻辑的standby数据库,FAL机制会自动获得primary数据库热备时爆发的归档文件。

l
当接收的归档文件出现下列的题材时,FAL机会会活动获得归档文件消除:

Ø
当接到到的存档在选用之后被删去时;

Ø
当收到到的存档所在磁盘损坏时;

l
当存在多少个大体standby时,FAL机制会自动尝试从其余standby服务器获取丢失的归档文件。

让大家探听这些事物不是为着让您做什么,而是希望您放心,oracle会管理好这一个,若是它从未管理好,你精通这一个原理,你也能分析一下它为何没能管理好,通过什么办法能够促使它过来有效管理的能力,当然你早晚要本身入手,也可以,上边通过示范来证明手工业处理归档中断(注意,我只描述步骤,演示小编就不做了。因为三思今后用地最大爱慕情势,不会丢掉归档地说,哇哈哈哈:))

① 、 首先你要肯定一下standby是不是留存归档中断

能够经过查询v$archive_gap视图来规定,要是有记录就表示有停顿。

SQL>
select *from v$archive_gap; 

这一步的指标是为了取出对应的LOW_SEQUENCE#和HIGH_SEQUENCE#,若是有RAC的话,还供给小心一下THREAD#。

② 、 查找sequence对应的归档文件

SQL>
SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND
SEQUENCE# BETWEEN 7 AND 10; 

③ 、 复制对应的归档文件到standby

小心,倘使是RAC的话,要找对机器哟:)

下一场经过alter
database register logfile命令将那几个文件再一次注册一下,例如:

SQL>
ALTER DATABASE REGISTER LOGFILE
‘e:ora10gjsspdgxxxx.arc’; 

下一场重启redo应用即可。

对于逻辑standby的遗失归档处理多少复杂一丢丢,因为逻辑standby没有提供项目v$archive_gap;之类的视图,由此我们需求本身想艺术来辨别是不是存在丢失的事态,具体能够因而下列的语句:

SQL>
select thread#,sequence#,file_name from dba_logstdby_log

2
where next_change# not in ( 

3
select first_change# from dba_logstdby_log where l.thread# =
thread#) 

4
order by thread#,sequence#; 

找出丢失的归档文件后,接着的处理情势与物理standby相同。

有关有三模同学的荣誉事迹大家应该都闻讯了,有不认得的请自觉重温”名词先混个脸熟”篇,下边让三思就有三模同学的高明本领为大家做个展现。

 

为了方便大家更好的敞亮,大家先画2个表,表中讲述了分歧保养情势下LOG_ARCHIVE_DEST_n参数
应该设置 的 属性 :

 

最大保护

最高可能用

最高性能

REDO写进程

LGWR 

LGWR 

LGWR或ARCH

网络传输模式

SYNC 

SYNC 

LGWR进程时SYNC或ASYNC,ARCH进程时SYNC

磁盘写操作

AFFIRM 

AFFIRM 

AFFIRM或NOAFFIRM

是否需要standby redologs

YES 

YES 

可没有但推荐有

提示:

下边中的各项必要都以满意该爱慕形式的最低供给,那些须求都是据其性状而定的,同时您也毫无疑问要掌握,这一个供给仅只是保障你实现data
guard爱抚格局的安装,若是您确实通晓其天性的供给所企望满意的缘故,你还亟需做过多任何要求的办事。比如对于最高可用性而言,其一向目地是为着在某一台甚至多台主或备库瘫痪时,数据库还是可以够在极长期内苏醒服务,那就不光要求您将最高可用性爱慕方式的参数配置不错,还亟需你拥有足够多的standby数据库。听清楚了没?啥,木有?555555555,你在打击作者语言讲述的能力~~~

此外再强调贰回:最大保险和最高可用性都务求standby数据库配置standby
redo logs(当然假诺设想角色切换的话,主库肯定也是供给配备的),关于standby
redo logs的遗闻你能够参考第三某些的第1章1.3。

下边我们进入执行将一个data
guard配置从最高品质形式改为最高可用性情势:

一 、 首先查看当前的爱护情势—primary数据库操作

SQL>
select protection_mode,protection_level from
v$database; 

PROTECTION_MODE
PROTECTION_LEVEL 


——————– 

MAXIMUM
PERFORMANCE MAXIMUM PERFORMANCE 

贰 、 修改起始化参数
–primary数据库操作

SQL>
alter system set
log_archive_dest_2=’SERVICE=jsspdg 

2
OPTIONAL LGWR SYNC AFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 

3
DB_UNIQUE_NAME=jsspdg’; 

系统已改变。

③ 、 设置新的数据爱惜方式视同一律启数据库
–primary数据库操作

讲话分外简单,如下:

SQL>
alter database set standby database to maximize
availability; 

数据库已转移。

提示:maximize后可跟{PROTECTION
| AVAILABILITY | PE卡宴FO逍客MANCE},分别对应最大保卫安全,最高可用性及最高品质。

Down掉数据库,重新开动

SQL>
shutdown immediate 

数据库已经关门。

一度卸载数据库。

ORACLE
例程已经关门。

SQL>
startup 

ORACLE
例程已经起步。

Total
System Global Area 167772160 bytes 

Fixed
Size 1289484 bytes 

Variable
Size 121635572 bytes 

Database
Buffers 37748736 bytes 

Redo
Buffers 7098368 bytes 

数据库装载完成。

数据库已经打开。

四 、 看一下脚下的爱惜模式–primary数据库操作

SQL>
select protection_mode,protection_level from
v$database; 

PROTECTION_MODE
PROTECTION_LEVEL 


——————– 

MAXIMUM
AVAILABILITY MAXIMUM AVAILABILITY 

伍 、 修改standby开首化参数设置(首要考虑角色切换,假诺只测试的话本步可跳过)
—standby数据库操作

SQL>
alter system set log_archive_dest_2=’SERVICE=jssweb OPTIONAL LGWR
SYNC AFFIR M 

2
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=jssweb’; 

系统已改成。

查看当前的爱戴形式

SQL>
select instance_name from v$instance; 

INSTANCE_NAME 

—————- 

jsspdg 

SQL>
select protection_mode,protection_level from
v$database; 

PROTECTION_MODE
PROTECTION_LEVEL 


——————– 

MAXIMUM
AVAILABILITY MAXIMUM AVAILABILITY 

布局成功,正面顺便再测试一下。

⑥ 、 停掉standby数据库,再查看primary数据库状态

SQL>
select protection_mode,protection_level from
v$database; 

PROTECTION_MODE
PROTECTION_LEVEL 


——————– 

MAXIMUM
AVAILABILITY RESYNCHRONIZATION 

Standby数据库shutdown后,primary数据库爱惜级别切换为待同步。

方今我们早已接触了无数辅车相依的概念,大家都精通DataGuard通过使用redo维持primary与各standby之间的一致性,在后台默默无闻支撑着的就是风传中的Log应用服务。Log应用服务呢,又分两种艺术,一种是redo应用(物理standby使用,即介质复苏的款型),另一种是sql应用(逻辑standby使用,通过LogMiner分析出sql语句在standby端执行)。

 

一、 Log应用服务配置选项

1、 REDO数据实时应用

暗许情形下,log应用服务会等待单个归档文件全体接到之后再起步应用(在前方redo传输服务中大家介绍了不相同方式的传输格局),如若standby端使用了standby
redologs,就足以打开实时应用(real-time
apply),那样dg就不供给再等待接受完归档文件,只要rfs将redo数据写入standby
redologs,即可通过MRubiconP/LSP实时写向standby。

大体standby启用实时应用通过下列语句:

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE

逻辑standby启用实时应用通过下列语句:

SQL>
ALTER DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE; 

2、 REDO数据延迟使用

有实时就有延期,有些境况下您大概不指望standby与primary太过一道:),那就能够在log_archive_dest_n参数中钦点delay属性(单位为分钟,要是内定了delay属性,但并未点名值,则私下认可是28分钟)。注意,该属性并不是说延迟发送redo数据到standby,而是指明归档到standby后,开始使用的时候。

不过,即使在log_archive_dest_n中钦赐了delay属性,但假设你利用数据时内定了实时应用,则standby会忽略delay属性。此外,standby端仍是能够透过下列的口舌撤消延迟使用。

大体standby撤废延迟使用能够透过下列语句:

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
NODELAY; 

逻辑standby裁撤延迟使用能够通过下列语句:

SQL>
ALTER DATABASE START LOGICAL STANDBY APPLY
NODELAY; 

提醒:flashback
database也可说是延迟使用的一种方法。

二、 利用redo数据到大体standby

留神:
运维redo应用,物理standby供给首先运转到mount状态,然后再实施下列语句运行,大概终止redo应用。

1、 启动redo应用

v
前台应用

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE; 

v
后台应用

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
DISCONNECT; 

v
运维实时应用,附加USING
CU凯雷德RENT LOGFILE子句即可

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT
LOGFILE; 

2、 停止redo应用

SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
CANCEL; 

三、 动用redo数据到逻辑standby

注意:
启用sql应用,逻辑standby需求运转至open景色。

1、 启动sql应用

SQL>
ALTER DATABASE START LOGICAL STANDBY APPLY; 

若是要运行实时应用,附加immediate子句即可:

SQL>
ALTER DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE; 

2、 停止sql应用

SQL>
ALTER DATABASE STOP LOGICAL STANDBY APPLY; 

=============================================

若是您看过三思此前的多少个笔记连串,那么对于rman想必已经越发纯熟,操作那个一定也不是难点,假设你还尚无看过,建议你先回去看看,然后再回到操作必然也没格外,即使你势必不准备看,没提到,只要您严俊依据实施部分的步子操作,笔者深信不疑你一定也能够创立成功,操作应该也从不难点,可是假诺这么你也觉着尚未难点,那么作者要报告您,恐怕就那是最大的题材:不明了做过怎么,不知情该做什么样,不知情为何要做,一旦要求稍变,你依旧什么都不敢做。

你什么样都不用说,小编精晓,你还极度,下边,大家先来看你下发现的第一个难点,为啥要用rman创制物理standby?Oracle告诉大家,有三点:

 

l
奇骏MAN创设standby是经过primary的备份,因而不会对primary有其它的熏陶

l
SportageMAN自动重命名OMF的文书及路径结构。

l
OdysseyMAN修复归档日志文件并施行恢复以尽或然保障standby与primary数据一致相同。

当然,我们也应该通晓,上述这个都以形容词,它只是为了深化意识,说到此地再多白话几句,第2条呢还说的长逝(固然您不用rman备份,使用其余措施的备份制造standby也不会对primary造成影响),第1条第③条就完全不可靠了,并不是说它完结持续,恰恰相反,是它描述的太基础了,形容手法有标题,小编举个例子,比如您在鱼缸里见到一条鱼,你会不会刻画说哇那条鱼能够在水里游耶(死鱼才不会在水里游啊)~~所以鉴定分别能力很要紧,就算那一点自身做的还很不够,可是请首长们放心,笔者肯定会不遗余力的,作者肯定会抓实的,作者一定会持之以恒的!!!

回去那个难点上来,为何要用rman来成立物理standby呢,在作者眼里如若说有优势那么就一些:不难!

其余在此间三思更鲜明的提议,使用EscortMAN的duplicate命令只好一直开立物理standby,幸依然不幸?

一、 桑土绸缪工作

专注,在做其它操作从前,须求肯定以下几点:

l
拥有至少一份通过rman成立的备份;

l
已经在primary数据库设置了具备相关的开始化参数;

l
已经创建了standby的起首化参数文件并配备了装有相关的初始化参数;

l
已经配备了实例,NetService,Listener等;

l
启动standby实例到nomount状态;

然后:

① 、 通过rman创造standby的操纵文件

创办standby的主宰文件前边我们关系通过sql命令,使用卓殊简单,使用rman命令创设与之同理,并且有两种艺术开创示范如下:

1). 

RMAN>
backup current controlfile for standby; 

2). 

RMAN>
copy current controlfile for standby to
‘e:ora10goradatajssrmanJSSRMAN01.CTL’; 

贰 、 定制standby数据(日志)文件重命名策略

为何oracle要提供重命名策略呢?因为dg配置万分灵活,standby甚至足以与primary在同二个数据库。

哪些时候必要使用重命名策略呢?假诺standby与primary在同样台服务器,或即便不在同一台服务器,但standby的目录结构与primary分化,那三种情景下,都不能够不采用重命名策略。假使standby与primary不在同一台服务器,并且目录结构同样,这就不须要选择重命名策略。

哪些选择重命名策略呢?种种措施,比如大家的老朋友开首化参数:db_file_name_convert,log_file_name_convert。还有rman命令
SET NEWNAME
或CONFIGURE
AUXNAME等等 ,这么些相关参数、命令的施用我们都在”Duplicate复制数据库”连串中牵线并行使过,后边还会再也提及。

二、 大约流程

普普通通情状下,rman创制完standby之后不会自动执行recover。

设若你执行duplicate命令时没有点名dorecover参数,则rman自动根据上边包车型地铁手续操作:

1、 PAJEROMAN连接standby与primary,及catalog(若是运用了的话);

② 、 检索catalog(nocatalog的话是primary数据库的主宰文件),鲜明primary的备份以及standby控制文件;

③ 、 借使使用介质苏醒,KoleosMAN需求连接介质量管理理器以赢得所需备份数据;

四 、 苏醒standby控制文件到standby服务器;

⑤ 、 恢复生机primary数据库备份集中相应数据文件到standby服务器;

六 、 rman自动将standby数据库打开到mount状态,可是不会自动打开redo应用。

比方实施duplicate命令时钦定了dorecover参数,则rman会在推行完第6步后,接着执行下列的操作:

七 、 在具有数据都restored之后,rman自动执行recovery,若是recovery进度须求归档文件,但是这么些文件又不在本地盘,则rman会尝试从备份中赢得。

八 、 rman执行recovery在此以前,你能够透过点名time,scn,logfile
sequence来分明recovery的剧情,假诺什么都不内定,则rman平昔recover到结尾多个归档文件。

九 、 rman自动将standby数据库打开到mount状态,同样也不会自动打开redo应用。

三、 主意及步骤

差不离,能够分成二类:

1、 没有差距于目录结构的创制

duplicate不相同服务器相同目录结构成立standby的操作极为简约,你即不供给动用DB_FILE_NAME_CONVER/LOG_FILE_NAME_CONVELANDT之类参数,也不供给经过set
newname之类命令,基本步骤如下:

1)
确认保障已安装standby服务器中有着有关的开头化参数。

2)
确认备份集中文件scn大于或等于控制文件中的scn。

3)
假使急需,能够因此set命令钦赐time,scn或log序号以进行不完全恢复生机。

例如:set
until scn 152;

提醒:注意假诺有set,则set与duplicate必须在同1个run命令块中。

4)
假如没有布置活动分配通道的话,供给手工业钦点至少一条扶持通道。

5)
务必钦定nofilenamecheck参数,大家前边”duplicate复制数据库”连串中就曾涉嫌过,异机操作路径相同还少不了指定NOFILENAMECHECK。因为那边oracle表现的很傻,它不知道你要东山再起的门径是在另一台机械上,它只是觉得要苏醒到的门道怎么跟指标数据库表现的平等吗?会不会是要覆盖目的数据库啊,为了防止那种气象,于是它就报错。所以只要异机恢复生机,并且路径相同,那么您不可能不通过点名NOFILENAMECHECK来制止oracle的自动识别。

比如说脚本如下:

sql>
duplicate target database for standby nofilenamecheck
dorecover; 

只顾,dorecover并非是必须参数,假设您不点名的话,则duplicate修复数据文件到服务器,并机关将standby运维到mount状态,可是并不会履行恢复生机操作。

2、 差别目录结构的创立

对此不相同目录结构成立standby(与是还是不是相同台服务器就着力无关了),你要求对数据文件和日志文件路径重新定义,那你的挑选可就多多了哟:

a.
使用初叶化参数重定义数据文件及日志文件

关于db_file_name_convert和log_file_name_convert四个开首化参数的本领和套路大家早就都很熟谙了,所以啊那里就不多做牵线。duplicate命令在此间执行的时候与同一目录结构执行也没怎么两样,所以,你能够认为,那是不一致途径下创办standby中,最不难易行的措施。

b.
SET
NEWNAME命令重定义数据文件

步骤如下:

l
确认保证已设置standby服务器中有着有关的初叶化参数。

l
确认备份集汉语件scn大于或等于控制文件中的scn。

l
倘使必要,能够透过set命令钦赐time,scn或log序号以实践不完全苏醒。

l
假如没有配备活动分配通道的话,要求手工钦点至少一条扶持通道。

l
通过set
newname命令为standby数据文件钦命新路径

l
执行duplicate命令。

比如,脚本如下:

RUN 

#
Set new file names for the datafiles 

SET
NEWNAME FOR DATAFILE 1 TO ‘?/dbs/standby_data_01.f’;

SET
NEWNAME FOR DATAFILE 2 TO ‘?/dbs/standby_data_02.f’;

. .

DUPLICATE
TARGET DATABASE FOR STANDBY DORECOVER; 

c.
CONFIGURE
AUXNAME命令重定义数据文件

操作步骤皆与上同,不再详述,可是供给留意的是CONFIGURE
AUXNAME命令的格式,并且configure命令不可能在run块中施行,例如脚本如下:

#
set auxiliary names for the datafiles

CONFIGURE
AUXNAME FOR DATAFILE 1 TO ‘/oracle/auxfiles/aux_1.f’;

CONFIGURE
AUXNAME FOR DATAFILE 2 TO ‘/oracle/auxfiles/aux_2.f’;

. .

CONFIGURE
AUXNAME FOR DATAFILE n TO ‘/oracle/auxfiles/aux_n.f’;

DUPLICATE
TARGET DATABASE FOR STANDBY; 

最后,务必注意,configure
auxname命令执行是一贯生效的,因而duplicate执行完事后,推荐清除CONFIGURE
AUXNAME。那样就不会对前途的好像操作造成影响。

例如:

CONFIGURE
AUXNAME FOR DATAFILE 1 CLEAR;

CONFIGURE
AUXNAME FOR DATAFILE 2 CLEAR; 

. .

CONFIGURE
AUXNAME FOR DATAFILE n CLEAR;

步骤和方法介绍完了,下边实操一把~~~~~

指标:通过rman备份,在平等台服务器成立standby,primary数据库名为jssweb,要创设的standby,db_unique_name命名为jssrman,因为是在同等台服务器,所以须要对standby的数据文件和日志文件路径做下重定义,那里大家选择经过起初化参数的款式重定义文件路径。

 

一、 做好准备工作

1、 创建standby实例

亟待首先通过ORADIM命令创设多个新的OracleService,非windows环境足以跳过这一步。

E:ora10g>oradim
-new -sid jssrman 

实例已开立。

E:ora10g>set
oracle_sid=jssrman 

E:ora10g>sqlplus
“/ as sysdba” 

…………. 

顺手配置一下监听,修改tnsname.ora之类,此处不做示范。

二 、 创造standby的初阶化参数文件

没要求完全重建,首先依照primary的spfile生成一个pfile出来,然后比着改改便是了。例如:

在primary数据库执行,注意是primary数据库:

SQL>
create pfile=’E:ora10gproduct10.2.0db_1databaseINITjssrman.ora’ from
spfile; 

用随意文本编辑器打开INITjssrman.ora,注意修改有关的化参数,此例中第叁修改下列属性:

*.audit_file_dest=’e:ora10gproduct10.2.0adminjssrmanadump’ 

*.background_dump_dest=’e:ora10gproduct10.2.0adminjssrmanbdump’ 

*.control_files=’E:ora10goradatajssrmancontrol01.ctl’,’E:ora10goradatajssrmancontrol02.ctl’,’E:ora10goradatajssrmancontrol03.ctl’ 

*.core_dump_dest=’e:ora10gproduct10.2.0adminjssrmancdump’ 

*.DB_FILE_NAME_CONVERT=’oradatajssweb’,’oradatajssrman’ 

*.db_name=’jssweb’ 

*.DB_UNIQUE_NAME=’jssrman’ 

*.LOG_ARCHIVE_CONFIG=’DG_CONFIG=(jssweb,jsspdg,jssrman)’ 

*.LOG_ARCHIVE_DEST_1=’LOCATION=E:ora10goradatajssrman
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=jssrman’ 

*.LOG_ARCHIVE_DEST_STATE_1=’ENABLE’ 

*.LOG_FILE_NAME_CONVERT=’oradatajssweb’,’oradatajssrman’ 

*.standby_file_management=’AUTO’ 

*.user_dump_dest=’e:ora10gproduct10.2.0adminjssrmanudump’ 

专注,由于此standby数据库不考虑切换,因为不再安排fal_*,等有关开头化参数。

然后通过该pfile创造standby的spfile,注意是在standby数据库执行:

SQL>
create spfile from
pfile=’E:ora10gproduct10.2.0db_1databaseinitjssrman.ora’; 

3、 启动standby到nomount状态

SQL>
startup nomount 

ORACLE
例程已经运转。

Total
System Global Area 167772160 bytes 

………………… 

肆 、 创制standby的密码文件

小心保持密码与primary数据库相同,分外首要。

E:ora10g>orapwd
file=e:ora10gproduct10.2.0db_1databasePWDjssrman.ora password=verysafe
entries=30 

二、 进展创办工作

1、 连接primary和standby

只顾连接standby的时候前边钦定auxiliary

E:ora10g>set
oracle_sid=jssweb 

E:ora10g> rman
target / auxiliary sys/tfad04@jssrman
 

复原管理器:
Release 10.2.0.3.0 – Production on 周三 5月 30 13:53:13 二零零六

Copyright
(c) 1982, 2005, Oracle. All rights reserved. 

已连接到对象数据库:
JSSWEB (DBID=3408827880, 未打开)

已接连到赞助数据库:
JSSWEB (未装载)

② 、 成立standby的支配文件。

笔者们事先都操作过通过sql命令创制standby的控制文件,这一次换一换,在rman中开创standby的操纵文件。

RMAN>
copy
current controlfile for standby to
‘e:ora10goradatajssrmancontrol01.ctl’;
 

启动
backup 于 29-1月 -08

接纳对象数据库控制文件替代苏醒目录

分配的康庄大道:
ORA_DISK_1

通道
ORA_DISK_1: sid=157 devtype=DISK

通道
ORA_DISK_1: 运维数据文件副本

复制备用控制文件

出口文件名 =
E:ORA10GORADATAJSS凯雷德MANCONTROL01.CTL 标记 = TAG二零一零0129T150422 recid = 6
时间戳 = 645289463

通道
ORA_DISK_1: 数据文件复制达成, 经过时间: 00:00:03

完成
backup 于 29-1月 -08

启动
Control File and SPFILE Autobackup 于 29-1月 -08


handle=D:BACKUPC-3408827880-20080129-00 comment=NONE

完成
Control File and SPFILE Autobackup 于 29-1月 -08

3、 生成standby数据库

是因为我们那儿的备份集是刚刚的,所以在履行duplicate命令时并不要求内定dorecover子句,而且我们利用了经过db_file_name_convert等早先化参数的法子重定义数据文件和日志文件路径,因为实施的一声令下就万分不难,就那是大家前面说的,区别途径下开创standby中,最简单易行的主意:

RMAN>
duplicate
target database for standby;
 

启动
Duplicate Db 于 30-1月 -08

动用对象数据库控制文件替代复苏目录

分红的通道:
ORA_AUX_DISK_1

通道
ORA_AUX_DISK_1: sid=155 devtype=DISK

内部存款和储蓄器脚本的情节:

restore
clone standby controlfile; 

sql
clone ‘alter database mount standby database’; 

正在进行内存脚本

启动
restore 于 30-1月 -08

行使通道
ORA_AUX_DISK_1

通道
ORA_AUX_DISK_1: 正在恢复生机控制文件

通道
ORA_AUX_DISK_1: 已复制控制文件副本

出口文件名=E:ORA10GORADATAJSS昂科拉MANCONTROL01.CTL

输出文件名=E:ORA10GORADATAJSSRMANCONTROL01.CTL

输出文件名=E:ORA10GORADATAJSS路虎极光MANCONTROL02.CTL

输出文件名=E:ORA10GORADATAJSSLacrosseMANCONTROL03.CTL

完成
restore 于 30-1月 -08

sql
语句: alter database mount standby database

放出的通道:
ORA_AUX_DISK_1

内部存款和储蓄器脚本的内容:

set
newname for tempfile 1 to 

“E:ORA10GORADATAJSSRMANTEMP01.DBF”; 

switch
clone tempfile all; 

set
newname for datafile 1 to 

“E:ORA10GORADATAJSSRMANSYSTEM01.DBF”; 

set
newname for datafile 2 to 

“E:ORA10GORADATAJSSRMANUNDOTBS01.DBF”; 

set
newname for datafile 3 to 

“E:ORA10GORADATAJSSRMANSYSAUX01.DBF”; 

set
newname for datafile 4 to 

“E:ORA10GORADATAJSSRMANUSERS01.DBF”; 

set
newname for datafile 5 to 

“E:ORA10GORADATAJSSRMANTBSWEB01.DBF”; 

restore 

check
readonly 

clone
database 

正在履行内部存款和储蓄器脚本

正在执行命令:
SET NEWNAME

一时半刻文件 1
在支配文件中已重命名为 E:ORA10GORADATAJSS宝马X5MANTEMP01.DBF

正值执行命令:
SET NEWNAME

正值执行命令:
SET NEWNAME

正在执行命令:
SET NEWNAME

正在执行命令:
SET NEWNAME

正在执行命令:
SET NEWNAME

启动
restore 于 30-1月 -08

分红的大道:
ORA_AUX_DISK_1

通道
ORA_AUX_DISK_1: sid=155 devtype=DISK

通道
ORA_AUX_DISK_1: 正在起初重操旧业数据文件备份集

通道
ORA_AUX_DISK_1: 正在钦定从备份集苏醒的数据文件

正将数据文件00001过来到E:ORA10GORADATAJSSXC60MANSYSTEM01.DBF

正将数据文件00002复苏到E:ORA10GORADATAJSS安德拉MANUNDOTBS01.DBF

正将数据文件00003过来到E:ORA10GORADATAJSSLX570MANSYSAUX01.DBF

正将数据文件00004苏醒到E:ORA10GORADATAJSS瑞虎MANUSE揽胜S01.DBF

正将数据文件00005过来到E:ORA10GORADATAJSSLacrosseMANTBSWEB01.DBF

通道
ORA_AUX_DISK_1: 正在读取备份段 D:BACKUP4J6V1SJ_1_1

通道
ORA_AUX_DISK_1: 已卷土重来备份段 1

段句柄 =
D:BACKUP4J6V1SJ_1_1 标记 = TAG20080124T111011

通道
ORA_AUX_DISK_1: 苏醒达成, 用时: 00:00:57

完成
restore 于 30-1月 -08

内部存款和储蓄器脚本的内容:

switch
clone datafile all; 

正在实施内部存款和储蓄器脚本

数据文件 1
已转换来数据文件副本

输入数据文件副本
recid=11 stamp=645372185 文件名=E:ORA10GORADATAJSS昂科威MANSYSTEM01.DBF

数据文件 2
已转换来数据文件副本

输入数据文件副本
recid=12 stamp=645372185 文件名=E:ORA10GORADATAJSSLX570MANUNDOTBS01.DBF

数据文件 3
已转换到数据文件副本

输入数据文件副本
recid=13 stamp=645372186 文件名=E:ORA10GORADATAJSS本田CR-VMANSYSAUX01.DBF

数据文件 4
已转换来数据文件副本

输入数据文件副本
recid=14 stamp=645372186 文件名=E:ORA10GORADATAJSS中华VMANUSE福特ExplorerS01.DBF

数据文件 5
已转换到数据文件副本

输入数据文件副本
recid=15 stamp=645372186 文件名=E:ORA10GORADATAJSS安德拉MANTBSWEB01.DBF

完成
Duplicate Db 于 30-1月 -08

四 、 重建standby一时半刻表空间数据文件

升迁:本步非必须,假如该standby不会切换为primary并且也不会有询问要求,就不必创设!

三、 成功善后工作

善后工作平日很不起眼但是很首要,

① 、 修改primary数据库中的相关参数

SQL>
show parameter db_unique 

NAME
TYPE VALUE 


———– —————————— 

db_unique_name
string jssweb 

SQL>
set sqlprompt Jssweb> 

Jssweb>
alter system set
log_archive_config=’DG_CONFIG=(jssweb,jsspdg,jssrman)’; 

系统已改变。

Jssweb>
alter system set log_archive_dest_3=’SERVICE=jssrman lgwr async
valid_for=(online_logfiles,primary_role)
db_unique_name=jssrman’; 

系统已变更。

Jssweb>
alter system set
log_archive_dest_state_3=enable; 

系统已改成。

② 、 考虑到为保险切换后,dg还是可以平常运作,同时修改待切换的standby数据库初叶化参数

SQL>
show parameter db_unique 

NAME
TYPE VALUE 


———– —————————— 

db_unique_name
string jsspdg 

SQL>
set sqlprompt Jsspdg> 

Jsspdg>
alter system set
log_archive_config=’DG_CONFIG=(jssweb,jsspdg,jssrman)’; 

系统已变更。

Jsspdg>
alter system set log_archive_dest_3=’SERVICE=jssweb lgwr async
valid_for=(online_logfiles,primary_role)
db_unique_name=jssweb’; 

系统已改成。

Jsspdg>
alter system set
log_archive_dest_state_3=enable; 

系统已改变。

3、 打开standby的redo应用

SQL>
show parameter db_unique 

NAME
TYPE VALUE 



—————————— 

db_unique_name
string jssrman 

SQL>
set sqlprompt Jssrman>

Jssrman>
alter database recover managed standby database disconnect from
session; 

数据库已转移。

四 、 Primary切换日志,验证同步效果

Jssweb>
alter system switch logfile; 

系统已变更。

Jssweb>select
max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

787 

Jsspdg>select
max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

787 

Jssrman>select
max(sequence#) from v$archived_log; 

MAX(SEQUENCE#) 

————– 

787 

与事先经过primary物理备份比较,通过rman的duplicate命令创造standby,实际执行的手续是或不是更简短一些了吗,基本上你只须求牢记duplicate的用法就好了,别的工作rman都自动帮你干。正象开篇中本身说过的那么,为啥要选拔经过rman来创建standby呢,因为不难:)



style=”color: #666666; font-family: courier new; font-size: 12pt; line-height: 1.5;”>About
Me

……………………………………………………………………………………………………………….

● 本文来自于三思笔记

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2017-06-02 09:00 ~ 2017-06-30 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

……………………………………………………………………………………………………………….

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图