暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] Oracle 21c 云对象存储的数据泵导出 (expdp)和导入 (impdp)

原创 小小亮 2021-09-13
1747

从 Oracle 21c 开始,数据泵支持将云对象存储作为本地安装的转储文件位置。

目录

介绍

从云对象存储导入数据最初是在自治数据库中引入的。Oracle 18cimpdp实用程序引入了CREDENTIAL参数来指定要用于导入的对象存储凭据。尽管这使用了该impdp实用程序的本地安装,但该功能只能在连接到自治数据库时使用。从 Oracle 21c (21.3) 开始,我们还可以使用CREDENTIAL带有expdp实用程序的参数从自治数据库导出到 can 对象存储。您可以在此处阅读有关此功能的信息。

Oracle 21c (21.3) 引入了使用本地数据库从云对象存储导出和导入的功能,因此该功能不再局限于自治数据库。

使用云对象存储作为转储文件位置时,数据传输会出现一些延迟。

先决条件


DBMS_CLOUD包默认存在于自治数据库中。它未安装在 Oracle 21c 本地安装中,因此必须手动安装。Oracle 文档中未提及此先决条件。此 MOS 说明中描述了安装。

这里有一个安装示例。

我们需要一个对象存储桶作为示例。这可以是 Oracle Cloud Object Storage 存储桶或 AWS S3 存储桶。以下文章介绍了如何创建 Oracle Cloud Object Storage 存储桶。

Oracle 21.3 中的错误

在 Oracle 21.3 中尝试使用此功能时,我不断收到错误消息。我向 My Oracle Support (MOS) 提出了服务请求 (SR),这导致了以下错误。它是隐藏的,但它存在。

Bug 33323028 - DATA PUMP EXPORT TO OCI OBJECT STORAGE FAILS ORA-39001 ORA-39000 ORA-31641
复制

希望这将在未来的版本更新中得到修复,但目前建议的解决方法是启用对象存储 ODM 库。

# Turn everything off.
dbshut $ORACLE_HOME

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk opc_on

# Turn everything on.
dbstart $ORACLE_HOME
复制

感谢 Oracle 的支持人员和开发人员让我克服了这个错误。

以前未记录的对DBMS_CLOUD包的依赖和错误的解决方法现在已添加到以下 MOS 说明中。

设置

我们创建一个测试用户来执行导出和导入操作。我们确保用户可以创建凭据,并授予其访问DBMS_CLOUD包的权限。

conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba

--drop user testuser1 cascade;
create user testuser1 identified by testuser1 quota unlimited on users;
grant connect, resource to testuser1;

grant create credential to testuser1;
grant execute on dbms_cloud to testuser1;
复制

我们需要一个本地目录对象用于导出和导入操作。转储文件放置在对象存储中,但日志文件写入本地。

create or replace directory tmp_dir as '/tmp/';
grant read, write on directory tmp_dir to testuser1
复制

连接到测试用户并创建下表。

conn testuser1/testuser1@//localhost:1521/pdb1

create table emp (
  empno    number(4,0), 
  ename    varchar2(10 byte), 
  job      varchar2(9 byte), 
  mgr      number(4,0), 
  hiredate date, 
  sal      number(7,2), 
  comm     number(7,2), 
  deptno   number(2,0), 
  constraint pk_emp primary key (empno)
);
  
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7369,'SMITH','CLERK',7902,to_date('17-DEC-80','DD-MON-RR'),800,null,20);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7499,'ALLEN','SALESMAN',7698,to_date('20-FEB-81','DD-MON-RR'),1600,300,30);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7521,'WARD','SALESMAN',7698,to_date('22-FEB-81','DD-MON-RR'),1250,500,30);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7566,'JONES','MANAGER',7839,to_date('02-APR-81','DD-MON-RR'),2975,null,20);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7654,'MARTIN','SALESMAN',7698,to_date('28-SEP-81','DD-MON-RR'),1250,1400,30);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7698,'BLAKE','MANAGER',7839,to_date('01-MAY-81','DD-MON-RR'),2850,null,30);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7782,'CLARK','MANAGER',7839,to_date('09-JUN-81','DD-MON-RR'),2450,null,10);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7788,'SCOTT','ANALYST',7566,to_date('19-APR-87','DD-MON-RR'),3000,null,20);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7839,'KING','PRESIDENT',null,to_date('17-NOV-81','DD-MON-RR'),5000,null,10);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7844,'TURNER','SALESMAN',7698,to_date('08-SEP-81','DD-MON-RR'),1500,0,30);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7876,'ADAMS','CLERK',7788,to_date('23-MAY-87','DD-MON-RR'),1100,null,20);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7900,'JAMES','CLERK',7698,to_date('03-DEC-81','DD-MON-RR'),950,null,30);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7902,'FORD','ANALYST',7566,to_date('03-DEC-81','DD-MON-RR'),3000,null,20);
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (7934,'MILLER','CLERK',7782,to_date('23-JAN-82','DD-MON-RR'),1300,null,10);
commit;
复制

对象存储凭证

DBMS_CLOUD软件包包含该软件包中的过程的副本DBMS_CREDENTIAL。这两个包可以互换使用,因为它们做同样的事情。

为您的对象存储创建凭证。对于 Oracle 对象存储桶,我们使用我们的 Oracle Cloud 电子邮件和我们生成的身份验证令牌。

conn testuser1/testuser1@//localhost:1521/pdb1

begin
  dbms_cloud.drop_credential(credential_name => 'obj_store_cred');
end;
/

begin
  dbms_cloud.create_credential (
    credential_name => 'obj_store_cred',
    username        => 'me@example.com',
    password        => '{my-Auth-Token}'
  ) ;
end;
/
复制

对于 AWS 存储桶,我们使用我们的 AWS 访问密钥和秘密访问密钥。

begin
  dbms_cloud.create_credential (
    credential_name => 'obj_store_cred',
    username        => 'my AWS access key',
    password        => 'my AWS secret access key'
  );
end;
/
复制

对象存储 URI

我们使用对象存储 URI 作为DUMPFILE位置。对于 AWS S3,使用 S3 存储桶的 URI。对于 Oracle Cloud,URI 可以采用这些形式之一。

https://swiftobjectstorage.{region}.oraclecloud.com/v1/{namespace}/{bucket-name}/{file-name}.dmp

https://objectstorage.{region}.oraclecloud.com/n/{namespace}/b/{bucket-name}/o/{file-name}.dmp
复制

该文档通常使用“swiftobjectstorage”URI,但两者都有效。对于本文的其余部分,我们将使用“swiftobjectstorage”URI。

导出到云对象存储

我们使用该expdp实用程序执行正常导出。我们使用CREDENTIAL参数提供我们的云对象存储凭证,并在DUMPFILE参数中使用云对象存储 URI 。

$ expdp testuser1/testuser1@//localhost:1521/pdb1 \
    tables=emp \
    credential=obj_store_cred \
    dumpfile=https://swiftobjectstorage.uk-london-1.oraclecloud.com/v1/my-namespace/ob-bucket/emp.dmp \
    logfile=tmp_dir:expdp_emp.log \
    exclude=statistics

Export: Release 21.0.0.0.0 - Production on Fri Sep 10 08:34:40 2021
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Starting "TESTUSER1"."SYS_EXPORT_TABLE_01":  testuser1/********@//localhost:1521/pdb1 tables=emp
  credential=obj_store_cred dumpfile=https://swiftobjectstorage.uk-london-1.oraclecloud.com/v1/my-namespace/ob-bucket/emp.dmp logfile=tmp_dir:expdp_emp.log exclude=statistics
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
. . exported "TESTUSER1"."EMP"                           8.781 KB      14 rows
Master table "TESTUSER1"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for TESTUSER1.SYS_EXPORT_TABLE_01 is:
  https://swiftobjectstorage.uk-london-1.oraclecloud.com/v1/my-namespace/ob-bucket/emp.dmp
Job "TESTUSER1"."SYS_EXPORT_TABLE_01" successfully completed at Fri Sep 10 08:34:59 2021 elapsed 0 00:00:17

$
复制

从云对象存储导入

我们使用该impdp实用程序执行正常导入。我们使用CREDENTIAL参数来提供我们的云对象存储凭证,并在DUMPFILE参数中使用云对象存储 URI 。

$ impdp testuser1/testuser1@//localhost:1521/pdb1 \
    tables=emp \
    remap_table=testuser1.emp:emp_copy \
    credential=obj_store_cred \
    dumpfile=https://swiftobjectstorage.uk-london-1.oraclecloud.com/v1/my-namespace/ob-bucket/emp.dmp \
    logfile=tmp_dir:impdp_emp.log

Import: Release 21.0.0.0.0 - Production on Fri Sep 10 08:36:15 2021
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Master table "TESTUSER1"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "TESTUSER1"."SYS_IMPORT_TABLE_01":  testuser1/********@//localhost:1521/pdb1 tables=emp remap_table=testuser1.emp:emp_copy
  credential=obj_store_cred dumpfile=https://swiftobjectstorage.uk-london-1.oraclecloud.com/v1/my-namespace/ob-bucket/emp.dmp logfile=tmp_dir:impdp_emp.log
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "TESTUSER1"."EMP_COPY"                      8.781 KB      14 rows
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
ORA-31684: Object type CONSTRAINT:"TESTUSER1"."PK_EMP" already exists

Job "TESTUSER1"."SYS_IMPORT_TABLE_01" completed with 1 error(s) at Fri Sep 10 08:36:28 2021 elapsed 0 00:00:09

$
复制

文章来源:https://oracle-base.com/articles/21c/data-pump-export-import-cloud-object-store-21c

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论