Materialized view with FAST refresh on remote table: How to include a GEOMETRY column?
Regarding the SDO_GEOMETRY/fast refresh/remote table scenario:
The issue doesn't seem to happen when the MV selects from a local table. The issue only seems to happen when we select from a remote table/using a dblink. It seems to be normal Oracle behavior.

Using remote table/dblink (fails):
The steps were adapted from the answer in this post: Create fast-refresh MV over dblink on table without PK?
SQL&gt; create table t5 (c1 number not null unique, c2 number);

Table created.
SQL&gt; create materialized view log on t5 with primary key;

Materialized view log created.

SQL&gt; create materialized view mv5 refresh fast on demand as
  2  select t5.*, sdo_geometry(2001, 26917, sdo_point_type(c1,c2, null), null, null) as shape
  3  from t5@self;
select t5.*, sdo_geometry(2001, 26917, sdo_point_type(c1,c2, null), null, null) as shape

             *
ERROR at line 2:
ORA-12015: cannot create a fast refresh materialized view from a complex query


Using a local table (succeeds):
SQL&gt; create table t5 (c1 number not null unique, c2 number);

Table created.

SQL&gt; create materialized view log on t5 with primary key;

Materialized view log created.

SQL&gt; create materialized view mv5 refresh fast on demand as
  2  select t5.*, sdo_geometry(2001, 26917, sdo_point_type(c1,c2, null), null, null) as shape
  3  from t5;

Materialized view created.

SQL&gt; insert into t5 values (1, 1);

1 row created.

SQL&gt; insert into t5 values (2, 2);

1 row created.

SQL&gt; commit;

Commit complete.

SQL&gt; exec dbms_mview.refresh('MV5', 'f');

PL/SQL procedure successfully completed.

SQL&gt; select refresh_method from user_mviews where mview_name = 'MV5';

REFRESH_METHOD
--------
FAST


Of course, that doesn't answer your question about how to get a GEOMETRY column working.
But I think that test will at least be help demonstrate that the combination of 1) SDO_GEOMETRY, 2) fast refresh, and 3) using a remote table is what's causing the issue. If we remove any of those three things, then the MV seems to work fine.