背景:
公司年底打算将aws rds11.2.0.4 oracle 数据库升级到19c,所以需要进行升级测试,所以需要我把线上的库数据迁移到一台测试的rds oracle 亚马逊云的数据库中,然后升级这一台oracle数据库,测试升级时间,云上和linux服务器操作其实真的不太一样,经过封装忽的Oracle。
环境:
源端:
windows 2012 oracle 11.2.0.4
目标端:
rds 11.2.0.4
迁移操作步骤:
首先我是把线上的rds数据库 通过dblink1导到源端,然后通过源端 dblink2, DBMS_FILE_TRANSFER.PUT_FILE命令传到亚马逊服务器,后面通过在源端执行语句,导入到亚马逊测试服务器上。
线上导出语句比较简单,由于要准确的估计升级时间,我找的线上数据量最大的一个数据库,然后导出全部业务数据;
导出语句如下:
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
set dd=%date:~8,2%
set mm=%date:~5,2%
set yy=%date:~0,4%
set Tss=%TIME:~6,2%
set Tmm=%TIME:~3,2%
set Thh=%TIME:~0,2%
set Thh=%Thh: =0%
expdp USERNAME/XXX directory=EXPDP_DUMP network_link=RDS_CLD_8 dumpfile=RDS_CLD_8_%yy%%mm%%dd%_%Thh%%Tmm%.dmp logfile=RDS_CLD_8_%yy%%mm%%dd%_%Thh%%Tmm%.log schemas=racttfc compression=ALL
由于 db_link中RDS_CLD_8 为源端到线上数据库(数据量最大的数据库),现在需要把导到源端的dmp文件传到亚马逊服务器,需要配置db_link,以及目标RDS数据库中创建directory对象
配置源端连接test rds的tns(次步骤省略),创建源端到test rds 的db_link:
create database link RDS_19CUPGRADE
connect to username identified by "XXXX"
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = xx)
)
)';
test rds 创建目录:
exec rdsadmin.rdsadmin_util.create_directory('dpump_dir');
需要上传的文件:
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'EXPDP_DUMP', --源端目录
source_file_name => 'RDS_CLD_8_20200828_1939.DMP', --源端导出的文件名
destination_directory_object => 'dpump_dir', --目标端目录
destination_file_name => 'RDS_CLD_8_20200828_1939.DMP', --目标端上传后的文件名
destination_database => 'RDS_19CUPGRADE'); --DBLINK的名称
END;
/
导出的压缩的文件16G,大约5分钟,还是比较的快。
后面进行导入语句,源端执行的,比较简单:
impdp username/XXX@19cupgrade directory=dpump_dir dumpfile=RDS_CLD_8_20200828_1939.DMP logfile=19c.log remap_Schema=racttfc:racttfc
导入相对就慢了……