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:网络服务名,即连接描述符。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明特性。
Dataguard Content的更多相关文章
- requests的content与text导致lxml的解析问题
title: requests的content与text导致lxml的解析问题 date: 2015-04-29 22:49:31 categories: 经验 tags: [Python,lxml, ...
- Content Security Policy 入门教程
阮一峰文章:Content Security Policy 入门教程
- android 使用Tabhost 发生could not create tab content because could not find view with id 错误
使用Tabhost的时候经常报:could not create tab content because could not find view with id 错误. 总结一下发生错误的原因,一般的 ...
- 【解决方案】cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'. One of '{"http://java.sun.com/xml/ns/javaee":run-as, "http://java.sun.com/xml/ns/javaee":security-role-r
[JAVA错误] cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'. One o ...
- Oracle 11.2.0.4 DataGuard 环境打PSU,OJVM PSU补丁快速参考
环境:RHEL6.5 + Oracle 11.2.0.4 DataGuard physical standby 主库和备库都是单节点. 需求:主备库同时应用160719的PSU和OJVM PSU补丁. ...
- 注意 AppResLib.dll.*.mui 的生成操作应该为 Content
为 Windows Phone 8 App 添加本地化的时候,发现修改 AppResLib.dll.*.mui 后不仅没有其变化,还发现修改它导致它失效.通过对比代码发现,问题原因是 AppResLi ...
- android Content Provider介绍
ContentProvider(内容提供者)是Android中的四大组件之一.主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过Conte ...
- Jsoup问题---获取http协议请求失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.
Jsoup问题---获取http协议请求失败 1.问题:用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不 ...
- css content之counter-reset、content-increment
万万没想到,写了快三年前端,有不会用的css,居然还有完全没听过.见过的css属性,而且还是CSS2的内容! 关于counter-reset.content-increment两个属性的详解可以参看张 ...
随机推荐
- Linux下mail/mailx命令发送邮件
最近看到项目中经常会用mail/mailx命令发送由java程序生成的report,比较新鲜.下面就简单介绍下mail/mailx命令用法.本文以mail命令举例(mail/mailx)效果都是一样的 ...
- 【 Quartz】使用 JobListener (任务监听器可实现) 我想在一个任务执行后在执行第二个任务怎么办呢
http://liuzidong.iteye.com/blog/1147528 Quartz之JobExecutionException 博客分类: Java Quartz quartzjobexec ...
- Js 处理将时间转换 “年-月-日”
将时间 \/Date(1432828800000+0800)\/" 转换成:“年-月-日” //时间转换function ChangeDateFormat(val) { if (v ...
- EXTJS 4.2 资料 控件之checkboxgroup的用法(静态数据)
1.页面 1.1点击‘横幅’,需要动态显示隐藏文本框 { xtype: 'fieldset', title: '指定附加图&横幅设置', collapsible: true, items: [ ...
- 一步步学习ASP.NET MVC3 章节总结
请注明转载地址:http://www.cnblogs.com/arhat 对于<一步步学习ASP.NET MVC3>系列工15章,那么为了方便大家能够快速的预览,老魏在这里为这个系列提供一 ...
- ios app - 打开系统设置URL
ios --- 调用系统"设置"里的功能(转) 安装后第一次运行软件时,系统会弹出提示用户是否允许软件获取当前位置,如果用户不允许的话,之后运行时系统不会在弹出提示设置,这点很不方 ...
- org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.chen.vo.Dept.parentId
异常描述:执行以下的addAsHaveParentId2方法出现此异常: /*-----------------------类Dept.Dept.hbm.xml有parentId属性(数据库中有此列) ...
- Android支付接入(四):联通VAC计费
原地址:http://blog.csdn.net/simdanfeg/article/details/9012031 注意事项: 1.联通支付是不需要自己标识软硬计费点的,当平台申请计费点的时候会提交 ...
- php获取类的实例变量
<?php class Page {private $title; //构造函数固定名称为__construct,这样能将php的类构造函数独立于类名,以后修改类名就无需修改构造函数名称 fun ...
- linux ubuntu关于U盘的安装 开机启动u盘的时候出现/casper/vmlinuz.efi: file not found
将u盘下的/casper/vmlinuz文件添加一个后缀.efi即可. 重启再装.