首頁 資料庫 mysql教程 oracle分布式数据解决方案

oracle分布式数据解决方案

Jun 07, 2016 pm 04:20 PM
oracle 分散式 數據 解決方案

Oracle相关分布式数据解决方案 可能在云计算、SOA架构下这种方案会逐渐消亡,但是目前还是比较实用的,本文简单介绍了常用的数据同步方案,由于正在使用高级复制的解决方案,所以重点说了oracle的高级复制 一、常见的分布式数据解决方案 如果数据库为oracle、

Oracle相关分布式数据解决方案
   可能在云计算、SOA架构下这种方案会逐渐消亡,但是目前还是比较实用的,本文简单介绍了常用的数据同步方案,由于正在使用高级复制的解决方案,所以重点说了oracle的高级复制
一、常见的分布式数据解决方案
如果数据库为oracle、数据分散的分布式系统,常可以见到入下的分布解决方案
非实时,批量同步
1.ETL工具或者自己开发的接口
 一般对应于特定格式的数据文件,使用FTP服务。
 数据仓库或者数据集市可以使用ETL工具做数据整合,一般系统都是自己写的接口程序实现。常规思路是数据导入接口表,清洗后进入正式表
导入方式非常多,如果数据量很大可以使用sqlLoder,如果数据不大,可以逐行导入并同时清洗。就我的经验来看,将清洗逻辑放在数据库比较好。
 也有可能是通过http获得的XML文件,这时需要自己定制XML的解析程序,读出CDATA节。高级程序语言这方面的功能都很强大、简单。
实时、小批量同步
1.第三方提供的
 对于关键系统,可以使用中间件保证数据的安全、稳定。比如BEA的Tuxedo就不错。
2.自己开发
 如果都是unix机器可以使用socket编程,数据打成包发送,,稳定性可以保证。经常是打成XML的格式,数据文件的自描述能力比较强。
这两种方案在电信等系统都可以见到,还是比较可靠的。
3.oracle自己提供的
3.1实时表接口
 使用db_link和存储过程,结合job,很灵活和强大。
3.2 oracle高级复制
 如果需要保证双向的实时数据同步,同时复制环节又比较复杂,存在多个复制结点,可以使用Oracle的高级复制,上个月 济南网站建设  做的房产局项目中使用了这种方案。虽然就这个项目来说,不太适用使用这种方案,但由于历史的原因,为了一期系统的需要我们延续了这种同步方案。这篇文章主要就高级复制的过程进行说明:

二、高级复制基本概念
 1.相同数据会存在于多个结点,这种环境更适宜使用高级复制
 2.在不同版本和不同操作系统之间的ORACLE,都可以使用advance replication
 3.几个名词
  replication object:复制对象,包括表、索引、存储过程
  replication group:复制组,复制对象的集合,一个group包含多个object,一个object只能属于一个group
  replication site:复制站点
 4.multimaster replication:特点:全表复制,每个事务后都可进行复制
  复制方式
   异步复制:推后的时间内复制到其它master,也叫store and forward data replication
   同步复制:立刻更新到其它master,也就real time data replication
   procedual replication: 包生成一个wrapper,数据变化通过存储过程完成,某个master中的procedure被调研,wapper会保证其它site中    的procedure也被调用,在有大数据量操作时可减少网络负载
  异步调用过程
   DML操作(或者wappers)产生由内部触发器一个延时rpc并放入延时事务队列,1个site有延时事务队列,1个队列被多个group共用
   出现错误将事务放入错误队列,事务成功结束后,由purge job从源site的事务队列中删除事务
  同步复制过程
   DML操作被立刻捕获,事务立刻执行,任何一个站点出错、事务回滚,先锁住本地行,使用after row触发器锁住远端行,所有站点提交后   oracle才会解锁,极为依赖系统和网络的可用性
三、高级复制创建步骤:
 网上的资料很多,也很详细,其中eygle的比较详细的经典,大家搜一下就可以看到,我就简单说一下,并就自己碰到的问题描述一下解决办法
1.调整oracle环境,建立repadmin用户,为用法赋权
2.建立db_link
3.复制组中建立复制对象
 可使用图形化工具或者手工脚本建立,由于表很多,而且正式部署还有再次建立,这里我使用了手工脚本方式
 --创建复制组:
    DBMS_REPCAT.CREATE_MASTER_REPGROUP(
     gname => '"***"',
     qualifier => '',
     group_comment => '');

 --在复制组里加入复制对象:
    DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
      gname => '"**"',
      type => 'TABLE',
      oname => '"TEST"',
      sname => '"LFGISTEST"',
      copy_rows => false,
      use_existing_object => TRUE);

 --对复制对象产生复制支持:
   DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(
     sname => '"LFGISTEST"',
     oname => '"TEST"',
     type => 'TABLE');
    
 --添加主体复制节点:
   DBMS_REPCAT.ADD_MASTER_DATABASE(
     gname => '"***"',
     master => '***',
     use_existing_objects => TRUE,
     copy_rows => false,
     propagation_mode => 'ASYNCHRONOUS');
 
 --在主体定义站点启动复制:
  DBMS_REPCAT.RESUME_MASTER_ACTIVITY(gname => '"***"',true);
碰到的错误
1.db_link创建后无法使用,发现db_link起的名称有问题
 解决方法:如果global_names = true;db_link名称一定要和global_name一致,修改后成功
2.添加主体复制节点时报错:
 ORA-23357:   the   propagator   does   not   exist  
  ORA-06512:   at   "SYS.DBMS_REPCAT_CACHE",   line   76  
  ORA-06512:   at   "SYS.DBMS_REPCAT_MAS",   line   2105  
  ORA-06512:   at   "SYS.DBMS_REPCAT",   line   146  
  ORA-06512:   at   line   2  
 可能原因:
 1.global_name使用了oracle的保留字,参考:
  修改外网(61)global_name 为OUT.WWKJ.LZFC2
  alter database rename global_name to OUT.WWKJ.LZFC2;
 2.REPADMIN用户权限不足,检查赋权限的语句,确保权限到位
 3.db_link必须使用REPADMIN连接对端数据库,我就是因为这个原因报的错
 4.据说两台数据库的域必须一样
 5.两台机器的用户和schema应该一致
 解决方法:呵呵,很粗心啊,没有用repadmin运行脚本
3.复制组中加入复制对象时候,报23312错误,当前站点不是masterdef
 Oracle Error : ORA-23312: not the masterdef according to string
 Cause: The group name is null, the group name is misspelled, the invocation or given database is not the masterdef, or one of the masters does not believe the invocation database is the masterdef.
 Action: If the given group name and masterdef were both correct, connect to the masterdef and retry the request, or relocate the masterdef at the (errant) databases using relocate_masterdef.

 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

oracle如何查表空間大小 oracle如何查表空間大小 Apr 11, 2025 pm 08:15 PM

要查詢 Oracle 表空間大小,請遵循以下步驟:確定表空間名稱,方法是運行查詢:SELECT tablespace_name FROM dba_tablespaces;查詢表空間大小,方法是運行查詢:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

oracle數據庫如何導入 oracle數據庫如何導入 Apr 11, 2025 pm 08:06 PM

數據導入方法:1. 使用 SQLLoader 實用程序:準備數據文件、創建控製文件、運行 SQLLoader;2. 使用 IMP/EXP 工具:導出數據、導入數據。提示:1. 大數據集推薦 SQL*Loader;2. 目標表應存在,列定義匹配;3. 導入後需驗證數據完整性。

oracle如何增加表字段 oracle如何增加表字段 Apr 11, 2025 pm 07:30 PM

使用 ALTER TABLE 語句,具體語法如下:ALTER TABLE table_name ADD column_name data_type [constraint-clause]。其中:table_name 為表名,column_name 為字段名,data_type 為數據類型,constraint-clause 為可選的約束。示例:ALTER TABLE employees ADD email VARCHAR2(100) 為 employees 表添加 email 字段。

如何在oracle中創建表 如何在oracle中創建表 Apr 11, 2025 pm 08:00 PM

創建 Oracle 表涉及以下步驟:使用 CREATE TABLE 語法指定表名、列名、數據類型、約束和默認值。表名應簡潔、描述性,且不超過 30 個字符。列名應描述性,數據類型指定列中存儲的數據類型。 NOT NULL 約束確保列中不允許使用空值,DEFAULT 子句可指定列的默認值。 PRIMARY KEY 約束標識表的唯一記錄。 FOREIGN KEY 約束指定表中的列引用另一個表中的主鍵。請參見示例表 students 的創建,其中包含主鍵、唯一約束和默認值。

oracle中亂碼怎麼解決 oracle中亂碼怎麼解決 Apr 11, 2025 pm 10:09 PM

Oracle 亂碼問題可以通過以下步驟解決:檢查數據庫字符集以確保與數據相匹配。設置客戶端字符集以與數據庫相匹配。轉換數據或修改列字符集以匹配數據庫字符集。使用 Unicode 字符集,並避免多字節字符集。檢查數據庫和客戶端的語言設置是否正確。

oracle如何去重查詢 oracle如何去重查詢 Apr 11, 2025 pm 07:33 PM

Oracle 提供多種去重查詢方法:DISTINCT 關鍵字返回每列的唯一值。 GROUP BY 子句對結果分組並返回每個分組的非重複值。 UNIQUE 關鍵字用於創建僅包含唯一行的索引,查詢該索引將自動去重。 ROW_NUMBER() 函數分配唯一數字並過濾出僅包含第 1 行的結果。 MIN() 或 MAX() 函數可返回數字列的非重複值。 INTERSECT 運算符返回兩個結果集的公共值(無重複項)。

Oracle安裝失敗如何卸載 Oracle安裝失敗如何卸載 Apr 11, 2025 pm 08:24 PM

Oracle 安裝失敗的卸載方法:關閉 Oracle 服務,刪除 Oracle 程序文件和註冊表項,卸載 Oracle 環境變量,重新啟動計算機。若卸載失敗,可使用 Oracle 通用卸載工具手動卸載。

oracle打不開怎麼辦 oracle打不開怎麼辦 Apr 11, 2025 pm 10:06 PM

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

See all articles