我目前正在一大堆表上创建物化视图日志,以支持具有快速刷新的物化视图。我们正在创建的物化视图包含来自各种表的大约 30 列。我们的一个事实表包含大约 15 列,这些列将用于物化视图。
创建MV日志时,是否有必要枚举MV中所需的基表中的所有列?
CREATE MATERIALIZED VIEW LOG ON SCHEMA.TABLE_A
WITH ROWID, PRIMARY KEY, SEQUENCE (COL1, COL2, COL3, ..., COL48)
INCLUDING NEW VALUES;
Run Code Online (Sandbox Code Playgroud)
以上是我目前如何创建 MV 日志的示例。我承认以上是反复试验的结果,没有彻底了解语句中每个组件的工作原理(我最了解)。
什么情况下我需要定义哪些列应该包含在MV日志中?
一些物化视图只是跨多个表的连接。其他将包括聚合、分组、总和等。
我有一个存储 unix 时间戳的表。要将其作为日期查询,我正在尝试将此时间戳转换为视图中的日期时间类型。不幸的是,我似乎只能取出 DATE 部分。
此链接描述了如何进行转换,但需要更改nls_date_format以包含时间部分。默认当前仅显示日期部分。我需要日期和时间。
不幸的是,该解决方案仅适用于会话级别。作为开发人员,我宁愿不必跑到我们的托管服务提供商那里要求他们更改数据库级别的值 - 特别是因为它可能会影响其他应用程序。
有没有一种方法可以在不修改系统的情况下将 sql 中的时间戳转换为日期时间?
我们有一个租用的数据仓库,我们正在做报告。查询开始需要很长时间,我们正在寻找减少这种情况的选项。目前有两个想法。
创建租户特定的聚合表,并从中查询。
根据租户对数据进行水平分区。
第一个选项意味着对于每个加入的新租户,我们都需要创建一组新表。这并不难,因为新租户的注册会提前几周通知,如果我们忘记了,就会很早就发现缺少报告。
对我来说,对数据进行分区听起来是一种更好的方法,因为我们不会复制数据。我们不必依赖于将新数据传输到聚合表的过程。
我想知道这些选项中的哪一个会更好,如果有人以前有过类似的经历。对数据进行分区真的有帮助吗?或者与将所有数据放在一个“空间”中没有太大区别?
而且,在 Oracle 10g 中,如何对数据进行水平分区?如果我有下表:
TABLE Transaction(id, tenant_id, a, b, c, d)
Run Code Online (Sandbox Code Playgroud)
我们将很快迁移到 Oracle 11g,因此将不胜感激跨版本分区的任何差异。
(注意:我尝试使用分区标签,但没有足够的代表,如果其他人可以添加一个很酷的标签)