1. 程式人生 > >[Oracle維護工程師手記]兩表結合的MVIEW的告訴重新整理

[Oracle維護工程師手記]兩表結合的MVIEW的告訴重新整理

對兩表結合查詢建立MVIEW,進行MVIEW的的高速重新整理失敗,如何處理?

例如:

SQL> drop user u1 cascade;

User dropped.

SQL> grant dba to u1 identified by u1;

Grant succeeded.

SQL> conn u1/u1
Connected.

SQL> create table TAB001 (col1 integer primary key, col2 integer, val3 integer);

Table created.

SQL> create materialized view log on tab001;

Materialized view log created.

SQL> create table TAB002 (col1 integer primary key, col2 integer, val3 integer);

Table created.

SQL>
SQL> create materialized view log on tab002;


SQL> create materialized view mv001
as
SELECT t1.col1 as t1c0l1, t1.col2 as t1col2, t2.col1 as t2col1, t2.col2 as t2col2 , t1.val3 as t1val3,t2.val3 as t2val3
FROM TAB001 t1 LEFT OUTER JOIN TAB001 t2
ON t1.col2 = t2.col2;

Materialized view created.

SQL> exec dbms_mview.refresh('MV001','F');
BEGIN dbms_mview.refresh('MV001','F'); END;

*
ERROR at line 1:
ORA-12004: REFRESH FAST cannot be used for materialized view "U1"."MV001"
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2809
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 3025
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2994
ORA-06512: at line 1

SQL>

此時,可以考慮換用 ROWID 型別的 MVIEW LOG,重新來執行一次:

create table TAB001 (col1 integer primary key, col2 integer, val3 integer);

alter table tab001 add constraint con_t1_col2 unique(col2);

CREATE MATERIALIZED VIEW LOG ON tab001 WITH ROWID;


create table TAB002 (col1 integer primary key, col2 integer, val3 integer);

CREATE MATERIALIZED VIEW LOG ON tab002 WITH ROWID;


CREATE MATERIALIZED VIEW MV055
 BUILD IMMEDIATE
 REFRESH FAST
 AS select  /*+ use_hash(a,b) */
    a.rowid aid, b.rowid bid, a.col1, b.val3
    from tab001 a, tab002 b
    where a.col2 = b.col2(+);

exec dbms_mview.refresh('MV055','F');

SQL> exec dbms_mview.refresh('MV055','F');

PL/SQL procedure successfully completed.

SQL>

可以看到,已經成功。

相關推薦

[Oracle維護工程師手記]結合MVIEW告訴重新整理

對兩表結合查詢建立MVIEW,進行MVIEW的的高速重新整理失敗,如何處理?例如: SQL> drop user u1 cascade;User dropped.SQL> grant dba to u1 identified by u1;Grant succeeded.SQL> con

[Oracle維護工程師手記系列]一次升級後運行變慢的分析

設置 增加 整體 dex classes 並不是 select 統計 系列 客戶報告,當他從 Oracle 11.1.0.7 ,遷移到雲環境,並且升級到12.1.0.2。運行客戶的應用程序測試,發現比以前更慢了。從AWR report 的"Top 10 Foreground

[Oracle維護工程師手記系列]為什麽flashback 的時候既需要 flashback log ,又需要 archive log?

頻繁 acl ack 就是 系列 AS arc ive flashback 為什麽flashback 的時候既需要 flashback log ,又需要 archive log 呢? 如果數據庫的活動不是很頻繁,可以看到,其flashback log 是比較小的。那麽是通

[Oracle維護工程師手記系列]Data Guard Broker中改屬性是否需要兩側分別執行?

HA out 需要 nal res 登陸 tor status external Data Guard Broker中改屬性是否需要兩側分別執行?Data Guard Broker有一些屬性,可以通過 show configuration 看到。我有時會想,這些個屬性,是否

[Oracle維護工程師手記]為什麼flashback 的時候既需要 flashback log ,又需要 archive log?

為什麼flashback 的時候既需要 flashback log ,又需要 archive log 呢? 如果資料庫的活動不是很頻繁,可以看到,其flashback log 是比較小的。那麼是通過怎樣的方式 flashback 到過去的呢? 示意如下: 12:50 第一次更改資料(100-->2

[Oracle維護工程師手記]一次升級後執行變慢的分析

客戶報告,當他從 Oracle 11.1.0.7 ,遷移到雲環境,並且升級到12.1.0.2。執行客戶的應用程式測試,發現比以前更慢了。從AWR report 的"Top 10 Foreground Events by Total Wait Time"和"Wait Classes by Total Wait

[Oracle維護工程師手記]Data Guard Broker中改屬性是否需要兩側分別執行?

Data Guard Broker中改屬性是否需要兩側分別執行?Data Guard Broker有一些屬性,可以通過 show configuration 看到。我有時會想,這些個屬性,是否是分別屬於primary 和 standby,如果想要修改,是否需要分別登陸到primary 和 standby ,來

Oracle資料庫中刪除中相同資料

--問題提出: --1、在做資料轉儲業務的時候,如果發生操作錯誤,有可能出現主表和副表中都有同一種資料, --這樣結算的結果就有可能發生錯誤。 --實現方法: --建表a create table a (  bm char(4), mc varchar2(20)); -

SQL/Oracle 關聯更新

   有TA, TB兩表,假設均有三個欄位id, name, remark. 現在需要把TB表的name, remark兩個欄位通過id關聯,更新到TA表的對應欄位。 建表指令碼: drop table TA; create table TA ( id number n

[Oracle運維工程師手記] 如何從trace 檔案,判斷是否執行了並行

[Oracle運維工程師手記系列]如何從trace 檔案,判斷是否執行了並行客戶說,明明指定了並行的hint,OEM 卻報說沒有並行,並且提供了畫面。客戶的SQL文長這樣:INSERT/*+ parallel(4) */ INTO TAB001_WORK SELECT/*+ FULL(USR002) */US

oracle和mysql資料庫建立之前判斷是否存在,如果存在則刪除已有,以及在這個庫中建立

/* Navicat Oracle Data Transfer */ ------------------------------ -- Table structure for `article` -- ---------------------------- --判斷表是否存在,如果存在則刪除 declar

Oracle 12C 新特性之分割槽帶非同步全域性索引非同步維護(一次add、truncate、drop、spilt、merge多個分割槽)

實驗準備: -- 建立實驗表 CREATE TABLE p_andy (ID number(10), NAME varchar2(40)) PARTITION BY RANGE (id) (PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LES

Oracle 觸發器 插入,更新,刪除,資料同步,同步

create or replace trigger UserToTemp after insert or update or delete on user_info for each row declare     integrity_error exception;     errno           

Oracle 關聯更新

 有TA, TB兩表,假設均有三個欄位id, name, remark. 現在需要把TB表的name, remark兩個欄位通過id關聯,更新到TA表的對應欄位。 建表指令碼: droptable TA;   createtable TA   (   id nu

聯查的語法,oracle聯查,資料庫聯合查詢

select Table1.Item1,Table2.Item2 from Table1,Table2 select 表名.欄位名 from 表名,表名 select b.bm from kk.kkyh a,kk.kkbm b where a.dw = '北京市振隆科技發

oracle聯查,分組統計

select f.f_id, f.f_time, f.formulanm, f.formula, f.formula_desc,count(p.f_pid) as total from b_formula f left join b_parameter p on f.f_i

sql連接

依然 style back 索引 如果 ack 效率 ffffff fff 一直以來認為exists比in效率高的說法是不準確的。如果查詢的兩個表大小相當,那麽用in和exists差別不大。如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:

Oracle查詢被鎖的及解鎖方法

v$lock req 查找 rom 方法 session lock acl oracle 1.用下列sql語句查詢操作不當引起鎖表的進程的SESSION_ID及USERNAME SELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMOD

Oracle create tablespace 創建空間語法詳解

系統回滾段 語法 判斷 臨時 extent 數值 off offline 文件的 CREATE [UNDO] TABLESPACE tablespace_name [DATAFILE datefile_spec1 [,datefile_spec2] ..

oracle第二步創建空間、用戶、授權

toe 數據 表空間 nag gem 分享 reat 登錄 light Windows+r→鍵入sqlplus,輸入已安裝好的oracle數據庫超級管理員賬號密碼登錄。顯示: 成功。 創建表空間: 創建用戶並默認表空間: 授權該創建用戶對數據庫的操作: 代碼: