將 Oracle® 使用者遷移至 PostgreSQL 適用的 Cloud SQL:安全性、作業、監控和記錄

本文件是一系列文件的一部分,提供有關規劃及執行 Oracle® 11g/12c 資料庫遷移至 PostgreSQL 適用的 Cloud SQL 12 版的相關重要資訊和指引。除了初步設定部分外,本系列還包含以下部分:

安全性

本節提供加密、稽核和存取控管的相關指南。

加密

Oracle 和 PostgreSQL 適用的 Cloud SQL 都提供資料加密機制,可在基本使用者驗證和使用者權限管理之外,再增加一層保護機制。

靜態資料加密

未透過網路傳輸的資料 (已儲存) 稱為「靜態資料」。Oracle 提供 TDE (透明資料加密) 機制,可在作業系統層級新增加密層。在 Cloud SQL 中,系統會使用 256 位元進階加密標準 (AES-256) 或更高級的加密標準來加密資料。這些資料金鑰會使用儲存在安全 KeyStore 中的主金鑰進行加密,並定期變更。如要進一步瞭解靜態資料加密,請參閱「 Google Cloud中的靜態資料加密」。

傳輸中資料加密

Oracle 提供進階安全性,可處理透過網路傳輸的資料加密作業。資料移出 Google 或 Google 代理單位控管的實體界限時,Cloud SQL 會在一或多個網路層加密及驗證所有傳輸中的資料。如果傳輸中的資料位於 Google 或 Google 代理單位控管的實體界限內,系統通常會加以驗證,但可能不會預設加密。您可以依據威脅模型,選擇要套用哪些額外的安全措施。舉例來說,您可以為 Cloud SQL 的區域內連線設定 SSL。如要瞭解傳輸加密,請參閱「 Google Cloud中的傳輸加密」。

稽核

Oracle 提供多種稽核方法 (例如標準和精細稽核)。相反地,您可以透過下列方式在 PostgreSQL 適用的 Cloud SQL 中進行稽核:

  • pgAudit 擴充功能。記錄並追蹤針對特定資料庫執行個體執行的 SQL 作業。
  • Cloud 稽核記錄。稽核在 PostgreSQL 適用的 Cloud SQL 執行個體上執行的管理和維護作業。

存取權控管

使用者可以使用具備授權靜態 IP 位址的 PostgreSQL 用戶端,或使用 Cloud SQL Proxy (如同任何其他資料庫連線) 連線至 PostgreSQL 適用的 Cloud SQL 執行個體。對於 App Engine 或 Compute Engine 等其他連線來源,使用者可以選擇使用 Cloud SQL Proxy 等多種選項。如要進一步瞭解這些選項,請參閱「執行個體存取權控管」。

Cloud SQL for PostgreSQL 可與 身分與存取權管理 (IAM) 整合,並提供一組預先定義的角色,協助您控管 Cloud SQL 資源的存取權。這些角色可讓 IAM 使用者啟動各種管理作業,例如重新啟動執行個體、備份和備援。詳情請參閱專案存取權控管

作業

本節提供匯出和匯入作業、執行個體層級備份和還原作業,以及唯讀作業和災難復原導入作業的備用執行個體相關指引。

匯出及匯入

Oracle 執行邏輯匯出和匯入作業的主要方法是使用 Data Pump 公用程式EXPDP/IMPDP 指令 (舊版 Oracle 匯出/匯入功能包含 exp/imp 指令)。PostgreSQL 適用的 Cloud SQL 等同指令為 pg_dumppg_restore 公用程式,可產生傾印檔案,然後在資料庫或物件層級匯入 (僅限匯出及匯入中繼資料)。

對於 Oracle DBMS_DATAPUMP 公用程式,沒有直接的 PostgreSQL 適用 Cloud SQL 等價解決方案 (Oracle 方法會套用 EXPDP/IMPDP 功能,並直接與 DBMS_DATAPUMP 套件互動)。如要從 Oracle DBMS_DATAPUMP PL/SQL 程式碼轉換,請使用其他程式碼 (例如 Bash 和 Python) 實作邏輯元素,並使用 PostgreSQL 適用的 Cloud SQL 程式 pg_dumppg_restore 執行匯出/匯入作業。

Oracle SQL*Loader 可用來將外部檔案載入資料庫資料表。SQL*Loader 可使用設定檔 (稱為控制檔案),其中會保留 SQL*Loader 用來判斷如何剖析資料並將資料載入 Oracle 資料庫的中繼資料。SQL*Loader 支援固定和可變的來源檔案。

pg_dumppg_restore 公用程式會在用戶端層級執行,並遠端連線至 PostgreSQL 適用的 Cloud SQL 執行個體。傾印檔案是在用戶端建立。如要將外部檔案載入 Cloud SQL for PostgreSQL,請使用 psql 用戶端介面的 COPY 指令,或使用 Dataflow 或 Dataproc。本節主要著重於 PostgreSQL 適用的 Cloud SQL COPY 指令,這是與 Oracle 的 SQL*Loader 公用程式更直接的對應項目。

如果要將更複雜的資料載入 PostgreSQL 適用的 Cloud SQL 資料庫,建議您使用 Dataflow 或 Dataproc,因為這兩者都會建立 ETL 程序。

如要進一步瞭解 Dataflow,請參閱 Dataflow 說明文件;如要進一步瞭解 Dataproc,請參閱 Dataproc 說明文件

pg_dump

pg_dump 用戶端公用程式會執行一致的備份作業,並以指令碼或封存檔案格式輸出內容。指令碼轉儲作業是一組可執行的 SQL 陳述式,可用來重現原始資料庫物件定義和資料表資料。這些 SQL 陳述式可供任何 PostgreSQL 用戶端使用,用於還原作業。在還原作業期間,備份檔案格式必須與 pg_restore 搭配使用,但備份可讓您還原所選的物件,且設計上可在不同架構之間移植。

用法:

-- Single database backup & specific tables backup
# pg_dump database_name > outputfile.sql
# pg_dump -t table_name database_name > outputfile.sql

-- Dump all tables in a given schema with a prefix and ignore a given table
# pg_dump -t 'schema_name.table_prefixvar>*' -T schema_name.ignore_table database_name > outputfile.sql

-- Backup metadata only - Schema only
# pg_dump -s database_name > metadata.sql

-- Backup in custom-format archive
pg_dump -Fc database_name > outputfile.dump

pg_restore

pg_restore 用戶端程式會從 pg_dump 建立的封存檔還原 PostgreSQL 資料庫。如果未指定資料庫名稱,pg_restore 會輸出包含重建資料庫所需 SQL 指令的腳本,類似於 pg_dump

用法

-- Connect to an existing database and restore the backup archive
pg_restore -d database_name outputfile.dump

-- Create and restore the database from the backup archive
pg_restore -C -d database_name outputfile.dump

psql COPY 指令

psql 是 PostgreSQL 適用的 Cloud SQL 指令列用戶端介面。透過 COPY 指令,psql 會讀取指令引數中指定的檔案,並在伺服器和本機檔案系統之間路由資料。

用法

-- Connect to an existing database and restore the backup archive
psql -p 5432 -U username -h cloud_sql_instance_ip -d database_name -c "\copy emps from '/opt/files/inputfile.csv' WITH csv;" -W

PostgreSQL 適用的 Cloud SQL 匯出/匯入:

下列說明文件連結說明如何使用 gcloud CLI 與 Cloud SQL 執行個體和 Cloud Storage 互動,以便套用匯出匯入作業。

執行個體層級備份與還原

在 Cloud SQL 中,備份和復原作業會透過自動和隨選資料庫備份處理。

備份功能可讓您還原 Cloud SQL 執行個體,藉此復原遺失的資料,或解決執行個體發生的問題。建議您為任何含有您需要保護以免遺失或損壞的資料的執行個體,啟用自動備份功能。

您隨時可以建立備份,這在某些情況下非常實用,例如您即將要在資料庫上執行具有風險性的作業時,或是您需要備份但不想等到備份期間再執行備份作業。不論執行個體是否已啟用自動備份功能,您都可以為任何執行個體建立隨選備份。

系統不會自動刪除隨選備份,它們會一直存在,直到您刪除隨選備份或刪除其執行個體為止。由於系統不會自動刪除這些備份,如果您不刪除隨選備份,這些備份可能會長期影響您的帳單費用

啟用自動備份功能時,您可以指定 4 小時的備份期間,備份作業會在這個時間範圍內開始。請盡可能在執行個體活動量最少時安排備份作業。如果資料自上次備份後未變更,系統就不會備份。

Cloud SQL 可以為每個執行個體最多保留 7 個自動備份。備份資料使用的儲存空間會以較低的費率計費,具體取決於備份資料儲存的區域。如要進一步瞭解價格表,請參閱 PostgreSQL 適用的 Cloud SQL 定價

您可以使用 PostgreSQL 適用的 Cloud SQL 資料庫執行個體還原功能,將資料還原至相同的執行個體、覆寫現有資料,或還原至其他執行個體。您也可以啟用自動備份選項,將 PostgreSQL 資料庫還原至特定時間點

如要進一步瞭解如何建立或管理隨選和自動備份,請參閱「建立及管理隨選和自動備份」一文。

下表列出 Oracle 中常見的備份與還原作業,以及 PostgreSQL 適用的 Cloud SQL 中的對應作業:

說明 Oracle (Recovery Manager - RMAN) PostgreSQL 適用的 Cloud SQL
排定的自動備份 建立 DBMS_SCHEDULER 工作,以便依排程執行 RMAN 指令碼。 gcloud sql instances patch INSTANCE_NAME --backup-start-time HH:MM
手動備份完整資料庫 BACKUP DATABASE PLUS ARCHIVELOG; gcloud sql backups create --async --instance INSTANCE_NAME
還原資料庫 RUN
{
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN;
}
gcloud sql backups list --instance INSTANCE_NAME
gcloud sql backups restore BACKUP_ID --restore-instance=INSTANCE_NAME
增量微分 BACKUP INCREMENTAL LEVEL 0 DATABASE;
BACKUP INCREMENTAL LEVEL 1 DATABASE;
所有備份都是增量備份,無法選擇增量類型。
逐步累積 BACKUP INCREMENTAL LEVEL 0 CUMULATIVE DATABASE;
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;
所有備份都是增量備份,無法選擇增量類型。
將資料庫還原至特定時間點 RUN
{
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
SET UNTIL TIME "TO_DATE('19-SEP-2017 23:45:00','DD-MON-YYYY HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
gcloud sql instances clone SOURCE_INSTANCE_NAME NEW_INSTANCE_NAME \
--point-in-time TIMESTAMP
備份資料庫封存記錄 BACKUP ARCHIVELOG ALL; 不支援。

用於唯讀作業和災難復原導入的待命執行個體

Oracle Active Data Guard 可讓待命執行個體在透過重做和封存記錄套用新資料時,充當唯讀端點。您也可以使用 Oracle GoldenGate 啟用額外的例項,用於在資料修改內容即時套用時進行讀取,做為變更資料擷取 (CDC) 解決方案。

PostgreSQL 適用的 Cloud SQL 會使用待命執行個體來提供高可用性。這個執行個體會透過磁碟層級複製功能,與主要執行個體保持同步。與 Active Data Guard 不同的是,這類資料無法讀取或寫入。如果主要執行個體故障或大約 60 秒無回應,主要執行個體就會自動容錯移轉至待命執行個體。幾秒內,角色就會互換,新的主要角色就會接手。

PostgreSQL 適用的 Cloud SQL 也提供讀取備用資源,可擴充讀取要求。這些備用資源的設計目的是卸載主要執行個體的讀取作業,並非用於災難復原的備用執行個體。與待命執行個體不同,唯讀備用資源會以非同步方式與主要執行個體保持同步。這些子網路可以位於主要子網路所在的不同區域,也可以位於不同區域。您可以使用Google Cloud 主控台或 gcloud CLI 建立讀取/寫入複本。請注意,部分作業需要重新啟動執行個體 (例如,在現有主要執行個體中新增高可用性)。

記錄和監控

Oracle 的警示記錄檔是識別一般系統事件和錯誤事件的主要來源,可用於瞭解任何 Oracle 資料庫執行個體的生命週期 (主要用於排解失敗事件和錯誤事件)。

Oracle 快訊記錄會顯示下列資訊:

  • Oracle 資料庫例項錯誤和警告 (ORA- + 錯誤編號)。
  • Oracle 資料庫執行個體啟動和關閉事件。
  • 網路和連線相關問題。
  • 資料庫重做記錄切換事件。
  • 您可能會看到 Oracle 追蹤記錄檔案,並附上特定資料庫事件的詳細資料連結。

Oracle 為 LISTENER、ASM 和 Enterprise Manager (OEM) 等不同服務提供專屬記錄檔,但這些服務在 PostgreSQL 適用的 Cloud SQL 中並未提供等同的元件。

查看 PostgreSQL 適用的 Cloud SQL 作業記錄檔

Cloud Logging 是查看 postgres.log (相當於 Oracle 中的 alert.log) 中所有記錄項目的主要平台。您可以依記錄事件層級 (例如「Critical」、「Error」或「Warning」) 進行篩選。您也可以設定事件時間範圍和免費文字篩選條件。

在主控台中查看記錄。

監控 PostgreSQL 適用的 Cloud SQL 資料庫執行個體

Oracle 的主要 UI 監控資訊主頁是 OEM 和 Grid/Cloud Control 產品的一部分 (例如「Top Activity Graphs」),可用於在工作階段或 SQL 陳述式層級監控即時資料庫執行個體。PostgreSQL 適用的 Cloud SQL 會透過Google Cloud 控制台提供類似的監控功能。您可以查看 Cloud SQL for PostgreSQL 資料庫執行個體的摘要資訊,其中包含多項監控指標,例如 CPU 使用率、儲存空間使用率、記憶體使用率、讀取/寫入作業、傳入/傳出位元組、有效連線等等。

Cloud Logging 支援 PostgreSQL 適用的 Cloud SQL 的其他監控指標。下圖顯示過去 12 小時的 PostgreSQL 適用 Cloud SQL 查詢圖表。

過去 12 小時的查詢圖表。

監控 PostgreSQL 適用的 Cloud SQL 讀取/複寫資料庫

您可以使用 Google Cloud 主控台監控指標 (如前所述),以與監控主要執行個體相同的方式監控唯讀備用資源。此外,還有專屬的監控指標可用於監控複製延遲,也就是以位元組為單位,判斷主要執行個體與唯讀備用資源執行個體之間的延遲情形 (可透過 Google Cloud 主控台的唯讀備用資源執行個體總覽分頁監控)。

您可以使用 gcloud CLI 擷取複寫狀態

gcloud sql instances describe REPLICA_NAME

您也可以使用 PostgreSQL 用戶端的指令進行複製監控,該指令會提供主要和待命資料庫的狀態。

您可以使用下列 SQL 陳述式驗證唯讀備用機制的狀態:

postgres=> select * from pg_stat_replication;

PostgreSQL 適用的 Cloud SQL 監控

本節將說明 PostgreSQL 適用的 Cloud SQL 基本監控方法,這些方法可視為 Oracle 或 PostgreSQL 適用的 Cloud SQL 等資料庫管理員 (DBA) 執行的例行工作。

工作階段監控

Oracle 工作階段監控功能會查詢稱為「V$」的動態效能檢視畫面。V$SESSIONV$PROCESS 檢視畫面通常用於使用 SQL 陳述式,取得目前資料庫活動的即時洞察資料。您可以查詢 pg_stat_activity 動態檢視畫面,監控工作階段活動:

postgres=> select * from pg_stat_activity;

長時間交易監控

您可以套用適當的篩選器,在 pg_stat_activity 動態檢視畫面中的 query_startstate 等資料欄中,找出執行時間過長的查詢。

鎖定監控

您可以使用 pg_locks 動態檢視畫面監控資料庫鎖定,該畫面會提供可能導致效能問題的鎖定事件即時資訊。

後續步驟