使用Oracle管理许多公司

时间:2018-10-18 14:45:43

标签: oracle database-performance database-security

我的公司正在将其数据存储在Oracle数据库中。 它为其他几家公司提供服务,每个公司都有成千上万的客户下订单。 由于历史原因,所有数据都位于同一模式中,例如,所有订单位于同一表中,例如ORDERS

现在它存在性能问题,我想借此机会管理两个目标:

  • 消除性能问题
  • 出于安全考虑将公司数据分开。

我最初的想法是为我们服务的每家公司使用一个架构

  • 模式A和名为ORDERS的表,其中包含公司A客户的所有订单
  • 模式B和名为ORDERS的表,其中包含公司B客户的所有订单
  • 等...

但是我们还有一个问题:我们还有一些“超级公司”,它们也可以管理许多公司的数据。例如:“超级公司”管理公司A和B的订单。

采用这种方法,有什么办法可以管理这些“超级公司”?我以为是要声明另一个模式(假设为SUPERCOMPANY),该模式的同义词是指ORDERSA中的B表的并集,但是:

  • 是否存在任何引用工会的同义词的性能问题?是否使用表的索引?
  • 如何插入?如果“超级公司”想要为属于公司A的客户添加订单,如何定位适当的表?

我们是否应该更好地使用另一种解决方案,例如仍然拥有一个大数据库并具有引用大表ORDERS的适当分区的架构? (我什至不知道这是否可能)

  • 模式DB包含具有庞大ORDERS表的数据,并按公司分区。
  • 模式A具有引用DB.ORDERS#partitionA的同义词
  • 模式B具有引用DB.ORDERS#partitionB的同义词
  • 模式SUPERCOMPANY的同义词,它引用了DB.ORDERSDB.ORDERS#partitionA and ORDERS#partitionB

这对我来说听起来不太好,因为我们不应该直接针对分区,是吗?

我仍然有希望,并且我相信Oracle对于此类问题有解决方案,因为它是关系数据库的主要参与者。

您的处理方式是什么?

感谢您的阅读。

1 个答案:

答案 0 :(得分:0)

听起来分区很适合您的性能问题。

对于安全性问题,您可以查看Virtual Private Database,它正是针对这种情况而设计的。我认为您甚至不需要同义词(如果走这条路,可能就不需要视图),因为您可以设置策略,以便根据您所连接的用户帐户,Oracle会自动将适当的过滤器应用于所有受影响的查询。

您可能还会考虑使用服务,以提供更多选择来监视公司的绩效。