科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>软件频道>数据库-zhiding>Oracle数据复制技术有效解决数据冗余

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  一个中型或大型公司往往由地理上分散的部门所组成,这些部门通常需要进行数据共享。针对这些共享数据,可以将其存储在某个站点上,需要的用户都从这个站点上存取。这种方案的优点是数据的一致性容易保证,但其缺点也是很突出的,那就是该站点的负载大、网络负载大。

来源:中国IT实验室 2007年10月07日

关键字:ORACLE ORACLE 数据库 管理信息系统

  一个中型或大型公司往往由地理上分散的部门所组成,这些部门通常需要进行数据共享。针对这些共享数据,可以将其存储在某个站点上,需要的用户都从这个站点上存取。这种方案的优点是数据的一致性容易保证,但其缺点也是很突出的,那就是该站点的负载大、网络负载大,远程用户的数据响应迟缓。数据复制技术可以有效地解决这个问题,它通过将这些共享数据复制到位于不同地点的多个数据库中,从而实现数据的本地访问,减少了网络负荷,并提高了数据访问的性能,而且通过对数据库中的数据定期同步(通常是每天晚上),从而确保了所有的用户使用同样的、最新的数据。该技术适用于用户数量较大、地理分布较广、而且需要实时地访问相同数据的应用模式。

  数据复制的概念及特点

  1、数据复制的概念及分类:

  数据复制,就是将数据库中的数据拷贝到另外一个或多个不同的物理站点上,从而保持源数据库与目标数据库中指定数据的一致性。

  按照数据复制的实时性,数据复制可分为同步数据复制和异步数据复制。同步数据复制是指将本地生产数据以完全同步的方式复制到异地,每一本地IO交易均需等待远程复制的完成方予以释放。异步数据复制则是指将本地生产数据以后台同步的方式复制到异地,每一本地IO交易均正常释放,无需等待远程复制的完成。同步复制实时性强,远端数据与本地数据完全同步。但这种方式受带宽影响较大,数据传输距离较短。异步复制不影响本地交易,传输距离长,但其数据比本地数据略有延迟。在异步复制环境中,对于所有应用最关键的就是要确保数据的一致性。

  按照复制站点的类型,数据复制可分为多主控站点复制、物化视图复制及混合复制。多主控站点复制也称为对等站点复制,其中每个站点都是主控站点,都需要与其他站点进行信息交流,各站点之间是平等的。物化视图复制包含一个主控站点、一个或多个物化视图站点,

  物化视图中的内容可以为目标主对象在某个时间点的全部拷贝或部分拷贝,其中目标主对象既可以是主控站点上的表也可以是物化视图站点上的主物化视图。混合复制包含多个主控站点和多个物化视图站点,是主控站点复制和物化视图复制的结合体,适合于复杂的业务情况。

  2、数据复制的特点:

  数据复制通过在多个站点上建立备份,能够提高数据的安全性,同时也提高了数据的可用性,这是因为如果一个站点出现了问题,用户可以选择其他站点继续进行操作,应用系统还可继续运行,从而数据复制提供了容错保护机制。

  然而数据复制最基本的功能是提高数据库的性能。它通过将远程数据库中的数据复制到本地,使得应用能够就近访问数据,从而降低网络传输负载,提高效率。而且在数据复制系统中,可以提供多个站点之间的负载平衡,让这几个用户使用这个服务器,另外几个用户可以使用其他的服务器,以避免某些站点负载过重。

  物化视图还提供了按子集进行复制,这样各站点就可只复制自己需要的数据,也能减轻网络的传输量。

  数据复制的实现方法

  在具体的实现之前,首先要做好设计与规划。这就需要细致分析具体的业务情况,设计出一套能够满足业务需要的方案。通常在设计过程中,需要确定出要建立的数据库站点,各站点的类型,需要复制的数据对象,以及同步方式、冲突解决方案等内容。

  数据复制的实现主要包括以下几步:

  (1)创建复制站点。

  (2)创建组对象。

  (3)配置冲突解决方案。

  下面我们举一个例子来说明各步具体需要完成的工作。在这个例子中我们采用多主控站点复制方式,设有两个主控站点和两个共享数据表。两个主控站点分别为:处理站点(cl.world)和解释站点(js.wo rld);两个数据表为测区( survey)和测线( line)。

 

查看本文来源

    一 环境:

    1 平台: IBM AX360,4G内存 windows 2k advServer sp3 + oracle 816 独占模式

    2 内存分配相关参数

    ……processes……=.1000

    ……shared_pool_size……=.240000000

    ……large_pool_size……=.614400

    ……java_pool_size……=.32768

    ……db_block_buffers……=.90000

    ……db_block_size……=.4096

    ……log_buffer……=.163840

    ……log_checkpoint_interval……=.10000

    ……sort_area_size……=.65536

    ……sort_area_retained_size……=.65536

    ……open_cursors……=.100

    ……job_queue_processes……=.4

    ……job_queue_interval……=.10

    ……max_dump_file_size……=.10240

    3 最大并发用户数:850个左右

    二 故障现象:

    ……当用户数达到一定的数量时(700多)客户端连接服务器时报ora-12560错误,紧跟着报ora-03114错误,不能连接到服务器。此时已连接到服务器的用户能正常访问数据库。

    ……首先查看警告日志文件,未见到明显错误信息。

    ……查看listner.log文件,发现如下信息(很多个类似的错误记录,摘两个上来)

    ……

    02-JUL-2003 10:30:09 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*******)(USER=*****))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*******)(PORT=1136)) * establish * ORCL * 12500

    TNS-12500: TNS:listener failed to start a dedicated server process

    。TNS-12540: TNS:internal limit restriction exceeded

    ……TNS-12560: TNSrotocol adapter error

    ……TNS-00510: Internal limit restriction exceeded

    ……32-bit Windows Error: 8: Exec format error

    02-JUL-2003 10:30:10 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*****)(USER=***))) * (ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=1203)) * establish * ORCL * 12500

    TNS-12500: TNS:listener failed to start a dedicated server process

    。TNS-12540: TNS:internal limit restriction exceeded

    ……TNS-12560: TNSrotocol adapter error

    ……TNS-00510: Internal limit restriction exceeded

    ……32-bit Windows Error: 8: Exec format error

    ……

    此时,原来已连接上服务器的用户还能正常使用。查看此时session达到760多个。

    ……重启oracle服务后,能连接新的用户数,但当并发用户数达到750个以上时,再次报同样的错误

    三 原因分析:

    ……系统资源耗竭,意味着系统分配给oracle的内存用尽了。虽然我们有4G的物理内存,但正常情况下系统只能给oracle分配2G的内存,这2G的内存中,包括了SGA、PGA等oracle需要使用的全部内存。在独占模式下,每一个session将单独分配2M左右的内存。在本例中,SGA分配了约600M,按每一个用户分配2M内存计算,连接数达到750个时,总分配内存已达到2G,将不能再增加新的连接数。如果要解决这个问题,在不做大的调整的前提下,要么减小SGA大小,要么减小为每一个会话分配的内存大小,以能连接更多的用户。

 

查看本文来源

    四 解决过程:

    ……查阅了oracle文档,文档里提出来了几个解决的办法:

    1 重置init.ora参数文件,调小以下四个参数的值:

    ……short_area_size

    ……hash_area_size

    ……bitmap_merge_area_size

    ……create_bitmap_area_seze

    ……open_cursone

    2 调小SGA的大小

    3 减小oracle Job队列数量(job_queue_processes)和并发队列数(parallel_max_servers)

    4 重置并减小会话/线程使用的堆栈大小

    5 将oracle改为mts模式

    6 更换操作系统为windows NT 企业版

    7 使用intel的ESMA硬件支持,即使用大内存

    ……1) 在intel系统上使用 /3G 开关

    ……2) 使用PSE36内存

    ……结合本实例的具体情况,决定调整的主要目标为减小用户的PGA大小。

    ……构成PGA的主要内容有short_area_size, hash_area_size, open_cursone, 以及oracle 堆栈和TNS 堆栈。在本实例中,排序区为64K,hash区为128K(缺少值),打开的游标数与应用有关,不能随便减小了,然而oracle堆栈和TNS堆栈都是1M,却有较大的减小的余地。因此,调整的目标定为减小这两个堆栈的大小。

    ……使用orastack 命令来减小这两个堆栈的大小:

    D:\oracle\ora81\bin>orastack oracle.exe 500000

    Couldn't open file with CreateFile()

    GetLastError() == 32

    ……停止oracle服务和TNS服务,再运行以上命令

    D:\oracle\ora81\bin>orastack oracle.exe 500000

    Dump of file oracle.exe

    Current Reserved Memory per Thread = 1048576

    Current Committed Memory per Thread = 4096

    New Reserved Memory per Thread = 500000

    D:\oracle\ora81\bin>orastack tnslsnr.exe 500000

    Dump of file tnslsnr.exe

    Current Reserved Memory per Thread = 1048576

    Current Committed Memory per Thread = 4096

    New Reserved Memory per Thread = 500000

    重新启动oracle服务和TNS服务,打开数据库,用户连接到服务器,经测试,用户数到1350以上时数据库仍然运行正常,解决了本实例存在的问题。

    五 小结

    ……事实上,正如oracle文档所指出的那样,要增加用户连接数的途径很多,除了减小用户堆栈之外,还可以减小SGA,或者是更改成MTS方式,或者是使用第三方工具增加oracle可用内存。本人前面小结过如何让oracle在32位的windows操作系统上使用超过2G内存的方法( http://www.itpub.net/showthread.php……15&pagenumber=1 ),在本安全应用中,宜将两者(减小用户堆栈与增加oracle可用内存)结合起来使用,以提高数据库性能。但是,这种方式下,同样不可能无限制地增加用户连接数。要想使用户连接数达到更大,则应使用MTS方式。

    国际来源:http://searchoracle.techtarget.com/ateQuestionNResponse/0,289625,sid41_cid583536_tax294550,00.html

查看本文来源