

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Oracle 具體化檢視進行遷移
<a name="Oracle.Procedural.Importing.Materialized"></a>

若要有效的遷移大型資料庫，您也可以使用 Oracle 的具體化檢視複寫功能。透過複寫，您可以使目標資料表與來源資料表維持同步。因此，您可以視需要之後切換為 Amazon RDS。

請確保您符合下列要求，才能使用具體化檢視進行遷移：
+ 設定目標資料庫到來源資料庫之間的存取。在以下範例中，來源資料庫上所啟用的存取規則，會允許 RDS for Oracle 目標資料庫透過 SQL\$1Net 連線到來源。
+ 建立從 RDS for Oracle 資料庫執行個體到來源資料庫之間的資料庫連結。

**若要使用具體化檢視遷移資料**

1. 在來源和 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;
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 使用您新建立的使用者，建立從 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)))';
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 測試連結：

   ```
   SELECT * FROM V$INSTANCE@remote_site;
   ```

1. 在來源執行個體上，建立包含主要索引鍵和具體化檢視日誌的範例資料表。

   ```
   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;
   ```

1. 在目標 RDS for Oracle 資料庫執行個體上建立具體化檢視。

   ```
   CREATE MATERIALIZED VIEW customer_0 
     BUILD IMMEDIATE REFRESH FAST 
     AS (SELECT * 
         FROM   cust_dba.customer_0@remote_site);
   ```

1. 在目標 RDS for Oracle 資料庫執行個體上重新整理具體化檢視。

   ```
   EXEC DBMS_MVIEW.REFRESH('CUSTOMER_0', 'f');
   ```

1. 捨棄具體化檢視，納入 `PRESERVE TABLE` 子句，以保留具體化檢視容器資料表及其內容。

   ```
   DROP MATERIALIZED VIEW customer_0 PRESERVE TABLE;
   ```

   前述保留資料表的名稱，與捨棄的具體化檢視相同。