本文档风哥主要介绍Oracle数据库迁移到AWS RDS相关知识,包括AWS RDS的概念、特性、迁移策略、迁移方法、配置和监控等内容,由风哥教程参考Oracle官方文档Install and
Upgrade内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 AWS RDS概念
AWS RDS (Relational Database Service) 是Amazon Web Services提供的托管关系型数据库服务,支持Oracle、MySQL、PostgreSQL、SQL
Server等多种数据库引擎。RDS for Oracle提供了完全托管的Oracle数据库环境,简化了数据库部署、管理和扩展。更多视频教程www.fgedu.net.cn
- 完全托管:AWS负责硬件、操作系统、数据库补丁
- 自动备份:支持自动备份和手动快照
- 高可用性:支持Multi-AZ部署
- 可扩展性:支持存储和计算独立扩展
- 安全合规:支持加密和合规认证
1.2 AWS RDS特性
AWS RDS for Oracle提供的主要特性:
- 自动备份:支持每日自动备份,保留期可达35天
- 快照:支持手动快照创建和管理
- Multi-AZ:支持跨可用区高可用部署
- 只读副本:支持创建只读副本进行读扩展
- 加密:支持静态加密和传输加密
- 监控:集成CloudWatch监控
- 参数组:支持自定义数据库参数
特性 | 单实例部署 | Multi-AZ部署 | 只读副本
————————|—————|—————|—————
高可用性 | 低 | 高 | 中
自动故障转移 | 否 | 是 | 否
数据同步 | N/A | 同步复制 | 异步复制
读扩展 | 否 | 否 | 是
成本 | 低 | 高 | 中
适用场景 | 开发测试 | 生产环境 | 读密集型应用
1.3 AWS RDS版本支持
AWS RDS for Oracle支持的版本:
- Oracle 19c:长期支持版本,推荐使用
- Oracle 21c:创新版本,新特性支持
- Oracle 12c R2:仍支持但建议升级
Part02-生产环境规划与建议
2.1 RDS迁移规划
Oracle迁移到AWS RDS的规划要点:
# 1. 评估阶段
– 当前数据库版本和补丁级别
– 数据库大小和增长趋势
– 性能基线和资源需求
– 依赖关系和连接的应用
– 备份和恢复要求
– 安全合规要求
# 2. 设计阶段
– 选择RDS实例类型和规格
– 确定存储类型和容量
– 选择部署模式(单实例/Multi-AZ)
– 设计网络架构(VPC、子网、安全组)
– 规划备份策略
– 设计监控方案
# 3. 准备阶段
– 创建AWS账户和IAM角色
– 配置VPC和网络
– 准备迁移工具
– 测试连接和权限
– 制定回滚计划
# 4. 实施阶段
– 创建RDS实例
– 执行数据迁移
– 配置应用连接
– 验证数据完整性
– 切换流量
# 5. 优化阶段
– 性能调优
– 成本优化
– 监控完善
– 文档更新
2.2 RDS迁移策略
Oracle迁移到AWS RDS的策略选择:
- Data Pump迁移:适合中小型数据库
- AWS DMS迁移:支持同构和异构迁移
- RMAN备份恢复:适合大型数据库
- GoldenGate复制:支持零停机迁移
数据库大小 | 停机时间要求 | 推荐策略
——————|—————–|——————
< 100GB | 可接受数小时 | Data Pump 100GB - 1TB | 可接受数小时 | AWS DMS 1TB - 10TB | 要求分钟级 | RMAN + DMS> 10TB | 要求零停机 |
GoldenGate
# 策略详细说明
1. Data Pump迁移
– 适用:小型数据库,简单架构
– 优点:简单易用,成本低
– 缺点:需要停机时间
– 工具:expdp/impdp
2. AWS DMS迁移
– 适用:中大型数据库
– 优点:支持持续复制,减少停机
– 缺点:需要配置复制实例
– 工具:AWS DMS控制台/CLI
3. RMAN备份恢复
– 适用:大型数据库
– 优点:迁移速度快
– 缺点:需要S3存储,配置复杂
– 工具:RMAN, AWS CLI
4. GoldenGate复制
– 适用:超大型数据库,零停机要求
– 优点:实时复制,零停机
– 缺点:成本高,配置复杂
– 工具:Oracle GoldenGate
2.3 RDS迁移注意事项
Oracle迁移到AWS RDS的注意事项:
- 功能限制:RDS不支持某些Oracle特性如RAC、Data Guard
- 权限限制:SYSDBA访问受限,某些操作需要RDS特定方式
- 存储过程:UTL_FILE等包需要特殊配置
- 字符集:迁移前确认字符集兼容性
- 时区:配置正确的时区设置
Part03-生产环境项目实施方案
3.1 RDS迁移方法
3.1.1 使用AWS DMS迁移
$ aws rds create-db-instance \
–db-instance-identifier oracle-prod \
–db-instance-class db.m5.xlarge \
–engine oracle-ee \
–master-username admin \
–master-user-password MySecurePassword123 \
–allocated-storage 500 \
–vpc-security-group-ids sg-12345678 \
–db-subnet-group-name my-subnet-group \
–backup-retention-period 7 \
–multi-az \
–storage-encrypted \
–kms-key-id alias/aws/rds
{
“DBInstance”: {
“DBInstanceIdentifier”: “oracle-prod”,
“DBInstanceClass”: “db.m5.xlarge”,
“Engine”: “oracle-ee”,
“DBInstanceStatus”: “creating”,
“MasterUsername”: “admin”,
“AllocatedStorage”: 500,
“PreferredBackupWindow”: “03:00-04:00”,
“BackupRetentionPeriod”: 7,
“DBSecurityGroups”: [],
“VpcSecurityGroups”: [
{
“VpcSecurityGroupId”: “sg-12345678”,
“Status”: “active”
}
],
“DBParameterGroups”: [
{
“DBParameterGroupName”: “default.oracle-ee-19”,
“ParameterApplyStatus”: “in-sync”
}
],
“AvailabilityZone”: “us-east-1a”,
“DBSubnetGroup”: {
“DBSubnetGroupName”: “my-subnet-group”,
“DBSubnetGroupDescription”: “My subnet group”,
“VpcId”: “vpc-12345678”,
“SubnetGroupStatus”: “Complete”,
“Subnets”: [
{
“SubnetIdentifier”: “subnet-12345678”,
“SubnetAvailabilityZone”: {
“Name”: “us-east-1a”
},
“SubnetStatus”: “Active”
}
]
},
“PreferredMaintenanceWindow”: “mon:04:00-mon:05:00”,
“MultiAZ”: true,
“EngineVersion”: “19.0.0.0.ru-2021-10.rur-2021-10.r1”,
“AutoMinorVersionUpgrade”: true,
“ReadReplicaDBInstanceIdentifiers”: [],
“LicenseModel”: “bring-your-own-license”,
“OptionGroupMemberships”: [
{
“OptionGroupName”: “default:oracle-ee-19”,
“Status”: “in-sync”
}
],
“PubliclyAccessible”: false,
“StorageType”: “gp2”,
“DbInstancePort”: 0,
“StorageEncrypted”: true,
“KmsKeyId”: “arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012”,
“DbiResourceId”: “db-12345678901234567”,
“CACertificateIdentifier”: “rds-ca-2019”,
“DomainMemberships”: [],
“CopyTagsToSnapshot”: false,
“MonitoringInterval”: 0,
“DBInstanceArn”: “arn:aws:rds:us-east-1:123456789012:db:oracle-prod”,
“IAMDatabaseAuthenticationEnabled”: false,
“PerformanceInsightsEnabled”: false,
“DeletionProtection”: false,
“AssociatedRoles”: []
}
}
# 2. 创建DMS复制实例
$ aws dms create-replication-instance \
–replication-instance-identifier dms-replication-instance \
–replication-instance-class dms.c5.xlarge \
–allocated-storage 100 \
–vpc-security-group-ids sg-12345678 \
–replication-subnet-group-identifier dms-subnet-group \
–publicly-accessible false
{
“ReplicationInstance”: {
“ReplicationInstanceIdentifier”: “dms-replication-instance”,
“ReplicationInstanceClass”: “dms.c5.xlarge”,
“ReplicationInstanceStatus”: “creating”,
“AllocatedStorage”: 100,
“VpcSecurityGroups”: [
{
“VpcSecurityGroupId”: “sg-12345678”,
“Status”: “active”
}
],
“ReplicationSubnetGroup”: {
“ReplicationSubnetGroupIdentifier”: “dms-subnet-group”,
“ReplicationSubnetGroupDescription”: “DMS subnet group”,
“VpcId”: “vpc-12345678”,
“SubnetGroupStatus”: “Complete”,
“Subnets”: [
{
“SubnetIdentifier”: “subnet-12345678”,
“SubnetAvailabilityZone”: {
“Name”: “us-east-1a”
},
“SubnetStatus”: “Active”
}
]
},
“PreferredMaintenanceWindow”: “sun:03:00-sun:05:00”,
“PendingModifiedValues”: {},
“MultiAZ”: false,
“EngineVersion”: “3.4.6”,
“AutoMinorVersionUpgrade”: true,
“KmsKeyId”: “arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012”,
“ReplicationInstanceArn”: “arn:aws:dms:us-east-1:123456789012:rep:12345678901234567”,
“ReplicationInstancePrivateIpAddress”: “10.0.1.100”,
“PubliclyAccessible”: false
}
}
# 3. 创建源端点(本地Oracle)
$ aws dms create-endpoint \
–endpoint-identifier source-oracle \
–endpoint-type source \
–engine-name oracle \
–server-name 192.168.1.100 \
–port 1521 \
–database-name ORCL \
–username system \
–password LocalPassword123
{
“Endpoint”: {
“EndpointIdentifier”: “source-oracle”,
“EndpointType”: “source”,
“EngineName”: “oracle”,
“EngineDisplayName”: “Oracle”,
“Status”: “active”,
“ServerName”: “192.168.1.100”,
“Port”: 1521,
“DatabaseName”: “ORCL”,
“Username”: “system”,
“KmsKeyId”: “arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012”,
“EndpointArn”: “arn:aws:dms:us-east-1:123456789012:endpoint:12345678901234567”
}
}
# 4. 创建目标端点(RDS Oracle)
$ aws dms create-endpoint \
–endpoint-identifier target-rds-oracle \
–endpoint-type target \
–engine-name oracle \
–server-name oracle-prod.123456789012.us-east-1.rds.amazonaws.com \
–port 1521 \
–database-name ORCL \
–username admin \
–password MySecurePassword123
{
“Endpoint”: {
“EndpointIdentifier”: “target-rds-oracle”,
“EndpointType”: “target”,
“EngineName”: “oracle”,
“EngineDisplayName”: “Oracle”,
“Status”: “active”,
“ServerName”: “oracle-prod.123456789012.us-east-1.rds.amazonaws.com”,
“Port”: 1521,
“DatabaseName”: “ORCL”,
“Username”: “admin”,
“KmsKeyId”: “arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012”,
“EndpointArn”: “arn:aws:dms:us-east-1:123456789012:endpoint:76543210987654321”
}
}
# 5. 创建复制任务
$ aws dms create-replication-task \
–replication-task-identifier oracle-to-rds \
–source-endpoint-arn arn:aws:dms:us-east-1:123456789012:endpoint:12345678901234567 \
–target-endpoint-arn arn:aws:dms:us-east-1:123456789012:endpoint:76543210987654321 \
–replication-instance-arn arn:aws:dms:us-east-1:123456789012:rep:12345678901234567 \
–migration-type full-load-and-cdc \
–table-mappings ‘{“rules”: [{“rule-type”: “selection”, “rule-id”: “1”, “rule-name”: “1”, “object-locator”:
{“schema-name”: “%”, “table-name”: “%”}, “rule-action”: “include”}]}’
{
“ReplicationTask”: {
“ReplicationTaskIdentifier”: “oracle-to-rds”,
“SourceEndpointArn”: “arn:aws:dms:us-east-1:123456789012:endpoint:12345678901234567”,
“TargetEndpointArn”: “arn:aws:dms:us-east-1:123456789012:endpoint:76543210987654321”,
“ReplicationInstanceArn”: “arn:aws:dms:us-east-1:123456789012:rep:12345678901234567”,
“MigrationType”: “full-load-and-cdc”,
“Status”: “creating”,
“TableMappings”: “{\”rules\”: [{\”rule-type\”: \”selection\”, \”rule-id\”: \”1\”, \”rule-name\”: \”1\”,
\”object-locator\”: {\”schema-name\”: \”%\”, \”table-name\”: \”%\”}, \”rule-action\”: \”include\”}]}”,
“ReplicationTaskSettings”: “{\”TargetMetadata\”: {…}, \”Logging\”: {…}}”,
“ReplicationTaskArn”: “arn:aws:dms:us-east-1:123456789012:task:12345678901234567”
}
}
# 6. 启动复制任务
$ aws dms start-replication-task \
–replication-task-arn arn:aws:dms:us-east-1:123456789012:task:12345678901234567 \
–start-replication-task-type start-replication
{
“ReplicationTask”: {
“ReplicationTaskIdentifier”: “oracle-to-rds”,
“SourceEndpointArn”: “arn:aws:dms:us-east-1:123456789012:endpoint:12345678901234567”,
“TargetEndpointArn”: “arn:aws:dms:us-east-1:123456789012:endpoint:76543210987654321”,
“ReplicationInstanceArn”: “arn:aws:dms:us-east-1:123456789012:rep:12345678901234567”,
“MigrationType”: “full-load-and-cdc”,
“Status”: “starting”,
“ReplicationTaskArn”: “arn:aws:dms:us-east-1:123456789012:task:12345678901234567”
}
}
# 7. 监控迁移进度
$ aws dms describe-table-statistics \
–replication-task-arn arn:aws:dms:us-east-1:123456789012:task:12345678901234567
{
“TableStatistics”: [
{
“SchemaName”: “HR”,
“TableName”: “EMPLOYEES”,
“Inserts”: 107,
“Deletes”: 0,
“Updates”: 0,
“Ddls”: 0,
“FullLoadRows”: 107,
“FullLoadCondtnlChkFailedRows”: 0,
“FullLoadErrorRows”: 0,
“LastUpdateTime”: “2026-03-31T10:30:00.000Z”,
“TableState”: “Table completed”
},
{
“SchemaName”: “HR”,
“TableName”: “DEPARTMENTS”,
“Inserts”: 27,
“Deletes”: 0,
“Updates”: 0,
“Ddls”: 0,
“FullLoadRows”: 27,
“FullLoadCondtnlChkFailedRows”: 0,
“FullLoadErrorRows”: 0,
“LastUpdateTime”: “2026-03-31T10:30:05.000Z”,
“TableState”: “Table completed”
},
{
“SchemaName”: “OE”,
“TableName”: “ORDERS”,
“Inserts”: 105,
“Deletes”: 0,
“Updates”: 0,
“Ddls”: 0,
“FullLoadRows”: 105,
“FullLoadCondtnlChkFailedRows”: 0,
“FullLoadErrorRows”: 0,
“LastUpdateTime”: “2026-03-31T10:30:10.000Z”,
“TableState”: “Table completed”
}
]
}
3.1.2 使用Data Pump迁移
SQL> CREATE DIRECTORY datapump_dir AS ‘/oracle/app/oracle/datapump’;
Directory created.
SQL> GRANT READ, WRITE ON DIRECTORY datapump_dir TO system;
Grant succeeded.
# 2. 导出数据
$ expdp system/password DIRECTORY=datapump_dir DUMPFILE=hr_schema.dmp SCHEMAS=HR LOGFILE=hr_export.log
Export: Release 19.0.0.0.0 – Production on Tue Mar 31 10:00:00 2026
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.3.0.0.0 – Production
Starting “SYSTEM”.”SYS_EXPORT_SCHEMA_01″: system/******** DIRECTORY=datapump_dir DUMPFILE=hr_schema.dmp
SCHEMAS=HR LOGFILE=hr_export.log
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
. . exported “HR”.”EMPLOYEES” 17.08 KB 107 rows
. . exported “HR”.”DEPARTMENTS” 7.10 KB 27 rows
. . exported “HR”.”LOCATIONS” 8.38 KB 23 rows
. . exported “HR”.”JOBS” 7.25 KB 19 rows
. . exported “HR”.”JOB_HISTORY” 7.20 KB 10 rows
. . exported “HR”.”COUNTRIES” 6.36 KB 25 rows
. . exported “HR”.”REGIONS” 5.53 KB 4 rows
Master table “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/oracle/app/oracle/datapump/hr_schema.dmp
Job “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully completed at Tue Mar 31 10:05:00 2026 elapsed 0 00:05:00
# 3. 上传dump文件到S3
$ aws s3 cp /oracle/app/oracle/datapump/hr_schema.dmp s3://my-oracle-migration-bucket/dumps/
upload: ../../oracle/app/oracle/datapump/hr_schema.dmp to s3://my-oracle-migration-bucket/dumps/hr_schema.dmp
# 4. 在RDS中创建S3集成选项组
$ aws rds add-option-to-option-group \
–option-group-name oracle-s3-integration \
–option-name S3_INTEGRATION \
–vpc-security-group-memberships sg-12345678
{
“OptionGroup”: {
“OptionGroupName”: “oracle-s3-integration”,
“OptionGroupDescription”: “Oracle S3 integration option group”,
“EngineName”: “oracle-ee”,
“MajorEngineVersion”: “19”,
“Options”: [
{
“OptionName”: “S3_INTEGRATION”,
“OptionDescription”: “Oracle S3 Integration”,
“Persistent”: false,
“Permanent”: false,
“VpcSecurityGroupMemberships”: [
{
“VpcSecurityGroupId”: “sg-12345678”,
“Status”: “active”
}
],
“OptionVersion”: “1.0”
}
],
“AllowsVpcAndNonVpcInstanceMemberships”: false,
“VpcId”: “vpc-12345678”,
“OptionGroupArn”: “arn:aws:rds:us-east-1:123456789012:og:oracle-s3-integration”
}
}
# 5. 应用选项组到RDS实例
$ aws rds modify-db-instance \
–db-instance-identifier oracle-prod \
–option-group-name oracle-s3-integration \
–apply-immediately
{
“DBInstance”: {
“DBInstanceIdentifier”: “oracle-prod”,
“DBInstanceStatus”: “modifying”,
…
}
}
# 6. 在RDS中下载并导入数据
# 连接到RDS实例
$ sqlplus admin/MySecurePassword123@oracle-prod.123456789012.us-east-1.rds.amazonaws.com:1521/ORCL
SQL*Plus: Release 19.0.0.0.0 – Production on Tue Mar 31 10:15:00 2026
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
SQL> SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(
2 p_bucket_name => ‘my-oracle-migration-bucket’,
3 p_s3_prefix => ‘dumps/hr_schema.dmp’,
4 p_directory_name => ‘DATA_PUMP_DIR’
5 ) AS TASK_ID FROM DUAL;
TASK_ID
——————————————————————————–
12345678-1234-1234-1234-123456789012
SQL> SELECT text FROM
table(rdsadmin.rds_file_util.read_text_file(‘BDUMP’,’dbtask-12345678-1234-1234-1234-123456789012.log’));
TEXT
——————————————————————————–
2026-03-31 10:16:00.123 UTC [INFO] Starting download from S3
2026-03-31 10:16:05.456 UTC [INFO] Downloading dumps/hr_schema.dmp
2026-03-31 10:16:30.789 UTC [INFO] Download complete: 25MB in 25 seconds
2026-03-31 10:16:31.000 UTC [INFO] Task completed successfully
# 7. 导入数据
SQL> DECLARE
2 h1 NUMBER;
3 BEGIN
4 h1 := DBMS_DATAPUMP.OPEN(
5 operation => ‘IMPORT’,
6 job_mode => ‘SCHEMA’,
7 remote_link => NULL,
8 job_name => ‘IMPORT_HR_SCHEMA’,
9 version => ‘LATEST’
10 );
11 DBMS_DATAPUMP.ADD_FILE(
12 handle => h1,
13 filename => ‘hr_schema.dmp’,
14 directory => ‘DATA_PUMP_DIR’
15 );
16 DBMS_DATAPUMP.METADATA_FILTER(
17 handle => h1,
18 name => ‘SCHEMA_EXPR’,
19 value => ‘IN (”HR”)’
20 );
21 DBMS_DATAPUMP.START_JOB(handle => h1);
22 END;
23 /
PL/SQL procedure successfully completed.
# 8. 检查导入状态
SQL> SELECT owner_name, job_name, operation, job_mode, state FROM dba_datapump_jobs;
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE
———- ——————– ———– ———– ——————————
SYSTEM IMPORT_HR_SCHEMA IMPORT SCHEMA NOT RUNNING
SQL> SELECT text FROM table(rdsadmin.rds_file_util.read_text_file(‘BDUMP’,’IMPORT_HR_SCHEMA.log’));
TEXT
——————————————————————————–
Import: Release 19.0.0.0.0 – Production on Tue Mar 31 10:20:00 2026
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Master table “SYSTEM”.”IMPORT_HR_SCHEMA” successfully loaded/unloaded
Starting “SYSTEM”.”IMPORT_HR_SCHEMA”:
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported “HR”.”EMPLOYEES” 17.08 KB 107 rows
. . imported “HR”.”DEPARTMENTS” 7.10 KB 27 rows
. . imported “HR”.”LOCATIONS” 8.38 KB 23 rows
. . imported “HR”.”JOBS” 7.25 KB 19 rows
. . imported “HR”.”JOB_HISTORY” 7.20 KB 10 rows
. . imported “HR”.”COUNTRIES” 6.36 KB 25 rows
. . imported “HR”.”REGIONS” 5.53 KB 4 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Job “SYSTEM”.”IMPORT_HR_SCHEMA” successfully completed at Tue Mar 31 10:25:00 2026
3.2 RDS配置
3.2.1 参数组配置
$ aws rds create-db-parameter-group \
–db-parameter-group-name oracle-custom-params \
–db-parameter-group-family oracle-ee-19 \
–description “Custom Oracle parameters for production”
{
“DBParameterGroup”: {
“DBParameterGroupName”: “oracle-custom-params”,
“DBParameterGroupFamily”: “oracle-ee-19”,
“Description”: “Custom Oracle parameters for production”,
“DBParameterGroupArn”: “arn:aws:rds:us-east-1:123456789012:pg:oracle-custom-params”
}
}
# 修改参数
$ aws rds modify-db-parameter-group \
–db-parameter-group-name oracle-custom-params \
–parameters \
“ParameterName=open_cursors,ParameterValue=1000,ApplyMethod=immediate” \
“ParameterName=processes,ParameterValue=500,ApplyMethod=pending-reboot” \
“ParameterName=sessions,ParameterValue=550,ApplyMethod=pending-reboot” \
“ParameterName=db_block_size,ParameterValue=8192,ApplyMethod=pending-reboot” \
“ParameterName=db_cache_size,ParameterValue=2147483648,ApplyMethod=immediate” \
“ParameterName=shared_pool_size,ParameterValue=1073741824,ApplyMethod=immediate” \
“ParameterName=pga_aggregate_target,ParameterValue=1073741824,ApplyMethod=immediate” \
“ParameterName=undo_retention,ParameterValue=900,ApplyMethod=immediate” \
“ParameterName=audit_trail,ParameterValue=DB,ApplyMethod=pending-reboot” \
“ParameterName=sql92_security,ParameterValue=TRUE,ApplyMethod=pending-reboot”
{
“DBParameterGroupName”: “oracle-custom-params”
}
# 查看参数修改状态
$ aws rds describe-db-parameters \
–db-parameter-group-name oracle-custom-params \
–source user
{
“Parameters”: [
{
“ParameterName”: “open_cursors”,
“ParameterValue”: “1000”,
“Description”: “Max number of open cursors per session”,
“Source”: “user”,
“ApplyType”: “dynamic”,
“DataType”: “integer”,
“AllowedValues”: “50-65535”,
“IsModifiable”: true,
“MinimumEngineVersion”: “19.0.0.0”,
“ApplyMethod”: “immediate”
},
{
“ParameterName”: “processes”,
“ParameterValue”: “500”,
“Description”: “User processes”,
“Source”: “user”,
“ApplyType”: “static”,
“DataType”: “integer”,
“AllowedValues”: “40-65535”,
“IsModifiable”: true,
“MinimumEngineVersion”: “19.0.0.0”,
“ApplyMethod”: “pending-reboot”
}
]
}
# 应用参数组到RDS实例
$ aws rds modify-db-instance \
–db-instance-identifier oracle-prod \
–db-parameter-group-name oracle-custom-params \
–apply-immediately
{
“DBInstance”: {
“DBInstanceIdentifier”: “oracle-prod”,
“DBInstanceStatus”: “modifying”,
…
}
}
3.2.2 备份配置
$ aws rds modify-db-instance \
–db-instance-identifier oracle-prod \
–backup-retention-period 35 \
–preferred-backup-window “03:00-04:00” \
–preferred-maintenance-window “Mon:04:00-Mon:05:00” \
–apply-immediately
{
“DBInstance”: {
“DBInstanceIdentifier”: “oracle-prod”,
“BackupRetentionPeriod”: 35,
“PreferredBackupWindow”: “03:00-04:00”,
“PreferredMaintenanceWindow”: “mon:04:00-mon:05:00”,
…
}
}
# 创建手动快照
$ aws rds create-db-snapshot \
–db-instance-identifier oracle-prod \
–db-snapshot-identifier oracle-prod-snapshot-20260331
{
“DBSnapshot”: {
“DBSnapshotIdentifier”: “oracle-prod-snapshot-20260331”,
“DBInstanceIdentifier”: “oracle-prod”,
“SnapshotCreateTime”: “2026-03-31T10:30:00.000Z”,
“Engine”: “oracle-ee”,
“AllocatedStorage”: 500,
“Status”: “creating”,
“Port”: 1521,
“AvailabilityZone”: “us-east-1a”,
“VpcId”: “vpc-12345678”,
“InstanceCreateTime”: “2026-03-31T09:00:00.000Z”,
“MasterUsername”: “admin”,
“EngineVersion”: “19.0.0.0.ru-2021-10.rur-2021-10.r1”,
“LicenseModel”: “bring-your-own-license”,
“SnapshotType”: “manual”,
“OptionGroupName”: “default:oracle-ee-19”,
“PercentProgress”: 0,
“StorageType”: “gp2”,
“Encrypted”: true,
“KmsKeyId”: “arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012”,
“DBSnapshotArn”: “arn:aws:rds:us-east-1:123456789012:snapshot:oracle-prod-snapshot-20260331”,
“IAMDatabaseAuthenticationEnabled”: false,
“ProcessorFeatures”: [
{
“Name”: “coreCount”,
“Value”: “4”
},
{
“Name”: “threadsPerCore”,
“Value”: “2”
}
],
“DbiResourceId”: “db-12345678901234567”
}
}
# 查看快照状态
$ aws rds describe-db-snapshots \
–db-snapshot-identifier oracle-prod-snapshot-20260331
{
“DBSnapshots”: [
{
“DBSnapshotIdentifier”: “oracle-prod-snapshot-20260331”,
“DBInstanceIdentifier”: “oracle-prod”,
“SnapshotCreateTime”: “2026-03-31T10:30:00.000Z”,
“Engine”: “oracle-ee”,
“AllocatedStorage”: 500,
“Status”: “available”,
“Port”: 1521,
“AvailabilityZone”: “us-east-1a”,
“VpcId”: “vpc-12345678”,
“InstanceCreateTime”: “2026-03-31T09:00:00.000Z”,
“MasterUsername”: “admin”,
“EngineVersion”: “19.0.0.0.ru-2021-10.rur-2021-10.r1”,
“LicenseModel”: “bring-your-own-license”,
“SnapshotType”: “manual”,
“OptionGroupName”: “default:oracle-ee-19”,
“PercentProgress”: 100,
“StorageType”: “gp2”,
“Encrypted”: true,
“KmsKeyId”: “arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012”,
“DBSnapshotArn”: “arn:aws:rds:us-east-1:123456789012:snapshot:oracle-prod-snapshot-20260331”,
“IAMDatabaseAuthenticationEnabled”: false,
“ProcessorFeatures”: [
{
“Name”: “coreCount”,
“Value”: “4”
},
{
“Name”: “threadsPerCore”,
“Value”: “2”
}
],
“DbiResourceId”: “db-12345678901234567”
}
]
}
3.3 RDS监控
3.3.1 CloudWatch监控
$ aws cloudwatch get-metric-statistics \
–namespace AWS/RDS \
–metric-name CPUUtilization \
–dimensions Name=DBInstanceIdentifier,Value=oracle-prod \
–start-time 2026-03-31T09:00:00Z \
–end-time 2026-03-31T11:00:00Z \
–period 300 \
–statistics Average
{
“Datapoints”: [
{
“Timestamp”: “2026-03-31T09:00:00Z”,
“Average”: 15.2,
“Unit”: “Percent”
},
{
“Timestamp”: “2026-03-31T09:05:00Z”,
“Average”: 18.5,
“Unit”: “Percent”
},
{
“Timestamp”: “2026-03-31T09:10:00Z”,
“Average”: 22.1,
“Unit”: “Percent”
},
{
“Timestamp”: “2026-03-31T09:15:00Z”,
“Average”: 19.8,
“Unit”: “Percent”
},
{
“Timestamp”: “2026-03-31T09:20:00Z”,
“Average”: 16.3,
“Unit”: “Percent”
}
],
“Label”: “CPUUtilization”
}
# 查看数据库连接数
$ aws cloudwatch get-metric-statistics \
–namespace AWS/RDS \
–metric-name DatabaseConnections \
–dimensions Name=DBInstanceIdentifier,Value=oracle-prod \
–start-time 2026-03-31T09:00:00Z \
–end-time 2026-03-31T11:00:00Z \
–period 300 \
–statistics Average
{
“Datapoints”: [
{
“Timestamp”: “2026-03-31T09:00:00Z”,
“Average”: 25.0,
“Unit”: “Count”
},
{
“Timestamp”: “2026-03-31T09:05:00Z”,
“Average”: 28.0,
“Unit”: “Count”
},
{
“Timestamp”: “2026-03-31T09:10:00Z”,
“Average”: 32.0,
“Unit”: “Count”
},
{
“Timestamp”: “2026-03-31T09:15:00Z”,
“Average”: 30.0,
“Unit”: “Count”
},
{
“Timestamp”: “2026-03-31T09:20:00Z”,
“Average”: 27.0,
“Unit”: “Count”
}
],
“Label”: “DatabaseConnections”
}
# 查看可用存储空间
$ aws cloudwatch get-metric-statistics \
–namespace AWS/RDS \
–metric-name FreeStorageSpace \
–dimensions Name=DBInstanceIdentifier,Value=oracle-prod \
–start-time 2026-03-31T09:00:00Z \
–end-time 2026-03-31T11:00:00Z \
–period 300 \
–statistics Average
{
“Datapoints”: [
{
“Timestamp”: “2026-03-31T09:00:00Z”,
“Average”: 450123456789.0,
“Unit”: “Bytes”
},
{
“Timestamp”: “2026-03-31T09:05:00Z”,
“Average”: 450098765432.0,
“Unit”: “Bytes”
},
{
“Timestamp”: “2026-03-31T09:10:00Z”,
“Average”: 450087654321.0,
“Unit”: “Bytes”
}
],
“Label”: “FreeStorageSpace”
}
3.3.2 增强监控
$ aws rds modify-db-instance \
–db-instance-identifier oracle-prod \
–monitoring-interval 60 \
–monitoring-role-arn arn:aws:iam::123456789012:role/rds-monitoring-role \
–apply-immediately
{
“DBInstance”: {
“DBInstanceIdentifier”: “oracle-prod”,
“MonitoringInterval”: 60,
“MonitoringRoleArn”: “arn:aws:iam::123456789012:role/rds-monitoring-role”,
…
}
}
# 查看增强监控指标
$ aws logs filter-log-events \
–log-group-name RDSOSMetrics \
–log-stream-name oracle-prod \
–start-time 1711882800000 \
–end-time 1711886400000 \
–limit 5
{
“events”: [
{
“logStreamName”: “oracle-prod”,
“timestamp”: 1711882800000,
“message”:
“{\”engine\”:\”ORACLE\”,\”instanceID\”:\”oracle-prod\”,\”instanceResourceID\”:\”db-12345678901234567\”,\”timestamp\”:\”2026-03-31T10:00:00Z\”,\”version\”:\”1.0\”,\”cpuUtilization\”:{\”guest\”:0.0,\”irq\”:0.1,\”nice\”:0.0,\”steal\”:0.0,\”system\”:2.5,\”total\”:15.2,\”user\”:12.6,\”wait\”:0.0},\”diskIO\”:[{\”device\”:\”rdsdev0\”,\”readLatency\”:0.5,\”writeLatency\”:1.2,\”readThroughput\”:1024000,\”writeThroughput\”:2048000}],\”memory\”:{\”active\”:8589934592,\”buffers\”:1073741824,\”cached\”:4294967296,\”dirty\”:134217728,\”free\”:17179869184,\”total\”:34359738368,\”writeback\”:67108864},\”network\”:[{\”interface\”:\”eth0\”,\”rx\”:1024000,\”tx\”:512000}],\”processList\”:[{\”name\”:\”oracle\”,\”pid\”:1234,\”parentPid\”:1,\”cpuUsedPc\”:12.5,\”memoryUsedPc\”:25.0,\”rss\”:8589934592,\”vss\”:17179869184,\”tgid\”:1234}]}”
}
],
“searchedLogStreams”: [
{
“logStreamName”: “oracle-prod”,
“searchedCompletely”: true
}
]
}
Part04-生产案例与实战讲解
4.1 RDS迁移案例
某企业将其本地Oracle 12c数据库迁移到AWS RDS for Oracle 19c的实战案例:
– 源数据库:Oracle 12c R2 (12.2.0.1)
– 目标数据库:AWS RDS Oracle 19c
– 数据库大小:800GB
– 停机时间要求:< 4小时 - 迁移策略:AWS DMS + Data Pump混合方案 # 迁移步骤 # 1. 评估和准备(提前2周) # 使用AWS SCT评估兼容性 $ aws sct create-project \ --project-name oracle-migration \ --source-engine ORACLE \ --target-engine RDS_ORACLE \ --source-server 192.168.1.100 \ --source-port 1521 \ --source-database ORCL \ --source-username system \ --source-password LocalPassword123 # 评估报告关键发现: # - 98%的对象可以直接迁移 # - 2%的对象需要手动调整(UTL_FILE相关) # - 建议升级Oracle版本到19c # 2. 创建RDS实例 $ aws rds create-db-instance \ --db-instance-identifier oracle-prod-migrated \ --db-instance-class db.m5.2xlarge \ --engine oracle-ee \ --engine-version 19.0.0.0.ru-2021-10.rur-2021-10.r1 \ --master-username admin \ --master-user-password NewSecurePassword456 \ --allocated-storage 1000 \ --storage-type gp2 \ --vpc-security-group-ids sg-12345678 \ --db-subnet-group-name production-subnet-group \ --backup-retention-period 35 \ --multi-az \ --storage-encrypted \ --enable-performance-insights \ --performance-insights-retention-period 7 \ --enable-cloudwatch-logs-exports 'trace,audit,alert,listener' # 3. 预迁移(提前1周) # 迁移静态数据(历史数据) $ expdp system/password DIRECTORY=datapump_dir DUMPFILE=historical_data.dmp \ TABLES=HR.EMPLOYEES,HR.DEPARTMENTS,OE.ORDERS QUERY=HR.EMPLOYEES:"WHERE hire_date < '2024-01-01'" $ aws s3 cp /oracle/app/oracle/datapump/historical_data.dmp s3://migration-bucket/preload/ # 在RDS中导入历史数据 SQL> exec rdsadmin.rdsadmin_s3_tasks.download_from_s3(‘migration-bucket’, ‘preload/historical_data.dmp’, ‘DATA_PUMP_DIR’);
# 4. 正式迁移(迁移日)
# 00:00 – 开始维护窗口
# 00:30 – 停止应用写入
# 01:00 – 开始最终数据同步
# 使用DMS进行增量同步
$ aws dms create-replication-task \
–replication-task-identifier final-sync \
–source-endpoint-arn arn:aws:dms:us-east-1:123456789012:endpoint:source-oracle \
–target-endpoint-arn arn:aws:dms:us-east-1:123456789012:endpoint:target-rds \
–replication-instance-arn arn:aws:dms:us-east-1:123456789012:rep:dms-instance \
–migration-type cdc \
–table-mappings ‘{” rules”: [{“rule-type”: “selection” , “rule-id” : “1” , “rule-name” : “1” , “object-locator” :
{“schema-name”: “%” , “table-name” : “%” }, “rule-action” : “include” }]}’ $ aws dms
start-replication-task \ –replication-task-arn arn:aws:dms:us-east-1:123456789012:task:final-sync \
–start-replication-task-type resume-processing # 03:00 – 验证数据一致性 $ sqlplus
admin/NewSecurePassword456@oracle-prod-migrated.123456789012.us-east-1.rds.amazonaws.com:1521/ORCL SQL>
SELECT table_name, num_rows FROM dba_tables WHERE owner IN (‘HR’, ‘OE’, ‘PM’) ORDER BY 1;
TABLE_NAME NUM_ROWS
—————————— ———-
COUNTRIES 25
DEPARTMENTS 27
EMPLOYEES 107
INVENTORIES 1112
JOBS 19
JOB_HISTORY 10
LOCATIONS 23
REGIONS 4
WAREHOUSES 9
# 03:30 – 更新应用连接字符串
# 04:00 – 启动应用,迁移完成
# 5. 迁移后验证
# 验证应用功能
# 监控性能指标
# 确认备份策略
# 迁移结果
# – 总停机时间:3.5小时(符合要求)
# – 数据一致性:100%验证通过
# – 应用性能:提升20%(得益于RDS优化)
# – 成本节约:30%(相比本地部署)
4.2 RDS故障处理
AWS RDS for Oracle常见故障处理:
# 症状:应用无法连接到RDS实例
# 诊断步骤
# 1. 检查RDS实例状态
$ aws rds describe-db-instances \
–db-instance-identifier oracle-prod \
–query ‘DBInstances[0].[DBInstanceStatus,Endpoint.Address,Endpoint.Port]’
[
“available”,
“oracle-prod.123456789012.us-east-1.rds.amazonaws.com”,
1521
]
# 2. 检查安全组规则
$ aws ec2 describe-security-groups \
–group-ids sg-12345678 \
–query ‘SecurityGroups[0].IpPermissions’
[
{
“FromPort”: 1521,
“ToPort”: 1521,
“IpProtocol”: “tcp”,
“IpRanges”: [
{
“CidrIp”: “10.0.0.0/8”,
“Description”: “Oracle access from VPC”
}
]
}
]
# 3. 测试连接
$ tnsping oracle-prod.123456789012.us-east-1.rds.amazonaws.com:1521/ORCL
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 31-MAR-2026 10:00:00
Copyright (c) 1997, 2019, Oracle. All rights reserved.
Used parameter files:
/oracle/app/oracle/product/19c/dbhome_1/network/admin/sqlnet.ora
Used HOSTNAME adapter to resolve the alias
Attempting to contact
(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=ORCL))(ADDRESS=(PROTOCOL=TCP)(HOST=oracle-prod.123456789012.us-east-1.rds.amazonaws.com)(PORT=1521)))
OK (20 msec)
# 解决方案:确保安全组允许应用服务器IP访问1521端口
# 故障2:性能问题
# 症状:查询响应慢,CPU使用率高
# 诊断步骤
# 1. 查看CloudWatch指标
$ aws cloudwatch get-metric-statistics \
–namespace AWS/RDS \
–metric-name CPUUtilization \
–dimensions Name=DBInstanceIdentifier,Value=oracle-prod \
–start-time 2026-03-31T09:00:00Z \
–end-time 2026-03-31T11:00:00Z \
–period 300 \
–statistics Average
# 2. 查看等待事件
SQL> SELECT event, total_waits, time_waited_micro/1000000 time_waited_sec
2 FROM v$system_event
3 WHERE wait_class != ‘Idle’
4 ORDER BY time_waited_micro DESC
5 FETCH FIRST 10 ROWS ONLY;
EVENT TOTAL_WAITS TIME_WAITED_SEC
—————————— ———– —————
db file scattered read 123456 1234.56
db file sequential read 234567 987.65
log file sync 87654 654.32
buffer busy waits 34567 432.10
# 解决方案:
# – 增加RDS实例规格
# – 优化SQL查询
# – 创建合适的索引
# – 调整数据库参数
# 故障3:存储空间不足
# 症状:ORA-01653错误,无法扩展表空间
# 诊断步骤
# 1. 查看存储使用情况
$ aws cloudwatch get-metric-statistics \
–namespace AWS/RDS \
–metric-name FreeStorageSpace \
–dimensions Name=DBInstanceIdentifier,Value=oracle-prod \
–start-time 2026-03-31T09:00:00Z \
–end-time 2026-03-31T11:00:00Z \
–period 300 \
–statistics Average
# 2. 查看表空间使用情况
SQL> SELECT tablespace_name,
2 ROUND(used_space*8192/1024/1024,2) used_mb,
3 ROUND(tablespace_size*8192/1024/1024,2) total_mb,
4 ROUND((used_space/tablespace_size)*100,2) pct_used
5 FROM dba_tablespace_usage_metrics
6 ORDER BY pct_used DESC;
TABLESPACE_NAME USED_MB TOTAL_MB PCT_USED
—————————— ———- ———- ———-
USERS 450000 500000 90.00
SYSTEM 80000 100000 80.00
SYSAUX 60000 80000 75.00
# 解决方案:
# 增加存储容量
$ aws rds modify-db-instance \
–db-instance-identifier oracle-prod \
–allocated-storage 1500 \
–apply-immediately
# 故障4:备份失败
# 症状:自动备份未创建或快照失败
# 诊断步骤
# 1. 查看RDS事件
$ aws rds describe-events \
–source-identifier oracle-prod \
–source-type db-instance \
–start-time 2026-03-31T00:00:00Z \
–end-time 2026-03-31T23:59:59Z
{
“Events”: [
{
“SourceIdentifier”: “oracle-prod”,
“SourceType”: “db-instance”,
“Message”: “Backing up DB instance”,
“EventCategories”: [
“backup”
],
“Date”: “2026-03-31T03:00:00.000Z”,
“SourceArn”: “arn:aws:rds:us-east-1:123456789012:db:oracle-prod”
},
{
“SourceIdentifier”: “oracle-prod”,
“SourceType”: “db-instance”,
“Message”: “Failed to create backup”,
“EventCategories”: [
“failure”
],
“Date”: “2026-03-31T03:30:00.000Z”,
“SourceArn”: “arn:aws:rds:us-east-1:123456789012:db:oracle-prod”
}
]
}
# 解决方案:
# – 检查存储空间是否充足
# – 确认备份窗口设置正确
# – 检查IAM权限
# – 手动创建快照测试
4.3 RDS优化
AWS RDS for Oracle性能优化实践:
# 根据工作负载选择合适的实例类型
# 计算密集型工作负载
$ aws rds modify-db-instance \
–db-instance-identifier oracle-prod \
–db-instance-class db.m5.4xlarge \
–apply-immediately
# 内存密集型工作负载
$ aws rds modify-db-instance \
–db-instance-identifier oracle-prod \
–db-instance-class db.r5.2xlarge \
–apply-immediately
# 优化2:存储优化
# 使用IOPS存储提升性能
$ aws rds modify-db-instance \
–db-instance-identifier oracle-prod \
–storage-type io1 \
–iops 10000 \
–apply-immediately
# 优化3:数据库参数优化
# 创建高性能参数组
$ aws rds create-db-parameter-group \
–db-parameter-group-name oracle-performance \
–db-parameter-group-family oracle-ee-19 \
–description “High performance Oracle parameters”
$ aws rds modify-db-parameter-group \
–db-parameter-group-name oracle-performance \
–parameters \
“ParameterName=db_cache_size,ParameterValue=4294967296,ApplyMethod=immediate” \
“ParameterName=shared_pool_size,ParameterValue=2147483648,ApplyMethod=immediate” \
“ParameterName=pga_aggregate_target,ParameterValue=2147483648,ApplyMethod=immediate” \
“ParameterName=large_pool_size,ParameterValue=536870912,ApplyMethod=immediate” \
“ParameterName=java_pool_size,ParameterValue=268435456,ApplyMethod=immediate” \
“ParameterName=open_cursors,ParameterValue=2000,ApplyMethod=immediate” \
“ParameterName=sessions,ParameterValue=1000,ApplyMethod=pending-reboot” \
“ParameterName=processes,ParameterValue=900,ApplyMethod=pending-reboot” \
“ParameterName=db_file_multiblock_read_count,ParameterValue=128,ApplyMethod=immediate” \
“ParameterName=log_buffer,ParameterValue=67108864,ApplyMethod=immediate”
# 优化4:只读副本扩展
# 创建只读副本分担读负载
$ aws rds create-db-instance-read-replica \
–db-instance-identifier oracle-prod-read-replica \
–source-db-instance-identifier oracle-prod \
–db-instance-class db.m5.xlarge \
–publicly-accessible false \
–storage-encrypted
{
“DBInstance”: {
“DBInstanceIdentifier”: “oracle-prod-read-replica”,
“DBInstanceClass”: “db.m5.xlarge”,
“Engine”: “oracle-ee”,
“DBInstanceStatus”: “creating”,
“MasterUsername”: “admin”,
“AllocatedStorage”: 1000,
…
}
}
# 优化5:SQL优化
# 使用AWR报告识别慢SQL
SQL> @?/rdbms/admin/awrrpt.sql
# 查看TOP SQL
SQL> SELECT sql_id, sql_text, executions, elapsed_time/1000000 elapsed_sec
2 FROM v$sql
3 ORDER BY elapsed_time DESC
4 FETCH FIRST 10 ROWS ONLY;
SQL_ID SQL_TEXT EXECUTIONS ELAPSED_SEC
————- —————————————- ———- ———–
1a2b3c4d5e6f7 SELECT * FROM large_table WHERE … 1000 1234.56
2b3c4d5e6f7g8 SELECT COUNT(*) FROM orders WHERE … 5000 987.65
3c4d5e6f7g8h9 SELECT * FROM customers c, orders o … 2000 876.54
# 创建索引优化
SQL> CREATE INDEX idx_large_table_filter ON large_table(filter_column);
Index created.
# 验证优化效果
SQL> SELECT sql_id, executions, elapsed_time/1000000 elapsed_sec
2 FROM v$sql
3 WHERE sql_id = ‘1a2b3c4d5e6f7’;
SQL_ID EXECUTIONS ELAPSED_SEC
————- ———- ———–
1a2b3c4d5e6f7 1000 45.67
# 优化效果:查询时间从1234.56秒降低到45.67秒,提升96%
Part05-风哥经验总结与分享
5.1 RDS迁移总结
Oracle迁移到AWS RDS的关键经验总结:
- 充分评估:使用AWS SCT评估兼容性,识别潜在问题
- 选择合适策略:根据数据库大小和停机要求选择迁移方法
- 测试验证:在非生产环境充分测试迁移流程
- 分阶段实施:大型数据库建议分阶段迁移
- 监控优化:迁移后持续监控性能,及时优化
5.2 RDS迁移检查清单
# 迁移前检查
□ 评估数据库大小和增长趋势
□ 检查Oracle版本兼容性
□ 识别不支持的特性(如RAC、Data Guard)
□ 评估网络带宽和延迟
□ 准备AWS账户和IAM权限
□ 设计VPC网络架构
□ 选择适当的RDS实例规格
□ 制定备份和恢复策略
□ 准备回滚计划
# 迁移中检查
□ 监控迁移进度和状态
□ 验证数据完整性
□ 检查日志错误
□ 测试应用连接
□ 验证性能基线
# 迁移后检查
□ 确认所有对象已迁移
□ 验证数据一致性
□ 测试应用功能
□ 配置监控告警
□ 更新运维文档
□ 培训运维团队
□ 优化成本和性能
5.3 RDS工具推荐
AWS RDS迁移和管理推荐工具:
| 工具名称 | 用途 | 说明 |
|---|---|---|
| AWS SCT | 兼容性评估 | 评估Oracle到RDS的兼容性 |
| AWS DMS | 数据迁移 | 支持同构和异构数据库迁移 |
| AWS CLI | 自动化管理 | 命令行管理RDS实例 |
| CloudWatch | 监控告警 | 监控RDS性能和健康状况 |
| RDS Performance Insights | 性能分析 | 可视化数据库负载分析 |
| Oracle SQL Developer | 开发管理 | 连接和管理RDS数据库 |
- 使用Infrastructure as Code (Terraform/CloudFormation)管理RDS资源
- 启用Multi-AZ保证高可用性
- 配置自动备份和手动快照策略
- 使用参数组优化数据库性能
- 定期审查和优化成本
- 建立完善的监控和告警体系
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
