偏爱将 Oracle 数据库工作负载托管在托管服务(例如适用于 Oracle 的
亚马逊关系数据库服务 (Amazon RDS) 或适用于 Oracle
的
Amazon RDS Cust
om)中的客户之所以这样 做,是因为托管服务提供的好处。客户喜欢的 Amazon RDS for Oracle 的主要功能之一是可以轻松升级和修补 Oracle 数据库版本。
适用于 Oracle 的 Amazon RDS 遵循 Oracle 终身支持政策
,该政策要求客户在特定的主要版本结束支持时将其实例升级到支持的版本。但是,有些工作负载可能依赖于 Oracle 数据库的旧版本,将数据库升级到最新的主要版本可能会中断应用程序。当数据库托管供应商应用程序并且供应商尚未认证其应用程序堆栈的最新主要版本时,也会出现这种情况。在这种情况下,强制数据库升级并不是理想的解决方案。
Amazon RDS Custom for Oracle 采用自带媒体 (BYOM) 方法,使您能够继续使用旧版本的 Oracle 数据库,同时仍能利用托管服务。Amazon RDS Custom for Oracle 目前支持 12.1、12.2 和 18c 等传统版本。它还可以支持传统和打包应用程序(例如 Oracle 电子商务套件)。凭借对数据库和底层操作系统的访问权限,RDS Custom for Oracle 提供了两全其美的优势:RDS for Oracle 的许多托管数据库功能,同时允许客户保留
亚马逊弹性计算云
(Amazon EC2) 上自管理数据库的灵活性。
在这篇文章中,我们讨论了您可以采用的各种迁移方法,将您的 Oracle 数据库从适用于 Oracle 的亚马逊 RDS 迁移到适用于 Oracle 的 Amazon RDS Custom。
解决方案概述
要迁移 Oracle 数据库,可以遵循物理迁移策略或逻辑迁移策略。物理迁移策略通常是首选,因为在区块级别复制或复制数据可以提供便利和保障。通常不需要使用物理迁移策略进行数据验证练习。另一方面,逻辑迁移策略有助于减少停机时间迁移和跨不同主要版本的迁移。逻辑迁移可能需要更多的精力和时间来测试流程,而数据验证是迁移过程中的关键步骤。
要从适用于 Oracle 的亚马逊 RDS 迁移到适用于 Oracle 的 Amazon RDS Custom,您可以选择以下任一选项。但是,在本文中,我们将更多地关注物理迁移方法;将甲骨文
数据库迁移到亚马逊云科技的策略白皮书中详细介绍了逻辑迁移 策略,该 白皮书也适用于从适用于甲骨文
的亚马逊RDS迁移到适用于Oracle的Amazon RDS Custom。
物理迁移
对于物理迁移,我们使用 RMAN 备份作为一种机制,在适用于 Oracle 的亚马逊 RDS 和适用于 Oracle 的 Amazon RDS Custom 之间复制数据库。可以使用
亚马逊简单存储服务 (Amazon S3) 存储
桶、
亚马逊弹性文件系统
(Amazon EFS) 或数据库链接将备份从源传输到目标。
适用于 Oracle 的 Amazon RDS 不支持配置 Data Guard 或用于自动日志传送的日志传送和应用。但是,通过将存档日志从源 RDS for Oracle 实例复制并应用到目标 RDS Custom for Oracle 实例,直到切换时间为止,可以减少迁移的停机时间。
下图说明了我们使用 Amazon S3 集成的物理迁移架构。
以下架构图说明了使用 Amazon EFS 集成的物理迁移。
逻辑迁移
您可以使用多种不同的工具进行逻辑迁移,例如用于初始数据加载和持续复制交易的 AW
S 数据库迁移服务
(亚马逊云科技 DMS) 、Oracle
GoldenGate
和 Oracle
数据泵
。下图显示了逻辑迁移的参考架构,该架构结合使用 RMAN 备份进行初始负载,亚马逊云科技 DMS 用于复制正在进行的交易。
在物理迁移策略无法满足您的业务需求(例如减少停机时间迁移)的情况下,您可以遵循逻辑迁移策略,从适用于 Oracle 的 Amazon RDS 迁移到 Amazon RDS Custom for Oracle。将本
地 Oracle 数据库 迁移到适用于 Oracle 的亚马逊 RDS
中讨论了逻辑迁移过程 。
在以下部分中,我们将讨论使用物理迁移策略从 Amazon RDS for Oracle 迁移到 Amazon RDS Custom for Oracle 的分步说明。
先决条件
这篇文章假设您在 VPC 中的账户中运行了适用于 Oracle 的源 RDS 实例,并且目标
RDS Custom for Oracle 实例已 在同一个账户和 VPC 中配置
。请参阅
适用于 Oracle 的亚马逊关系数据库服务 (Amazon RDS) 的 发行说明
, 以了解源 RDS for Oracle 实例中包含的补丁并使用自定义引擎版本 (CEV) 中的相同补丁列表创建目标 RDS Custom for Oracle 实例。如果源环境和目标环境的数据库补丁或时区版本不同,请参阅还原后活动部分以了解其他后续步骤。适用于 Oracle 的源 RDS 实例必须启用备份,并保留所需的保留期。备份的首选存储方法是 EFS,因为 RDS 实例不需要额外的存储。
备份数据库
在迁移的第一步中,我们使用 r
dsadmin.rdsadmin_rman_util 包对 RDS for Oracle 数据库进行了 RM
AN 备份。
- 使用
SQL*Plus 等客户端工具,以 RDS 主用户身份连接到 RDS for Oracle 实例
。
-
创建一个目录对象
,我们可以在 其中存储 RMAN 备份片段:
SQL>exec rdsadmin.rdsadmin_util.create_directory
(p_directory_name => 'BKP_RMAN');
- 在迁移过程中,将存档日志复制并应用到目标系统,以使恢复的文件保持一致并向前滚动数据库,直到我们准备好进行切换。在此示例中,我们将
存档日志保留时间 设置 为
48 小时:
SQL>exec rdsadmin.rdsadmin_util.set_configuration
( name => 'archivelog retention hours', value => '48')
如果 RDS 自动化删除了所需的存档日志,则可以将其再次恢复到 RDS 存储,如
从 Amazon S3 下载存档重做日志
中所述 。您可以通过运行以下 SQL 来获得预计的每日使用量,从而获得生成存档所需的估计空间。
select to_char(ct,'Day DD-Mon-RR') "Date",gb,cnt
from (select trunc(completion_time) as ct ,round((sum(blocks*block_size)/1024/1024/1024),2) as gb,count(*) as cnt
from v$archived_log
group by trunc(COMPLETION_TIME)
order by trunc(COMPLETION_TIME)
)/
- 验证源 RDS 实例存储上是否有可用空间来保存完整的数据库备份。
如果需要扩展
存储,请参阅 增加数据库实例存储容量
。
此过程创建的 RMAN 备份片段使用目录对象存储在 RDS for Oracle 实例的底层
亚马逊弹性区块
存储 (Amazon EBS) 卷中。因此,适用于 Oracle 的 RDS 实例应有足够的可用空间来容纳备份片段。
您可以使用
亚马逊 CloudW
atch 指标 FreeStorageSpace 监控适用于 Oracle 的 RDS 实例中的当前可用空间。
尽管 RMAN 仅备份格式化的块并支持压缩,但我们建议使用大于数据库当前大小的可用空间并保留可能的额外存档日志。以下查询的输出显示了数据库的大致大小:
SQL>select sum(bytes/1024/1024/1024) GB from dba_data_files;
如果您使用 Amazon EFS 集成作为一种机制,在目标 RDS Custom for Oracle 实例中提供备份,则备份将直接创建到 Amazon EFS,无需担心 RDS 存储空间的可用空间用于备份片段。
- 将数据库的完整 RMAN 备份保存到在上一步中创建的目录
BPK_RMAN
:
SQL>exec rdsadmin.rdsadmin_rman_util.backup_database_full
( p_owner => 'SYS', p_directory_name => 'BKP_RMAN',
p_parallel => 4, p_compress => TRUE,
p_label => 'DB-', p_rman_to_dbms_output => TRUE);
- 你可以以管理员用户身份运行以下 SQL 来检查备份的状态:
SQL>SELECT session_key, start_time, status, input_bytes_display,
output_bytes_display, time_taken_display
FROM v$rman_backup_job_details
WHERE start_time > = sysdate-1
ORDER BY end_time;
- 您可以通过查询目录来查看备份位置中的文件:
SQL>SELECT * FROM table(rdsadmin.rds_file_util.listdir
('BKP_RMAN')) order by mtime;
- 在我们备份存档日志之前切换日志文件并记下最大序列 ID:
SQL>exec rdsadmin.rdsadmin_util.switch_logfile;
SQL>exec rdsadmin.rdsadmin_util.switch_logfile;
SQL>exec rdsadmin.rdsadmin_util.switch_logfile;
SQL>exec rdsadmin.rdsadmin_util.switch_logfile;
SQL>select max(sequence#) from v$log where archived='YES';
- 我们现在备份存档日志:
SQL>exec rdsadmin.rdsadmin_rman_util.backup_archivelog_all
( p_owner => 'SYS', p_directory_name => 'BKP_RMAN', p_label => 'ARCH-',
p_rman_to_dbms_output => TRUE);
在此示例中,我们仅使用完整的数据库备份和存档日志备份来从源数据库恢复和同步目标数据库实例。或者,您也可以将增量备份添加到该策略中,用于重做生成率高的超大型数据库。增量备份还可以帮助解决丢失的存档日志,这些日志在复制到目标之前已从 RDS 存储中清除。有关在 Amazon RDS for Oracle 上 进行增量备份的更多详细信息,请参阅
执行增量数据库
备份。
- 最后,备份控制文件:
SQL>exec rdsadmin.rdsadmin_rman_util.backup_current_controlfile
( p_owner => 'SYS', p_directory_name => 'BKP_RMAN', p_label => 'CONTROLFILE-',
p_rman_to_dbms_output => TRUE);
- 列出目录中的备份片段:
SELECT * FROM table(rdsadmin.rds_file_util.listdir
('BKP_RMAN')) order by mtime;
将备份文件从源传输到目标
备份完成后,您可以使用以下三个选项之一将其传输到目标 RDS Custom for Oracle 实例:亚马逊 S3 集成、Amazon EFS 集成或数据库链接。
亚马逊 S3 集成
您可以使用
亚马逊 S3 集成
在适用于 Oracle 的 RDS 实例和 S3 存储桶之间传输文件 。
-
创建 S3 存储桶
或使用现有存储桶。在这篇文章中,我们使用了现有的存储桶 rds-custom-blog-test。
- 创建与新 IAM 角色关联的 A
WS 身份和访问管理
(IAM) 策略,并将该角色附加到 RDS 实例。
- 将亚马逊 S3 集成选项添加到 RDS for Oracle 实例中。
- 使用 rdsadmin_s3_tasks API 将
RMAN 备份片段传输到 S
3 存储桶:
SQL>SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
p_bucket_name => 'rds-custom-blog-test',
p_prefix =>'',
p_s3_prefix =>'',
p_directory_name => 'BKP_RMAN')
AS TASK_ID FROM DUAL;
- 使用从先前输出中 收到的
TASKID
运行以下查询,检查 Amazon S3 传输的状态:
SQL>SELECT text FROM table(rdsadmin.rds_file_util.read_text_file
('BDUMP','dbtask-TASKID.log'))
亚马逊 EFS 集成
通过集成 Amazon EFS,您可以直接在 EFS 装载点上创建 RMAN 备份片段,这些备份片段可以安装到目标 RDS Custom for Oracle 实例上。这最大限度地减少了将文件备份到 RDS 存储,然后通过 Amazon S3 集成将其复制的工作量。
有关在 RD
S f
or Oracle 实例上设置亚马逊 EFS 集成的详细步骤,请参阅亚马逊 EFS 集成。
- 配置 RDS for Oracle 实例的安全组以允许端口 2049 上的 NFS 流量。
- 为 RDS 实例配置 IAM 角色以与亚马逊 EFS 集成。
-
创建 EFS 文件系统
来存储备份。
- 为您的 EFS 挂载创建文件系统策略,这可以帮助锁定对文件系统的访问权限。有关示例策略,请参阅以下代码:
{“版本”: “2012-10-17”、“ID”: “examplePolicy01”、“声明”:[{“Sid”: “exampleStatement01”、“Effect”: “允许”、“Principal”: {“AWS”: “*”}、“操作”:[“ElasticFileSystem: ClientMount”、“ExampleFileSystem: ClientMount”: “ElasticFileSystem: ClientMount”: “ElasticFileSystem: ClientWrite”、“ElasticFileSystem: clientrootAccess”]、“资源”: “*”}
]}
- 将 IAM 角色与您的 RDS 实例相关联。
- 将
EFS_INTEG
R ATION 选项添加到与实例关联的选项组中。
将 EFS 文件系统安装到目标 RDS Custom for Oracle 主机上,以创建备份目录并修改权限。
有关如何在
RDS Custom for Oracle 实例上安装 E FS 文件系统的分步说明,请参阅 将 Oracle 版 Amazon RDS 定制版与亚马逊
EFS 集成。
- 首先,在 RDS Custom for Oracle 实例上安装 NFS 客户端:
sudo yum -y install nfs-utils
- 其次,将文件系统装载到目标 RDS 自定义主机上:
sudo mkdir /efs-mount-point
sudo mkdir /rdsdbdata/rman_backups/backup_copy
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-03d3621daa67f97fa.efs.eu-west-1.amazonaws.com:/ /rdsdbdata/rman_backups/backup_copy
- 在挂载中创建
rmanbkp
目录,该目录将用于将备份复制到该文件系统并向其授予 777 权限:
cd /rdsdbdata/rman_backups/backup_copy
mkdir rmanbkp
chmod 777 rmanbkp/
- 以 RDS 主用户身份连接到适用于 Oracle 的源 RDS 实例,然后在源 RDS for Oracle 实例上创建一个指向 EFS 挂载的新 Oracle 目录对象:
SQL>BEGIN
rdsadmin.rdsadmin_util.create_directory_efs(
p_directory_name => 'RMAN',
p_path_on_efs => '/rdsefs-fs-03d3621daa67f97fa/rmanbkp');
END;
/
— fs-03d3621daa67f
97fa 是亚马逊 EFS ID。
- 现在,可以按照备份部分的说明,将
p_directory_nam
e 更改为 RMAN 来备份数据库、存档日志和控制文件,从而将 RMAN 备份直接带 到 EFS 挂载中。
可以直接在目标 RDS Custom for Oracle 实例主机上访问备份的文件,因为目标上也安装了相同的 EFS 文件系统。
数据库链接和 DBMS_FILE_TRANSFER
要使用数据库链接将备份片段从源传输到目标,则至少应有一个方向可以连接,以便能够使用 DBMS_FILE_TRANSFER 包的
GET_FILE
或
PUT_FILE
过程。
在此示例中,我们假设源 RDS for Oracle 实例与目标 RDS Custom for Oracle 实例之间存在连接。
- 在目标 RDS 自定义实例上创建指向
/rdsdbd
ata 挂载点中目录的目录对象:
sudo mkdir /rdsdbdata/backup
SQL> CREATE DIRECTORY BKP_RMAN AS '/rdsdbdata/backup';
- 在源 RDS 数据库上创建数据库链接:
SQL> create database link to_rds_custom connect to admin identified by password using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxxxxxxxxxxxxxx.eu-west-1.rds.amazonaws.com)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=ORCL)))'
- 测试数据库链接:
SQL> select sysdate from dual@to_rds_custom
- 列出之前创建的备份目录中的备份文件:
SQL> SELECT * FROM table(rdsadmin.rds_file_util.listdir('BKP_RMAN')) ORDER by mtime;
- 通过数据库链接传输备份文件:
SQL> BEGIN DBMS_FILE_TRANSFER.PUT_FILE(source_directory_object => 'BKP_RMAN',source_file_name => 'dbackbacki_3_1_1',目标_文件名 => 'dbackbacki_3_1_1' up-20230111-031hlqki_3_1_1 ',destination_database =>' to_rds_custom '
);结束;/
这会将指定的备份条目复制到 /rdsdbdata/
backup 目录下的目标实例。根据文件的大小,您可能需要并行运行此任务才能并行传输多个文件。
将数据库恢复到适用于 Oracle 的 Amazon RDS
在本节中,我们将对适用于 Oracle 的 RDS 自定义实例执行还原操作。首先,我们进行完整的数据库恢复,然后应用存档日志来向前滚动数据库。
示例中的步骤假设一个名为 ORCL 的非多租户数据库在目标 RDS Custom for Oracle 实例上运行。
- 复制自定义实例的管理员用户创建
user-ddl-sql.sql
脚本的权限。 如果使用多租户数据库,则还需要获得 oracle_ocm
和 c# #rdsadmin 用户。
-bash-4.2$ cat user-ddl-sql.sql
set long 10000 pagesize 0 linesize 1000 feedback off verify off trimspool on
column ddl format a1000
begin
dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'SQLTERMINATOR', true);
dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'PRETTY', true);
end;
/
variable v_user VARCHAR2(30);
exec :v_user := upper('&1');
select dbms_metadata.get_ddl('USER', u.username) AS ddl
from dba_users u
where u.username = :v_user
union all
select dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', tq.username) AS ddl
from dba_ts_quotas tq
where tq.username = :v_user
and rownum = 1
union all
select dbms_metadata.get_granted_ddl('ROLE_GRANT', rp.grantee) AS ddl
from dba_role_privs rp
where rp.grantee = :v_user
and rownum = 1
union all
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', sp.grantee) AS ddl
from dba_sys_privs sp
where sp.grantee = :v_user
and rownum = 1
union all
select dbms_metadata.get_granted_ddl('OBJECT_GRANT', tp.grantee) AS ddl
from dba_tab_privs tp
where tp.grantee = :v_user
and rownum = 1
union all
select dbms_metadata.get_granted_ddl('DEFAULT_ROLE', rp.grantee) AS ddl
from dba_role_privs rp
where rp.grantee = :v_user
and rp.default_role = 'YES'
and rownum = 1
union all
select to_clob('/* Start profile creation script in case they are missing') AS ddl
from dba_users u
where u.username = :v_user
and u.profile <> 'DEFAULT'
and rownum = 1
union all
select dbms_metadata.get_ddl('PROFILE', u.profile) AS ddl
from dba_users u
where u.username = :v_user
and u.profile <> 'DEFAULT'
union all
select to_clob('End profile creation script */') AS ddl
from dba_users u
where u.username = :v_user
and u.profile <> 'DEFAULT'
and rownum = 1
/
set linesize 80 pagesize 14 feedback on trimspool on verify on
- 运行用户授权脚本以获取用户的 DDL(非多租户仅需要管理员用户):
SQL> spool grants.sql
SQL> @user-ddl-sql.sql admin
如果您在多租户上运行,请仅运行以下两个命令。
SQL> @user-ddl-sql.sql c##rdsadmin
SQL> @user-ddl-sql.sql oracle_ocm
- 保存这些脚本的输出以供以后创建这些用户时使用;可能需要删除开头和结尾的命令。
-
在还原所需的时间段内暂停 RDS 自定义实例 上的自动化
。
- 在 Amazon RDS Custom 上停止实例,复制数据文件,然后重命名
spfile
,我们稍后再使用它。此示例中的数据目录是 /rdsdbdata/db /orcl_A
。 使用多租户时,这些目录将类似于 /rdsdbdata/db/PDB/rdscDB 和 /rdsdbData/db/cd b/rdscDB
。
-bash-4.2$ . oraenv
ORACLE_SID = [ORCL] ?
-bash-4.2$ sqlplus / as sysdba
SQL> shu immediate
SQL> exit
-bash-4.2$ cd /rdsdbdata/db
-bash-4.2$ mv ORCL_A ORCL_A_old
-bash-4.2$ mkdir ORCL_A
-bash-4.2$ cd $ORACLE_HOME/dbs
-bash-4.2$ mv spfileORCL.ora spfileORCL-old.ora
- 将备份文件从 Amazon S3 复制到自定义主机上的某个位置(例如,/rdsdbdata
/rman_backups/
backup_copy)。以根用户身份创建备份位置并以 ec2 用户身份运行 Amazon S3 副本。如果您使用 Amazon EFS 传输备份,则无需执行此步骤,因为备份片段将通过安装在目标实例上的 EFS 文件系统提供。如果您通过数据库链接进行传输,也无需这样做。
-bash-4.2$ mkdir /rdsdbdata/rman_backups/backup_copy
-bash-4.2$ chmod 777 /rdsdbdata/rman_backups/backup_copy
-bash-4.2$ cd /rdsdbdata/rman_backups/backup_copy
-bash-4.2$ aws s3 cp s3://rds-custom-blog-test . --recursive
- 接下来我们将创建一个
pfile
并启动装载数据库:
-bash-4.2$ cd $ORACLE_HOME/dbs
-bash-4.2$ vi initORCL.ora
-bash-4.2$ cat initORCL.ora
control_files='/rdsdbdata/db/ORCL_A/controlfile/control-01.ctl'
db_name='ORCL'
db_create_file_dest='/rdsdbdata/db'
-bash-4.2$ . oraenv
ORACLE_SID = [ORCL] ?
-bash-4.2$ sqlplus / as sysdba
SQL> startup nomount
如果该实例是多租户实例,则需要在 p
file 中添加其他参数:
enable_pluggable_database=TRUE
- 从我们转移到备份位置的控制文件备份中恢复控制文件。您可以使用包含控制文件备份的备份片段的名称。
ls -lrt /rdsdbdata/rman_backups/backup_copy/CONTROL
-bash-4.2$ rman target /
RMAN> restore controlfile from '/rdsdbdata/rman_backups/backup_copy/CONTROLFILE—backup-20221228-4s1ggpj4_1180_1_1';
RMAN> alter database mount;
- 将备份文件编目到控制文件中以反映位置的变化:
-bash-4.2$ rman target /
RMAN> catalog start with '/rdsdbdata/rman_backups/backup_copy';
- 将数据库恢复到我们之前在切换日志文件时记下的最大 ID:
-bash-4.2$ rman target /
RMAN> run{
set until sequence MAXIDSEQ;
set newname for database to new;
restore database;
switch datafile all;
recover database;
}
此时,数据库将恢复到备份中包含的最后一个存档日志。如果要打开数据库,可以跳到步骤 17。如果您想继续使用存档日志向前滚动,请按照以下步骤操作:
- 在我们备份存档日志之前切换日志文件并记下最大序列 ID:
exec rdsadmin.rdsadmin_util.switch_logfile;exec rdsadmin_util.switch_logfile;exec rdsadmin.rdsadmin_util.switch_logfile;选择 max (sequence#) 来自 v$log,其中 archived='Yes';
- 现在备份存档日志:
exec rdsadmin.rdsadmin_rman_util.backup_archivelog_all
( p_owner => 'SYS', p_directory_name => 'BKP_RMAN', p_label => 'ARCH-',
p_rman_to_dbms_output => TRUE);
- 使用 Amazon S3 集成或
DBM
S_FILE_TRANSFER 将新的档案日志备份传输到目标。如果您要将数据传输到 Amazon EFS,则无需执行此步骤,因为数据已存储在文件系统上。
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
p_bucket_name => 'rds-custom-blog-test',
p_prefix =>'',
p_s3_prefix =>'',
p_directory_name => 'BKP_RMAN')
AS TASK_ID FROM DUAL;
- 将备份传输到自定义实例计算机。如果您要将数据传输到 Amazon EFS,则无需执行此步骤,因为数据已存储在文件系统上。
-bash-4.2$ cd /rdsdbdata/rman_backups/backup_copy
-bash-4.2$ aws s3 cp s3://rds-custom-blog-test . --recursive
- 现在对我们从 Amazon S3 复制过来的档案日志备份文件进行编目:
-bash-4.2$ rman target /
RMAN> catalog start with '/rdsdbdata/rman_backups/backup_copy';
- 我们从现在开始恢复数据库,直到您之前保存的最大序列号:
-bash-4.2$ rman target /
RMAN> run{
set until sequence maxseqnumber;
recover database;
}
这种应用存档和向前滚动目标数据库的过程可以持续下去,直到我们准备好进行切换。对于最终的归档日志备份,请停止应用程序与源的连接,等待所有会话断开连接或删除它们,并在进行最终归档日志备份之前多次切换重做日志,以确认所有事务都已复制到目标系统。
- 恢复数据库后,您可以使用
重置
日志打开数据库:
RMAN> alter database open resetlogs;
- 现在创建存档日志位置:
-bash-4.2$ mkdir /rdsdbdata/db/ORCL_A/arch
-bash-4.2$ mkdir /rdsdbdata/db/ORCL_A/arch/redolog
- 停止数据库并切换到使用原始
spfile
:
-bash-4.2$ sqlplus / as sysdba
SQL> shu immediate
SQL> exit
-bash-4.2$ mv spfileORCL-old.ora spfileORCL.ora
-bash-4.2$ sqlplus / as sysdba
SQL> startup
SQL> exit
- 将管理员密码重置为与 RDS Custom 实例上的原始密码相同,然后运行我们在步骤 3 中为获得权限而编写的脚本。
恢复后活动
根据源实例和目标实例的配置,如果应用于 ORACLE_HOME 和时区文件版本的一次性补丁或版本更新不匹配,您可能需要完成一些恢复后活动。有关更多信息,请参阅将
Amazon RDS for Oracle 实例 恢复为自管理实例中的恢复
后步骤 部分。 为了避免额外费用,请务必在迁移后删除 RDS 实例。
摘要
当应用程序未通过认证可在最新版本的 Oracle 数据库上运行时,客户经常会面临继续使用旧版本的 Oracle 数据库的情况。适用于 Oracle 的 Amazon RDS 定制版提供与 Amazon RDS 相似的托管体验,同时为访问和自定义操作系统和数据库环境以及继续使用 Oracle 数据库的旧版本提供了额外的灵活性。使用 RMAN 或 Data Guard 的物理迁移策略通常受到数据库管理员的青睐,因为它比逻辑迁移策略更方便、更有信心。这篇文章讨论了从适用于甲骨文的亚马逊 RDS 迁移到适用于 Oracle 的亚马逊 RDS Custom 的不同选项。
如果您有任何意见或问题,请将其留在评论部分。
作者简介
Jobin Joseph 是一位驻多伦多的高级数据库专家解决方案架构师。他专注于关系数据库引擎,帮助客户将其数据库工作负载迁移到 亚马逊云科技 并对其进行现代化改造。他是一名甲骨文认证大师,在甲骨文数据库方面拥有 20 年的经验。
Tony Mullen 是驻曼彻斯特的高级数据库专家解决方案架构师。他专注于关系数据库引擎,帮助客户将其数据库工作负载迁移到 亚马逊云科技 并对其进行现代化改造。