Fast Refresh on Materialized View With Join
Hi All,
i have created following Materialized View Logs and MV
on EMP and DEPT
CREATE MATERIALIZED VIEW LOG ON DEPT
WITH PRIMARY KEY,SEQUENCE
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW LOG ON EMP
WITH PRIMARY KEY,SEQUENCE
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW EMP_MVW
TABLESPACE OSMIS_REPORT_DATA
REFRESH FAST ON COMMIT
AS
SELECT A.EMPNO,A.ENAME,A.DEPTNO,A.JOB,A.MGR,A.HIREDATE,A.SAL,A.COMM,B.DNAME,B.LOC
FROM EMP A,DEPT B
WHERE A.DEPTNO=B.DEPTNO
The Create MV Stmnt raised following error.
ERROR at line 6:
ORA-12052: cannot fast refresh materialized view SCOTT.EMP_MVW
I have tried the same with ROWID also,but same error
while creating MV.
Pls anyone give idea to Fast Refersh on MV with Joins
Thnks
Raj.G.
mail : [email protected]
Actually you can get Oracle to tell you why the view does not have the capabilities you want using the DBMS_MVIEW package. For example you could have done something like this...
Personal Oracle Database 10g Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> CREATE MATERIALIZED VIEW LOG ON dept
2 WITH PRIMARY KEY, SEQUENCE
3 INCLUDING NEW VALUES;
Materialized view log created.
SQL> CREATE MATERIALIZED VIEW LOG ON emp
2 WITH PRIMARY KEY,SEQUENCE
3 INCLUDING NEW VALUES;
Materialized view log created.
SQL> CREATE MATERIALIZED VIEW emp_mvw
2 REFRESH FAST ON COMMIT
3 AS
4 SELECT a.empno, a.ename, a.deptno,
5 a.job, a.mgr, a.hiredate,
6 a.sal, a.comm, b.dname, b.loc
7 FROM emp a,dept b
8 WHERE a.deptno = b.deptno;
FROM emp a,dept b
ERROR at line 7:
ORA-12052: cannot fast refresh materialized view SCOTT.EMP_MVW
SQL> CREATE MATERIALIZED VIEW emp_mvw
2 REFRESH ON COMMIT -- remove the FAST to allow view to compile
3 AS
4 SELECT a.empno, a.ename, a.deptno,
5 a.job, a.mgr, a.hiredate,
6 a.sal, a.comm, b.dname, b.loc
7 FROM emp a,dept b
8 WHERE a.deptno = b.deptno;
Materialized view created.
SQL> @\oracle\product\10.1.0\Db_1\RDBMS\ADMIN\utlxmv.sql -- create mv_capabilities_table
Table created.
SQL> EXEC DBMS_MVIEW.EXPLAIN_MVIEW ('EMP_MVW');
PL/SQL procedure successfully completed.
SQL> SELECT capability_name, possible, msgtxt
2 FROM mv_capabilities_table
3 WHERE capability_name LIKE '%REFRESH_FAST_AFTER%';
CAPABILITY_NAME P MSGTXT
REFRESH_FAST_AFTER_INSERT N the SELECT list does not have the rowids of all the detail tables
REFRESH_FAST_AFTER_INSERT N mv log must have ROWID
REFRESH_FAST_AFTER_INSERT N mv log must have ROWID
REFRESH_FAST_AFTER_ONETAB_DML N see the reason why REFRESH_FAST_AFTER_INSERT is disabled
REFRESH_FAST_AFTER_ANY_DML N see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled
SQL> DROP MATERIALIZED VIEW LOG ON dept;
Materialized view log dropped.
SQL> DROP MATERIALIZED VIEW LOG ON emp;
Materialized view log dropped.
SQL> DROP MATERIALIZED VIEW emp_mvw;
Materialized view dropped.
SQL> CREATE MATERIALIZED VIEW LOG ON dept
2 WITH ROWID, SEQUENCE
3 INCLUDING NEW VALUES;
Materialized view log created.
SQL> CREATE MATERIALIZED VIEW LOG ON emp
2 WITH ROWID,SEQUENCE
3 INCLUDING NEW VALUES;
Materialized view log created.
SQL> CREATE MATERIALIZED VIEW emp_mvw
2 REFRESH FAST ON COMMIT
3 AS
4 SELECT a.ROWID emp_rowid, b.ROWID dept_rowid,
5 a.empno, a.ename, a.deptno,
6 a.job, a.mgr, a.hiredate,
7 a.sal, a.comm, b.dname, b.loc
8 FROM emp a,dept b
9 WHERE a.deptno = b.deptno;
Materialized view created.
SQL> DELETE mv_capabilities_table;
18 rows deleted.
SQL> EXEC DBMS_MVIEW.EXPLAIN_MVIEW ('EMP_MVW');
PL/SQL procedure successfully completed.
SQL> SELECT capability_name, possible, msgtxt
2 FROM mv_capabilities_table
3 WHERE capability_name LIKE '%REFRESH_FAST_AFTER%';
CAPABILITY_NAME P MSGTXT
REFRESH_FAST_AFTER_INSERT Y
REFRESH_FAST_AFTER_ONETAB_DML Y
REFRESH_FAST_AFTER_ANY_DML Y
SQL>
Similar Messages
-
Fast refresh of "materialized view with joins only"
Hi,
My Requirement:
I need to create a materialized view joining two tables.
Table1 -> Does not have primary key
Table2 -> Has a primary key
I need to refesh the mat view only when DML commands are done on Table1 alone.
And it will be better if i have a Refresh on commit rather on demand.
The following code is what i used and it dint work for me:
CREATE MATERIALIZED VIEW LOG ON Table1 WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON Table2;
CREATE MATERIALIZED VIEW AAYT_ETF
REFRESH FORCE ON COMMIT
ENABLE QUERY REWRITE
AS
SELECT A.rowid "table1_rowid", A.ACCTNUM, A.CORR_NUM, A.OFC_NUM, A.RR_NUM, A.BUY_SELL_CDE, A.ACT_AMT, A.CSP_SYM, A.SECR_DESC, A.ACT_QTY
FROM Table1 A, Table2 G WHERE
A.CSP_NUM = G.CSP_NUM AND
G.ASST_SUB_STYP = 'ETF';
Issue Faced: In this case the refresh happends even while i do DML on Table2.
But i need the refresh only when i do DML on Table1. I also unable to create Refresh Fast Mat view.
Can anyone please tell me how to create the Materialized view Log and the Materialized view. Thanks in advance.This forum only is for questions relating to the use of OLAP Option. I would post your question on the database forum.
Keith Laker
Oracle Data Warehouse Product Management
OLAP Blog: http://oracleOLAP.blogspot.com/
OLAP Wiki: http://wiki.oracle.com/page/Oracle+OLAP+Option
DM Blog: http://oracledmt.blogspot.com/
OWB Blog : http://blogs.oracle.com/warehousebuilder/
OWB Wiki : http://wiki.oracle.com/page/Oracle+Warehouse+Builder
DW on OTN : http://www.oracle.com/technology/products/bi/db/11g/index.html -
Dear Dev/DBAs,
I have the following scenario:
SQL> CREATE TABLE T1 (ID NUMBER(3),NAME VARCHAR2(10));
SQL> CREATE TABLE T2 (ID NUMBER(3),NAME VARCHAR2(10));
The T1 contains records having the ID num from 10 to 80 and the T2 having the ID from 90 to 170
SQL> SELECT * FROM T1 JOIN ALL SELECT * FROM T2
It give all records in the 2 tables.
I'm planning to create a materialized view (like CREATE MATERIALIZED VIEW V_TAB REFRESH ON COMMIT AS SELECT * FROM T1 JOIN ALL SELECT * FROM T2) and it seems i can't do with the error ORA-12054, further the oracle documentation says that materialized view can only be used with a simple join.
Do you have another solution??
Note that the materialized views can be used to improve queries.
Thank you in advanceStraight from the link I posted:
*Restrictions on Fast Refresh on Materialized Views with UNION ALL*Materialized views with the UNION ALL set operator support the REFRESH FAST option if the following conditions are satisfied:
* The defining query must have the UNION ALL operator at the top level.
The UNION ALL operator cannot be embedded inside a subquery, with one exception: The UNION ALL can be in a subquery in the FROM clause provided the defining query is of the form SELECT * FROM (view or subquery with UNION ALL) as in the following example:
CREATE VIEW view_with_unionall AS
(SELECT c.rowid crid, c.cust_id, 2 umarker
FROM customers c WHERE c.cust_last_name = 'Smith'
UNION ALL
SELECT c.rowid crid, c.cust_id, 3 umarker
FROM customers c WHERE c.cust_last_name = 'Jones');
CREATE MATERIALIZED VIEW unionall_inside_view_mv
REFRESH FAST ON DEMAND AS
SELECT * FROM view_with_unionall;
Note that the view view_with_unionall satisfies the requirements for fast refresh.
* Each query block in the UNION ALL query must satisfy the requirements of a fast refreshable materialized view with aggregates or a fast refreshable materialized view with joins.
The appropriate materialized view logs must be created on the tables as required for the corresponding type of fast refreshable materialized view.
Note that the Oracle Database also allows the special case of a single table materialized view with joins only provided the ROWID column has been included in the SELECT list and in the materialized view log. This is shown in the defining query of the view view_with_unionall.
* The SELECT list of each query must include a maintenance column, called a UNION ALL marker. The UNION ALL column must have a distinct constant numeric or string value in each UNION ALL branch. Further, the marker column must appear in the same ordinal position in the SELECT list of each query block.
* Some features such as outer joins, insert-only aggregate materialized view queries and remote tables are not supported for materialized views with UNION ALL.
* Partiton Change Tracking (PCT)-based refresh is not supported for UNION ALL materialized views.
* The compatibility initialization parameter must be set to 9.2.0 or higher to create a fast refreshable materialized view with UNION ALL. -
In 10g release 2,I tried to create following materialized view with join:
test_link is a normal table
test_geom is a table contains a column in SDO_GEOMETRY
CREATE MATERIALIZED VIEW LOG ON test_link with rowid
CREATE MATERIALIZED VIEW LOG ON test_geom with rowid,primary key
CREATE MATERIALIZED VIEW MV_LINK USING INDEX REFRESH FAST ON DEMAND AS
SELECT li.rowid link_rowid,geom.rowid geom_rowid,li.link_id,geom.link
FROM test_link li, test_geom geom
WHERE li.link_id=geom.link_id
But I always got an error like:
ORA-12015: cannot create a fast refresh materialized view from a complex query
If I change the geometry table to another table, everything works fine.
Anyone have ideas?Unfortunately, creating a fast refreshable materialized view on a join with one of the select columns being a user defined type (sdo_geometry is a user defined type) is not allowed. See 5303489 in the metalink bug database.
You could do like the workaround in the article suggests and create two materialized views and then create a regular view on top.
In our scenario, our materialized view also contains unions, so we would really like to have one physical object at the end of the day. One approach that we are currently investigating is to create the materialized view (MV1) without the geometry column, which makes it fast refreshable, and also create a materialized view (MV2) on the table containing the geometry column. MV2 is also fast refreshable. We then create a table (T3) that contains all of the columns from MV1, plus a geometry column. An insert, update, delete trigger on MV1 is created. The trigger is used to push all of the columns from MV1 to T3 and the geometry column from MV2 to T3. I have created the above in one of our test environments and haven't encountered any issues yet.
Let me know if you come up with a better approach. -
Fast Refresh Nested Materialized View problem in ORACLE 9i 9.2.0.7
Hello
My problem is in creating fast refresh nested materialized view in oracle 9i
In below is an example of my problem
( I need to say when I run this example in Oracle 11g all things is OK )
create table ali.alitest1(id number primary key,n1 number,n2 number);
create table ali.alitest2(id number primary key,n3 number);
CREATE MATERIALIZED VIEW LOG ON ali.alitest1 WITH ROWID,PRIMARY KEY ,SEQUENCE
(n1,n2)
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW LOG ON ali.alitest2 WITH ROWID,PRIMARY KEY ,SEQUENCE
(n3)
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW ali.alitest1_mv
REFRESH WITH PRIMARY KEY FAST
AS
select id,n1 from ali.alitest1;
CREATE MATERIALIZED VIEW LOG ON ali.alitest1_mv WITH ROWID,PRIMARY KEY ,SEQUENCE
(n1)
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW ali.alitest2_mv
REFRESH WITH PRIMARY KEY FAST
AS
select t1.id,t1.n1,t2.n3,t1.rowid "t1_rowid",t2.rowid "t2_rowid" from ali.alitest1_mv t1,ali.alitest2 t2 where t1.id=t2.id;
SQL Error: ORA-12053: this is not a valid nested materialized view
12053. 00000 - "this is not a valid nested materialized view"
*Cause: The list of objects in the FROM clause of the definition of this
materialized view had some dependencies upon each other.
*Action: Refer to the documentation to see which types of nesting are valid.
do you know what is problem ?
thanksTake look for this link :
http://rwijk.blogspot.com/2009/08/fast-refreshable-materialized-view.html -
Problem in fast refreshing nested materialized views
Hi all,
While developing an ODS(Operational Data Store) system, i've created base materialized views from production database to ODS database which would use fast refresh. Now, i need to create nested Materialized views on these base MViews which contains joins and aggregations which should refresh on FAST mechanism.
But while doing so, got several problems though Nested materialized views can be built using Complete Mechanism. The reporting queries is important and we want it should not hit the production database, rather it should hit the ODS db. But we are failing to build the Nested Materialized views which works on FAST.
I tried google, oracle docs but all in vain. i tried to do a simple testing which also failed. I would be grateful if anyone can help in in this regard. I'm attaching the test case experimented,
SCOTT >CREATE MATERIALIZED VIEW LOG ON EMP
2 WITH ROWID, SEQUENCE(EMPNO, ENAME, JOB,
3 MGR, HIREDATE, SAL,
4 COMM, DEPTNO)
5 INCLUDING NEW VALUES;
Materialized view log created.
Elapsed: 00:00:00.03
SCOTT >
SCOTT >CREATE MATERIALIZED VIEW LOG ON DEPT
2 WITH ROWID, SEQUENCE(DEPTNO, DNAME, LOC)
3 INCLUDING NEW VALUES;
Materialized view log created.
Elapsed: 00:00:00.06
SCOTT >
SCOTT >CREATE MATERIALIZED VIEW MV_EMP
2 NOCACHE
3 ENABLE ROW MOVEMENT
4 NOLOGGING
5 NOCOMPRESS
6 PARALLEL(DEGREE DEFAULT INSTANCES DEFAULT)
7 BUILD IMMEDIATE
8 REFRESH FAST ON DEMAND
9 WITH ROWID
10 ENABLE QUERY REWRITE
11 AS
12 SELECT * FROM EMP;
Materialized view created.
Elapsed: 00:00:00.21
SCOTT >
SCOTT >CREATE MATERIALIZED VIEW MV_DEPT
2 NOCACHE
3 ENABLE ROW MOVEMENT
4 NOLOGGING
5 NOCOMPRESS
6 PARALLEL(DEGREE DEFAULT INSTANCES DEFAULT)
7 BUILD IMMEDIATE
8 REFRESH FAST ON DEMAND
9 WITH ROWID
10 ENABLE QUERY REWRITE
11 AS
12 SELECT * FROM DEPT;
Materialized view created.
Elapsed: 00:00:00.14
SCOTT >CREATE MATERIALIZED VIEW LOG ON MV_EMP
2 WITH ROWID, SEQUENCE(EMPNO, ENAME, JOB,
3 MGR, HIREDATE, SAL,
4 COMM, DEPTNO)
5 INCLUDING NEW VALUES;
Materialized view log created.
Elapsed: 00:00:00.04
SCOTT >
SCOTT >CREATE MATERIALIZED VIEW LOG ON MV_DEPT
2 WITH ROWID, SEQUENCE(DEPTNO, DNAME, LOC)
3 INCLUDING NEW VALUES;
Materialized view log created.
Elapsed: 00:00:00.03
SCOTT >
SCOTT >CREATE MATERIALIZED VIEW MV_EMP_DEPT
2 NOCACHE
3 ENABLE ROW MOVEMENT
4 NOLOGGING
5 NOCOMPRESS
6 PARALLEL(DEGREE DEFAULT INSTANCES DEFAULT)
7 BUILD IMMEDIATE
8 REFRESH FAST ON DEMAND
9 WITH ROWID
10 ENABLE QUERY REWRITE
11 AS
12 SELECT D.ROWID DEPT_ROWID, E.ROWID EMP_ROWID, E.ENAME, D.DNAME, D.LOC, E.JOB, E.SAL
13 FROM MV_EMP E,
14 MV_DEPT D
15 WHERE E.DEPTNO=D.DEPTNO;
FROM MV_EMP E,
ERROR at line 13:
ORA-12053: this is not a valid nested materialized view
Elapsed: 00:00:00.17
SCOTT >
SCOTT >CREATE MATERIALIZED VIEW MV_EMP_DEPT
2 NOCACHE
3 ENABLE ROW MOVEMENT
4 NOLOGGING
5 NOCOMPRESS
6 PARALLEL(DEGREE DEFAULT INSTANCES DEFAULT)
7 BUILD IMMEDIATE
8 REFRESH FORCE ON DEMAND
9 WITH ROWID
10 ENABLE QUERY REWRITE
11 AS
12 SELECT D.ROWID DEPT_ROWID, E.ROWID EMP_ROWID, E.ENAME, D.DNAME, D.LOC, E.JOB, E.SAL
13 FROM MV_EMP E,
14 MV_DEPT D
15 WHERE E.DEPTNO=D.DEPTNO;
Materialized view created.
Elapsed: 00:00:00.25
SCOTT >
SCOTT >EXECUTE DBMS_MVIEW.REFRESH('MV_EMP','F');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.04
SCOTT >EXECUTE DBMS_MVIEW.REFRESH('MV_DEPT','F');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.04
SCOTT >EXECUTE DBMS_MVIEW.REFRESH('MV_EMP_DEPT','F');
BEGIN DBMS_MVIEW.REFRESH('MV_EMP_DEPT','F'); END;
ERROR at line 1:
ORA-12004: REFRESH FAST cannot be used for materialized view "SCOTT"."MV_EMP_DEPT"
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2254
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2460
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2429
ORA-06512: at line 1
Elapsed: 00:00:00.11
SCOTT >EXECUTE DBMS_MVIEW.REFRESH('MV_EMP_DEPT','C');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.35
SCOTT >Sorry,
By mistake this got posted in the CERTIFICATION forum,
you can view the same question in the following link:
Problem in fast refreshing nested materialized views -
Sample of Materialized View (with join)
Does anyone have an example of a Materialized View that joins 2 tables ?
Khe, khe then you'd better ask directly your question instead of somehow cover it :)
OK speaking about MVs the fisrt thing as always is Oracle documentation and Data warehousing guide contains 4 chapter devoted to MVs Basic MVs, advanced MVs, basic query rewrite and advanced query rewrite.
Here is the link where you should start
http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14223/basicmv.htm
And MV logs are needed to do incremental (fast, actually sometimes it might be much slower than complete refresh) refresh on MVs.
Gints Plivna
http://www.gplivna.eu -
Materialized View with Join for FAST Refresh
Hi Gurus,
Facing issues in MV with a simple join for FAST Refresh.
2 sample Tables:
1. employee
empid integer PK
empname varchar(50)
deptid integer FK
2. delta_employee
empid integer PK
empname varchar(50)
deptid integer FK
dmlflag varchar(2)
watermark integer
Code is as given below -
CREATE MATERIALIZED VIEW LOG ON work.employee
WITH SEQUENCE,rowid(empid)
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW LOG ON work.delta_employee
WITH SEQUENCE,rowid(empid)
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW work.MVEmployee REFRESH force on
demand with rowid AS
select e.empid,e.empname,e.deptid,d.empid t1
from work.employee e, work.delta_employee d
where e.empid = d.empid;
Able to perform Complete Refresh. Not able to use Fast Refresh for
incremental refresh.
Please help.
Thanks,
J KumarFound a solution,
As per oracle documentation rowid fileds should be included in the Select statement. Even though I included the rowid fields, empid in this case it still didnt work.
The implementation of the rowid column should be included with tablename.rowid instead of the tablename.columnname !
Modified script is as given below.
CREATE MATERIALIZED VIEW WORK.MVEMPLOYEE
REFRESH FORCE ON DEMAND
WITH PRIMARY KEY
AS
select e.rowid "empid",d.rowid "t1" ,e.empname,e.deptid
from work.employee e, work.delta_employee d
where e.empid = d.empid;
And It really WORKS -
How can I fast refresh the materialized view !!
I created a MV base on some tables in order to improve the querey speed.
but the mv I have created falied to refresh fast.
because there are two same table in the from clause:
jcdm jc1,jcdm jc2
create materialized view temp_mv
nologging
pctfree 0
storage (initial 2048k next 2048k pctincrease 0)
parallel
build immediate
refresh force
on demand
as
select
TAB_GSHX.rowid hx_rid,
TAB_GSHD.rowid hd_rid ,
JC1.rowid jc1_rid ,
JC2.rowid jc2_rid ,
YSHD_ID HXID,
JC1.JCDM QFD,
JC2.JCDM JLD
FROM
TAB_GSHX,
TAB_GSHD,
jCDM JC1,
JCDM JC2
WHERE
YSHD_ID=YSHX_ID
AND YSHD_QFD=JC1.JBJC_ID
AND YSHD_JLD=JC2.JBJC_ID
AND TO_CHAR(YSHX_time,'YYYYMMDD')='20030101'
the column msgtxt of the table MV_CAPABILITIES_TABLE is :
"the multiple instances of the same table or view" and " one or more joins present in mv".
How can I succeed in fast refresh the above temp_mv!!!
thanks.lianjun,
When you are using Oracle9i there is a procedure which can help you setup the materialized view. If some option isn't working it gives you hint why it doesn't work.
The procedure is dbms_mview.explain_mview.
Take a look at the documentation how to use it. (In the Oracle9i DWH guide the package is explained.)
Hope this helps
With kind regards,
Bas Roelands -
Fast refresh of materialized view
Hi All,
This is my first posting on this forum, so I hope I don't step on anyone's toes as I wade into a problem that I am experiencing.
I have a number of either join-only or single table aggregate materialized views that I have experienced problems with. All the views are setup for FAST REFRESH ON DEMAND but I'm hitting an error if I execute a COMPLETE refresh of the view when I've done an ALTER SESSION ENABLE PARALLEL DML. The error I get is:
ERROR at line 1:
ORA-30439: refresh of 'DTKTGT.CTNS_PER_HR_VOL_AGG_MV' failed because of ORA-32320: REFRESH FAST of "DTKTGT"."CTNS_PER_HR_VOL_AGG_MV" unsupported after cointainer table PMOPs
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 814
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 872
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 852
ORA-06512: at "DTKTGT.MV_REFRESH", line 21
ORA-06512: at line 2
Any help anyone could provide would be greatly appreciated as every now and then, a COMPLETE refresh is unavoidable and using the ENABLE PARALLEL DML makes the refresh run a lot faster than without the ALTER SESSION.
GaryThis forum only is for questions relating to the use of OLAP Option. I would post your question on the database forum.
Keith Laker
Oracle Data Warehouse Product Management
OLAP Blog: http://oracleOLAP.blogspot.com/
OLAP Wiki: http://wiki.oracle.com/page/Oracle+OLAP+Option
DM Blog: http://oracledmt.blogspot.com/
OWB Blog : http://blogs.oracle.com/warehousebuilder/
OWB Wiki : http://wiki.oracle.com/page/Oracle+Warehouse+Builder
DW on OTN : http://www.oracle.com/technology/products/bi/db/11g/index.html -
Materialized View with Joins and Possibilities of Partitioning
Hi,
We have a materialized view which has a data to query around 12 gb. The query goes some thing like
this.
Select a.c1,a.c2,b.c1,b.c2,c.c1,c.c2
from a,b,c
where a.c1=b.c1
--and the where condition goes on...
--i.e Basically joining 3 different tables with complex join conditions but without any group functions and subqueries.
Now i have few questions here.
Firstly as the Mview is created with joins we will have to create separate logs for each tables and we have did the same. The logs are created with rowid and sequence for better performance during refresh.
Question No 1
Is this is a best approach for materializing a query with complex join conditions. Or Is it better to make 3 different materialized views for each 3 tables and join those 3 MViews and write a query for my report. I ask this question just to make sure the refresh time is brought down by this method. But as such as we have created 3 different logs for 3 tables the refresh must be happening separately.
Question No 2
Data is likely to grow faster and faster on this. So we have a idea of making this a partitioned Mview. Can the Pro's advice me on this and suggest me the right practice for the same and help me to correct links from where i can pick a example and continue from there.
Question No 3
How to find whether the materialized view has refreshed on a fast mode or complete mode after the last refresh.
Apart from querying and checking the rowid which i feel is quiet cumbersome for a mview with a data volume like what we have. By default when i see the info in TOAD for this Mview it shows Refresh Mode as "Force". But how to ascertain this.
Thanks in anticipation for a good round of discussionHi,
We have a materialized view which has a data to query around 12 gb. The query goes some thing like
this.
Select a.c1,a.c2,b.c1,b.c2,c.c1,c.c2
from a,b,c
where a.c1=b.c1
--and the where condition goes on...
--i.e Basically joining 3 different tables with complex join conditions but without any group functions and subqueries.
Now i have few questions here.
Firstly as the Mview is created with joins we will have to create separate logs for each tables and we have did the same. The logs are created with rowid and sequence for better performance during refresh.
Question No 1
Is this is a best approach for materializing a query with complex join conditions. Or Is it better to make 3 different materialized views for each 3 tables and join those 3 MViews and write a query for my report. I ask this question just to make sure the refresh time is brought down by this method. But as such as we have created 3 different logs for 3 tables the refresh must be happening separately.
Question No 2
Data is likely to grow faster and faster on this. So we have a idea of making this a partitioned Mview. Can the Pro's advice me on this and suggest me the right practice for the same and help me to correct links from where i can pick a example and continue from there.
Question No 3
How to find whether the materialized view has refreshed on a fast mode or complete mode after the last refresh.
Apart from querying and checking the rowid which i feel is quiet cumbersome for a mview with a data volume like what we have. By default when i see the info in TOAD for this Mview it shows Refresh Mode as "Force". But how to ascertain this.
Thanks in anticipation for a good round of discussion -
Fast refresh on MATERIALIZED VIEW
Oracle 10 g R2 (10.2.0.5)
CREATE MATERIALIZED VIEW scott.mv_test
TABLESPACE users
NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
REFRESH FORCE ON DEMAND
WITH PRIMARY KEY
AS
Select ....
I have this MV, when I do the FAST refersh as follows , I am getting error
SQL> execute DBMS_MVIEW.REFRESH( 'MV_TEST','f');
BEGIN DBMS_MVIEW.REFRESH( 'MV_TEST','f'); END;
ERROR at line 1:
ORA-12004: REFRESH FAST cannot be used for materialized view "SCOTT"."MV_TEST"
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2251
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2457
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2426
ORA-06512: at line 1
But it's working with Complete refresh.
Is that expecte, any help would be appreciated.
Thanks,ORA-12004: REFRESH FAST cannot be used for materialized view "string"."string"
Cause: The materialized view log does not exist or cannot be used. PCT refresh is also not enabled on the materialized view
Action: Use just REFRESH, which will reinstantiate the entire table. If a materialized view log exists and the form of the materialized view allows the use of a materialized view log or PCT refresh is possible after a given set of changes, REFRESH FAST will be available starting the next time the materialized view is refreshed.http://ora-12004.ora-code.com/ -
Fast refresh of materialized view on remote database
Hi All,
I have the following scenario, two databases called ORCL_1 and ORCL_2
ORCL_1 (11.1.0.7) ORCL_2 (10.2.0.1)
EMPLOYEE (Master table)
DEPARTMENT (Master table)
I have created materialied view logs on both the master tables as follows...
create materialized view log on department
with rowid, sequence(department_id, department_name)
including new values
create materialized view log on employee
with rowid, sequence (employee_no, surname, firstname, title, department_id, dob, dependants)
including new values
On ORCL_1 i have created a materialized view as follows...
create materialized view employee_mview
build immediate
refresh on demand with rowid
as select e.employee_no, e.title, e.firstname, e.surname, d.department_name, d.department_id, e.dob, e.dependants, e.rowid emp_rowid, d.rowid dept_rowid
from employee@ORCL_2 e,
department@ORCL_2 d
where e.department_id = d.department_id
then i have a scheduled task, on ORCL_1, that execute "...dbms_mview.refresh ('mac_dba.employee_mview','?');...." every minute
this works fine, except for the fact that all the records are deleted from the materialized view and then all the records are re-inserted.
How can i get it so that only the records that have been added or amended, as per the materialized view logs, are refreshed to the materialized view.
thanks
MelHi Harry,
Have tried creating materialized view as follows...
create materialized view mac_dba.employee_mview
build immediate
refresh fast on demand with rowid
as select e.employee_no, e.title, e.firstname, e.surname, d.department_name, d.department_id, e.dob, e.dependants, e.rowid emp_rowid, d.rowid dept_rowid
from mac_dba.employee@ORCL_2 e,
mac_dba.department@ORCL_2 d
where e.department_id = d.department_id
I get the following error message
ORA-12028: materialized view type is not supported by master site
thanks
Mel -
Materialized view (fast refresh mode) + Materialized view log on another DB
Hi all,
I created a materizalied view using this script :
CREATE MATERIALIZED VIEW GIPS.DOSSIER_MEDICAL_MV2
TABLESPACE GIPS_T
NOCACHE
NOLOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
USING INDEX
TABLESPACE GIPS_I
+ REFRESH FAST ON DEMAND +
START WITH TO_DATE('11-janv.-2011 16:00:00','dd-mon-yyyy hh24:mi:ss')
NEXT sysdate (1/96)+
AS
SELECT N0_SEQ_BLOB_PDF,
EXAM_ID,
MPR,
RSM,
rub,
date_deb,
SPE,
commentaire,
SPR,
MEP,
MSJ,
TTD,
exam_type
FROM DOSSIER_MEDICAL@dbdoc_lk
WHERE DOSSIER_MEDICAL.EXAM_TYPE IN ('TELEM', 'SCANNER', 'EPPO_SECMED');
So you can see I'm using a dblink in the select statement ( DBDOC_LK )
On the DB referenced by this dblink, I created a materialized view log using this script :
CREATE MATERIALIZED VIEW LOG ON "DOSMED"."DOSSIER_MEDICAL"
TABLESPACE "DOC_T"
WITH PRIMARY KEY
INCLUDING NEW VALUES;
The problem is that my materialized view has never refreshed since its creation ! and I don't understand why ?
Can someone help me ?
Thank you.The REFRESH schedule causes a job to be created for the execution of the Refresh. You should see this job in DBA_JOBS / USER_JOBS.
The job would run only if the instance parameter JOB_QUEUE_PROCESSES is set to 1 or higher (the default is 0). This parameter can be modified dynamically with an ALTER SYSTEM command.
Hemant K Chitale
http://hemantoracledba.blogspot.com -
How to speed up fast refresh of materialized view without primary key
Thought I'd share this info, as I couldn't find anything on here to help me diagnose the issue:
I had a materialized view that was taking longer to perform a fast refresh than it took to perform a complete refresh. My mview had no primary key, as the base table had no primary key.
I created a trace file for the session and saw references to a column M_ROW$$ in my mview. Nowhere in the data dictionary could I find a reference to the m_row$$ column in my mview, but apparently it exists and is created automatically. After creating the index below, the fast refresh took 6 minutes to add 500k rows to the materialized view. (versus 4+ hours without the index) When I looked in the trace file, I noticed that for each row in the mview log, it first tries to update the mview with an UPDATE statement, then it performs an insert of the new data. Seems like it should be able to determine whether to perform an update or insert based on the DMLTYPE$$ column of the mview log. What was killing my performance was the UPDATE phase. Since I had no primary key on the mview, and no index on the m_row$$ column, the UPDATE phase was performing a full table scan of my mview for every row in the mview log. I was expecting it to be smart enough to only perform inserts, as the only transactions against the base table were inserts.
In summary: If you have a materialized view without a primary key, create an index on the m_row$$ column of the mview, even though no such column displays in the data dictionary.
ex:
CREATE MATERIALIZED VIEW mv_minidrr ...
CREATE INDEX pk_mv_minidrr ON mv_minidrr(m_row$$) ...Well, there indeed is a column called M_ROW$$
Your MLOG$_EMP is nothing but the materialized view log on the base table.
SQL> create materialized view log on emp with rowid ;
Materialized view log created.
SQL> create materialized view emp_mview refresh fast on demand with rowid as select * from emp ;
Materialized view created.
SQL> desc mlog$_emp
Name Null? Type
M_ROW$$ VARCHAR2(255)
SNAPTIME$$ DATE
DMLTYPE$$ VARCHAR2(1)
OLD_NEW$$ VARCHAR2(1)
CHANGE_VECTOR$$ RAW(255)
SQL> select table_name, column_name from user_tab_columns where column_name = 'M_ROW$$' ;
TABLE_NAME COLUMN_NAME
MLOG$_EMP M_ROW$$
1 row selected.
SQL>
Maybe you are looking for
-
I already have done OTC cycle. Now i want to Run Returns Scenario. Please Give me suggestions what are the pre requisites to process RE. where I need to Tweak the system so that i can run RE. ALL IMG Activity including Answers will be Appriciated Reg
-
Problem Consuming webservice -- SOAP UI
Hello Gurus, We have generated a web service from SAP and trying to consume the web service from SOAP UI (external tool), but the SOAP UI tool is generating some error as mentioned below. Exception_Name> CX_ST_MATCH_ELEMENT Exception_Text> System exp
-
Facetime HD is not clear enough as described in the web(720p)!
We have 2 new MBPs(13'' and 15''), both of us have new FacetimeHD camera and newest system. But when we start facetime, it is not clear enough as described in the web(720p), and much worse, maybe only 640x480? I think not about our network, because w
-
Need help installing Elements 12 on new computer!
I have used the correct serial number, I called the help support desk and the technician told me that she didn't know what to do to fix the issue. Any suggestions? The editing portion of the software downloaded to the new computer works just fine. Ho
-
Safari Takes Up 2.5GB of RAM?
Hey guys, I just recently converted to Macs. I bought a 21.5" iMac last wednesday with the upgraded hard drive and graphics card. This thing is a beast. Quite a step up from my four year old HP Pavilion notebook with Windows XP (which is still workin