Oracle高级复制技术及其实现
- 格式:pdf
- 大小:191.57 KB
- 文档页数:5
Oracle12C新特性之PDB热克隆(本地克隆、远端异机克隆)说明:版本12.2.0.112c r1版本中 clone ⼀份PDB源库需要打开在read only只读模式 , 在12c r2版本中引⼊了local undo mode, 源PDB在read/write 读写模式也可以 clone 。
local undo mode 也是oracle推崇的模式。
说明: shared undo 与 Local undo 模式切换可以参考 /zhang123456456/article/details/71374528要求:1、 Archive Log Enabled2、 Local Undo Enabled3、 destination CDB must have a public database link to the source CDB,have sufficient privileges to use the database link.⼀、克隆本地pdb[oracle@12c ~]$ sqlplus / as sysdba-- 检查是否开启 local undoSQL>col PROPERTY_NAME for a25;col PROPERTY_VALUE for a25;select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name='LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE------------------------- -------------------------LOCAL_UNDO_ENABLED TRUESQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 PDB01 READ WRITE NOSQL> show parameter pdb_file_name_convertNAME TYPE VALUE------------------------------------ ----------- ------------------------------pdb_file_name_convert string-- clone pdb 数量为⼀,注意这⾥ pdb_file_name_convert 参数⽣效级别设置的是 session ,如有需要,⾃⾏设置为全局SQL> alter session set pdb_file_name_convert='pdb01','pdb02';Session altered.SQL> create pluggable database pdb02 from pdb01;Pluggable database created.SQL> alter pluggable database pdb02 open;Pluggable database created.SQL> alter pluggable database pdb02 close immediate;Pluggable database altered.-- clone pdb 数量为多SQL> alter session set pdb_file_name_convert='pdb01','pdb02,pdb03';Session altered.SQL> create pluggable database pdb03 from pdb01;Pluggable database created.SQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 PDB01 READ WRITE NO4 PDB02 MOUNTED5 PDB03 MOUNTEDSQL> alter pluggable database pdb02 open;Pluggable database altered.SQL> alter pluggable database pdb03 open;Pluggable database altered.SQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 PDB01 READ WRITE NO4 PDB02 READ WRITE NO5 PDB03 READ WRITE NO⼆、克隆远程pdb--源端SQL> create user c##andy identified by andy container=all;User created.SQL> grant dba to c##andy container=all;Grant succeeded.-- ⽬标端cdb执⾏SQL> create database link clonePdb connect to c##andy identified by andy using '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP) (HOST = 10.219.24.17)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = pdb01)))';Database link created.-- 源端SQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 PDB01 READ WRITE NO-- ⽬标端cdbSQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 PDB01 READ WRITE NO4 PDB02 READ WRITE NO5 PDB03 READ WRITE NOSQL> alter session set pdb_file_name_convert='pdb01','pdb04';Session altered.-- 通过 dblink 克隆源端的 pdbSQL> create pluggable database pdb04 from pdb01@clonePdb;Pluggable database created.SQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 PDB01 READ WRITE NO4 PDB02 READ WRITE NO5 PDB03 READ WRITE NO6 PDB04 MOUNTEDSQL> alter pluggable database pdb04 open;alter pluggable database pdb04 open*ERROR at line 1:ORA-14694: database must in UPGRADE mode to begin MAX_STRING_SIZE migrationSQL> ho oerr ora 1469414694, 00000, "database must in UPGRADE mode to begin MAX_STRING_SIZE migration"// *Cause: An attempt was made to update the MAX_STRING_SIZE parameter// to EXTENDED when the database was not in UPGRADE mode.//* Action: Restart the database in UPGRADE mode, modify the parameter,// run the utl32k.sql script in $ORACLE_HOME/rdbms/admin, and// restart the database in normal mode.说明:这个报错的原因是⽬标端使⽤了12c的新特性extended data type ,源端没有使⽤这个新特性,从源端克隆过来的pdb需要扩展extended data type 新特性与⽬标端保持⼀致。
用ORACLE的高级复制实现内外网数据同步本文简要介绍了ORACLE的高级复制功能,并通过一个实际项目,讨论了在内外网的两级DB 中如何采用高级复制达到内外网的数据统一,最后给出配置脚本供大家参考。
1、基本概念ORACLEORACLE是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。
是客户/服务器(CLIENT/SERVER)体系结构的数据库之一。
高级复制什么是复制?简单地说复制就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。
高级复制,是在组成分布式数据库系统的多个数据库中复制和维护数据库对象的过程。
Oracle 高级复制允许应用程序更新数据库的任何副本,并将这些更改自动传递到其他数据库,同时确保全局事务处理的一致性和数据完整性。
同步复制,复制数据在任何时间在任何复制节点均保持一致。
如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点。
这种技术适用于那些对于实时性要求较高的商业应用中。
异步复制,所有复制节点的数据在一定时间内是不同步的。
如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。
这些不同的事务间可以间隔几秒,几分种,几小时,也可以是几天之后。
复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。
2、项目情况需求描述这是一个内外网结构的审批系统。
外网有一个WEB(+APPSERVER),一个DB(ORACLE9.2,双网卡),负责接收申报和反馈审批结果。
内网有一个WEB(+APPSERVER),一个DB(ORACLE9.2,双网卡),负责接收申报和反馈审批结果,以及通过审批流程处理来自外网的审批申报。
由上可知,内网功能包括外网功能,不过外网申报需要CA认证,内网则不需要。
根据国家保密有关规定,政务系统的内外网必须物理隔绝,所以外网接收到的申报并不能马上反应到内网,同理,内网的处理结果也不能迅速反馈到外网。
高级复制什么是复制?简单地说复制就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。
高级复制,是在组成分布式数据库系统的多个数据库中复制和维护数据库对象的过程。
Oracle 高级复制允许应用程序更新数据库的任何副本,并将这些更改自动传递到其他数据库,同时确保全局事务处理的一致性和数据完整性。
同步复制,复制数据在任何时间在任何复制节点均保持一致。
如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点。
这种技术适用于那些对于实时性要求较高的商业应用中。
异步复制,所有复制节点的数据在一定时间内是不同步的。
如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。
这些不同的事务间可以间隔几秒,几分种,几小时,也可以是几天之后。
复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。
一、实现数据库复制的前提条件1、数据库支持高级复制功能您可以用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持。
2、数据库初始化参数要求①、db_domain = 指明数据库的域名(默认的是WORLD),这里可以用您公司的域名。
②、global_names = true它要求数据库链接(database link)和被连接的数据库名称一致。
现在全局数据库名:db_name+”.”+db_domain③、有跟数据库job执行有关的参数job_queue_processes = 1job_queue_interval = 60distributed_transactions = 10open_links = 4第一行定义SNP进程的启动个数为n。
系统缺省值为0,正常定义范围为0~36,根据任务的多少,可以配置不同的数值。
ORACLE数据库复制ORACLE数据库高级复制一、数据库复制概述复制,顾名思义就是将数据库中的数据拷贝到不同物理地点的数据库中。
在很多生产环境中,经常遇到一些大量得数据,这些数据只用作查询统计功能。
例如:历史告警,历史性能指标,历史事件,等等。
这种数据的特点是:只读不写,数据量相当大,一旦查询大结果集的数据时,对数据库的IO,内存缓存占用相当大,会严重影响同一个数据库的其他会话的操作,表现为整个数据库反应迟缓,业务功能不可用。
采用复制技术后,将这些大型数据复制到另外一个数据库中,对这些大数据的查询统计操作放在另外的一台数据库服务器上进行,即使受影响,也只是影响局部的查询统计功能,其他正常的业务处理不受影响。
但是,使用复制技术的话,意味着一个系统中,至少存在两个数据库(集群的数据库也当成一个数据库),对应的应用程序也需要建立多个数据库连接,能够根据业务需要,访问不同的数据库。
ORACLE数据库自身提供有复制功能,只需要进行配置即可实现。
ORACLE提供有三种复制技术:高级复制(Advanced Replication)流复制(Streams Replication)备库(Dataguard)备库的方式,就是数据库对数据库的备份方式,主要是解决容灾的,不讨论此话题。
流复制主要是利用ORACLE的归档日志,进行增量备份来实现的,不仅可以配置只复制某些表,还可以配置仅复制某些表上的ddl或dml。
可以复制到表,用户,数据库级别。
高级复制主要是基于触发器的原理来触发数据同步的,因此,高级复制无法实现用户,数据库级别的对象复制,只能做些表、索引和存储过程的复制。
如果出于容灾整个数据库的考虑,高级复制相当复杂,而且并不一定能做好,流复制的配置相对简单。
流复制是后来产生的复制技术,是基于日志挖掘技术实现的,对数据库的影响较低。
但在稳定性方面较差,实时性没有高级复制强(因为高级复制是基于触发器的)。
如果系统意外的话,流复制的恢复将会需要较长时间,特别是意外时间越长,恢复时间成倍增长。
Oracle数据库中高级复制的功能介绍PDF转换可能丢失图片或格式,建议阅读原文/html/214/s_214477_21.htm-:前言-:日益增长的分布式应用需求要求实现更好分布式的软件环境,不断推动着分布式技术的进步。
数据复制是实现分布式数据环境的一种技术,通过在不同的物理站点拷贝数据来建立分布式数据环境。
它与分布式数据库不同,在分布式数据库中,虽然每个数据对象也对所有的站点可用,但是特定的数据对象只存在于一个特定的站点中。
而数据复制实现所有的站点都有相同数据对象的可用拷贝。
-:在一个典型的分布式商业应用中经常需要把个地区的数据备份到总部的数据库中,一方面可以作为一种备份方式,另一方面也方便总部应用中的综合统计。
这是数据复制中的简单应用,本文将以这样一个例子,讲述如何实现数据复制。
-:实际情况是,公司总部在北京,有三个营业部分别位于上海(..)、杭州(..)和武汉(..)。
三个营业部的软件系统相同,数据库结构也相同。
现在需要把三个营业部的数据全部备份到总部的数据库中。
-:准备工作-:在进行复制之前需要准备的东西很多,当然最基础就是网络必须畅通,之后需要收集一些复制环境的基本信息:-:.需要复制的数据库站点的数量。
-:.每个站点的版本号。
-:.每个需要复制的数据库的大小。
-:.每个数据库所使用的字符集。
-:.每个需要复制的数据所用的方案名。
-:收集完环境信息,可以开始建立总部的集中数据库,集中数据库要求版本高于所有主战点的版本,最好所有的数据库都是用相同的字符集。
建好库后为每个主站点的备份数据分别建一个表空间,表空间大于需要复制的数据量,至于预留以后的发展空间视实际情况而定。
-:为每个主站点的对应复制数据建立方案,如果各个主站点所使用的方案名不同,在集中数据库站点分别建立名称相同的对应方案。
否则为各主站点的复制数据分别建立相应的方案名。
实际情况是后者,各营业部的数据库都是用的方案名,这里我们建立三个对应方案:、和。
高级复制配置手册(Materialized View Replication)----主站点配置Materialized View Replication复制模式实现了单主机对多个复制站点的数据同步.在主站点(即被复制主机)需要建立只读用户供复制站点来访问.下面开始配置主站点:1.初始化参数检查A. 检查global_names参数值是否为trueSQL> show parameter global_names;NAME TYPE------------------------------------ ----------------------V ALUE------------------------------global_names booleanTRUE如果为false,则需要用alter system set global_names=true命令来修改;B. 检查job_queue_processes参数是否大于0SQL> show parameter jobNAME TYPE------------------------------------ ----------------------V ALUE------------------------------job_queue_processes integer20如果小于0则不能成功建立主站点,对于多个复制站点时需要设置较大的值,用命令alter system set job_queue_processes=20来设置相应的值.2.检查全局数据库名称需要检查主站点和复制站点的db_domain名称是否相同,db_name不同.用select * from global_name语句来查询:SQL> select * from global_name;GLOBAL_NAME---------------------------------------ITRAC1其中显示的ITRAC1为db_name,这样的结果说明没有db_domain,如果设置了db_domain则会显示ITRAC1.DOMAIN,那么所有复制站点的db_domain也必须为db_name.DOMAIN.如果需要修改则使用alter system rename global_name to ITRAC1.domain来设置全局名称.3.通过OEM工具来连接需要设置成主站点的数据库4.点确定进入独立启动模式5.选中需要设定为主站点的数据库名6.以system用户登入数据库7.选择分布->高级复制->实体化视图复制8.右击主体站点,选择设置主站点9.在打开的对话框中选择添加,站点则选择需要设置的数据库名,并输入密码10.点击添加按钮11.点确定12.点下一步13.这步是要为主站点设置复制管理员,来管理高级复制,选择默认即可,口令可以修改,默认为用户名,点下一步14.这步需要设置复制方案,可以添加你需要复制的表所在的用户名(或跳过)15.确定16.下一步17.按照复制要求可以设置调度时间,这里设置5分钟(该步对于Materialized ViewReplication模式的主站点其实是不需要的),用于多主体复制中的多dblink调度18.确定后,点下一步,设置清除延迟事务处理完成队列的时间间隔,这里设置30分钟19.然后下一步,只致完成20.完成后就创建了复制管理员,这时退出system用户,用复制管理员登陆21.开始建立主体组,右击主体组->创建22.输入主体组名称23.选择对象选项卡,选择添加24.选择需要复制的表所在用户25.选择表,然后点添加,除PK索引外,其它索引也必须分别添加26.再选择创建27.创建完成后,可以看到复制是否开启,如果是正在运行则配置正确28.接下来需要为快速刷新模式建立实体视图日志29.右击然后选择创建30.选择用户及表,分别添加,如果存在PK,则选择PK,否则选择行ID刷新31.点创建即可完成32.再选择管理查看33.可以看到复制结构的拓朴图其中的实体化视图1表示有一个复制站点连结到该主站点做数据复制同步.34.到此,主站点的配置基本完成.后续维护主要检查其是否有错误及延迟事务产生,作业调度(job)是否正常运行.oracle日志中是否有报错.测试:建立完整的实体化复制结构后,对于该结构的功能进行了测试:1)单表无纪录,新增一笔纪录,当设定的同步时间到来时,自动同步成功,基本无负载;2)单表一笔纪录,修改这笔纪录,同步时间到,自动同步成功,基本无负载;3)单表一笔纪录,修改这笔纪录并且新增一笔纪录,同步时间到,自动同步成功,无负载;4)单表新增10000笔纪录,同步时间到,自动同步成功,负载大概升高0.50(linux下负载);5)单表修改这10000笔纪录中的其中几笔,自动同步成功,基本无负载;多表做以上测试,除了第4步负载多提高0.1,其它的结果一样.对于BLOB数据类型测试:对于以上表,在停止复制请求后,重新导入表,生成复制支持后,开始复制(复制站点需重新配置复制组)1)对于为空的blob字段,同步无错误;2)对于修改后,添加文件的blob字段,更新同步无问题;3)新增纪录包含blob值同步无问题.测试结果,基本能满足GreenDB同步.关于复制站点的配置后续给出!有问题的地方请各位指出,谢谢!。