- 浏览: 1088152 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:349929
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
在 MySQL 作为应用系统的后台数据库时,我们常常见到这样的架构,一拖二、一拖三等等。这是用 MySQL 的读写分离技术,实现数据的写入和读取分别在不同的库上,提升了数据库服务能力。
同样,在 Oracle 作为后台数据库的架构中,我们也可以这么做。实现的方式有很多种。
( 链接 : http://mikixiyou.iteye.com/blog/1527226 )
有基于 RAC 架构的,使用其中某个节点作为读库;
有基于 Streams 数据复制技术的,实时将数据复制到另外一个库供读取;
有使用第三方数据复制软件的,如 Golden Gate( 已经被 Oracle 收入囊中 ) 、 DSG 的,也是实时复制数据到另外一个库中。
还有使用 Logical standby 技术,实时复制数据到一个库,且该库是对应用而言是只读的。
我们这里介绍最后一个方法,利用 dataguard 技术中的 logical standby 实现 Oracle 数据库的读写分离。
一、创建物理 standby
*.log_archive_config='dg_config=(webdb,webdg)'
*.log_archive_dest_2='service=webdb_standby lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=webdg'
*.log_archive_dest_state_2='enable'
修改主库的 tnsnames.ora 文件
在 tnsnames.ora 文件中增加一个条目,名称为 webdb_standby 。这个就是 log_archive_dest_2 中 service 的名称。这里的主库版本是 10g ,所以使用 LGWR 进程将日志传输到备用节点上,而在 11g 中使用的进程将是 LNS 。
WEBDB_STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.65.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = webdb)
)
)
WEBDB_READER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.65.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = webreader)
)
)
*.db_unique_name='webdg'
*.fal_client='webdb_standby'
*.fal_server='webdb_primary'
*.log_archive_config='dg_config=(webdb,webdg)'
*.log_archive_dest_1='location=+VG2 valid_for=(all_logfiles,all_roles) db_unique_name=webdg'
修改备用库的 tnsnames.ora 文件
WEBDB_PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.65.4)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = webdb)
)
)
WEBDB_STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.65.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = webdb)
)
)
在 tnsnames.ora 文件中增加两个条目,名称为 webdb_standby 和 webdb_primary ,分别是 fal_client 和 fal_server 参数对应的值,用于检测归档日志 gap 。
这里我们可以使用原有的全库备份,再新备份控制文件用于 standby 。
Backup current ontrolfile for standby format ‘/u03/webdb_rman/ctl.standby’;
restore database;
在备用库上添加 standby logfile
ALTER DATABASE ADD STANDBY LOGFILE group 21 ('+VG2/webdb/standby_redo21.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 22 ('+VG2/webdb/standby_redo22.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 23 ('+VG2/webdb/standby_redo23.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 24 ('+VG2/webdb/standby_redo24.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 25 ('+VG2/webdb/standby_redo25.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 26 ('+VG2/webdb/standby_redo26.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 27 ('+VG2/webdb/standby_redo27.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 28 ('+VG2/webdb/standby_redo28.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 29 ('+VG2/webdb/standby_redo29.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 30 ('+VG2/webdb/standby_redo30.log') SIZE 52428800 reuse;
ALTER DATABASE ADD STANDBY LOGFILE group 31 ('+VG2/webdb/standby_redo31.log') SIZE 52428800 reuse;
recover database;
/u03/webdb_rman@db3=>webdb$rman target /
Recovery Manager: Release 10.2.0.4.0 - Production on Mon May 14 10:08:06 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: WEBDB (DBID=2446281945, not open)
RMAN> recover database;
Starting recover at 14-MAY-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=4384 devtype=DISK
starting media recovery
恢复出错后直接退出。
startup nomount;
alter database mount standby database;
alter database recover managed standby database using current logfile disconnect from session;
在主库上 sqlplus 中执行下列 SQL
select protection_mode,protection_level from v$database;
结果应该是两个列的值是一致的,才是正常状态。
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
如果 protection_level 的值是 RESYNCHRONIZATION ,如下所示
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY RESYNCHRONIZATION
这表示 DATAGUARD 的模式是有问题的,需要解决后才能进行下一步操作。
二、转换为逻辑 standby
在备用库的操作系统上 $ORACLE_HOME/dbs 目录下,准备两个文件,分别是逻辑库 webreader 的初始化参数文件和密码文件。
密码文件 orapwwebreader 由 orapwwebdb 直接复制。
初始化参数文件 initwebreader.ora 从 initwebdb.ora 复制后做些修改操作,修改的参数项只要是下面列出的这些。
/u01/app/oracle/product/10.2.0/db/dbs@db3=>webreader$more initwebreader.ora
*.audit_file_dest='/u01/app/oracle/admin/webreader/adump'
*.background_dump_dest='/u01/app/oracle/admin/webreader/bdump'
*.core_dump_dest='/u01/app/oracle/admin/webreader/cdump'
*.user_dump_dest='/u01/app/oracle/admin/webreader/udump'
*.db_name='webreader'
*.db_unique_name='webdg'
*.fal_client='webdb_reader'
*.fal_server='webdb_primary'
*.log_archive_config='dg_config=(webdb,webdg)'
*.log_archive_dest_1='location=+VG2/ valid_for=(all_logfiles,all_roles) db_unique_name=webdg'
创建用于读库的 tnsname 条目
在备用库的操作系统上 $ORACLE_HOME/network/admin/tnsnames.ora 文件中增加一个新的条目 webdb_reader 。
WEBDB_READER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.65.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = webreader)
)
)
在备用库的操作系统上 $ORACLE_HOME/network/admin/listener.ora 文件中,增加新实例 webreader 的侦听对象。
/u01/app/oracle/product/10.2.0/db/network/admin@db3=>webreader$more listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = webdb)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db)
)
(SID_DESC =
(SID_NAME = webdg)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db)
)
(SID_DESC =
(SID_NAME = webreader)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db3)(PORT = 1521))
)
)
alter database recover managed standby database cancel ;
在主库上创建 logical standby 的数据字典
EXECUTE DBMS_LOGSTDBY.BUILD;
这一步一定要执行成功,并且必须在其他操作之前执行,否则后面执行 alter database recover to logical standby webreader; 会一直等待。
注意:
该过程会自动启用 primary 数据库的补充日志 (supplemental logging) 功能 ( 如果未启用的话 ) 。
该过程执行需要等待当前所有事务完成,因此如果当前有较长的事务运行,可能该过程执行也需要多花一些等待时间。
该过程是通过闪回查询的方式来获取数据字典的一致性,因此 oracle 初始化参数 UNDO_RETENTION 值需要设置的足够大。
切换物理 Standby 为逻辑 Standby
我们将读库,也就是 logical standby 数据库名称定义为 webreader 。
alter database recover to logical standby webreader;
注意:
这一步很关键。如果执行成功了,目标基本就实现了。
但很可能会遇到两种错误。
执行操作一直 hang 。这是因为密码文件中 sys 密码不一致,需要建立与主库一致的密码文件。
备库监听没有包含 standby 的实例信息,需要在监听文件中添加实例信息。在监听器参数文件的配置中,我们已经添加了所有实例的侦听信息。即使多加了也不影响监听器的正常运行。
正常的执行过程应该如下所示:
SQL> alter database recover managed standby database cancel ;
Database altered.
SQL> alter database recover to logical standby webreader;
alter database recover to logical standby webreader
*
ERROR at line 1:
ORA-16254: change db_name to WEBREADER in the client-side parameter file (pfile)
ORA-17503: ksfdopn:2 Failed to open file +VG1/webdb/temp01.dbf
ORA-15173: entry 'temp01.dbf' does not exist in directory 'webdb'
这一步执行不成功,也会完成。在关闭打开后可以正常使用。
/u01/home/oracle@db3=>webdb$export ORACLE_SID=webreader
/u01/home/oracle@db3=>webreader$sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Mon May 14 10:55:53 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup open
ORACLE instance started.
Total System Global Area 5.1540E+10 bytes
Fixed Size 2179936 bytes
Variable Size 6425676960 bytes
Database Buffers 4.5097E+10 bytes
Redo Buffers 14594048 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
Database altered.
在备用库上临时文件需要重建,我选择新增一个临时文件。在不同的环境中,临时文件可能会有很多个。
alter tablespace temp add tempfile '+VG2/webdb/temp02.dbf' size 10240M;
调整主库上 log_archive_dest_2 的参数值
在物理 standby 模式下,这个参数的 service 值是指向 webdb_standby 的,现在在逻辑 standby 模式下,它需要修改为指向 webdb_reader 。
alter system set log_archive_dest_2='service=webdb_reader lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=webdg';
在 Logical Stadnby 上启动 sql apply
alter database start logical standby apply;
如果要启动实时应用特性,需要先在备库添加 standby redo logfile 。我们在创建 physical standby 时就已经添加了 standby redo logfile ,因此我们可以启动为实时复制数据模式。启动 real time sql apply 操作如下:
alter database stop logical standby apply;
alter database start logical standby apply immediate;
到此 , 数据库读写分离完全成功 .
发表评论
-
Oracle分区表的分区交互技术实现数据快速转移
2013-01-22 11:48 14685有一个需求,将某业务表的某个时间点之前的记录转移到它的历史 ... -
等待事件enq TX row lock contention分析
2013-01-17 17:16 33220在Oracle数据库性能报告AWRRPT分析时,发现top ... -
Oracle的UNDO表空间管理总结
2013-01-14 15:06 12896UNDO是Oracle中的一个很 ... -
Oracle在不同windows系统中的迁移
2013-01-09 15:41 3717在Windows操作系统环境下 ... -
Oracle 10.2.0.1在windows 2008上安装失败经历
2013-01-07 10:29 8640这两天遇到这个一个项目上的数据库迁移的问题。原来的环境是数据库 ... -
所有的物化视图刷新脚本
2012-12-28 13:59 0select 'execute dbms_mview.refr ... -
Oracle数据库的SQL性能问题分析
2012-12-27 15:31 5238在Oracle 10.2.0.4数据库中,有一个SQL执行缓慢 ... -
db block gets和consistent gets的分析
2012-12-26 18:09 0在Oracle的文档中有这样一段解释: db block g ... -
创建增量同步Oracle物化视图问题
2012-12-25 14:07 15192我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某 ... -
查归档日志文件每小时生成量
2012-12-18 16:13 10733在O racle数据库中,通过v$archived_lo ... -
如何删掉临时表空间的文件
2012-12-18 15:40 0Unlike Oracle datafiles which m ... -
Oracle sql性能诊断暨event 10046和10053使用
2012-12-17 10:24 0早上em grid control监控显示数据库的负载增加,其 ... -
查LOB字段占用的空间大小
2012-12-13 16:00 4499查询Oracle表中LOB字段的占用空间大小。表中每一个LOB ... -
Oracle Data Guard的重做日志传输和应用状况监控
2012-12-04 14:05 4030这是一个用来监控Oracle Data Guard环境下从主库 ... -
Oracle sql loader使用速成
2012-11-30 14:14 4843Oracle SQL LOADER是Oracle的 ... -
Oracle 11g2的监听器配置
2012-11-29 14:34 4327Oracle的监听器服务注册 ... -
Deleting archivelog on physical standby with RMAN in Oracle 10g
2012-11-28 13:25 0Turns out to be quite easy ... -
to_char将number转成string的小技巧
2012-11-27 14:14 10578很多数据转换处理操作时,会遇到将0.007007040000转 ... -
to_date转成字符串时ORA-01843 not a valid month 问题分析
2012-11-26 16:38 29161(注,本文三度易稿) 在开发Oracle SQL或PL/SQL ... -
Data Guard 10g 的保护级别为RESYNCHRONIZATION问题
2012-11-25 11:01 1881Oracle的data guard创建完成 ...
相关推荐
在MySQL作为应用系统的后台数据库时,我们常常见到这样的架构,一拖二、一拖三等等。这是用MySQL的读写分离技术,实现...我们这里介绍最后一个方法,利用dataguard技术中的logical standby实现Oracle数据库的读写分离。
这是用MySQL的读写分离技术,实现数据的写入和读取分别在不同的库上,提升了数据库服务能力。 同样,在Oracle作为后台数据库的架构中,我们也可以这么做。实现的方式有很多种。 有基于RAC架构的,使用其中某个...
关系数据库主要包括 数据定义 数据操作 数据控制 内模式(internal schema) 也称存储模式 模式(schema) 也称逻辑模式(logical schema) 外模式(external schema) 也称子模式...
大多数人都知道Streaming Replication已经成为PostgreSQL的一部分,并且通常用于高可用性和读写分离,流复制是基于WAL日志的物理复制,适用于整个数据库实例的复制,并且备库是只读的。 Logical Replication属于...
1.1 Oracle数据库体系结构 An Oracle database is a collection of data treated as a unit. The purpose of a database is to store and retrieve related information 数据库服务器是解决信息管理问题的核心组件...
DataGuard对于oracle初学者一直感觉是比较难的问题,看到这篇文章觉得不错,共享,大家一块学习
《涂抹Oracle-三思笔记之一...目录13内文件为书中第13章出现的使用DataPump API实现导出的脚本; 目录14内文件为书中第14章,用来验证平台字节序的脚本; 目录15内文件为书中第15章,配置复制数据库时的相关配置文件;
session logical reads db block changes execute count user commits Concurrent Trans redo size redo writes parse count (total) parse count (hard) 指标项: #IO Latency db file sequential read(ms) log ...
目录 摘要 3 ABSTRACT 3 1. 灾难类型 4 2. 恢复类型 4 3. 恢复的级别 4 ... 只应对以前使用显式 sp_detach_db 操作从数据库服务器分离的数据库执行 sp_attach_db。如果必须指定多于 16 个文件,请使用带有 ...
为了提供可靠的DMS平台,LogicalDOC的设计基于最佳的Java技术。主界面是基于Web的,无需安装其他任何东西。用户可以通过其浏览器访问系统。 LogicalDOC CE是100%免费的软件,并与开源数据库打包在一起;尽管它支持...
为了提供可靠的DMS平台,LogicalDOC的设计基于最佳的Java技术。主界面是基于Web的,无需安装其他任何东西。用户可以通过其浏览器访问系统。 LogicalDOC CE是100%免费的软件,并与开源数据库打包在一起;尽管它支持...
LogicalDOC是一个采用Java开发的基于网页的文档管理系统,提供了快速的索引功能和基于浏览器的查询功能。提供 .NET和PHP版本,附带论坛和WebDAV的接口,支持文档导入导出到ZIP文件和邮箱文件。 文件夹可分层次组织,...
fuzzy logical很好的学习资料
它利用最佳的Java技术,实现了强大而灵活的解决方案。为用户提供了强大的搜索引擎(基于Lucene),(通过CXF的JAX-WS)Web服务接口。提供 .NET和PHP版本,附带论坛和WebDAV的接口,支持文档导入导出到ZIP文件和邮箱...
The building blocks behind the database engine as well as Oracle’s physical and logical structures Hardware, software, system, and storage requirements for implementation How to recognize and ...
database logical script
matlab开发-logical2cellstrcellstr2logical。从逻辑数组转换为字符串为“true”/“false”的单元格数组,然后再次进行转换。
shl logical
Logical Channel Descriptor and Allocation of Logical Channel Numbers
Logical and Physical Database Structures 1-20 Course Examples: The HR Schema 1-22 Database Architecture: Summary of Structural Components 1-23 Summary 1-24 2 Installing the Oracle Database Software ...