Dataguard Content

1.Dataguard环境设计的三个重要概念

1.1 Primary数据库

在Data Guard的环境中与Standby数据库对应的数据库即是Primary数据库,也就是Primary数据库正在运行的生产数据库,大多数的应用要访问该数据库,因为它在Data Guard环境中处于Primary的角色,所以称为Primary数据库。

 1.2 物理Standby数据库

物理Standby数据库是Standby数据库的一种,物理Standby数据库在本质上是通过Redo传输服务实施Redo应用,将Primary数据库的Redo数据拷贝到Standby数据库,实现Primary数据库与Standby数据库的同步。

Standby数据库其实就是Primary数据库的物理拷贝,二者的数据库结构相同。

1.3 逻辑Standby数据库

逻辑Standby数据库与Primary数据库在物理文件组织以及数据结构方面可以不同,这点是与物理Standby数据库的一个区别,并且逻辑Standby数据库是通过SQL应用实现与Primary数据库的数据同步,SQL应用的本质是将从Primary数据库获得的Redo数据转化成SQL语句,然后使用SQL语句实现Redo数据的操作。所以逻辑数据库中有自己的Standby本地日志文件。

逻辑Standby数据库可以向应用提供服务,如数据查询、报表服务等,同时不用停机就可以在逻辑Standby数据实现数据库软件升级以及补丁操作。

备注:在11g当中出现快照Standby数据库,此处以10g为例子。

2. Data Guard 服务本质

2.1 Apply服务

在Data Guard环境下,我们有一个提供主要服务的生产数据库----Primary数据库,同时在另一个物理主机(也可以同一台主机)创建了一个数据库拷贝,我们成为Standby数据库。通过网络将用户的数据操作结果传输到Standby数据库,此时传输的数据库就是保存在生产数据库的重做日志文件中的用户操作记录数据,其实与单实例数据库保持数据一致性相同,只不过Data Guard通过网络来传输Redo数据,将Redo数据归档或者直接将Redo数据写入Standby数据库。这要依赖于用户在配置数据库时选择的Redo传输服务参数。

传输Redo数据的服务成为"Apply服务",该服务实现了Standby数据库与Primary数据库之间的数据同步,并在第一环境下允许对这两个数据库的同时访问,这依赖于Standby数据库的类型。

在Oracle Data Guard中,将Standby数据库分为物理Standby数据库和逻辑Standby数据库。根据Standby数据库的类型,Redo数据的”Apply”服务有两种实现方式,即Redo应用和SQL应用。

 2.2 Redo应用

Apply服务根据创建的Standby数据库的不同而有差异,从本质上讲,就是实现Redo数据写操作的级别不同。Redo应用服务于物理Standby数据库,复制Redo中的二进制数据。

在物理Standby数据库中使用Redo应用保持与Primary数据库的数据同步,Redo应用的本质上使用介质恢复的方式来保持与Primary数据库的同步。即传输到Standby数据库的Redo数据块,会通过Redo应用直接保存在Standby数据库中,如果2-1所示。

图2-1 物理Standby的Redo应用

在图2-1中,Primary数据库的Redo数据使用Redo传输服务,通过网络传输到Standby数据库,在Standby数据库上相应的进程接受Redo数据,并使用Redo应用将数据块写入数据库。此时Standby数据库只能用于只读访问。

2.3 SQL应用

SQL应用服务于逻辑Standby数据库,它将Redo数据中的数据转化成SQL语句,再执行Redo操作。所以SQL应用是一个SQL语句传输和重建的过程。逻辑Standby数据库能够以读/写模式打开,但是它维护的数据表只能以只读模式打开,用于报表查询等服务,如图2-2所示。

图2-2 逻辑Standby的SQL应用

在创建逻辑Standby数据库时,系统会使用SQL应用来保存从Primary数据传输过来的Redo数据。SQL语句在应用过程中,此时的Standby数据库也可以提供报表服务。

2.4 角色转换服务

在Data Guard配置中与数据库功能对应的两种角色,即Primary角色和Standby角色。在一个Data Guard配置中可以有多个Primary数据库和多个Standby数据库,但是角色就两种,要么是Primary角色,要么是Standby角色。我们使用数据字典v$database来查询当前数据库的角色。

3. 基础知识准备

3.1 Oracle中数据库和实例

这是Oracle中最基本的2个概念。

先说数据库(database)。Oracle中的数据库,是存储数据的一种媒介。常用一般为2种形式,即文件和磁盘阵列。文件比较很好理解,就是在磁盘创建一批文件,然后在文件中存储数据信息。而磁盘阵列呢?所谓磁盘阵列,就是数据不是存放在某个文件中的,而是把一个或多个磁盘格式化为oracle的一种格式,等于整个磁盘只能存放oracle数据库,不能作为其它用途。以我们最常用的文件格式来说,数据库就是那些所有数据文件、控制文件、REDO文件等等一系列文件的集合。即:

数据库=重做文件+控制文件+数据文件+临时文件

实例(instance)是操作系统中一系列的进程以及为这些进程所分配的内存块。即:

ORACLE实例=进程+进程所使用的内存(SGA)

由上可见,对数据库的应用,实例和数据库缺一不可。仅有数据库,那么只表示数据存储在文件中,但是我们无法对它直接进行操作。仅有instance,表示我们可以进行操作,但是没有操作对象(不知道目标数据),也是没有什么意义的。

Database是永久的,instance是临时性的。当我们结束oracle的实例进程,它所占内存释放,那么instance也就不存在了。但是,各种数据库相关文件还是存在的,所以database仍然存在的。

因此,也就不难理解了,oracle数据库服务器启动一般包含的3个步骤:1.创建并启动实例;2.装载数据库;3.打开数据库。每到一个阶段,都有相应的操作可以进行。例如,同一个SID,但是如果以不同的参数文件启动,那么我们可以装载和打开不同的数据库。同样的,一个数据库,也可以被不同的instance加载和打开。

一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库。

3.2 Oracle中的name,id

db_name:数据库名。物理数据库的名字标识。数据库创建完成后,参数db_name被写入参数文件,格式如下:

db_name=orcl

数据库名虽说可以修改,但是修改步骤比较麻烦。建议最好不要修改db_name。

在不同的服务器上创建数据库,可以使用同样的db_name。

在DG环境中,主备服务器中的数据库有同样的db_name。

可以利用下列sql查询db_name:

1 select name from v$database;

db_domain:数据库域名。这个域同网络的域没有什么联系。

global_name:全部数据库名。利用Database Configuration Assistant创建数据库时,要求输入就是全局数据库名。通常,它的名字是由db_name.db_domain构成。

SID:实例标识。利用Database Configuration Assistant创建数据库时,要求输入SID。

SID和instance_name的值是一致的。它是oracle的实例标识。

Instance_name用于对外部连接。在操作系统中要取得与数据库的联系,必须使用数据库实例名。

可以通过下列sql查询instance_name:

1 select instance_name from v$instance;

db_unique_name:在Data Guard里,主从服务器中的数据库,都有一个样的DB_NAME。然而它们和RAC环境下不一样,不代表同一个库(主备机中均有自己的数据库文件,不像RAC环境中通过多个实例通过磁盘阵列共享一个库)。但是它们的db_unique_name是不一样的,用以标识不同的数据库。

service_name:服务名。Service_name是连接数据库的时候使用的别名。

需要注意的是,service_name主要用于数据库网络连接时,可以有多个,可以随意命名,可以通过系统初始化参数service_name设置。

一般情况下,service_name的缺省值为db_name.db_domian,同global_name相同。

Net service name:网络服务名,即连接描述符。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明特性。

时间: 2024-08-12 03:39:18

Dataguard Content的相关文章

Oracle 11g Dataguard 配置,维护与详解 (ADG)

一.前言: 本手册主要记录如何配置,还介绍了配置原因,以及注意要点,已经主备切换,以及故障转移等重要操作步骤,我希望这个文章可以作为进行dataguard配置的一个参考手册. 二.前提 1.主库是归档模式: 如果我们不清楚为什么是归档模式,那我们就应该也不会清楚dataguard是用来做什么的.透过很多修饰的官方语言,我们需要明确DG(dataguard简称,后同)实际上的作用就是用来高可用.而实现原理就是从主库获取数据到从库,在主库发生异常的时候,从库接管主库,完成身份的变化.可以一个主库,最

跟Google 学代码 :Building Apps with Content Sharing(跟女神去表白)

本篇博客都讲了些什么? 1. Sharing Simple Data 共享简单的数据,如文本,图片,URI 2. Sharing Files 共享文件 3. Sharing Files with NFC无线传输 在写博客之前,假设 "我"是服务端App,我的"女神"是客户端App 情书是"我"想传递的数据 那么我该如何做呢? 向客户端App发送数据(暗送秋波篇) 对女神爱在心中口难开怎么办?如何示爱这是穷学生最纠结的心病 在Android 开发中

Content has been consumed

if(response.getEntity() != null && response.getEntity().getContent() != null) { message = IOUtils.toString(response.getEntity().getContent()); } 会报Content has been consumed错误 这个问题是多次调用HttpEntity.getContent()导致的, Entity中的内容只能读取一次, 参考如下: You can ret

Xcode 下“ did not have any applicable content ”分析及解决

一.问题的产生 a.新建项目时选的iPhone b.为了做成图片启动,按照惯例去掉了LaunchStoryboard的引用,建了个LaunchImage的资源,属性里随便勾了一个,找了张匹配的图拖了过去 c.运行的时候,报错了. 二.解决方法 “did not any applicable content”直译就是没有适用的内容. 什么意思?难道是必须用iPhone的项目必须给iPhone的图才行?试了一下,果然是这么回事. 勾选上iPhone的图,并且还得拖张图过去才行. 三.归纳 新建工程的

Android development Notes-3(Activity, Intents, and Tasks, Service, Content provider)

Summary:Activity, Intents, and Tasks, Service, Content provider -Android introduces a richer and more complex approach by supporting multiple application entry points. Android programs should expect the system to start them in different places, depen

oracle11g dataguard 完全手册

一.前言: 网络上关于dataguard的配置文章很多,但是很多打着oracle11g的文章实际都是只能在9 10 上运行,比如FAL_CLIENT在11g中已经废弃,但是现在网络上的文章都是没有标注这一点.而且对于具体含义语焉不详对于新手只能知其然而不知其所以然.这篇文章我就想让像我这样的人对于dataguard配置不仅仅知道怎么配置,还要知道为什么需要这样配置,这样的效果才是最好的. 这篇文章不仅仅是记录如何配置,还介绍了为什么是这样,以及注意要点,我希望这个文章可以作为进行dataguar

Oracle 11.2.0.4.0 Dataguard部署和日常维护(6)-Active dataguard

1. 检查主备库的状态 on primary column DATABASE_ROLE format a20 column OPEN_MODE format a15 column PROTECTION_MODE format a20 column SWITCHOVER_STATUS format a20 select DATABASE_ROLE,OPEN_MODE,PROTECTION_MODE,SWITCHOVER_STATUS from v$database; DATABASE_ROLE O

meta name="viewport" content="width=device-width,initial-scale=1.0" 解释

meta name="viewport" content="width=device-width,initial-scale=1.0" 解释 <meta name="viewport" content="width=device-width,initial-scale=1.0"> content属性值 : width:可视区域的宽度,值可为数字或关键词device-width height:同width intia

sitecore+score 在 Experience editor 添加新元素时associateed content 指向错误

Q:在sitecore的Experience editor页面添加component时,子元素的路径指向错误.如图: A: 首先你要整理思路,这个设置可能是在哪,是template还是control layout.当然这里肯定是跟页面control有关. 1.我们需要找到这个button的control layout.因为我们的项目是集成了score,所以根据score的手册我们知道这个button的路径在/sitecore/layout/Renderings/BootstrapUI/Conte