将 Oracle® 用户迁移到 Cloud SQL for PostgreSQL:安全、操作、监控和日志记录

本文档是系列文章中的一篇,该系列提供了有关规划和执行 Oracle® 11g/12c 数据库到 Cloud SQL for PostgreSQL 版本 12 的迁移的关键信息和指导。除了设置简介部分之外,本系列文章还包括以下部分:

安全

本部分提供有关加密、审核和访问权限控制的指南。

加密

Oracle 和 Cloud SQL for PostgreSQL 都提供数据加密机制,以在基本用户身份验证和用户权限管理之外增加额外的保护层。

静态加密

不通过网络传输的(存储的)数据称为“静态数据”。Oracle 提供 TDE(透明数据加密)机制,在操作系统级层添加一个额外的加密层。在 Cloud SQL 中,数据使用 256 位高级加密标准 (AES-256) 或更好的算法进行加密。这些数据密钥采用存储在一个安全密钥存储区中的主密钥进行加密,并会定期更改。如需详细了解静态加密,请参阅 Google Cloud 中的静态加密

传输加密

Oracle 为处理网络中的数据加密提供高级安全功能。如果数据移出不受 Google 或代表 Google 控制的物理边界,则 Cloud SQL 会在一个或多个网络层对传输中的所有数据进行加密和身份验证。如果传输中的数据位于物理边界内部,由 Google 或 Google 授权代理方掌控,我们通常会对这些数据进行身份验证,但默认情况下可能不会进行加密。您可以根据威胁模型选择要应用哪些额外的安全措施。例如,您可以为可用区内的 Cloud SQL 连接配置 SSL。如需了解传输加密,请参阅 Google Cloud 中的传输加密

审核

Oracle 提供了多种审核方法,例如标准审核和精细审核。而 Cloud SQL for PostgreSQL 中的审核可以通过下列方式完成:

  • pgAudit 扩展程序。记录和跟踪针对给定数据库实例执行的 SQL 操作。
  • Cloud Audit Logs。 审核在 Cloud SQL for PostgreSQL 实例上完成的管理和维护操作。

访问权限控制

像任何其他数据库连接一样,用户可以使用具有授权静态 IP 地址的 PostgreSQL 客户端,或使用 Cloud SQL 代理来连接到 Cloud SQL for PostgreSQL 实例。对于其他连接来源(如 App Engine 或 Compute Engine),用户拥有多个选项,例如使用 Cloud SQL 代理。如需详细了解这些选项,请参阅实例访问权限控制

Cloud SQL for PostgreSQL 与 Identity and Access Management (IAM) 集成,并提供一组预定义角色来帮助您控制对 Cloud SQL 资源的访问权限。这些角色允许 IAM 用户启动各种管理操作,例如实例重启、备份和故障切换。如需了解详情,请参阅项目访问权限控制

运维

本部分提供关于导出和导入操作、实例级备份和恢复以及用于只读操作和灾难恢复实现的备用实例的指南。

导出和导入

Oracle 执行逻辑导出和导入操作的主要方法是使用 EXPDP/IMPDP 命令的 Data Pump 实用程序(旧版 Oracle 导出/导入功能包含 exp/imp 命令)。Cloud SQL for PostgreSQL 等效命令是 pg_dumppg_restore 实用程序,它们会生成转储文件,然后在数据库或对象级层执行导入(包括仅导出和导入元数据)。

没有 Oracle DBMS_DATAPUMP 实用程序(应用 EXPDP/IMPDP 功能的 Oracle 方法直接与 DBMS_DATAPUMP 软件包交互)的直接对等的 Cloud SQL for PostgreSQL 解决方案。如需从 Oracle DBMS_DATAPUMP PL/SQL 代码进行转换,请使用其他代码(例如 Bash 和 Python)来实现逻辑元素,并使用 Cloud SQL for PostgreSQL 程序 pg_dumppg_restore 运行导出/导入操作。

Oracle SQL*Loader 可用于将外部文件加载到数据库表中。SQL*Loader 可以使用配置文件(称为“控制文件”),该文件保存 SQL*Loader 所使用的元数据,以确定应该如何解析数据并加载到 Oracle 数据库中。SQL*Loader 支持固定和可变源文件。

pg_dumppg_restore 实用程序在客户端级层运行,并远程连接到 Cloud SQL for PostgreSQL 实例。转储文件在客户端创建。如需将外部文件加载到 Cloud SQL for PostgreSQL,请在 psql 客户端界面中使用 COPY 命令,或使用 Dataflow 或 Dataproc。本部分主要介绍 Cloud SQL for PostgreSQL COPY 命令,该命令与 Oracle 的 SQL*Loader 实用程序更直接对等。

如需将更复杂的数据加载到 Cloud SQL for PostgreSQL 数据库中,请考虑使用 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 会输出脚本,其中包含重建类似于 pg_dump 的数据库所需的 SQL 命令。

用法

-- 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 是 Cloud SQL for PostgreSQL 的命令行界面。使用 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

Cloud SQL for PostgreSQL 导出/导入

以下文档链接说明了如何使用 gcloud CLI 与 Cloud SQL 实例和 Cloud Storage 进行交互,从而应用导出导入操作。

实例级备份和恢复

在 Cloud SQL 中,备份和恢复任务通过自动和按需数据库备份处理。

通过备份,您可以恢复 Cloud SQL 实例,从而恢复丢失的数据,或者在实例出现问题时恢复服务。如果实例包含您需要防止丢失或损坏的数据,建议您为这些实例启用自动备份。

您可以随时创建备份,如果您准备对数据库执行有风险的操作,或者您需要备份但不想等到备份时段再执行,这会非常有用。您可以为任何实例创建按需备份,无论实例是否启用了自动备份。

按需备份不像自动备份那样自动删除。此类备份会一直留存到您删除它们或其实例被删除为止。由于按需备份不会自动删除,因此如果您不删除此类备份,它们将对您的结算费用产生长期影响。

启用自动备份时,您需要指定 4 小时备份时段。备份会在此时段内启动。尽量将备份安排在实例活动最少的时候。如果自上次备份后您的数据未发生更改,则系统不会创建备份。

Cloud SQL 最多可为每个实例保留 7 个自动备份。备份所占用的存储空间按折扣费率计费,具体取决于存储备份的区域。如需详细了解价格列表,请参阅 Cloud SQL for PostgreSQL 价格

您可以使用 Cloud SQL for PostgreSQL 数据库实例来恢复到同一实例、覆盖现有数据或恢复到其他实例。启用自动备份选项后,Cloud SQL for PostgreSQL 还可让您将 PostgreSQL 数据库恢复到特定时间点

如需详细了解如何创建或管理按需备份和自动备份,请参阅创建和管理按需备份和自动备份

下表列出了 Oracle 中的常见备份和恢复操作,以及它们在 Cloud SQL for PostgreSQL 中的等效操作:

说明 Oracle (Recovery Manager - RMAN) Cloud SQL for PostgreSQL
计划的自动备份 创建 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) 解决方案。

Cloud SQL for PostgreSQL 使用备用实例来实现高可用性。通过磁盘级复制,此实例与主实例保持同步。与 Active Data Guard 不同,您无法读取或写入此实例。当主实例发生故障或无响应大约 60 秒时,主实例会自动故障切换到备用实例。角色交换和新的主实例接管将在在几秒钟内完成。

Cloud SQL for PostgreSQL 还提供读取副本以调节读取请求。它们旨在从主实例分流读取,不充当灾难恢复的备用实例。与备用实例不同,只读副本以异步方式与主实例保持同步。它们可以与主实例位于不同的可用区和不同的区域。您可以使用 Google Cloud 控制台或 gcloud CLI 创建只读副本。请注意,某些操作需要重新启动实例(例如,向现有主实例添加高可用性)。

日志记录和监控

主要依靠 Oracle 的提醒日志文件来识别常规系统事件和错误事件,从而了解任何 Oracle 数据库实例生命周期(主要是排查故障事件和错误事件)。

Oracle 提醒日志会显示以下方面的信息:

  • Oracle 数据库实例错误和警告(ORA- + 错误编号)。
  • Oracle 数据库实例启动和关停事件。
  • 与网络和连接相关的问题。
  • 数据库重做日志切换事件。
  • 可能会提及 Oracle 跟踪文件,其中有一个链接可用来了解关于特定数据库事件的其他详细信息。

Oracle 为 LISTENER、ASM 和 Enterprise Manager (OEM) 等不同的服务提供专用日志文件,但 Cloud SQL for PostgreSQL 中没有等效组件。

查看 Cloud SQL for PostgreSQL 操作日志

Cloud Logging 是查看 postgres.log(等效于 Oracle 中的 alert.log)中所有日志条目的主要平台。您可以按日志事件级别(例如“严重”“错误”或“警告”)进行过滤。您还可以设置活动时间范围和自由文本过滤。

在控制台中查看日志。

Cloud SQL for PostgreSQL 数据库实例监控

Oracle 的主界面监控信息中心是 OEM 和 Grid/Cloud Control 产品(例如 Top Activity Graphs)的一部分,对于会话或 SQL 语句级别的实时数据库实例监控非常有用。Cloud SQL for PostgreSQL 使用 Google Cloud 控制台提供类似的监控功能。您可以通过多个监控指标(例如 CPU 利用率、存储空间用量、内存用量、读取/写入操作次数、入站流量/出站流量字节数、活跃连接数等),查看 Cloud SQL for PostgreSQL 数据库实例的汇总信息。

Cloud Logging 支持 Cloud SQL for PostgreSQL 的其他监控指标。以下屏幕截图显示了过去 12 小时的 Cloud SQL for PostgreSQL 查询图表。

过去 12 小时的查询图表。

Cloud SQL for PostgreSQL 只读副本监控

您可以使用 Google Cloud 控制台监控指标(如前所述)监控只读副本,与监控主实例的方法相同。此外,还有一个专用于监控复制延迟的监控指标,它确定主实例与只读副本实例之间的延迟时间(以字节为单位),可通过 Google Cloud 控制台中的“只读副本实例概览”标签页进行监控。

您可以使用 gcloud CLI 检索复制状态

gcloud sql instances describe REPLICA_NAME

您还可以在 PostgreSQL 客户端中使用命令来监控复制,这将提供主数据库和备用数据库的状态。

您可以使用以下 SQL 语句来验证只读副本的状态:

postgres=> select * from pg_stat_replication;

Cloud SQL for PostgreSQL 监控

本部分介绍基本的 Cloud SQL for PostgreSQL 监控方法,这些方法被视为数据库管理员 (DBA)(如 Oracle 或 Cloud SQL for PostgreSQL)执行的例行任务。

会话监控

Oracle 会话监控通过查询被称为“V$”视图的动态性能视图来完成。V$SESSIONV$PROCESS 视图通常用于通过 SQL 语句来获取当前数据库活动的相关实时数据分析。您可以通过查询 pg_stat_activity 动态视图来监控会话活动:

postgres=> select * from pg_stat_activity;

长时间运行的事务监控

如需确定长时间运行的查询,您可以对 pg_stat_activity 动态视图中的 query_startstate 等列应用适当的过滤条件。

锁定监控

您可以使用 pg_locks 动态视图来监控数据库锁定情况,该视图提供有关可能导致性能问题的锁定出现次数的实时信息。

后续步骤