更新时间:2023-09-04
您还可以使用 Oracle 物化视图复制功能高效地迁移大型数据集。复制功能可以使目标表与源表持续保持同步,因此,如需要,可在稍后完成向 DMP 的实际转换。设置复制功能时,需使用 DMP 实 例到源数据库的数据库链接。物化视图的一项要求是,允许从目标数据库访问源数据库。
在以下示例中,源数据库启用了访问规则,因此,DMP目标数据库可通过 SQLNet 与源数据库连接。
1. 在源实例和 DMP 目标实例上创建用户账户,并使用同一密码进行身份验证。
create user dblink_user identified by <password>
default tablespace users temporary tablespace temp;
grant create session to dblink_user;
grant select any table to dblink_user;
grant select any dictionary to dblink_user;
2. 使用新创建的 dblink_user 创建 DMP 目标实例到源实例的数据库链接。
create database link remote_site
connect to dblink_user identified by <password>
using '(description=(address=(protocol=tcp) (host=<myhost>) (port=<listener port>)) (connect_data=(sid=<sourcedb sid>)))';
3. 测试链接:
select * from v$instance@remote_site;
4. 使用主键和源实例上的物化视图日志创建示例表。
create table customer_0 tablespace users as select rownum id, o.*
from all_objects o, all_objects x where rownum <= 1000000;
alter table customer_0 add constraint pk_customer_0 primary key (id) using index;
create materialized view log on customer_0;
5. 在目标实例上,创建物化视图。
CREATE MATERIALIZED VIEW customer_0 BUILD IMMEDIATE REFRESH FAST AS SELECT * FROM cust_dba.customer_0@remote_site;
6. 在目标 DMP 实例上,刷新物化视图。
exec DBMS_MV.REFRESH('CUSTOMER_0', 'f');
7. 删除物化视图并包括 PRESERVE TABLE 子句,以便保留物化视图容器表及其内容。
DROP MATERIALIZED VIEW customer_0 PRESERVE TABLE;
--保留的表拥有与已删除物化视图相同的名称。