- 浏览: 1098723 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:353067
最新评论
-
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 14808有一个需求,将某业务表的某个时间点之前的记录转移到它的历史 ... -
等待事件enq TX row lock contention分析
2013-01-17 17:16 33295在Oracle数据库性能报告AWRRPT分析时,发现top ... -
Oracle的UNDO表空间管理总结
2013-01-14 15:06 12987UNDO是Oracle中的一个很 ... -
Oracle在不同windows系统中的迁移
2013-01-09 15:41 3806在Windows操作系统环境下 ... -
Oracle 10.2.0.1在windows 2008上安装失败经历
2013-01-07 10:29 8705这两天遇到这个一个项目上的数据库迁移的问题。原来的环境是数据库 ... -
所有的物化视图刷新脚本
2012-12-28 13:59 0select 'execute dbms_mview.refr ... -
Oracle数据库的SQL性能问题分析
2012-12-27 15:31 5289在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 15313我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某 ... -
查归档日志文件每小时生成量
2012-12-18 16:13 10792在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 4579查询Oracle表中LOB字段的占用空间大小。表中每一个LOB ... -
Oracle Data Guard的重做日志传输和应用状况监控
2012-12-04 14:05 4079这是一个用来监控Oracle Data Guard环境下从主库 ... -
Oracle sql loader使用速成
2012-11-30 14:14 4952Oracle SQL LOADER是Oracle的 ... -
Oracle 11g2的监听器配置
2012-11-29 14:34 4391Oracle的监听器服务注册 ... -
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 10638很多数据转换处理操作时,会遇到将0.007007040000转 ... -
to_date转成字符串时ORA-01843 not a valid month 问题分析
2012-11-26 16:38 29307(注,本文三度易稿) 在开发Oracle SQL或PL/SQL ... -
Data Guard 10g 的保护级别为RESYNCHRONIZATION问题
2012-11-25 11:01 1922Oracle的data guard创建完成 ...
相关推荐
总的来说,Logical Standby 是 Oracle 数据库实现读写分离的一种高效方案,它结合了数据复制和高可用性,提供了良好的读写性能分离和灾难恢复能力。在设计数据库架构时,应当根据业务需求、资源限制和技术能力来选择...
在Oracle环境中,实现读写分离的方法多种多样,包括但不限于RAC架构、Streams数据复制、第三方数据复制软件如Golden Gate或DSG,以及Logical Standby技术。本文将重点讨论如何利用Data Guard的Logical Standby功能来...
- **Logical Standby**: 通过SQL Apply技术将日志文件还原成SQL语句,并在逻辑备份数据库上执行。支持同步传输方式,且从数据库可以处于只读状态。适用于需要强一致性保证的场景。 - 优点:提供了逻辑层面的数据...
Oracle数据同步技术是企业级数据库管理的关键组成部分,通过Standby/DataGuard和Stream等工具,能够实现高效、安全的数据同步,满足业务连续性、灾难恢复等需求。随着Oracle数据库的不断升级,这些技术也在持续优化...
Oracle 11g Active Data Guard 是Oracle数据库系统中一种高级的数据保护和灾难恢复技术,它在主数据库运行的同时,创建并维护一个或多个只读的物理 standby 数据库。Active Data Guard 提供了实时的数据保护,使得在...
2. **Standby Database(备用数据库)**:它可以是物理副本(Physical Standby)或逻辑副本(Logical Standby),用于接收并应用来自主数据库的重做日志,以保持与主数据库的数据一致性。 - **Physical Standby...
Data Guard不仅提供了数据保护,还能实现读写分离,提高系统性能。 1.1. 目的 Data Guard的设立旨在为关键业务提供以下关键功能: - 高可用性:通过快速故障切换确保服务不中断。 - 灾难恢复:在主数据库损坏时,...
Data Guard保证了数据的零丢失,并支持物理备用数据库(physical standby database)和逻辑备用数据库(logical standby database)两种工作模式。 本书详细阐述了Data Guard的两种主要的工作模式,以及它们各自的...
备用数据库可以是物理备用(Physical Standby)或逻辑备用(Logical Standby)。 3. 物理备用数据库:镜像主数据库的数据文件,实时接收redo日志并应用,保持与主数据库一致。 4. 逻辑备用数据库:接收redo日志并...
与Logical Standby技术相比,Streams具有更为灵活的应用场景和配置方式,例如支持异构数据库之间的数据复制以及只针对特定表或用户的部分数据进行复制等功能。 #### Streams的工作原理 **Streams**的核心工作流程...
1. oracle如何实现读写分离:可以通过基于RAC架构的、基于Streams数据复制技术的、使用第三方数据复制软件的、使用Logical standby技术等方式来实现读写分离。 2. oracle的联合主键在创建的时候需要注意什么:需要...
本资料包“Dgg2107.zip”聚焦于三大主流的关系型数据库系统:Oracle、MySQL和SQL Server之间的数据同步与比对技术。这些数据库在不同的场景下都有广泛的应用,如Oracle常用于大型企业级应用,MySQL因其开源免费特性...
通过以上对Oracle数据库从入门到精通所需掌握的知识点的详细介绍,读者可以从零开始学习并逐步深入理解Oracle的各项核心技术与最佳实践。无论是初学者还是有一定经验的DBA,都可以根据自己的需求选择合适的学习路径...
备用数据库分为物理备用(Physical Standby)和逻辑备用(Logical Standby)两种类型。 物理备用数据库是主数据库的一个镜像副本,它尽可能地保持与主数据库的数据一致。当主数据库发生故障时,物理备用数据库可以...
- **Standby Database**:Primary Database 的一个或多个副本,用于灾难恢复或读写分离等场景。 - **Physical Standby**:通过归档日志文件的物理复制来同步数据,支持在线恢复,通常用于灾难恢复。 - **Logical ...
1. **Oracle读写分离**:Oracle数据库实现读写分离的方法包括基于RAC架构,使用数据复制技术如Streams,使用第三方软件如Golden Gate或DSG,以及Logical standby技术。这些策略都是为了提高数据库读取性能,减少主库...
Oracle Data Guard 是 Oracle 数据库系统中的一个强大特性,主要用于实现数据库的高可用性和灾难恢复。在本参考指南中,我们将深入探讨 Data Guard 的核心概念、配置步骤以及如何利用其功能来确保业务连续性。 一、...
- **Logical Standby**:可以应用SQL语句而不是物理变化。 #### 56. 执行计划及其查看方式 - 执行计划展示了查询如何被执行。 - 使用`EXPLAIN PLAN`或`DBMS_XPLAN.DISPLAY`查看执行计划。 #### 57. Nest Loop与...
- **Logical Standby**:逻辑备用数据库允许在备用上执行SQL查询,因为它接收并解析redo数据,而不是直接应用。 - **Snapshot Standby**:快照备用数据库仅用于定期数据备份,不支持实时应用redo日志。 2. **保护...