Question: I am creating a materialized view and
I get this error:
ORA-12058: materialized view cannot use prebuilt
table
If I remove "with rowid", I get error that cannot create because no
primary key on source table. My options appear to be
(1) do not use prebuilt table (in which
case we'd lose additional data) or
(2) add a primary key on
the master table
What's the best option to avoid the ORA-12058 error?
Answer: As you see, it's not possible to
create materialized view ON PREBUILT TABLE with the ROWID syntax,
and you must use a primary key if you want to use the ON PREBUILT
TABLE
option. However, there are some tricks
for making an
existing table into a materialized view.
If you already have a unique index on the key column for the
table, you can always drop the index and re-add it as a primary key
constraint. This rebuilds the unique index.
The ON PREBUILT TABLE option is used when you have pre-created the
table. This is often accomplished using CTAS syntax, and the
goal is to keep the table
synchronized by changing it from a table to a materialized view.
In many cases, it's easier to drop
the table and let Oracle recreate it. The
Oracle documentation (also see MOSC note 254593.1) says that your
choices are either BUILD IMMEDIATE or BUILD DEFERRED . . . .
ORA-12058: materialized view cannot use prebuilt
table
Cause: An attempt was made to use the
prebuilt tables.
Action: Reissue the SQL
command using BUILD IMMEDIATE or BUILD DEFERRED.
|
|
Get the Complete
Oracle SQL Tuning Information
The landmark book
"Advanced Oracle
SQL Tuning The Definitive Reference" is
filled with valuable information on Oracle SQL Tuning.
This book includes scripts and tools to hypercharge Oracle 11g
performance and you can
buy it
for 30% off directly from the publisher.
|