使用 Oracle 实体化视图进行迁移
要高效率地迁移大型数据集,您可以使用 Oracle 实体化视图复制功能。通过复制,您可以使目标表与源表保持同步。这样,如果需要,您可以稍后切换到 Amazon RDS。
在可以使用实体化视图进行迁移之前,请确保满足以下要求:
-
配置从目标数据库到源数据库的访问权限。在以下示例中,在源数据库上启用了访问规则,以允许 RDS for Oracle 目标数据库通过 SQL*Net 与源数据库连接。
-
创建从 RDS for Oracle 数据库实例到源数据库的数据库链接。
使用实体化视图迁移数据
-
在源实例和 RDS for Oracle 目标实例上,创建可以使用同一密码进行身份验证的用户账户。下面的示例创建了一个名为
dblink_user
的用户。CREATE USER dblink_user IDENTIFIED BY
my-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;注意
作为安全最佳实践,请指定除此处所示提示以外的密码。
-
使用新创建的用户创建从 RDS for Oracle 目标实例到源实例的数据库链接。
CREATE DATABASE LINK remote_site CONNECT TO dblink_user IDENTIFIED BY
my-password
USING '(description=(address=(protocol=tcp) (host=my-host
) (port=my-listener-port
)) (connect_data=(sid=my-source-db-sid
)))';注意
作为安全最佳实践,请指定除此处所示提示以外的密码。
-
测试链接:
SELECT * FROM V$INSTANCE@remote_site;
-
使用主键和源实例上的具体化视图日志创建示例表。
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;
-
在目标 RDS for Oracle 数据库实例上,创建实体化视图。
CREATE MATERIALIZED VIEW customer_0 BUILD IMMEDIATE REFRESH FAST AS (SELECT * FROM cust_dba.customer_0@remote_site);
-
在目标 RDS for Oracle 实例上,刷新实体化视图。
EXEC DBMS_MVIEW.REFRESH('CUSTOMER_0', 'f');
-
删除实体化视图并包括
PRESERVE TABLE
子句,以便保留实体化视图容器表及其内容。DROP MATERIALIZED VIEW customer_0 PRESERVE TABLE;
保留的表拥有与已删除具体化视图相同的名称。