將 Oracle® 使用者遷移至 PostgreSQL 適用的 Cloud SQL:術語和功能

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

術語

本節將詳細說明 Oracle 和 PostgreSQL 適用的 Cloud SQL 之間的資料庫術語相似之處和差異。並比較各資料庫平台的核心層面。由於架構上的差異 (例如,Oracle 12c 推出了多租戶功能),因此比較結果會區分 Oracle 11g 和 12c 版本。本文所參照的 PostgreSQL 適用 Cloud SQL 版本為 12。

本節會強調 Oracle 和 PostgreSQL 適用的 Cloud SQL 之間的主要術語差異。本文件稍後會詳細說明低層級說明。

Oracle 11g 說明 PostgreSQL 適用的 Cloud SQL 主要差異
instance 單一 Oracle 11g 執行個體只能容納一個資料庫。 instance 一個 PostgreSQL 適用的 Cloud SQL 執行個體只能容納一個資料庫叢集。資料庫叢集是儲存在共同資料區的資料庫集合。
資料庫 資料庫可視為單一執行個體 (資料庫名稱與執行個體名稱相同)。 資料庫 多個或單一資料庫可為多個應用程式提供服務。
schema 結構定義和使用者是相同的,因為兩者都視為資料庫物件的擁有者 (使用者可在未指定或未分配至結構定義的情況下建立)。 schema 資料庫包含一或多個結構定義。表格等物件會包含在結構定義中。同一個資料庫中的不同結構定義可以使用相同的物件名稱,不會發生衝突。
user 與結構定義相同,因為兩者都是資料庫物件的擁有者,例如:例項 → 資料庫 → 結構定義/使用者 → 資料庫物件。 角色 角色可以是資料庫使用者,也可以是資料庫使用者群組,具體取決於設定方式。可擁有資料庫物件,例如資料表。

角色的範圍為整個資料庫叢集,且可將角色成員資格授予其他角色。
角色 定義的資料庫權限組合,可做為群組鏈結,並指派給資料庫使用者
admin/
SYSTEM 使用者
擁有最高存取層級的 Oracle 管理員使用者:
SYS
SYSTEM
cloudsqlsuperuser PostgreSQL 適用的 Cloud SQL 會提供預設的 postgres 使用者。這個使用者屬於 cloudsqlsuperuser 角色,並具有以下屬性 (權限):CREATEROLECREATEDBLOGIN

由於 PostgreSQL 適用的 Cloud SQL 是代管服務,因此會限制需要進階權限的特定系統程序和資料表存取權。因此,postgres 使用者沒有 SUPERUSERREPLICATION 屬性。您無法建立或存取具有 superuser 屬性的使用者。
字典/
中繼資料
Oracle 使用下列中繼資料表:

USER_TableName
ALL_TableName
DBA_TableName
字典/
中繼資料
PostgreSQL 適用的 Cloud SQL 使用 ANSI 標準的 INFORMATION_SCHEMA 提供字典和中繼資料資訊。
系統動態檢視畫面 Oracle 動態檢視畫面:
V$ViewName
system
dynamic views
PostgreSQL 適用的 Cloud SQL 提供下列動態統計資料檢視畫面:
pg_stat_ViewName
pg_statio_ViewName
tablespace Oracle 資料庫的主要邏輯儲存結構;每個表格空間可容納一或多個資料檔案。 tablespace 在 PostgreSQL 適用的 Cloud SQL 中,資料檔案會使用預先定義的目錄結構,一併儲存在資料庫叢集的資料目錄 PGDATA 中。PostgreSQL 適用的 Cloud SQL 中的檔案區域提供機制,可在檔案系統中定義可儲存資料檔案的自訂位置。

由於 PostgreSQL 適用的 Cloud SQL 是代管服務, Google Cloud會為您管理主機電腦的底層檔案系統。您無法在 PostgreSQL 適用的 Cloud SQL 上建立新的資料表空間。
資料檔案 Oracle 資料庫的物理元素
,可用於儲存資料,並在特定的資料表空間下定義。

單一資料檔案的初始大小和最大大小已定義,且可儲存多個資料表的資料。

Oracle 資料檔案使用 .dbf 後置字元 (非必要)。
資料檔案 PostgreSQL 適用的 Cloud SQL 會將每個資料庫儲存在資料庫叢集中,而叢集會位於各自的子目錄中。資料庫中的每個資料表和索引都會儲存在該子目錄中的個別檔案中。
系統表空間 包含整個 Oracle 資料庫的資料字典資料表和檢視物件。 不存在 資料字典表格和檢視物件會使用預先定義的目錄結構,儲存在資料庫叢集資料目錄 PGDATAINFORMATION_SCHEMA 中。
臨時表格空間 包含在工作階段期間有效的架構物件;此外,
支援無法在伺服器記憶體中執行的運算。
臨時檔案 暫存檔案用於儲存無法放入伺服器記憶體的執行作業。這些檔案會儲存在名為 pgsql_tmp 的目錄中,且只會在執行 SQL 陳述式時建立。
復原資料表空間 特殊類型的系統永久表空間,Oracle 會在自動復原管理模式 (預設) 下執行資料庫時,使用此類型管理回溯作業。
不存在 為允許回溯作業,PostgreSQL 適用的 Cloud SQL 會保留在表格資料檔案中更新或刪除的資料列。真空處理是指回復或重複使用已更新或刪除資料列所占用的磁碟空間的程序。
ASM Oracle 自動儲存空間管理系統是整合式高效能資料庫檔案系統和磁碟管理員,由使用 ASM 設定的 Oracle 資料庫自動執行。 不支援 PostgreSQL 適用的 Cloud SQL 會使用 OS 檔案系統儲存資料檔案,且沒有 Oracle ASM 的等價項目。不過,PostgreSQL 適用的 Cloud SQL 支援許多提供儲存空間自動化功能的功能,例如自動增加儲存空間、效能和可擴充性。
tables/views 使用者建立的基本資料庫物件。 tables/views 與 Oracle 相同。
具體化檢視表 使用
特定 SQL 陳述式定義,可根據特定設定手動或自動重新整理。
具體化檢視表 具體化檢視表的運作方式與 Oracle 相似。這些資料會使用 REFRESH MATERIALIZED VIEW 陳述式手動重新整理。
序列 Oracle 專屬值產生器。 序列 與 Oracle 類似。
同義詞 Oracle 資料庫物件,可做為其他資料庫物件的替代 ID。 不支援 PostgreSQL 適用的 Cloud SQL 不提供同義字。如要解決這個問題,您可以在設定適當權限的同時使用檢視畫面。
分割 Oracle 提供許多分割解決方案,可將大型資料表拆分為較小的可管理區塊。 分割 PostgreSQL 適用的 Cloud SQL 支援 Oracle 式宣告式分割作業和使用繼承功能的分割作業,可提供更彈性的分割作業。
Flashback 資料庫 Oracle 專屬功能,可用於將 Oracle 資料庫初始化至先前定義的時間,讓您查詢或還原不小心修改或損壞的資料。 不支援 如要採用其他解決方案,您可以使用 Cloud SQL 備份和時間點復原功能,將資料庫還原至先前的狀態 (例如,在表格刪除前還原資料庫)。
sqlplus Oracle 指令列介面,可讓您查詢及管理資料庫執行個體。 psql 可用於查詢及管理的 PostgreSQL 適用 Cloud SQL 等效指令列介面。可透過具有適當 Cloud SQL 存取權的任何用戶端連線。
PL/SQL Oracle 將程序語言擴充為 ANSI SQL。 PL/pgSQL PostgreSQL 適用的 Cloud SQL 有自己的程序語言,稱為 PL/pgSQL,在許多方面與 Oracle 的 PL/SQL 相似。如要瞭解這兩種語言之間的主要差異,請參閱「從 Oracle PL/SQL 移植」一文。
package 和 package body Oracle 專屬功能,可將儲存程序和函式分組至相同的邏輯參照。 不支援 PostgreSQL 適用的 Cloud SQL 會使用結構定義來整理函式。
預存程序和函式 使用 PL/SQL 實作程式碼功能。 預存程序和函式 PostgreSQL 適用的 Cloud SQL 支援使用各種程式設計語言 (例如 PL/pgSQL 和 C) 實作儲存程序和函式。
trigger Oracle 物件,用於控制資料表的 DML 實作。 trigger 與 Oracle 類似。
PFILE/SPFILE Oracle 例項和資料庫層級參數會儲存在名為 SPFILE 的二進位檔案中 (在先前版本中,該檔案名為 PFILE),可用作手動設定參數的文字檔。 Cloud SQL for PostgreSQL 資料庫旗標 您可以透過資料庫旗標公用程式設定或修改 PostgreSQL 適用的 Cloud SQL 參數。
SGA/PGA/
AMM
控制資料庫執行個體記憶體配置的 Oracle 記憶體參數。 各種記憶體相關參數 PostgreSQL 適用的 Cloud SQL 有其專屬的記憶體參數。一些類似的參數包括 shared_bufferstemp_bufferswork_mem。在 PostgreSQL 適用的 Cloud SQL 中,這些參數是由所選的執行個體類型預先定義,且值會隨之變更。您可以使用資料庫旗標公用程式調整部分參數
緩衝快取 從緩衝區快取中擷取快取資料,藉此減少 SQL I/O 作業。您可以透過查詢提示,在資料庫層級和工作階段層級管理記憶體參數。 類似功能 PostgreSQL 適用的 Cloud SQL 緩衝區快取大小由 shared_buffer 參數控制,但該參數並未在 Cloud SQL 中公開。Cloud SQL 提供記憶體用量指標,可用來調整執行個體的大小。
資料庫提示 Oracle 可控管 SQL 陳述式對最佳化器行為的影響,進而提升效能。Oracle 有超過 50 種不同的資料庫提示。 不支援 PostgreSQL 適用的 Cloud SQL 不支援資料庫提示。您可以使用明確的 JOIN 語法,在一定程度上控制 PostgreSQL 適用的 Cloud SQL 的查詢規劃工具。
RMAN Oracle Recovery Manager 公用程式。用於備份資料庫,並提供擴充功能,以支援多種災難復原情境和其他功能 (複製等)。 PostgreSQL 適用的 Cloud SQL 備份 PostgreSQL 適用的 Cloud SQL 提供兩種方法來套用完整的備份:隨選備份和自動備份。
資料傳輸
(EXPDP/
IMPDP)
Oracle 傾印產生公用程式,可用於許多功能,例如匯出/匯入、資料庫備份 (在結構定義或物件層級)、結構定義中繼資料、產生結構定義 SQL 檔案等。 PostgreSQL 適用的 Cloud SQL 匯出/匯入 PostgreSQL 適用的 Cloud SQL 提供兩種匯出/匯入格式,可用於從 Cloud Storage 儲存桶匯入或匯出資料:SQL 和 CSV。

此外,您也可以使用 pg_dump 等匯出/匯入公用程式,連線至資料庫執行個體。
SQL*Loader 這項工具可讓您從外部檔案 (例如文字檔、CSV 檔案等) 上傳資料。 psql \copy psql 用戶端中的 \copy 指令可讓您將文字、CSV 或二進位檔案 (Oracle 支援其他檔案格式) 載入至具有對應結構的資料庫資料表。
Data Guard 使用待命例項的 Oracle 災難復原解決方案,可讓使用者從待命例項執行 READ 作業。 PostgreSQL 適用的 Cloud SQL 高可用性和複寫功能 為了達成災難復原或高可用性,Cloud SQL for PostgreSQL 提供容錯備用資源架構,並使用讀取備用資源執行唯讀作業 (READ/WRITE 分離)。
Active Data Guard/
GoldenGate
Oracle 的主要複寫解決方案,可用於多種用途,例如備援 (DR)、唯讀執行個體、雙向複寫 (多主機)、資料倉儲等等。 PostgreSQL 適用的 Cloud SQL 唯讀備用資源 使用 PostgreSQL 適用的 Cloud SQL Read Replica 實作區隔讀取/寫入的叢集。目前不支援多主機設定,例如 GoldenGate 雙向複製或異質複製。
RAC Oracle Real Application Cluster。Oracle 專屬分群法解決方案,可透過單一儲存空間部署多個資料庫執行個體,提供高可用性。 不支援 PostgreSQL 適用的 Cloud SQL 不支援多主架構。PostgreSQL 適用的 Cloud SQL 確實會透過待命執行個體提供高可用性,並透過唯讀備用資源提升讀取擴充性。
電網/雲端控制 (原始設備製造商) Oracle 軟體,可用於以網頁應用程式格式管理及監控資料庫和其他相關服務。這項工具可用於即時資料庫分析,以瞭解高工作負載。 Google Cloud 控制台
Cloud Monitoring
使用 PostgreSQL 適用的 Cloud SQL 進行監控,包括詳細的時間和資源圖表。您也可以使用 Cloud Monitoring 儲存特定的 PostgreSQL 適用 Cloud SQL 監控指標和記錄分析資料,以便使用進階監控功能。
重做記錄 Oracle 交易記錄,由兩個或多個預先配置的定義檔案組成,可儲存所有資料修改作業。重做記錄的主要用途,是在執行個體發生故障時保護資料庫。 WAL 記錄檔 PostgreSQL 適用的 Cloud SQL 會使用Write-Ahead Logging (WAL),將資料檔案的變更內容刷新至永久性儲存空間,以便進行當機復原。
封存記錄檔 封存記錄可支援備份和複製作業等功能。在每次重做記錄切換作業後,Oracle 會寫入封存記錄 (如果已啟用)。 WAL 封存 PostgreSQL 適用的 Cloud SQL 實作 WAL 記錄保留功能。使用及啟用 WAL 封存功能,搭配時間點復原功能。
控制檔案 Oracle 控制檔案會保留資料庫相關資訊,例如資料檔案、重做記錄檔名稱、位置、目前記錄序號,以及執行個體檢查點的相關資訊。 PGDATA and pg_control PostgreSQL 適用的 Cloud SQL 架構不提供與 Oracle 控制檔案等同的概念。資料庫相關檔案會整理在通常稱為 PGDATA 的目錄中。與記錄和檢查點相關的 WAL 資訊會儲存在 pg_control 中。
系統變更編號 (SCN) SCN 會標示 Oracle 資料庫中的特定時間點。 記錄序號 (LSN) PostgreSQL 適用的 Cloud SQL 的等價項目是 LSN。與 SCN 一樣,LSN 也會隨著時間單調增加。
AWR Oracle AWR (自動工作負載存放區) 是一份詳細報表,可提供 Oracle 資料庫執行個體效能相關詳細資訊,並被視為用於效能診斷的 DBA 工具。 統計資料收集器 PostgreSQL 適用的 Cloud SQL 沒有與 Oracle AWR 等同的報表,但 PostgreSQL 會收集由統計資料收集器收集到的效能資料。收集到的統計資料會透過 pg_stat_*pg_statio_* 檢視畫面顯示。
DBMS_SCHEDULER Oracle 公用程式,用於設定及計時預先定義的作業 不支援 PostgreSQL 適用的 Cloud SQL 不提供內建排程公用程式。

Google Cloud 提供 Cloud Scheduler,可讓您排定資料庫工作,例如匯出作業。
透明資料加密 將儲存在磁碟上的資料加密,以便提供靜態資料保護機制。 Cloud SQL 進階加密標準 PostgreSQL 適用的 Cloud SQL 使用 256 位元高級加密標準 (AES-256),保護靜態資料和傳輸中的資料。
進階壓縮 為改善資料庫儲存空間、降低儲存空間費用,並提升資料庫效能,Oracle 提供資料 (資料表/索引) 進階壓縮功能。 TOAST 雖然無法直接與 Oracle 進階壓縮功能相提並論,但 PostgreSQL 適用的 Cloud SQL 會使用名為 TOAST 的基礎架構,自動且透明地壓縮長度不定的資料,因為這類資料太大,無法放入單一資料頁面。
SQL Developer Oracle 免費的 SQL GUI,可用於管理及執行 SQL 和 PL/SQL 陳述式。 pgAdmin PostgreSQL 適用的 Cloud SQL 免費 SQL GUI,可用於管理及執行 SQL 和 PostgreSQL 程式碼陳述式。
快訊記錄 Oracle 的主要記錄,用於記錄一般資料庫作業和錯誤。 PostgreSQL 錯誤回報和記錄 使用 Cloud Logging 的記錄檢視器檢查 PostgreSQL 錯誤記錄。
DUAL 資料表 Oracle 特殊資料表,用於擷取 SYSDATEUSER 等虛擬資料欄值。 不存在 PostgreSQL 適用的 Cloud SQL 允許在 SQL 陳述式中省略 FROM 子句。例如:

SELECT NOW();
是 PostgreSQL 中的有效陳述式。
外部資料表 Oracle 可讓使用者建立外部資料表,在資料庫外部的檔案中提供來源資料。 不支援 由於 PostgreSQL 適用的 Cloud SQL 是一種代管服務,因此不會公開執行資料庫執行個體的主機的基礎檔案系統。

解決方法是將來源資料匯入 PostgreSQL 表格,以便查詢資料。
Listener Oracle 網路程序,負責監聽傳入的資料庫連線。 Cloud SQL 授權網路 在 Cloud SQL 授權網路設定頁面中允許後,Cloud SQL for PostgreSQL 就會接受來自遠端來源的連線。
TNSNAMES Oracle 網路設定檔,定義資料庫位址,以便透過連線別名建立連線。 不存在 PostgreSQL 適用的 Cloud SQL 會接受使用 Cloud SQL 執行個體連線名稱或私人/公開IP 位址的外部連線。Cloud SQL Proxy 是另一種安全存取方法,可連線至 PostgreSQL 適用的 Cloud SQL,而不需要允許特定 IP 位址或設定 SSL。
執行個體的預設通訊埠 1521 執行個體的預設通訊埠 5432
資料庫連結 Oracle 結構定義物件,可用於與本機/遠端資料庫物件互動。 外部資料包裝函式 (FDW) Cloud SQL for PostgreSQL 中的 postgres_fdw 擴充功能可讓其他 (「外部」) PostgreSQL 資料庫中的資料表,在目前資料庫中顯示為「外部」資料表。這些資料表就會可供使用,幾乎就像是本機資料表一樣。

Oracle 12c 和 PostgreSQL 適用的 Cloud SQL 之間的用語差異

Oracle 12c 說明 PostgreSQL 適用的 Cloud SQL 主要差異
執行個體 Oracle 12c 推出的多租用戶功能可讓執行個體以可插入式資料庫 (PDB) 的形式儲存多個資料庫,這與 Oracle 11g 不同,後者僅能主機代管單一資料庫。 執行個體 一個 PostgreSQL 適用的 Cloud SQL 執行個體只能容納一個資料庫叢集。資料庫叢集是指儲存在共用資料區的資料庫集合。
CDB 多租戶容器資料庫 (CDB) 可支援一或多個 PDB,同時可建立 CDB 全域物件 (影響所有 PDB),例如角色。 PostgreSQL 執行個體 PostgreSQL 適用的 Cloud SQL 執行個體可與 Oracle CDB 相提並論。兩者都為代管資料庫提供系統層。
PDB PDB (可插入式資料庫) 可用於隔離服務和應用程式,並可做為可攜式結構定義集合。 PostgreSQL 資料庫/
schemas
PostgreSQL 適用的 Cloud SQL 資料庫可為多項服務、應用程式和許多資料庫使用者提供服務。
工作階段序列 從 Oracle 12c 開始,您可以在工作階段層級 (只會在工作階段內傳回唯一值) 或全域層級 (例如使用暫存資料表時) 建立序號。 暫時序列 系統會為目前的資料庫工作階段建立臨時序列,並在工作階段結束時自動捨棄。
身分識別欄 Oracle 12c IDENTITY 類型會產生序列,並將其與資料表欄建立關聯,而不需要手動建立個別的序列物件。 SERIAL 欄 只要將資料欄的資料類型定義為 SERIAL,Cloud SQL for PostgreSQL 就會自動建立序列,並在資料表中插入新資料列時,使用該序列填入資料欄值。
資料分割 Oracle 分割是一種解決方案,可將一個 Oracle 資料庫分割成多個較小的資料庫 (分割區),以便為 OLTP 環境提供可擴充性、可用性和地理分布。 不支援 (做為功能) PostgreSQL 適用的 Cloud SQL 沒有等同的區塊功能。您可以使用 PostgreSQL 適用的 Cloud SQL (做為資料平台) 搭配支援的應用程式層,實作區塊劃分。
記憶體內建資料庫 Oracle 提供一系列功能,可改善 OLTP 和混合工作負載的資料庫效能。 不支援 PostgreSQL 適用的 Cloud SQL 並未內建等同的功能。不過,您可以改用我們的 Memorystore 代管 Redis 服務。
遮蓋 作為 Oracle 進階安全性功能的一部分,遮蓋功能可執行資料欄遮蓋作業,防止使用者和應用程式擷取機密資料。 不支援 PostgreSQL 適用的 Cloud SQL 並未內建等同的功能。不過,您可以利用 Sensitive Data Protection 去識別機密資料。

功能

雖然 Oracle 11g/12c 和 PostgreSQL 適用的 Cloud SQL 資料庫是採用不同的架構 (基礎架構和擴充程序語言) 建構,但兩者都具備關聯式資料庫系統的基本要素。這些資源支援資料庫物件、多使用者並行工作負載,以及具備 ACID 屬性的交易。它們也會根據應用程式需求,以多層級隔離機制管理鎖定爭用情形,並滿足線上交易處理 (OLTP) 作業和線上分析處理 (OLAP) 的持續應用程式需求。

下一部分將概略說明 Oracle 與 PostgreSQL 適用的 Cloud SQL 之間的主要功能差異。在某些情況下,如果認為有必要強調差異,這個部分會提供詳細的技術比較。

建立及查看現有資料庫

Oracle 11g/12c PostgreSQL 適用的 Cloud SQL 12
您通常會使用 Oracle 資料庫建立輔助程式 (DBCA) 公用程式建立資料庫,並查看現有資料庫。手動建立的資料庫或執行個體需要指定其他參數:

SQL> CREATE DATABASE ORADB
USER SYS IDENTIFIED BY password
USER SYSTEM IDENTIFIED BY password
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;
使用 CREATE DATABASE Name; 形式的陳述式,如以下範例所示:

postgres=> CREATE DATABASE PGSQLDB;
Oracle 12c PostgreSQL 適用的 Cloud SQL 12
在 Oracle 12c 中,您可以從種子建立 PDB,方法是從容器資料庫 (CDB) 範本或現有 PDB 的複本。您使用了多個參數:

SQL> CREATE PLUGGABLE DATABASE PDB
ADMIN USER usr IDENTIFIED BY passwd
ROLES = (dba)
DEFAULT TABLESPACE sales
DATAFILE '/disk1/ora/dbs/db/db.dbf'
SIZE 250M AUTOEXTEND ON
FILE_NAME_CONVERT =
('/disk1/oracle/dbs/pdbseed/',
'/disk1/oracle/dbs/salespdb/')
STORAGE (MAXSIZE 2G)
PATH_PREFIX =
'/disk1/oracle/dbs/salespdb/';
使用 CREATE DATABASE Name; 形式的陳述式,如以下範例所示:

postgres=> CREATE DATABASE PGSQLDB;
列出所有 PDB:

SQL> SHOW is PDBS;
列出所有現有資料庫:

postgres=> \list
連線至其他 PDB:

SQL> ALTER SESSION SET CONTAINER=pdb;
連線至其他資料庫:

postgres=> \connect databaseName;
或:

postgres=> \c databaseName
開啟或關閉特定 PDB (開啟/唯讀):

SQL> ALTER PLUGGABLE DATABASE pdb CLOSE;
不支援單一資料庫。

所有資料庫都位於同一個 PostgreSQL 適用的 Cloud SQL 執行個體中,因此所有資料庫都會一併啟用或關閉。

透過 Google Cloud 控制台管理資料庫

  • 在 Google Cloud 控制台中,依序前往「資料庫」>「SQL」>「Instance」>「Instance」> (選取 PostgreSQL 執行個體)>「資料庫」

    透過 Google Cloud 控制台管理資料庫。

資料字典和動態檢視畫面

Oracle 資料庫會提供資料字典和動態效能檢視畫面 (V$ 檢視畫面),方便執行各種資料庫維護和監控工作。資料字典會儲存用於管理資料庫中物件的所有資訊,而動態成效檢視畫面則包含許多與資料庫效能相關的資訊。這些檢視畫面會在資料庫執行期間持續更新。

相較之下,PostgreSQL 提供多個中繼資料目錄,用途與 Oracle 資料字典和動態效能檢視畫面相似:

  • 系統目錄:所有資料庫物件相關的中繼資料。
  • 統計資料收集檢視畫面:回報 PostgreSQL 的活動。
  • 資訊結構定義檢視畫面:根據 ANSI SQL 標準回報的所有資料庫物件中繼資料。

查看中繼資料和系統動態檢視畫面

本節將概略說明 Oracle 中使用的幾個最常見的結構描述資料表和系統動態檢視畫面,以及這些資料表和檢視畫面在 Cloud SQL for PostgreSQL 12 中的對應資料庫物件。

Oracle 提供數百個系統中繼資料表和檢視畫面 (在特定系統結構定義中,例如 SYSSYSTEM),而 PostgreSQL 僅提供數十個。每個情況都可能有一個以上的資料庫物件,用於特定用途。

Oracle 提供多個層級的中繼資料物件,每個層級都需要不同的權限:

  • USER_TableName:使用者可看見。
  • ALL_TableName:所有使用者均可查看。
  • DBA_TableName:只有具備 DBA 權限的使用者 (例如 SYSSYSTEM) 才能查看。

針對動態成效檢視畫面,Oracle 會使用 V$/GV$ 前置字串。相較之下,PostgreSQL 適用的 Cloud SQL 中繼資料和檢視會位於 information_schemapg_catalog 結構定義中。

中繼資料類型 Oracle 資料表/檢視畫面 PostgreSQL 適用的 Cloud SQL 資料表/檢視畫面/查詢
開啟工作階段 V$SESSION pg_catalog.pg_stat_activity
執行交易 V$TRANSACTION 不支援。為解決這個問題,pg_locks 會提供一份開放交易清單,其中包含一或多個鎖定。
資料庫物件 DBA_OBJECTS pg_catalog.pg_class
Tables DBA_TABLES pg_catalog.pg_tables
資料表欄 DBA_TAB_COLUMNS pg_catalog.pg_attribute
資料表和資料欄權限 TABLE_PRIVILEGES
DBA_COL_PRIVS ROLE_TAB_PRIVS
information_schema.table_privileges information_schema.column_privileges
分區 DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS pg_catalog.pg_partitioned_table
觀看次數 DBA_VIEWS pg_catalog.pg_views
限制 DBA_CONSTRAINTS pg_catalog.pg_constraint
索引 DBA_INDEXES
DBA_PART_INDEXES
pg_catalog.pg_index
具體化檢視表 DBA_MVIEWS pg_catalog.pg_matviews
預存程序 DBA_PROCEDURES pg_catalog.pg_proc
儲存函式 DBA_PROCEDURES pg_catalog.pg_proc
觸發條件 DBA_TRIGGERS pg_catalog.pg_trigger
使用者 DBA_USERS pg_catalog.pg_user
使用者權限 DBA_SYS_PRIVS
DBA_ROLE_PRIVS
SESSION_PRIVS
pg_catalog.pg_roles
工作/
排程器
DBA_JOBS
DBA_JOBS_RUNNING
DBA_SCHEDULER_JOBS
DBA_SCHEDULER_JOB_LOG
不支援。
Tablespaces DBA_TABLESPACES pg_catalog.pg_tablespace
資料檔案 DBA_DATA_FILES 不支援。
同義詞 DBA_SYNONYMS 不支援。
序列 DBA_SEQUENCES pg_catalog.pg_sequence
資料庫連結 DBA_DB_LINKS pg_catalog.pg_foreign_server
統計資料 DBA_TAB_STATISTICS DBA_TAB_COL_STATISTICS DBA_SQLTUNE_STATISTICS DBA_CPU_USAGE_STATISTICS pg_catalog.pg_stats
pg_catalog.pg_statistic
pg_catalog.pg_stat_database
pg_catalog.pg_stat_all_tables
pg_catalog.pg_stat_all_indexes
pg_catalog.pg_statio_all_tables
pg_catalog.pg_statio_all_indexes
pg_catalog.pg_statio_all_sequences
智慧門鎖 DBA_LOCK
DBA_DDL_LOCKS
DBA_DML_LOCKS
V$SESSION_BLOCKERS
V$LOCKED_OBJECT
pg_catalog.pg_locks
資料庫參數 V$PARAMETER
V$NLS_PARAMETERS
SHOW PARAMETER <Param>

pg_catalog.pg_settings show
區隔 DBA_SEGMENTS 不支援。
角色 DBA_ROLES
DBA_ROLE_PRIVS
USER_ROLE_PRIVS
pg_catalog.pg_roles
工作階段記錄 V$ACTIVE_SESSION_HISTORY
DBA_HIST_*
不支援。
版本 V$VERSION select version();
等待事件 V$WAITCLASSMETRIC
V$WAITCLASSMETRIC_HISTORY
V$WAITSTAT
V$WAIT_CHAINS
不支援。
SQL 微調和
分析
V$SQL
V$SQLAREA
V$SESS_IO
V$SYSSTAT
V$STATNAME
V$OSSTAT
V$ACTIVE_SESSION_HISTORY
V$SESSION_WAIT
V$SESSION_WAIT_CLASS
V$SYSTEM_WAIT_CLASS
V$LATCH
V$SYS_OPTIMIZER_ENV
V$SQL_PLAN
V$SQL_PLAN_STATISTICS
不支援。
執行個體
記憶體調整
V$SGA V$SGASTAT V$SGAINFO V$SGA_CURRENT_RESIZE_OPS V$SGA_RESIZE_OPS V$SGA_DYNAMIC_COMPONENTS V$SGA_DYNAMIC_FREE_MEMORY V$PGASTAT 未內建於 PostgreSQL 適用的 Cloud SQL。使用 pg_buffercache 擴充功能,即時檢查共用緩衝區快取。

系統參數

您可以特別設定 Oracle 和 PostgreSQL 適用的 Cloud SQL 資料庫,以便在預設設定之外實現特定功能。如要變更 Oracle 中的設定參數,您必須具備特定管理權限 (主要是 SYS/SYSTEM 使用者權限)。

以下是使用 ALTER SYSTEM 陳述式變更 Oracle 設定的範例。在這個範例中,使用者只會在 spfile 設定層級變更「登入失敗的最大嘗試次數」參數 (修改內容僅在重新啟動後才會生效):

SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;

在下一個範例中,使用者要求查看 Oracle 參數值:

SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;

輸出結果會與下列內容相似:

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_max_failed_login_attempts        integer     2

Oracle 參數修改功能適用於三個範圍:

  • SPFILE:參數修改內容會寫入 Oracle spfile,且需要重新啟動執行個體,參數才會生效。
  • 記憶體:參數修改作業只會套用至記憶體層,且不允許變更靜態參數。
  • BOTH:參數修改會套用至伺服器參數檔案和執行個體記憶體,且不允許變更靜態參數。

PostgreSQL 適用的 Cloud SQL 設定標記

您可以使用 Google Cloud 控制台、gcloud CLI 或 CURL 中的設定旗標來修改 PostgreSQL 適用的 Cloud SQL 系統參數。請參閱 完整的所有參數清單,瞭解 Cloud SQL for PostgreSQL 支援哪些可變更的參數。

PostgreSQL 參數可分為以下幾個範圍:

  • 動態參數:可在執行期間變更。
  • 資料庫參數:僅適用於 PostgreSQL 執行個體中的特定資料庫。
  • 角色參數:僅套用至特定資料庫角色。
  • 靜態參數:必須重新啟動執行個體,設定才會生效。
  • 工作階段參數:只能在工作階段層級變更,且只適用於目前工作階段的生命週期,與其他工作階段分開。
  • 全域參數:會對所有目前和未來的工作階段產生全域影響。

變更 PostgreSQL 適用的 Cloud SQL 參數的範例

控制台

使用 Google Cloud 控制台啟用 log_connections 參數。

  1. 前往 Cloud Storage 的「編輯執行個體」頁面。

    前往「Instances」(執行個體)

  2. 在「標記」下方,按一下「新增項目」,然後搜尋 log_connections,如以下螢幕截圖所示。

    在控制台中啟用記錄連線。

gcloud

  • 使用 gcloud CLI 啟用 log_connections 參數:
gcloud sql instances patch INSTANCE_NAME \
    --database-flags log_connections=on

輸出內容如下:

WARNING: This patch modifies database flag values, which may require
your instance to be restarted. Check the list of supported flags -
/sql/docs/postgres/flags - to see if your
instance will be restarted when this patch is submitted.

Do you want to continue (Y/n)?

PostgreSQL 適用的 Cloud SQL

在工作階段層級設定 timezone。這項變更會持續套用至目前的工作階段,且只會在工作階段的生命週期內生效。

  1. 顯示 timezone 設定參數:

    postgres=> SHOW timezone;
    

    您會看到下列輸出內容,其中 timezoneset to UTC

     TimeZone
    ----------
     UTC
    (1 row)
    
  2. timezone 設為 UTC-9:

    postgres=> SET timezone='UTC-9';
    
  3. 顯示 timezone 設定參數:

    postgres> SHOW timezone;
    

    您會看到以下輸出內容,其中 timezone 已設為 UTC-9

     TimeZone
    ----------
     UTC-9
    (1 row)
    

交易和隔離等級

本節說明 Oracle 與 PostgreSQL 適用的 Cloud SQL 之間,在交易執行和隔離層級方面的主要差異。

修訂版本模式

Oracle 預設會以非自動修訂模式運作,在這種模式下,每個 DML 交易都必須使用 COMMIT/ROLLBACK 陳述式決定。Oracle 和 PostgreSQL 之間的一個基本差異,是 PostgreSQL 會在每個不遵循 START TRANSACTION (或 BEGIN) 的指令後,隱含地發出 COMMIT。其他資料庫引擎也稱此為自動提交。雖然系統預設會啟用自動提交功能,但您可以使用 SET AUTOCOMMIT OFF 在工作階段層級停用這項功能。

隔離層級

ANSI/ISO SQL 標準 (SQL:92) 定義了四個隔離層級。每個層級都提供不同的方法,用於處理資料庫交易的並行執行作業:

  • 讀取未提交:目前正在處理的交易可以查看其他交易所建立的未提交資料。如果執行回溯作業,所有資料都會還原為先前的狀態。
  • 已提交的讀取:交易只會看到已提交的資料變更,無法看到未提交的變更 (稱為「髒讀取」)。
  • 可重複讀取:只有在兩筆交易都發出 COMMIT 或都已回溯後,一筆交易才能查看另一筆交易所做的變更。
  • 可序列化:最嚴格的隔離等級。這個層級會鎖定所有存取的記錄,並鎖定資源,以免記錄附加到資料表。

交易隔離等級可管理其他執行中的交易所看到的變更資料可見度。此外,當多個並行交易存取相同資料時,所選的交易隔離層級會影響不同交易的互動方式。

Oracle 支援下列隔離層級:

  • Read Committed (預設)
  • Serializable
  • 唯讀 (不屬於 ANSI/ISO SQL 標準 (SQL:92) 的一部分)

Oracle MVCC (多版本並行控制):

  • Oracle 使用 MVCC 機制,在整個資料庫和所有工作階段中提供自動讀取一致性。
  • Oracle 會依據目前交易的系統變更編號 (SCN) 取得資料庫的一致性檢視畫面,因此,所有資料庫查詢只會傳回在執行查詢時,與 SCN 相關聯的已提交資料。
  • 隔離層級可在交易和工作階段層級變更。

以下是設定隔離層級的範例:

-- Transaction Level
SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> SET TRANSACTION READ ONLY;

-- Session Level
SQL> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SQL> ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;

PostgreSQL 適用的 Cloud SQL 支援 ANSI SQL:92 標準中指定的以下四個交易隔離層級

  • Read Uncommitted (等同於 Read Committed)
  • Read Committed (預設)
  • 可重複讀取
  • Serializable

PostgreSQL 適用的 Cloud SQL 預設隔離層級為 READ COMMITTED。這些隔離層級可在 SESSION 層級、TRANSACTION 層級和 INSTANCE 層級變更。

如要驗證 TRANSACTIONSESSION 層級的目前隔離層級,請使用下列陳述式:

postgres=> SELECT CURRENT_SETTING('TRANSACTION_ISOLATION');

輸出內容如下:

 current_setting
-----------------
 read committed
(1 row)

您可以修改隔離層級語法,如下所示:

SET [SESSION CHARACTERISTICS AS] TRANSACTION ISOLATION LEVEL [ REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]

您可以在 SESSION 層級修改隔離層級:

postgres=> SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- Verify

postgres=> SELECT CURRENT_SETTING('TRANSACTION_ISOLATION');

輸出內容如下:

 current_setting
-----------------
 repeatable read
(1 row)

INSTANCE 層級的隔離層級可透過資料庫標記 default_transaction_isolation 控制。您可以使用下列陳述式驗證這項資訊:

postgres=> SHOW DEFAULT_TRANSACTION_ISOLATION;

輸出內容如下:

 default_transaction_isolation
-------------------------------
 repeatable read
(1 row)

後續步驟