If the tables should have the same values... why not just have one table?
You can use merge to do update-if-exists, insert-if-not-exists logic. So after every insert or update on A, you could merge into B:
create table A (
id number primary key, type varchar2(20), desc1 varchar2(20)
);
create table B (
id number primary key, type varchar2(20)
);
insert into a values ( 1, 1, 'a' );
merge into b
using a
on ( a.id = b.id )
when matched then
update set b.type = a.type
when not matched then
insert values ( a.id, a.type );
select * from b;
ID TYPE
1 1
update a
set type = 2;
merge into b
using a
on ( a.id = b.id )
when matched then
update set b.type = a.type
when not matched then
insert values ( a.id, a.type );
select * from b;
ID TYPE
1 2
You can then do the reverse to transfer changes on B back to A.
BUT!
This opens you up to all sorts of concurrency problems.
If in session one you run:
update a
set type = 1;
And in session two:
update b
set type = 3;
Then run the appropriate merges after each, you'll hit deadlock!
So you need to think carefully about what to do when two people write conflicting changes at the same time.
Why do you need two tables again?