Oracle 具体化视图
您还可以使用 Oracle 具体化视图复制功能高效地迁移大型数据集。复制功能可以使目标表与源表持续保持同步,因此,如需要,可在稍后完成向 Amazon RDS 的实际转换。设置复制功能时,需使用 Amazon RDS 实例到源数据库的数据库链接。
具体化视图的一项要求是,允许从目标数据库访问源数据库。在以下示例中,源数据库启用了访问规则,因此, Amazon RDS 目标数据库可通过 SQLNet 与源数据库连接。
-
在源实例和 Amazon RDS 目标实例上创建用户账户,并使用同一密码进行身份验证。
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; -
使用新创建的 dblink_user 创建 Amazon RDS 目标实例到源实例的数据库链接。
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>)))'; -
测试链接:
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; -
在目标 Amazon RDS 实例上,创建具体化视图。
CREATE MATERIALIZED VIEW customer_0 BUILD IMMEDIATE REFRESH FAST AS (SELECT * FROM cust_dba.customer_0@remote_site); -
在目标 Amazon RDS 实例上,刷新具体化视图。
EXEC DBMS_MV.REFRESH('CUSTOMER_0', 'f'); -
删除具体化视图并包括 PRESERVE TABLE 子句,以便保留具体化视图容器表及其内容。
DROP MATERIALIZED VIEW customer_0 PRESERVE TABLE;保留的表拥有与已删除具体化视图相同的名称。