当我创建物化视图日志时,Oracle 隐式地在该日志上创建了一个索引。例如,在创建物化视图日志表foo
时,Oracle 创建了视图日志表mlog$_foo
和索引i_mlog$_foo
。Oracle 在默认表空间中创建索引,而我需要它在不同的表空间中。我无法更改用户的默认表空间。如何为索引指定 DDL(或至少是表空间)?
当我创建物化视图日志时,Oracle 隐式地在该日志上创建了一个索引。例如,在创建物化视图日志表foo
时,Oracle 创建了视图日志表mlog$_foo
和索引i_mlog$_foo
。Oracle 在默认表空间中创建索引,而我需要它在不同的表空间中。我无法更改用户的默认表空间。如何为索引指定 DDL(或至少是表空间)?
这实际上是一个错误:Materialized View Log (Mlog$) Index Not Created in its Default Tablespace (Doc ID 1959658.1)。摘抄:
虽然没有说明解决方法,也没有迹象表明您可以自己强制表空间(
create materialized view log
语句没有这样的选项)。该文章的解决方案部分指出它将在 12.2 中修复(目前计划在 2016 年上半年),但您可以向 Oracle 支持请求反向移植。因此,最好的行动方案可能是打开 SR 并请求向后移植或其他一些解决方法。
我知道的唯一可能的解决方法是在创建 mview 日志之前更改用户的默认表空间,然后再将其改回。这显然不好——谁知道同时可以创建什么其他对象——但可能就是你所拥有的。
@a_horse_with_no_name有不同的建议:创建完成后重建索引。这允许您更改表空间(和其他存储选项):