移轉應用程式資料庫

Oracle Autonomous Transaction Processing 會移除維護、修正以及最佳化資料庫主機和軟體的需求,因此只提供資料庫綱要層次的存取權。 因此,可用來將內部部署資料庫移轉至自治式交易處理的移轉工具是以 Oracle Database 隨附的綱要層次移轉工具資料汲取為基礎。

關於移轉應用程式資料庫

資料庫移轉處理作業包含建立來源資料庫的資料庫綱要傾印、將它上傳至 Oracle Cloud Infrastructure (OCI) 上的物件儲存、設定自治式交易處理資料庫從物件儲存匯入,以及從 Oracle Cloud Infrastructure Object Storage 匯入資料庫綱要傾印。

以下是程序的簡介:

  1. 將資料庫綱要匯出至本機傾印檔。
  2. 使用 OCI CLI 將傾印檔移至物件儲存。
  3. 取得自治式資料庫的 OCID。
  4. 取得從來源資料庫 (或部分替代主機) 存取自治式資料庫的公事包。
  5. 建立自發性資料庫的本機通道以進行組態設定。
  6. 取得自治式資料庫的 OCI 認證權杖以存取 Oracle Cloud Infrastructure Object Storage
  7. 設定自治式資料庫存取證明資料。
  8. 將傾印檔從 Oracle Cloud Infrastructure Object Storage 匯入自治式資料庫。

匯出資料庫綱要和資料

將資料庫綱要和資料匯出至單一傾印檔。

  1. 為傾印檔建立 export 資料夾。
    請注意,我們正在建立單一檔案傾印,在某些情況下可能會非常大。請參閱使用資料汲取建立多重部分檔案的其他選項。
    EXPORT_DB_DIRNAME=export
    mkdir /home/oracle/${ DIRNAME}
    # drop directory if it exists
    echo "DROP DIRECTORY ${EXPORT_DB_DIRNAME};" | sqlplus system/PASSWORD@$HOST:PORT/SERVICE
    # create a directory object in the DB for export with datapump, pointing to the folder created above
    echo "CREATE DIRECTORY ${EXPORT_DB_DIRNAME} AS '/home/oracle/export/';" | sqlplus 
    system/PASSWORD@$HOST:PORT/SERVICE
    # export the schema 
    expdp system/PASSWORD@$HOST:PORT/SERVICE schemas=SCHEMA_NAME 
    DIRECTORY=${EXPORT_DB_DIRNAME}
  2. 使用 Oracle Cloud Infrastructure (OCI) 命令行介面,將傾印檔移至先前建立的 Oracle Cloud Infrastructure Object Storage 儲存桶。
    oci os object put \
    -bn bucket-name \
    --file /home/oracle/export/expdat.dmp \
    --name expdat.dmp

取得 Autonomous Database 的 OCID

取得 Oracle Autonomous Transaction Processing 資料庫的 OCID、專用端點 IP 以及專用端點 URL。

  1. 在「Oracle Cloud Infrastructure 控台」中,選取 Oracle Database,然後選取自治式交易處理。
  2. 從頁面左邊的區間清單中選取區間。
    區間是您部署資源的位置。
  3. 按一下稍早啟動設定的資料庫,即可取得詳細資訊。
  4. 複製 OCID、專用端點 IP 以及專用端點 URL (主機名稱),然後將它們儲存在記事本中供日後使用。

取得資料庫公事包檔案

設定目錄來指向 sqlnet.ora 檔案中的公事包位置,以取得 Oracle Autonomous Transaction Processing 資料庫公事包檔案並更新位置。

  1. 使用 Oracle Cloud Infrastructure (OCI) 命令行介面,使用您的 OCID 和密碼取得自治式交易處理資料庫公事包檔案。
    oci db autonomous-database generate-wallet --autonomous-database-
    id your ATP OCID --file wallet.zip --password your-password
  2. 解壓縮公事包。
    unzip wallet.zip
  3. 編輯 sqlnet.ora 檔案並取代目錄值,以符合解壓縮之公事包檔案的位置。
    WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = 
    (DIRECTORY="/home/oracle/ ")))
    SSL_SERVER_DN_MATCH=yes
  4. 設定 TNS_ADMIN 環境變數,使其符合解壓縮公事包的資料夾。
    export TNS_ADMIN=$(pwd)

透過防禦主機建立 Autonomous Database 的本機通道

設定防禦主機的公用 IP 位址來建立通道。

  1. 從 terraform 輸出取得防禦主機的公用 IP。
    如果 Apache Tomcat 伺服器部署在公用子網路中,您可以使用 Tomcat 伺服器的公用 IP,否則請使用防禦主機公用 IP 位址。
  2. 定義防禦主機 IP 以建立通道。
    export BASTION_IP=Public IP of the bastion
  3. 執行此命令即可使用「自治式交易處理」資料庫的「專用端點 IP 位址」將資料庫主機和 SSH 匯出至資料庫主機。
    DB_HOST 是先前收集的專用端點 IP。
    export DB_HOST=10.0.2.2
    ssh -4 -M -S socket -fnNT -L 1522:${DB_HOST}:1522 opc@${BASTION_IP} cat -
    出現提示時,輸入以確認新主機。
  4. 編輯 /etc/hosts 檔案,將自治式資料庫的專用端點主機指向 127.0.0.1 (localhost)。
    這會在 tnsnames.ora 檔案中查詢「專用端點主機」。
    ATP_HOSTNAME=$(sed 's|.*(host=\([a-z0-9.-]*\)).*|\1|;' 
    tnsnames.ora | head -n1)
    sudo su -c "printf \"127.0.0.1  ${ATP_HOSTNAME}\n\"  >> 
    /etc/hosts"
  5. 檢查端點是否正確。
    cat /etc/hosts
    輸出應該與下列類似:
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    172.19.0.3    58aa534ef636
    127.0.0.1  jrhdeexg.adb.region

產生認證記號

產生將資料移至 Oracle Cloud Infrastructure Object Storage 和移至 Oracle Autonomous Transaction Processing 資料庫時要使用的記號。您只會在建立「認證記號」字串時見到它,因此請務必立即將「認證記號」複製到安全位置
  1. 登入 Oracle Cloud Infrastructure 主控
  2. 按一下使用者圖示以開啟設定檔功能表,然後按一下使用者設定值。
    請記下您的完整使用者名稱(可能是您的電子郵件,或您的電子郵件前面加上您所使用的單一登入服務 (如果已啟用)。
  3. 按一下認證記號,然後按一下產生記號。
  4. 為「認證記號」提供有意義的描述,然後按一下產生記號。
  5. 複製記號並加以儲存,以便日後擷取。
    記號只會顯示一次。當您關閉對話方塊時,將無法再次在主控台中看到該記號。
  6. 按一下閉。

在 Autonomous Database 中設定雲端證明資料

新增您的 Oracle Cloud Infrastructure (OCI) 使用者名稱和認證權杖密碼,作為 Oracle Autonomous Transaction Processing 資料庫的預設證明資料。

  1. 使用 SQLPLus Instant Client,透過先前建立的通道連線至遠端自治式交易處理資料庫。
    sqlplus admin@atp_db_name_high
  2. 在出現提示時,輸入自治式交易處理資料庫的管理員密碼。
    terraform.tfvars 檔案中設定的 atp_admin_password
  3. 確定您已登入 SQLPlus 提示。
    SQL>
  4. 使用下列命令並搭配 OCI 使用者名稱和 OCI 認證權杖密碼,在自治式交易處理資料庫中建立 OCI 雲端證明資料。
    SET DEFINE OFF
    BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'oci username',
        password => 'oci auth token'
    );
    END;
    /
  5. 將您的證明資料設為預設證明資料。
    ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 
    'ADMIN.DEF_CRED_NAME';
  6. 結束 SQLPlus。
    SQL> exit

將傾印檔匯入 Autonomous Database

使用資料汲取將資料傾印匯入自治式交易處理資料庫。

  1. 定義區域 (例如 us-ashburn-1)、命名空間、儲存桶、檔案名稱、自治式交易處理資料庫名稱 (例如 atpdb) 以及自治式交易處理管理員密碼的環境變數。
    export REGION=your-OCI-region
    export NAMESPACE=your namespace
    export BUCKET=atp-upload
    export FILENAME=expdat.dmp
    export ATP_DB_NAME=your ATP DB name
    export ATP_PASSWORD=atp_admin_password
  2. 執行下列命令:
    impdp admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low 
    directory=data_pump_dir 
    dumpfile=default_credential:https://objectstorage.${REGION}.oracl
    ecloud.com/n/${NAMESPACE}/b/${BUCKET}/o/${FILENAME} parallel=16 
    exclude=cluster,db_link 

    第一次嘗試將會失敗,發生錯誤:ORA-01950: no privileges on tablespace 'DATA'。移至下一步,指定使用者從資料庫綱要建立的配額。

  3. 授與使用者無限制的表格空間。
    echo "GRANT UNLIMITED TABLESPACE TO USER;" | sqlplus 
    admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low
    將會顯示下列輸出:
    Grant Succeeded
  4. 刪除在步驟 2 中建立的表格,即可在下次執行時建立資料。
    echo "DROP TABLE TABLE_NAME;" | sqlplus 
    admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low
  5. 立即執行下列命令來匯入使用者具有有效配額的資料。
    impdp admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low 
    directory=data_pump_dir 
    dumpfile=default_credential:https://objectstorage.${REGION}.oracl
    ecloud.com/n/${NAMESPACE}/b/${BUCKET}/o/${FILENAME} parallel=16 
    exclude=cluster,db_link 
    您將會見到與現有使用者相關的錯誤。這是正常的,因為物件是在步驟 2 第一次執行命令時所建立。
會移轉資料庫。