Resource is Busy in materialized view

hi,
When MView is re-created, index is also dropped for that MView, after re-creation of MVIEW we are unable to create the index, we are getting the “Resource is busy” error message. We also see that Count of MView is zero after the creation step, and then the MView is refreshed with data after 10 minutes.
Kindly tell the reason.
i am getting the following error:
ORA-00054: resource busy and acquire with NOWAIT specified.
this error msg is that index is used by some other users. i have dropped the index also.

Do you have the luxury of shutting down the DB, restarting it and try again? That can sometimes get rid of some useless locks.
Daniel

Similar Messages

  • Query rewrites with Nested materialized views with different aggregations

    Platform used : Oracle 11g.
    Here is a simple fact table (with measures m1,m2) and dimensions (a) Location (b) Calendar and (c) Product. The business problem is that aggregation operator for measure m1,m2 are different along location dimension and Calendar dimension. The intention is to preaggregate the measures for a product along the calendar dimension and Location dimension and store it as materialized views.
    The direct option is to define a materialized view with Inline queries (Because of the different aggrergation operator, it is not possible to write a query without Inline query). http://download-uk.oracle.com/docs/cd/B28359_01/server.111/b28313/qradv.htm#BABEAJBF documents the limitations that it works only for 'Text match' and 'Equivalent queries' and that is too limiting.
    So decided to have nested materialized view, with first view having just joins(my_dim_mvw_joins), the second view having aggregations along Calendar dimension (my_dim_mvw_calendar) and third view having aggregations along the Location dimension(my_dim_mvw_location). Obviously I do not want the query I fire to know about materialized views and I fire it against the fact table. I see that for the fired query (Which needs aggregations along both Calendar and Location), is rewritten with just second materialized view but not the third. (Had set QUERY_REWRITE_INTEGRITY as TRUSTED) .
    Wanted to know whether there are limitations on Query Writes with nested materialized views? Thanks
    (Have given a simple testable example below. Pls ignore the values given in 'CALENDAR_IDs', 'PRODUCT_IDs' etc as they are the same for all the queries)
    -- Calendar hierarchy table
    CREATE TABLE CALENDAR_HIERARCHY_TREE
    (     "CALENDAR_ID" NUMBER(5,0) NOT NULL ENABLE,
    "HIERARCHY1_ID" NUMBER(5,0),
    "HIERARCHY2_ID" NUMBER(5,0),
    "HIERARCHY3_ID" NUMBER(5,0),
    "HIERARCHY4_ID" NUMBER(5,0),
    CONSTRAINT "CALENDAR_HIERARCHY_TREE_PK" PRIMARY KEY ("CALENDAR_ID")
    -- Location hierarchy table
    CREATE TABLE LOCATION_HIERARCHY_TREE
    (     "LOCATION_ID" NUMBER(3,0) NOT NULL ENABLE,
    "HIERARCHY1_ID" NUMBER(3,0),
    "HIERARCHY2_ID" NUMBER(3,0),
    "HIERARCHY3_ID" NUMBER(3,0),
    "HIERARCHY4_ID" NUMBER(3,0),
    CONSTRAINT "LOCATION_HIERARCHY_TREE_PK" PRIMARY KEY ("LOCATION_ID")
    -- Product hierarchy table
    CREATE TABLE PRODUCT_HIERARCHY_TREE
    (     "PRODUCT_ID" NUMBER(3,0) NOT NULL ENABLE,
         "HIERARCHY1_ID" NUMBER(3,0),
         "HIERARCHY2_ID" NUMBER(3,0),
         "HIERARCHY3_ID" NUMBER(3,0),
         "HIERARCHY4_ID" NUMBER(3,0),
         "HIERARCHY5_ID" NUMBER(3,0),
         "HIERARCHY6_ID" NUMBER(3,0),
         CONSTRAINT "PRODUCT_HIERARCHY_TREE_PK" PRIMARY KEY ("PRODUCT_ID")
    -- Fact table
    CREATE TABLE RETAILER_SALES_TBL
    (     "PRODUCT_ID" NUMBER,
    "PRODUCT_KEY" VARCHAR2(50 BYTE),
    "PLAN_ID" NUMBER,
    "PLAN_PERIOD_ID" NUMBER,
    "PERIOD_ID" NUMBER(5,0),
    "M1" NUMBER,
    "M2" NUMBER,
    "M3" NUMBER,
    "M4" NUMBER,
    "M5" NUMBER,
    "M6" NUMBER,
    "M7" NUMBER,
    "M8" NUMBER,
    "LOCATION_ID" NUMBER(3,0),
    "M9" NUMBER,
    CONSTRAINT "RETAILER_SALES_TBL_LOCATI_FK1" FOREIGN KEY ("LOCATION_ID")
    REFERENCES LOCATION_HIERARCHY_TREE ("LOCATION_ID") ENABLE,
    CONSTRAINT "RETAILER_SALES_TBL_PRODUC_FK1" FOREIGN KEY ("PRODUCT_ID")
    REFERENCES PRODUCT_HIERARCHY_TREE ("PRODUCT_ID") ENABLE,
    CONSTRAINT "RETAILER_SALES_TBL_CALEND_FK1" FOREIGN KEY ("PERIOD_ID")
    REFERENCES CALENDAR_HIERARCHY_TREE ("CALENDAR_ID") ENABLE
    -- Location dimension definition to promote query rewrite
    create DIMENSION LOCATION_DIM
    LEVEL CHAIN IS LOCATION_HIERARCHY_TREE.HIERARCHY1_ID
    LEVEL CONSUMER_SEGMENT IS LOCATION_HIERARCHY_TREE.HIERARCHY3_ID
    LEVEL STORE IS LOCATION_HIERARCHY_TREE.LOCATION_ID
    LEVEL TRADING_AREA IS LOCATION_HIERARCHY_TREE.HIERARCHY2_ID
    HIERARCHY PROD_ROLLUP (
    STORE CHILD OF
    CONSUMER_SEGMENT CHILD OF
    TRADING_AREA CHILD OF
    CHAIN
    -- Calendar dimension definition
    create DIMENSION CALENDAR_DIM
    LEVEL MONTH IS CALENDAR_HIERARCHY_TREE.HIERARCHY3_ID
    LEVEL QUARTER IS CALENDAR_HIERARCHY_TREE.HIERARCHY2_ID
    LEVEL WEEK IS CALENDAR_HIERARCHY_TREE.CALENDAR_ID
    LEVEL YEAR IS CALENDAR_HIERARCHY_TREE.HIERARCHY1_ID
    HIERARCHY CALENDAR_ROLLUP (
    WEEK CHILD OF
    MONTH CHILD OF
    QUARTER CHILD OF
    YEAR
    -- Materialized view with just joins needed for other views
    CREATE MATERIALIZED VIEW my_dim_mvw_joins build immediate refresh complete enable query rewrite as
    select product_id, lht.HIERARCHY1_ID, lht.HIERARCHY2_ID, lht.HIERARCHY3_ID, lht.location_id, cht.HIERARCHY1_ID year,
    cht.HIERARCHY2_ID quarter, cht.HIERARCHY3_ID month, cht.calendar_id week, m1, m3, m7, m9
    from retailer_sales_tbl RS, calendar_hierarchy_tree cht, location_hierarchy_tree lht
    WHERE RS.period_id = cht.CALENDAR_ID
    and RS.location_id = lht.location_id
    and cht.CALENDAR_ID in (10,236,237,238,239,608,609,610,611,612,613,614,615,616,617,618,619,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477)
    AND product_id IN (5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20)
    AND lht.location_id IN (2, 3, 11, 12, 13, 14, 15, 4, 16, 17, 18, 19, 20)
    -- Materialized view which aggregate along calendar dimension
    CREATE MATERIALIZED VIEW my_dim_mvw_calendar build immediate refresh complete enable query rewrite as
    select product_id, HIERARCHY1_ID , HIERARCHY2_ID , HIERARCHY3_ID ,location_id, year, quarter, month, week,
    sum(m1) m1_total, sum(m3) m3_total, sum(m7) m7_total, sum(m9) m9_total,
    GROUPING_ID(product_id, location_id, year, quarter, month, week) dim_mvw_gid
    from my_dim_mvw_joins
    GROUP BY product_id, HIERARCHY1_ID , HIERARCHY2_ID , HIERARCHY3_ID , location_id,
    rollup (year, quarter, month, week);
    -- Materialized view which aggregate along Location dimension
    CREATE MATERIALIZED VIEW my_dim_mvw_location build immediate refresh complete enable query rewrite as
    select product_id, year, quarter, month, week, HIERARCHY1_ID, HIERARCHY2_ID, HIERARCHY3_ID, location_id,
    sum(m1_total) m1_total_1, sum(m3_total) m3_total_1, sum(m7_total) m7_total_1, sum(m9_total) m9_total_1,
    GROUPING_ID(product_id, HIERARCHY1_ID, HIERARCHY2_ID, HIERARCHY3_ID, location_id, year, quarter, month, week) dim_mvw_gid
    from my_dim_mvw_calendar
    GROUP BY product_id, year, quarter, month, week,
    rollup (HIERARCHY1_ID, HIERARCHY2_ID, HIERARCHY3_ID, location_id)
    -- SQL Query Fired (for simplicity have used SUM as aggregation operator for both, but they will be different)
    select product_id, year, HIERARCHY1_ID, HIERARCHY2_ID,
    sum(m1_total) m1_total_1, sum(m3_total) m3_total_1, sum(m7_total) m7_total_1, sum(m9_total) m9_total_1
    from
    select product_id, HIERARCHY1_ID , HIERARCHY2_ID , year,
    sum(m1) m1_total, sum(m3) m3_total, sum(m7) m7_total, sum(m9) m9_total
    from
    select product_id, lht.HIERARCHY1_ID , lht.HIERARCHY2_ID , lht.HIERARCHY3_ID ,lht.location_id, cht.HIERARCHY1_ID year, cht.HIERARCHY2_ID quarter, cht.HIERARCHY3_ID month, cht.calendar_id week,m1,m3,m7,m9
    from
    retailer_sales_tbl RS, calendar_hierarchy_tree cht, location_hierarchy_tree lht
    WHERE RS.period_id = cht.CALENDAR_ID
    and RS.location_id = lht.location_id
    and cht.CALENDAR_ID in (10,236,237,238,239,608,609,610,611,612,613,614,615,616,617,618,619,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477)
    AND product_id IN (5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20)
    AND lht.location_id IN (2, 3, 11, 12, 13, 14, 15, 4, 16, 17, 18, 19, 20)
    GROUP BY product_id, HIERARCHY1_ID , HIERARCHY2_ID , HIERARCHY3_ID , location_id, year
    ) sales_time
    GROUP BY product_id, year,HIERARCHY1_ID, HIERARCHY2_ID
    This Query rewrites only with my_dim_mvw_calendar. (as saw in Query Plan and EXPLAIN_MVIEW). But we would like it to use my_dim_mvw_location as that has aggregations for both dimensions.

    blackhole001 wrote:
    Hi all,
    I'm trying to make my programmer's life easier by creating a database view for them to query the data, so they don't have to worry about joining tables. This sounds like a pretty horrible idea. I say this because you will eventually end up with programmers that know nothing about your data model and how to properly interact with it.
    Additionally, what you will get is a developer that takes one of your views and see's that of the 20 columns in it, it has 4 that he needs. If all those 4 columns comes from a simple 2 table join, but the view has 8 tables, you're wasting a tonne of resources by using the view (and heaven forbid they have to join that view to another view to get 4 of the 20 columns from that other view as well).
    Ideally you'd write stored routines that satisfy exactly what is required (if you are the database resource and these other programmers are java, .net, etc... based) and the front end developers would call those routines customized for an exact purpose.
    Creating views is not bad, but it's by no means a proper solution to having developers not learn or understand SQL and/or the data model.

  • Materialized view process running constantly /* MV_REFRESH (DEL) */

    Hello,
    3 days ago I created this Materialized view:
    CREATE MATERIALIZED VIEW src_mv
    nologging
    compress
    partition by range (dato)
    partition src_mv_pre2005 values less than (to_date('2005-01-01','yyyy-mm-dd'))
    , partition src_mv_2005 values less than (to_date('2006-01-01','yyyy-mm-dd'))
    , partition src_mv_2006 values less than (to_date('2007-01-01','yyyy-mm-dd'))
    , partition src_mv_2007 values less than (to_date('2008-01-01','yyyy-mm-dd'))
    , partition src_mv_2008 values less than (to_date('2009-01-01','yyyy-mm-dd'))
    , partition src_mv_2009 values less than (to_date('2010-01-01','yyyy-mm-dd'))
    , partition src_mv_2010 values less than (to_date('2011-01-01','yyyy-mm-dd'))
    , partition src_mv_2011 values less than (to_date('2012-01-01','yyyy-mm-dd'))
    , partition src_mv_2012 values less than (to_date('2013-01-01','yyyy-mm-dd'))
    , partition src_mv_2013 values less than (to_date('2014-01-01','yyyy-mm-dd'))
    REFRESH on demand
    start with sysdate next trunc(sysdate)+1+3.75/24
    with primary key
    ENABLE QUERY REWRITE
    AS
    SELECT srcid
    , a
    , dato
    , group
    , COUNT(*) tx
    , SUM(amount) sumtx
    FROM b btx
    JOIN groups g USING(gid)
    join c on (srcid=cid and ctype='W')
    GROUP BY srcid
    , a
    , dato
    , group;
    Table b has more than 330 millions rows and table c has about 3 millions rows. However the creation of the MV itself tok about an hour.
    After the MV was created I tried to create an index on dato but I got:
    ORA-00054: resource busy and acquire with NOWAIT specified
    When I checked the active sessions, I see this:
    /* MV_REFRESH (DEL) */ delete from "X"." SRC_MV"
    So, now I am not able to create any index, drop the MV or even kill the session that is running the /* MV_REFRESH (DEL) */.
    Why is this DELETE statement running, when I said REFRESH on demand? Is this running since the MV was created?
    On the other hand, the database is shutdown/startup everyday at 8pm/10pm, and there has not been any problem with this shutdown/startup, so I can't understand why this Delete statement is still running.
    The MV has now a compilation error status, why is not possible to drop it then?
    Can anybody help me?
    Thanks in advance,
    Alida

    When I try to kill the session I get this:
    Error starting at line 1 in command:
    alter system kill session '261,1408'
    Error report:
    SQL Error: ORA-00031: session marked for kill
    00031. 00000 - "session marked for kill"
    *Cause:    The session specified in an ALTER SYSTEM KILL SESSION command
    cannot be killed immediately (because it is rolling back or blocked
    on a network operation), but it has been marked for kill. This
    means it will be killed as soon as possible after its current
    uninterruptable operation is done.
    *Action:   No action is required for the session to be killed, but further
    executions of the ALTER SYSTEM KILL SESSION command on this session
    may cause the session to be killed sooner.
    Every time I run the command to kill the session and apears again the next day :\
    Thanks,
    Alida

  • Materialized view fast refresh or complete refresh?

    Hi Guys,
    Need help here.
    We were ask to provide recommendation regarding the replication of our Production schema to Reporting Schema.
    Here are the conditions:
    1. Production schema and Reporting schema resides in one database server, only in different instance.
    2. Tables to replicate is more or less 300 tables.
    3. They only want to replicate changes that happen on the table on the said day.(insert,update)
    4. Replication will only happen on the end of business hours(end of day).
    What we have in mind is Materialized view.
    What would be best to use, fast refresh or complete refresh?
    What will be the effect on performance?Resources?
    Or will there be any other method?
    Appreciate your reply on this.
    Thanks,
    Nina

    Using MV (Materialized views) is onle of the possible way how to do what you are asked for.
    Fast refresh of MV is faster than complete refresh because it's based on "deltas" from last refresh. But it require MV log on table in primary DB. This MVLog consume same space in tablespace. And maintainig this MVlog during DML operation on table add some overhead to DML operation -> it's take a little bit longer time to complete.
    How much space is consumend by MV log depends on many factors:
    1/ number of DML changes on table
    2/ number of consumers (there can be more than on MV based on same table using same MV log)
    3/ period of MV refresh
    Plus of using MV is that it is very simple and you don't need no special license to use them.
    Other possible option is Golden gate (Streams previously)
    Next option is procedural replication - you have to write your own replication mechanism.

  • Oracle Text Index on Materialized View

    Hello,
    I have designed a search engine for an internet application.
    We have different tables for our main business objects, the search is based on the content of all these dependent entities (Product, Company etc...)
    So I have created a materialized view to embody this aggregation.
    Then I have created a Multi column datastore index on top of the snapshot.
    The search engine has to be refreshed automatically 3 times a day, and manually anytime.
    This is achieved by executing a complete refresh on the view and rebuild the index, programmatically via Toplink (SqlCall).
    The MV refresh looks like this :
    alter index usr_batiprod.fullTextMulticolIdx rebuild
    and the index rebuild:
    begin
    DBMS_MVIEW.REFRESH('FT_TEST','C');
    end;
    Everything was fine until now, we have had lots of tuning on the index side, the refresh process was working fine...
    We have let the users access the engine since Thursday (the index had been created on the production environment a fews weeks ago) and since yesterday (or maybe before) we have been experiencing data incoherency on the index...
    I've tracked down the pb to the Fulltext Search's refresh process (manual and automatic share the same code) that was crashing on the Materialized view refresh :
    java.sql.SQLException: ORA-20000: Oracle Text error:
    DRG-50610: internal error: drexdsync
    DRG-50857: oracle error in drekrtd (lob erase)
    ORA-00060: deadlock detected while waiting for resource
    ORA-06512: at "SYS.DBMS_SNAPSHOT", line 794
    ORA-06512: at "SYS.DBMS_SNAPSHOT", line 851
    ORA-06512: at "SYS.DBMS_SNAPSHOT", line 832
    ORA-06512: at line 2
    Again, we had tested the functionality thoroughly and never experienced such behaviour before... even while refreshing the materialized view and the index 3 times (or more) a day..
    Once I dropped the Oracle Text Index, I was able to refresh the MV again..
    so it looks like the index was in some incoherent state and was holding a lock on the materialized view...
    Maybe my Index refresh call is wrong, and a stronger load on the functionality leads quickly to this pb, I dont know..
    I had always been a bit doubtful towards my index rebuild call, so Im thinking about using a more complete call :
    alter index usr_batiprod.fullTextMulticolIdx rebuild parameters ('sync')
    is it enough, or do I have to switch to a 'Oracle Text' specific call ?
    Is there another possible reason for the MV lock ?
    Thank you for your support
    Best Regards
    Olivier Cuzacq

    MVs are constructed in different ways and have lots of different uses.
    Why not just use MV as temp table for OT (Oracle Text) index?
    Refresh MV OT_TEMP.
    Delete all not matching rows from OT.
    Insert all missing missing rows from OT_TEMP to OT.
    sync OT index (online).
    Query table OT.

  • Material view

    hi guys,
    i am trying to manually refresh my material view. But encounter a error message saying:
    ORA-00054: resource busy and acquire with NOWAITthis happen when creating the INDEX.
    There is a schedule refresh at 0:00 am. This refresh is database one not via cron job. In what view can i see the job?
    I wanted to change it from refresh fast to complete.

    SQL> select     oracle_username || ' (' || s.osuser || ')' username
    ,  s.sid || ',' || s.serial# sess_id
    ,  owner || '.' || object_name object
    ,  object_type
    ,  decode( l.block
    ,       0, 'Not Blocking'
    ,       1, 'Blocking'
    ,       2, 'Global') status
    ,  decode(v.locked_mode
    ,       0, 'None'
    ,       1, 'Null'
    ,       2, 'Row-S (SS)'
    ,       3, 'Row-X (SX)'
    ,       4, 'Share'
    ,       5, 'S/Row-X (SSX)'
    ,       6, 'Exclusive', TO_CHAR(lmode)) mode_held
    from       v$locked_object v
    ,  dba_objects d
    ,  v$lock l
    ,  v$session s
    where      v.object_id = d.object_id
    and        v.object_id = l.id1
    and        v.session_id = s.sid
    order by oracle_username
    ,  session_id
    /Check if there's Lock on your database , and use alter system kill session ','

  • The data of my materialized view....in the while

    Hello
    We have problems with materialized views
    We have one wich re-build each a short period of time
    ¿Can i avoid the data to dissapear in the time process of refresh?
    Is so annoing to our clients to see that "from time to time" the data just dissapear for one period of time -the time while the materialized view is refreshing-
    Thank you in advance
    Bruno. Madrid. Spain

    > Is so annoing to our clients to see that "from time to time" the data just dissapear for
    one period of time -the time while the materialized view is refreshing-
    Have a similar problem. And dealing with large data volumes that makes the DELETE of the MV a very undesirable feature. Not as much a the resource footprint required, but the time it takes to do this - and the very tight processing windows that exist.
    The solution is a self-rolled and very likely not ideal for most - but it works well enough for us in production.
    No MV. Create a partition table. Create a staging table. Do a manual "full refresh" of the staging table (TRUNCATE and direct path INSERT). Follow this by a partition exchange with the partition table (no validation and including indexes). The result is that the data is replaced in the partitioned table within a second - no long running and expensive DELETE. End-users not effected by having a truncate pulling the data from beneath their reports.

  • Materialized view not being used in the report

    I have had a materialized view (MV) for a particular report. Recently, the report definition has changed little bit, so the existing MV is not being used by the report anymore. I copied the code Discoverer's SQL Inspection and recreated the materialized view. But still it is not working. Obviously, I am missing something at the database level. Does anyone have any idea? The database is 9i and Discoverer is 9.0.2. Thank you!

    The SQL that you see from the Inspect SQL option will provide you with the SQL that Discoverer sends to the database. The database then may do a query rewrite to point to an available materialized view if available. This rewrite won't be seen from the inspect sql option. You need to check at the database level to verify if a query rewrite did in fact take place.
    You may want to check the section titled "Query Rewrite with Materialized Views" from Ch1 - "Introduction to the Optimizer" in the Oracle9i Database Performance Tuning Guide and Reference, Release 2 (9.2), Part Number A96533-02, available at http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96533/optimops.htm#37287
    Regards
    Abhinav Agarwal
    Oracle Business Intelligence Product Management
    http://www.oracle.com/bi
    http://www.oracle.com/technology/documentation/bi_ee.html
    http://www.oracle.com/technology/software/products/ias/htdocs/101320bi.html
    http://oraclebi.blogspot.com/

  • How to view SQL for a materialized view in SQL Developer (Oracle 11g R2)

    Good Morning,
    I am new to SQL Developer 3.1.07 and just installed it on a Windows 7 PC yesterday.
    There's a materialized view for which I need to view (and eventually update) the SQL. The mat'lized view is in another schema, but my Oracle user does have access to the schema and to this particular mat'lized view. My user also has SELECT, INSERT, UPDATE, DELETE, DEBUG, and ALTER permissions. When I select (click on) the matl'ized view in the object tree on the left, a multi-tab window opens with information in the Columns, Indexes, Grants, Dependencies and Details tabs, but the SQL pane is blank. I don't know if there's some other GRANT that I need in Oracle, or if there's something else I need to do in SQL Developer to see the matl'ized view SQL.
    Thanks
    Bob Gardner
    [email protected]

    1007420 wrote:
    There's a materialized view for which I need to view (and eventually update) the SQL. The mat'lized view is in another schema, but my Oracle user does have access to the schema and to this particular mat'lized view. My user also has SELECT, INSERT, UPDATE, DELETE, DEBUG, and ALTER permissions. When I select (click on) the matl'ized view in the object tree on the left, a multi-tab window opens with information in the Columns, Indexes, Grants, Dependencies and Details tabs, but the SQL pane is blank. I don't know if there's some other GRANT that I need in Oracle, or if there's something else I need to do in SQL Developer to see the matl'ized view SQL.SQL*Developer can be tricky regarding what it shows for other schemas. I'm not sure what privileges you might need besides the one you listed except RESOURCE on the MV, or maybe CREATE ANY MATERIALIZED VIEW.
    Can you use DBMS_METADATA.GET_DDL to get the data you want (may/may not work due to privileges)?

  • Creation of materialized view from remote linked table

    Hi ,
    I am facing problem in creating a materialized view which is based on remote link and my query is involving one equi-join.And both table contributes around 2.75 crore rows. I am trying to create two diff views(MV) but the views are taking very much time to create. If you have any ideas or suggestions.And also I want performance I cant compromise it,so help. Please post it down.
    Thanks,

    user13104802 wrote:
    Hi ,
    I am facing problem in creating a materialized view which is based on remote link and my query is involving one equi-join.And both table contributes around 2.75 crore rows. I am trying to create two diff views(MV) but the views are taking very much time to create. If you have any ideas or suggestions.And also I want performance I cant compromise it,so help. Please post it down.
    Thanks,Welcome to the forum.
    You will need to provide more information if you are interested in getting an intelligent response to your post. It appears that you are creating 2 different MVs but the details of each are not provided, ie
    Where do each of the source tables exist, ie local or remote?
    How many rows in each?
    How will the MVs be refreshed?
    There are other considerations, ie competition for resources, processing power, network bandwidth, etc, etc.
    If all of the source tables exist on the remote database then consider creating the MV there and create a local view across the db link, or possibly, create a MV on the remote server for a subset of the remote data and link to that MV locally.

  • Materialized view with dynamic filter

    I have a query which has a dynamic filter in the where clause. Dynamic in the sense, the value in the where condition will be obtained only when the query is run.
    The user interface is Business Objects tool i am using, based on the user login variable, the query is formed. Is there a possibilty to create a materialized view using this query.
    The query looks like this. The part in BOLD section is the filter. This query is taking long time and hence i am going for materialized view. Please suggest a solution
    SELECT
    DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_5_DESC,
    SUM(case when PERIOD_DIM.FISCAL_PERIOD_NBR = ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_PERIOD_NBR ) and PERIOD_DIM.FISCAL_YEAR=( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR ) then SALES_FACT.NET_SALES_USD else 0 end),
    SUM(case when PERIOD_DIM.FISCAL_PERIOD_NBR= ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_PERIOD_NBR ) and PERIOD_DIM.FISCAL_YEAR=( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR )-1 AND PERIOD_DIM.FISCAL_DAY_IN_PERIOD BETWEEN 1 AND ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_DAY_IN_PERIOD ) then SALES_FACT.NET_SALES_USD else 0 end),
    SUM(case when
    PERIOD_DIM.FISCAL_YEAR=( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR ) then SALES_FACT.NET_SALES_USD else 0 end),
    SUM(case when PERIOD_DIM.FISCAL_YEAR= ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR )-1
    AND PERIOD_DIM.FISCAL_DAY_IN_YEAR BETWEEN 1 AND ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_DAY_IN_YEAR )
    then SALES_FACT.NET_SALES_USD else 0 end),
    SUM(case when PERIOD_DIM.FISCAL_PERIOD_NBR = ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_PERIOD_NBR )and PERIOD_DIM.FISCAL_YEAR=( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR ) then SALES_FACT.MUNITS_SOLD_QTY else 0 end),
    SUM(case when PERIOD_DIM.FISCAL_PERIOD_NBR= ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_PERIOD_NBR ) and PERIOD_DIM.FISCAL_YEAR=( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR )-1 AND PERIOD_DIM.FISCAL_DAY_IN_PERIOD BETWEEN 1 AND ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_DAY_IN_PERIOD ) then SALES_FACT.MUNITS_SOLD_QTY else 0 end),
    SUM(case when
    PERIOD_DIM.FISCAL_YEAR=( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR ) then SALES_FACT.MUNITS_SOLD_QTY
    else 0 end),
    SUM(case when PERIOD_DIM.FISCAL_YEAR= ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR )-1 AND PERIOD_DIM.FISCAL_DAY_IN_YEAR BETWEEN 1 AND ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_DAY_IN_YEAR )
    then SALES_FACT.MUNITS_SOLD_QTY else 0 end),
    SUM(case when PERIOD_DIM.FISCAL_PERIOD_NBR = ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_PERIOD_NBR ) and PERIOD_DIM.FISCAL_YEAR= ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR ) then
    SALES_FACT.CASES_SOLD_QTY else 0 end),
    SUM(case when PERIOD_DIM.FISCAL_PERIOD_NBR= ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_PERIOD_NBR )and PERIOD_DIM.FISCAL_YEAR=( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR )-1 AND PERIOD_DIM.FISCAL_DAY_IN_PERIOD BETWEEN 1 AND ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_DAY_IN_PERIOD ) then SALES_FACT.CASES_SOLD_QTY else 0 end),
    SUM(case when
    PERIOD_DIM.FISCAL_YEAR=( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR ) then SALES_FACT.CASES_SOLD_QTY
    else 0 end),
    SUM(case when PERIOD_DIM.FISCAL_YEAR= ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR )-1 AND PERIOD_DIM.FISCAL_DAY_IN_YEAR BETWEEN 1 AND ( DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_DAY_IN_YEAR )
    then SALES_FACT.CASES_SOLD_QTY else 0 end),
    DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR,
    DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_MONTH_NAME,
    DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_6_DESC,
    DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_7_DESC,
    DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_8_DESC,
    CONCAT (CONCAT(SHIP_TO_CUST_DIM.SOURCE_CUST_NBR,'-'),SHIP_TO_CUST_DIM.SOLD_TO_CUST_NAME),
    CONCAT (CONCAT(SHIP_TO_CUST_DIM.SOURCE_CUST_NBR,'-'),SHIP_TO_CUST_DIM.SHIP_TO_CUST_LOC_NAME)
    FROM
    DM_SALES.SALES_ORG_DIM,
    PERIOD_DIM,
    SALES_FACT,
    DM_SALES.CURRENT_DATE_PERIOD_DIM,
    SHIP_TO_CUST_DIM
    WHERE
    ( SALES_FACT.INVOICE_DATE_KEY(+)=PERIOD_DIM.PERIOD_KEY )
    AND ( SHIP_TO_CUST_DIM.SHIP_TO_CUST_KEY=SALES_FACT.SHIP_TO_CUST_KEY )
    AND ( SALES_FACT.SALES_ORG_KEY=DM_SALES.SALES_ORG_DIM.SALES_ORG_KEY )
    AND ( PERIOD_DIM.PERIOD_KEY<=DM_SALES.CURRENT_DATE_PERIOD_DIM.PERIOD_KEY )
    AND
    ( DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_5_DESC=(SELECT DM_SALES.SECURITY_HEADER.SALES_ORG_POSITION_DESC from DM_SALES.SECURITY_HEADER
    WHERE DM_SALES.SECURITY_HEADER.BOLOGIN = @VARIABLE('BOUSER')) ) AND
    ( PERIOD_DIM.FISCAL_YEAR>=DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR-1 )
    GROUP BY
    DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_5_DESC,
    DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_YEAR,
    DM_SALES.CURRENT_DATE_PERIOD_DIM.FISCAL_MONTH_NAME,
    DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_6_DESC,
    DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_7_DESC,
    DM_SALES.SALES_ORG_DIM.POSITION_LEVEL_8_DESC,
    CONCAT (CONCAT(SHIP_TO_CUST_DIM.SOURCE_CUST_NBR,'-'),SHIP_TO_CUST_DIM.SOLD_TO_CUST_NAME),
    CONCAT (CONCAT(SHIP_TO_CUST_DIM.SOURCE_CUST_NBR,'-'),SHIP_TO_CUST_DIM.SHIP_TO_CUST_LOC_NAME)

    You could potentially create a single materialized view that had no restriction on the BOLOGIN column and allow Oracle to use that materialized view to be used to satisfy requests from the different users. You may need to add appropriate indexes to the materialized view for that to be a reasonable option, depending on how many distinct BOLOGIN values you expect.
    Justin
    Distributed Database Consulting, Inc.
    http://www.ddbcinc.com/askDDBC

  • Materialized View Logs in a logical standby database

    I am trying to create materialized views based on a few tables in a logical standby database.
    The target database (11g R2) where the MVs will be created is a stand-alone database.
    The DB where the base tables reside is a logical standby database (11g R2).
    The requirement is to do a "FAST REFRESH" of the Materialized Views.
    My questions are :
    1. Can I create MV logs in the logical standby DB?
    2. If the answer to question no. 1 is "Yes", do I need to do anything different or configure the logical standby DB in a specific manner in order to create MV logs. From what I understand, the objects in the logical standby database are in a locked state. Is that going to be a problem ?
    Any other information that might be relevant is greatly appreciated.
    Thanks in advance.

    HI Daniel,
    I appreciate your quick response.
    My choice of name may not have been ideal, however changing new to another name - like gav - does not solve the problem.
    SYS@UATDR> connect / as sysdba
    Connected.
    SYS@UATDR>
    SYS@UATDR> select name, log_mode, database_role, guard_status, force_logging, flashback_on, db_unique_name
    2 from v$database
    3 /
    NAME LOG_MODE DATABASE_ROLE GUARD_S FOR FLASHBACK_ON DB_UNIQUE_NAME
    UATDR ARCHIVELOG LOGICAL STANDBY ALL YES YES UATDR
    SYS@UATDR>
    SYS@UATDR> create tablespace ts_gav
    2 /
    Tablespace created.
    SYS@UATDR>
    SYS@UATDR> create user gav
    2 identified by gav
    3 default tablespace ts_gav
    4 temporary tablespace temp
    5 quota unlimited on ts_gav
    6 /
    User created.
    SYS@UATDR>
    SYS@UATDR> grant connect, resource to gav
    2 /
    Grant succeeded.
    SYS@UATDR> grant unlimited tablespace, create table, create any table to gav
    2 /
    Grant succeeded.
    SYS@UATDR>
    SYS@UATDR> -- show privs given to gav
    SYS@UATDR> select * from dba_sys_privs where grantee='GAV'
    2 /
    GRANTEE PRIVILEGE ADM
    GAV CREATE TABLE NO
    GAV CREATE ANY TABLE NO
    GAV UNLIMITED TABLESPACE NO
    SYS@UATDR>
    SYS@UATDR> -- create objects in schema
    SYS@UATDR> connect gav/gav
    Connected.
    GAV@UATDR>
    GAV@UATDR> -- prove ability to create tables
    GAV@UATDR> create table gav
    2 (col1 number not null)
    3 tablespace ts_gav
    4 /
    create table gav
    ERROR at line 1:
    ORA-01031: insufficient privileges
    GAV@UATDR>

  • How to create materialized  view with parameter and index ?

    Hi all,
    i am using oracle 11g.
    i want to create  parameter materialized view  with two parameter (STORED_VALUE, LOV_NAME) with  an index .
    i have below view
    CREATE OR REPLACE FORCE VIEW SR_MY_TEST(DISPLAYED_VALUE, STORED_VALUE, LOV_NAME) AS
      SELECT  DISPLAYED_VALUE , LOVVALUE.STORED_VALUE , lovname.lov_name
               FROM (SELECT T.LOV_VALUE_ID,
          T.LOV_ID,
          T.ORG_ENTITY_ID,
          T.STORED_VALUE,
          T.DISPLAYED_VALUE,
          T.ENTERPRISE_ID
         FROM MS_QS_LIST_OF_VALUES_T T) lovvalue, ms_qs_lov_names lovname
              WHERE lovvalue.lov_id = lovname.lov_id
                AND lovvalue.org_entity_id = 1
                and LOVVALUE.ENTERPRISE_ID = 100000
                AND LOVNAME.ENTERPRISE_ID = 100000;
    i want to create index on   STORED_VALUE, LOV_NAME
    Thanks
    Damby

    No.AFAIK, there's nothing called as "parameterized MV".
    Materialized View store data like tables (and not like Views). So, does it make sense when you say - "table with parameters" ?
    Could you please explain your business requirement?
    What is the purpose behind those 2 parameters?

  • Materialized Views in Discoverer 4.1.33

    While trying to create a summary folder I get an error that my user id does not have privilige /quota to create a materialized view and that summary management is not available because the user does not have global query rewrite privilige .
    If any one has a resolution to this problem than please respond ASAP. The privilige tab in Disco Admin for the particular Business Area already shows all options for the user checked including the one for creating Summaries and the above error still crops up

    Gurman,
    The Privilege that are required to create a Summary Folder using Materialized views are,
    1. Query Rewrite.
    2. Create Any Materialized View.
    3. Drop Any Materialized View.
    4. Alter Any Materialized View.
    So Login into SQL*Plus as SYS User or SYSTEM User or as any DBA User and execute the below SQL,
    SQL> Grant Query ReWrite, Create Any Materialize View, Alter Any Materialized View, Drop Any Materialized View to <EUL OWNDER>;
    This will solve your issue.
    Thanks,
    Selva.
    null

  • Periodic refresh of Materialized View

    Hi,
    I am working in a Oracle database for Oracle E-Business Suite.
    In the database we have a custom materialized view defined as follow:
    CREATE MATERIALIZED VIEW APPS.XXCUS_NAME_MV
    <...>
    BUILD IMMEDIATE
    REFRESH FORCE ON DEMAND
    <....>
    From the below SQL I learn that the MV was refreshed during the night, I assume this is every night since i have executed the query for the last several days.
    SELECT OWNER, MVIEW_NAME, LAST_REFRESH_DATE, REFRESH_METHOD, REFRESH_MODE, BUILD_MODE
    FROM DBA_MVIEWS
    WHERE MVIEW_NAME LIKE 'XXCUS_NAME_MV%'
    APPS
    XXCUS_NAME_MV
    10-10-2013 2:00:14
    FORCE
    DEMAND
    IMMEDIATE
    However, I cannot find anywhere how this refresh is scheduled by means of a job?
    I tried below query but there are no scheduled jobs for  DBMS_REFRESH.REFRESH or DBMS_MVIEW.REFRESH.
    SELECT * FROM DBA_JOBS;
    Does anyone has an idea how the MV is refreshed automatically (periodically) other tahn by jobs?
    Thx!

    Try looking in the *_SCHEDULER_JOBS view. This is now the preferred means of scheduling jobs, though DBA_JOBs is still supported.
    this link might give you a good start:
    http://docs.oracle.com/cd/E11882_01/server.112/e25494/scheduse.htm

Maybe you are looking for

  • Fiscal Year Variant for non calendar year

    Dear Experts, The fiscal year for my client is as follows:      Start Date     -      End Date Month 1     -      21-Mar     -      20-Apr Month 2     -      21-Apr     -      21-May Month 3     -      22-May     -      21-Jun Month 4     -      22-J

  • What are the tables to be used for these reports

    hello everybody,          i am a new user. it is only recently that i have started learning ABAP. i was given a rask by my faculty to develop the following reports. can anyone help me find out the tables that are used for them. 1.  Report for Sales O

  • LOV query is invalid, a display and a return value are needed

    hello - i am having this issue and can't get around this when creating a popup LOV based on sql. below is LOV query. as you see the view has only two columns. I tried various ways by giving alias to columns in query but nothing works. What did I miss

  • Numbering properties -- book vs. files

    I updated some book chapters in FM 9. Just text deletions, and some text color changes. Suddently updating the book throws up this error: What's going on here? Thanks, Ian FM 9, Windows 7

  • Cell phone charm on iPhone

    is there any way to put a cell phone charm on the iPhone?