标签: materialized-views

oracle物化视图刷新时间

任何人都能告诉我物化视图设置为使用以下设置刷新的频率?

按需启动强制执行sysdate + 0 NEXT(round(sysdate)+ 1/24)+ 1

我想我每小时都读它,但我不确定

oracle materialized-views

5
推荐指数
1
解决办法
2万
查看次数

Oracle - Materialized View混淆(Toad IDE在Tables部分显示MV时是错误的吗?)

我对Materialized视图感到困惑.要么是我使用的Toad IDE让我感到困惑,要么就是我对MV的了解不够.

我通过这样的东西在Oracle中创建了一个物化视图....

CREATE MATERIALIZED VIEW TESTRESULT
NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
REFRESH FORCE ON DEMAND
WITH PRIMARY KEY
AS 
SELECT ...
FROM   tables...
Run Code Online (Sandbox Code Playgroud)

我希望将使用查询返回的数据创建和填充实体化视图.好的,没什么大不了的.

我感到困惑的是为什么我的Toad IDE在表格部分下显示了一个表'TESTRESULT'.它甚至还有一个我可以看到的"创建表脚本".在此输入图像描述

但我也在"物化视图"部分下看到了物化视图.在此输入图像描述

幕后是Oracle在创建物化视图时创建表格吗?它看起来好像有两个单独的对象,一个物化视图和一个表?有人可以在创建物化视图时解释幕后发生的事情吗?蟾蜍错了还是我误解了什么?

Toad版本:9.6.1.1 Oracle:10g

oracle toad materialized-views oracle10g

5
推荐指数
1
解决办法
3851
查看次数

有没有办法查询Oracle中物化视图快速刷新所做的更改?

假设您有两个Oracle数据库,DB_A和DB_B.DB_A中有一个名为TAB1的表,其中包含物化视图日志,以及在DB_B中创建的名为SNAP_TAB1的物化视图

CREATE SNAPSHOT SNAP_TAB1
REFRESH FAST
AS SELECT * FROM TAB1@DB_A;
Run Code Online (Sandbox Code Playgroud)

有没有办法在DB_B中查询每次调用快速刷新物化视图后对SNAP_TAB1所做的更改?

DBMS_SNAPSHOT.REFRESH( 'SNAP_TAB1', 'F' );
Run Code Online (Sandbox Code Playgroud)

在DB_A中,在刷新之前,您可以查询物化视图日志表MLOG $ _TAB1,以查看在TAB1中已更改的行.我正在寻找一种方法在DB_B中查询,每次刷新后,哪些行已在SNAP_TAB1中刷新.

谢谢!

oracle replication materialized-views

5
推荐指数
1
解决办法
206
查看次数

物化视图的创建速度很快,但刷新需要花费数小时

我正在使用实例化视图,由于某些表来自没有实例化视图日志的远程数据库,因此无法将其设置为快速刷新。

当我创建实例化视图时,它花费了大约20 30秒。但是,当我尝试刷新它时。花了2到3个小时以上。记录总数只有460,000左右。

有谁知道它会如何发生吗?

谢谢

代码如下

create materialized view MY_MV1
refresh force on demand
start with to_date('20-02-2013 22:00:00', 'dd-mm-yyyy hh24:mi:ss') next trunc(sysdate)+1+22/24 
as
( SELECT Nvl(Cr.Sol_Chng_Num, ' ') AS Change_Request_Nbr,
       Nvl(Sr.Sr_Num, ' ') AS Service_Request_Nbr,
       Nvl(Sr.w_Org_Id, 0) AS Org_Id,
       Fcr.rowid,
       Cr.rowid,
       Bsr.rowid,
       Sr.rowid,
       SYSDATE
  FROM Dwadmin.f_S_Change@DateWarehouse.World Fcr
 INNER JOIN Dwadmin.d_S_Change@DateWarehouse.World Cr
    ON Fcr.w_Sol_Chng_Id = Cr.w_Sol_Chng_Id
 INNER JOIN Dwadmin.b_S_Change_Obl@DateWarehouse.World Bsr
    ON Fcr.w_Sol_Chng_Id = Bsr.w_Sol_Chng_Id
 INNER JOIN Dwadmin.d_S_Rec@DateWarehouse.World Sr
    ON Sr.w_Srv_Rec_Id = Bsr.w_Srv_Rec_Id
 WHERE Sr.Sr_Num <> 'NS'
);
Run Code Online (Sandbox Code Playgroud)

我尝试使用dbms_mview.refresh('MY_MATVIEW','C',atomic_refresh => false),但仍然需要141分钟才能运行...而没有atomic_refresh => …

oracle plsql materialized-views oracle10g

5
推荐指数
1
解决办法
1万
查看次数

在一个查询中删除 Postgresql 9.3 中的普通视图或物化视图

I\xe2\x80\x99在我的 PostgreSQL 中有一个视图,它可以是正常的也可以是具体化的,具体取决于某些情况。我正在尝试编写一个查询,该查询肯定会删除视图,并且无论它目前的类型是什么,都不会出现错误。然而,这似乎并不容易。当我尝试使用以下代码时,出现错误:

\n\n
DROP VIEW IF EXISTS {{ schema }}.{{ viewName }};\nDROP MATERIALIZED VIEW IF EXISTS {{ schema }}.{{ viewName }};\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xc2\xa0

\n\n
SQLSTATE[42809]: Wrong object type: 7 ERROR:  "{{ viewName }}" is not a view  \nHINT:  Use DROP MATERIALIZED VIEW to remove a materialized view.    \n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,当视图具体化时,\xe2\x80\x98IF EXISTS\xe2\x80\x99 在第一行结果为 true,DROP 命令启动,但由于视图类型错误而失败(这是不正常的) 。谁能提出一种既适用于物化视图又适用于普通视图的通用解决方法?

\n

postgresql materialized-views sql-drop

5
推荐指数
1
解决办法
6662
查看次数

为什么 SQL Developer 认为我的物化视图中有错误?

我创建了一些物化视图,Oracle SQL Developer 在每个视图旁边放了一个红色的小“x”。目前,当我查询它们并在 SQL Plus 中运行以下查询时,它们返回正确的信息表明没有错误:

SELECT * FROM USER_SNAPSHOTS
Run Code Online (Sandbox Code Playgroud)

ERROR对于有问题的物化视图,此列中的列返回 0。

有谁知道为什么 SQL Developer 认为有错误?我还有其他地方可以检查吗?

更新

根据帕特里克的建议,我运行了以下查询:

SELECT * FROM ALL_MVIEWS
Run Code Online (Sandbox Code Playgroud)

对于每个有问题的视图,COMPILE_STATE 是“NEEDS_COMPILE”。这是什么意思?为什么需要重新编译?未更改任何基础表。

oracle views materialized-views oracle-sqldeveloper

5
推荐指数
2
解决办法
2万
查看次数

物化视图的列数据类型?

对于常规表和视图,我可以通过运行以下查询来查看其数据类型:

select data_type from information_schema.columns
where .....
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有关于物化视图的任何信息出现在此处.

通过运行,我能够获得物化视图的列列表:

    SELECT
      a.attname as column_name
  FROM
      pg_catalog.pg_attribute a
      INNER JOIN
       (SELECT c.oid,
          n.nspname,
          c.relname
        FROM pg_catalog.pg_class c
             LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
        WHERE c.relname ~ ('^(materializedview)$')
          AND pg_catalog.pg_table_is_visible(c.oid)
        ORDER BY 2, 3) b
      ON a.attrelid = b.oid
      INNER JOIN
       (SELECT
            a.attrelid,
            max(a.attnum) as max_attnum
        FROM pg_catalog.pg_attribute a
        WHERE a.attnum > 0
          AND NOT a.attisdropped
        GROUP BY a.attrelid) e
      ON a.attrelid=e.attrelid
  WHERE a.attnum > 0
    AND NOT a.attisdropped
  ORDER BY …
Run Code Online (Sandbox Code Playgroud)

postgresql materialized-views

5
推荐指数
1
解决办法
1145
查看次数

使用实体化视图跟踪记录的最新版本

我们有一个高度(也许已经结束?)规范化的表来跟踪版本化的值。它只是插入,没有更新。

示例数据:

"ID"    "Version"   "Value"
1       0           "A_1"
2       0           "B_1"
1       1           "A_2"
3       0           "C_1"
Run Code Online (Sandbox Code Playgroud)

我们经常运行查询以仅提取每个 ID 的最新值。当我们处理数百万行时,我们开始遇到性能问题。我已经能够使用物化视图对改进进行原型设计,但无法以它们自刷新“ON COMMIT”的方式创建它们

到目前为止我得到的是这个(修改如下)

CREATE MATERIALIZED VIEW TABLE_LATEST 
    BUILD IMMEDIATE
    REFRESH FAST 
    ON COMMIT AS

SELECT  T.ID
       ,T.LAST_VERSION
FROM (
    SELECT  ID
           ,MAX(VERSION) OVER (PARTITION BY ID) LAST_VERSION
    FROM    TABLE
) T
GROUP BY T.ID, T.LAST_VERSION;
Run Code Online (Sandbox Code Playgroud)

由于反馈,现在对其进行了修订:

CREATE MATERIALIZED VIEW TABLE_LATEST 
    BUILD IMMEDIATE
    REFRESH FAST 
    ON COMMIT AS

SELECT  ID
       ,MAX(VERSION)
FROM    TABLE
GROUP BY T.ID;
Run Code Online (Sandbox Code Playgroud)

哪个失败了:

ORA-12033: 无法在“SCHEMA”.“TABLE”上使用物化视图日志中的过滤器列

*Cause:    The materialized …
Run Code Online (Sandbox Code Playgroud)

oracle materialized-views oracle12c

5
推荐指数
1
解决办法
1279
查看次数

创建物化视图时如何指示列不可为空?

我正在使用以下查询创建物化视图:

CREATE MATERIALIZED VIEW article_view AS
SELECT
  id,
  alternative_headline,
  article_author_id,
  created_at,
  description,
  headline,
  preview_paragraph_image_id,
  published_at,
  updated_at
FROM article
WHERE
  published_at IS NOT NULL
WITH NO DATA;

CREATE UNIQUE INDEX ON article_view (id);
Run Code Online (Sandbox Code Playgroud)

我希望它在表示该published_at列不可为空。

想要将published_at列表示为不可为空的原因是因为我使用了一个脚手架工具,它根据数据库模式生成数据库查询和类型。在这种特殊情况下,published_at被错误地表示为触发严格类型检查错误的可空列。

所述脚手架工具使用以下查询来描述数据库:

SELECT
  pc1.relname AS "tableName",
  pa1.attname AS "columnName",
  pg_catalog.format_type (pa1.atttypid, NULL) "dataType",
  pc1.relkind = 'm' "isMaterializedView",
  NOT(pa1.attnotnull) "isNullable"
FROM
  pg_class pc1
JOIN pg_namespace pn1 ON pn1.oid = pc1.relnamespace
JOIN
  pg_attribute pa1 ON pa1.attrelid = pc1.oid
  AND …
Run Code Online (Sandbox Code Playgroud)

postgresql materialized-views

5
推荐指数
1
解决办法
1355
查看次数

Exists 与 In 的物化视图性能

我做了一些谷歌搜索,但没有找到一个 oracle 性能问题的明确答案。也许我们可以在这里记录它。我正在构建一个非常简单但在相当大的桌子上的 MV。像许多事情一样的查询可以用不止一种方式编写。在我的情况下,当作为 select 语句编写时,两个解决方案具有相似的成本/执行计划,但是当放置在创建物化视图中时,执行时间会发生巨大变化。任何洞察为什么?

  • Tab1 大约有 40M 条记录。
  • Tab2 是大约 8M 记录。
  • field1 是 Tab1 上的主键,它不是 Tab2 上的 PK 或唯一键,但 Tab 2 确实在该字段上有索引。
  • field2 不是键,也不是在任一表上建立索引 (boo)

查询是:

问题 1:

SELECT
    CR1.Several_Fields
FROM 
    SCHEMA1.tab1 T1
WHERE T1.field2 like 'EXAMPLE%'
AND T1.field1 not in (
    SELECT T2.field1
    FROM SCHEMA1.tab2 T2
)
; 
Run Code Online (Sandbox Code Playgroud)

问题 2:

SELECT
    CR1.Several_Fields
FROM 
    SCHEMA1.tab1 T1
WHERE T1.field2 like 'EXAMPLE%'
AND  not exists (
    SELECT 1
    FROM SCHEMA1.tab2 T2
    WHERE T1.field1 = T2.field1
)
;
Run Code Online (Sandbox Code Playgroud)

两个查询作为 select …

sql oracle performance materialized-views

5
推荐指数
1
解决办法
83
查看次数