接上文:
Oracle自治事务处理云服务抢先体验2
上一篇文章中我们介绍了通过DBMS_CLOUD包将OCI Object Storage上的文本文件导入到ATP中的实现方法。但在实际应用中,比如将本地数据库迁移到ADW/ATP时,可能需要将原数据库的dmp文件import到ADW/ATP中,这是DBMS_CLOUD包所不能处理的,那么就要用到impdp命令来进行数据的导入到ADW/ATP中。但是我们也知道,ADW/ATP中我们并不能直接访问数据库所在的服务器,所以我们需要一台可以运行import命令的机器来执行这个操作。
本文将介绍通过一台装有Instant Client的Oracle Linux x86-64的OCI实例,来连接到ADW/ATP,并将dmp文件impdp到ADW/ATP中。
下载并安装Instant Client到Oracle Linux实例中
访问下面的地址来下载最新版的Instant Client软件
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

选择下载最新版本的下列文件:
instantclient-basic-linux.x64-18.3.0.0.0dbru.zip
instantclient-basiclite-linux.x64-18.3.0.0.0dbru.zip
instantclient-sqlplus-linux.x64-18.3.0.0.0dbru.zip
instantclient-tools-linux.x64-18.3.0.0.0dbru.zip
将上面下载在文件上传到 Linux x86-64的OCI实例中

上传之后在Linux实例中解压所有zip文件
Unzip ‘instant*.zip’

当出现下面的问题时,输入【A】后按回车
replace instantclient_18_3/adrci?

解压成功后显示如下画面:

你可以进入解压后的文件夹来确认解压的文件夹及文件

创建一个Instant Client的工作目录
mkdir /opt/oracle

将前一步解压后的文件夹复制到工作目录下面:
cp –Rp /home/opc/InstantClient/instantclient_18_3 /opt/oracle

接下来安装libaio,注意这个包在有些linux发行版本中称为libaio1.
sudo yum install libaio
本机中因为已经安装该包,所以显示已经安装

下载并设定客户端信任文件
进入ADW/ATP的实例界面,点击“ServiceConsole”界面进入ATP数据库的控制台,在“Adminitration”中点击“Download Client Credentials”,下载客户端信任文件。

将下载后的客户端信任文件上传到Linux实例,并解压该文件。将解压后的文件夹拷贝到安全目录下面,比如/home/adwc_credentials。

编辑sqlnet.ora文件,将该文件中的[“?/network/admin]替换为拷贝后的工作目录(/home/adwc_credentials).
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/adwc_credentials")))
SSL_SERVER_DN_MATCH=yes

设置如下环境变量,以使sqlplus能够连接到ADW/ATP实例:
export LD_LIBRARY_PATH=/opt/oracle/instantclient_18_3:$LD_LIBRARY_PATH
export PATH=/opt/oracle/instantclient_18_3:$PATH
export TNS_ADMIN=/home/adwc_credentials
然后使用sqlplus连接到ADW/ATP实例,admin为用户名,adw01_medium为tnsnames.ora文件中该实例的一个服务名。密码在之后输入,该密码为你创建ADW/ATP时设置的密码。
sqlplus admin@adw01_medium

至此,您已经成功的连接上了ADW/ATP实例。
导出本地数据库并将dmp文件上传到OCI对象存储
连接到本地数据库,这里使用DBCS的数据库模拟本地数据库。

确认本地的数据表和数据

为数据导出创建directory对象,并给用户赋予读写权限。
create or replace directory export_dir as '/home/oracle';
grant read, write on directory export_dir to testuser2;

执行数据导出命令以导出数据库。
expdp TESTUSER2/Oracle18#Oracle18#@OCIPDB1 \
exclude=index, cluster, indextype, materialized_view, materialized_view_log, materialized_zonemap, db_link \
data_options=group_partition_table_data \
parallel=16 \
schemas=TESTUSER2 \
directory=export_dir \
dumpfile=export%u.dmp \
logfile=exp.log

在ADW中,为了更快速和简单的移行数据,Oracle推荐使用下面的数据泵参数。
exclude=index, cluster, indextype, materialized_view, materialized_view_log, materialized_zonemap, db_link
data_options=group_partition_table_data
parallel=n
schemas=schema name
dumpfile=export%u.dmp
如下图所示本地数据库导出成功。

将所有导出的dmp文件上传到OCI对象存储桶中,详细请参照体验2中的相关描述。

创建对象存储认证令牌
如果没有创建对象存储认证令牌,请参照体验2中的方法创建。
然后在sqlplus中执行下面的示例代码,创建一个信任文件。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'CRED_FOR_IMPORT',
username => ‘XXXXX@XXXX',
password => 'XXXXXXXXXX'
);
END;
/
username为OCI对象存储所属用户名。
password为生成的认证令牌。

将dmp文件导入到ADW/ATP实例中
在linux实例中执行下面的示例代码,以导入dmp文件
impdp admin/************@adw01_medium \
directory=data_pump_dir \
credential=CRED_FOR_IMPORT \
dumpfile=https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/iwi123456/Bucket01/export01.dmp,https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/iwi123456/Bucket01/export02.dmp,https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/iwi123456/Bucket01/export03.dmp,https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/iwi123456/Bucket01/export04.dmp,https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/iwi123456/Bucket01/export05.dmp,https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/iwi123456/Bucket01/export06.dmp, \
full=y \
parallel=16 \
partition_options=merge \
transform=segment_attributes:n \
transform=dwcs_cvt_iots:y \
transform=constraint_use_default_index:y \
exclude=index, cluster, indextype, materialized_view, materialized_view_log, materialized_zonemap, db_link
dmp文件的路径为:
https://swiftobjectstorage.<region name>.oraclecloud.com/v1/<tenant name>/<bucket name>/dmp文件名

如下图所示,数据导入成功。

在sql developer中确认导入的数据表和数据

至此,完成了本地数据库迁移到ADW/ATP的基本操作。
从此以后,你就可以和烦人的数据库管理工作,比如备份,恢复,打补丁,性能调优等工作说再见了,删库跑路?不存在的。更高级的工作在等着你,幸福的人生从此开始,你还在等什么?赶紧将数据库迁移到Oracle自治事务处理云服务来吧。




