1

我有两个 oracle 11g 数据库:生产和备份,其中一些数据通过 MQ 机制复制,其余的我仍然需要一个解决方案。基本上,我需要的是同步复制表中的列的方法,该表在生产数据库上更新得非常快。复制必须立即进行,以防生产数据库出现所有信息(该列)以备不时之需并在备份时更新。这是一方面。另一方面,在复制期间不应改变生产性能。该表可能有数十万行,并非所有行都应该被复制(有数据输入和数据输出 - 仅对于数据输出,我需要在备份时复制该列)。我正在考虑物化视图、触发器和流。对于触发器来说,事情很简单......但有些人说它' 不是推荐的方式。我做了一个数据库链接和一个这样的触发器:

after update of column
for each row
update table@backup set column = :NEW.column...

对于物化视图......我还没有想到一个解决方案,因为我不知道如何在我的backup.table中实际更新,只使用来自materializedview的记录在production.table上更新的最后一行。

对于流..我不熟悉这些,我真的不知道我是否可以只复制列上的更改,或者更好的是复制整个表,然后在备份时执行一些选择等。

有任何想法吗?非常感谢

4

2 回答 2

1

您可能需要结合使用 Oracle Streams 和变更数据捕获。另请注意,Oracle 正在逐步弃用 Streams,并鼓励未来的用户迁移到 Goldengate。见这里:http ://docs.oracle.com/cd/E16655_01/server.121/e17642/deprecated.htm#BABEAJJE

所以这是我看到的我能理解的要求:

  1. 100% 可靠的数据复制。
  2. 对源没有性能影响。

这些都不能独立实现,更不用说两者一起实现了。根据源和目标系统负载、IO、CPU、网络流量和延迟、数据库提交以及所有这些其他因素,任何类型的复制都会在系统之间产生延迟。是的,我在这些项目中混合了层,并非所有这些都是“苹果对苹果”,但关键是很多事情必须发生才能进行复制。

如果主数据库出现故障,我也对如何故障转移到这个辅助数据库系统感到有些困惑?如果主服务器关闭,您是否打算允许写入辅助服务器?您的应用程序是否足够智能以检测主节点的故障?如果真正的业务需求是“应用程序必须具有 99.9%(或任何百分比)的可用性,我不确定复制是否是您想要的答案。

这是您可以执行的操作:

  1. 让您的管理/业务用户定义可接受的停机时间水平。如果他们说“没有!” 然后转到#2,有时人们要求完美而不询问无限成本。
  2. 在演示文稿中将几个选项放在一起,并按照以下内容说出一些内容:

“对于 99.9% 的计划外停机时间,即每月 45 分钟 (31*24*60*.001) 的停机时间,需要 24 小时才能从灾难中恢复,并且在最坏的情况下会丢失最后一小时的数据那么我们可以运行一个独立的 Oracle 服务器,手头有备份硬件,这将花费 X 美元/欧元/什么的。哦,这也是人员成本的细分。

对于 99.99%,我们需要第二台服务器进行定期备份恢复等,这将花费 5 倍

对于 99.999%,我们需要复制、多个 master、更新我们的软件应用程序、更高水平的测试、更多的员工等等,这将花费 10 倍或 20 倍之类的东西。”

我纯粹是编造了所有这些数字和场景,但你可以看到它是如何工作的。当人们面临真正做这些事情的成本——以及维护它的成本——时,他们经常会改变主意。

在了解所有昂贵且痛苦的细节之前,我想先看看你是否真的需要复制。我以前研究过复制系统,我会警告您,尽管它们应该增加正常运行时间,但使用 Streams 和 CDC 进行复制非常复杂,并且经常会创建一整套其他故障模式。

于 2014-04-15T19:22:15.593 回答
0

我用触发器做了一些测试,我很担心,因为如果这两个数据库之间出现连接问题,该触发器将“停止”任何插入到主数据库中,直到重新建立连接。这可以使用像这里的存储过程来解决:

CREATE OR REPLACE TRIGGER Example
AFTER INSERT ON Emp_tab
FOR EACH ROW
BEGIN
   Insert_row_proc;
END;

CREATE OR REPLACE PROCEDURE Insert_row_proc AS
BEGIN
    INSERT INTO Emp_tab@Remote
    VALUES ('x');
EXCEPTION
   WHEN OTHERS THEN
       INSERT INTO Emp_log
       VALUES ('x');
END;

Stil,我的问题是:我应该相信这个触发器还是去寻找流(再次,我不知道我是否可以使用流只复制一列)谢谢

于 2014-04-24T09:23:40.877 回答