在 Oracle 中,有没有一种方法可以 copy/move 从一个数据库服务名称到另一个数据库服务名称的物化视图?

Is there a way to copy/move materialised view from one DB service name to another in Oracle?

所以我想要的是在我的服务中创建物化视图,但是从 Oracle 的另一个服务中的 tables。但是由于 table 名称有点大,我做不到。因此,我正在考虑变通,仅在 table 所在的同一服务中创建实体化视图,然后 move/copy 我的服务视图。 有这样的方法吗?

  • 你怎么称呼“服务”?我觉得更合适的术语是“数据库”或“模式”
  • “table 名称有点大”是什么意思?
    • 是关于长 table 名字吗?例如,table emp 的长度为 3 个字符。你有……多少?
    • 或者您的意思是它们包含很多行? emp 在 Scott 的示例架构中包含 14 行。你有多少行?
    • 为什么这些会阻止您按计划进行?

无论如何:如果它是关于另一个数据库的,那么您将不得不使用数据库link。如果它是关于另一个模式,那么(那些 table 的)所有者将必须 授予 select 特权给你。

您可以在“源”中创建实体化视图 schema/database 并从其他任何地方访问它,只要您在同一个网络中。数据库 link(或者,在更简单的情况下,grant)将使您能够做到这一点。

通常,我们在我们自己的架构 中创建物化视图,并访问位于其他地方的源table。如果物化视图包含大量数据并且它的查询需要很长时间才能执行,那么刷新也可能需要相当长的时间。 Oracle 允许您选择刷新数据的方式(例如,每天一次 - 在 02:00 晚上,因为那时没有人在工作,所以刷新需要 2 小时,或者.. .).

如果由于某种原因您不能这样做,则在源 table 所在的位置创建它,并通过数据库 link(或在其名称之前访问实体化视图本身)使用它的所有者的名字,或者在你的模式中创建一个同义词(或者甚至是 public 同义词)。