Create fast-refresh MV over dblink on table without PK?
As already demonstrated in your other question, a unique constraint on a NOT NULL column is good enough to create an mview log with &quot;PK&quot; values. That can be used for fast refresh.
SQL&gt; conn bp/bp
Connected.
SQL&gt; create database link self connect to bp identified by bp
     using 'localhost:1521/RYMIN19';

Database link created.

SQL&gt; create table t1 (c1 number not null unique, c2 number);

Table created.

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

Materialized view log created.

SQL&gt; create materialized view mv1 refresh fast on demand as select * from t1@self;

Materialized view created.

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

1 row created.

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

1 row created.

SQL&gt; commit;

Commit complete.

Then:
SQL&gt; exec dbms_mview.refresh('MV1', 'f');

PL/SQL procedure successfully completed.

SQL&gt; select last_refresh_type from user_mviews where mview_name = 'MV1';

LAST_REF
--------
FAST