使用 Oracle Data Pump 导出数据
Oracle Data Pump 可在 Autonomous AI Database 和其他 Oracle 数据库之间快速批量移动数据和元数据。
Oracle 建议使用最新的 Oracle Data Pump 版本将数据从 Autonomous AI Database 导出到其他 Oracle 数据库,因为它包含增强功能和修复功能,以获得更好的体验。下载最新版本的 Oracle Instant Client,然后从 Oracle Instant Client 下载下载适用于您平台的工具包(包括 Oracle Data Pump)。有关下载 Oracle Instant Client 和工具包之后所需的安装步骤,请参见平台安装下载页面上的安装说明。
要使用 Oracle Data Pump 将数据从自治 AI 数据库移至其他 Oracle 数据库,请使用以下选项之一:
-
选项 1:通过数据泵导出将数据移动到自治 AI 数据库目录
使用 Oracle Data Pump 将数据导出到数据库上的目录,然后将数据从目录移动到云对象存储。当您需要将数据从自治 AI 数据库移动到多个目标数据库时,此方法非常有用。您可以创建一次转储文件集并将其用于多个目标数据库,而无需将数据导出到多个云对象存储。
通过将数据导出到数据库上的目录,执行以下步骤以从自治 AI 数据库移动数据:
-
将数据导出到自治 AI 数据库上的目录,并将转储文件集从目录移动到云对象存储。请参阅使用自治 AI 数据库上的目录导出数据。
-
从云对象存储下载转储文件,将数据导入目标数据库,并清理云对象存储。请参见 Download Dump Files,Run Data Pump Import and Clean Up Object Store 。
-
-
选项 2:使用数据泵将数据导出到对象存储
使用此导出方法,可以使用 Oracle Data Pump 将数据直接导出到对象存储。Oracle Cloud Infrastructure Object Storage 和 Oracle Cloud Infrastructure Object Storage Classic 支持此导出方法。这样可以避免在自治 AI 数据库上的目录中创建转储文件集,然后将转储文件集移动到云对象存储中产生的开销。当您计划将数据移动到单个目标数据库时,此方法可以节省工作量并加快导出过程。
通过将数据直接导出到对象存储,执行以下步骤从自治 AI 数据库移动数据:
- 将数据从自治 AI 数据库直接导出到云对象存储。请参阅将数据从自治 AI 数据库直接导出到对象存储。
- 从云对象存储下载转储文件,将数据导入目标数据库,并清理云对象存储。请参见 Download Dump Files,Run Data Pump Import and Clean Up Object Store 。
使用自治 AI 数据库上的目录导出数据
要使用自治 AI 数据库上的目录导出数据,必须先使用数据库目录中导出的数据创建转储文件集,然后将这些文件从数据库目录上载到云对象存储。
使用数据泵在自治 AI 数据库上创建转储文件集
-
创建用于存储包含导出数据的转储文件的目录。例如:
CREATE DIRECTORY data_export_dir as 'data_export'; -
在设置了 dumpfile 参数、将 filesize 参数设置为小于 50G 以及设置了 directory 参数的情况下运行数据泵导出。例如,以下内容显示了如何在具有 64 个 ECPU 的名为
ATPC1的自治 AI 数据库中导出名为SALES的方案:expdp sales/password@ATPC1_high directory=data_export_dir dumpfile=exp%L.dmp parallel=16 encryption_pwd_prompt=yes filesize=1G logfile=export.log有关数据泵参数的说明:
-
对于 ECPU,
parallel必须设置为 ECPU 计数的 0.25 倍。因此,在具有 64 个 ECPU 的以上示例中,parallel设置为 0.25 x 64,即具有expdp的 16。 -
对于 OCPU,
parallel必须设置为与 OCPU 计数相同的值。在具有 16 个 OCPU 的以上示例中,parallel将设置为 16,expdp。 -
如果在使用
expdp进行导出期间使用encryption_pwd_prompt=yes参数,则必须在导入时使用encryption_pwd_prompt=yes,并在impdp提示符下输入相同的密码来解密转储文件(请记住随导出提供的密码)。加密密码的最大长度为 128 字节。 -
除了传统
%U和%u通配符外,dumpfile参数还支持%L和%l通配符。例如,dumpfile=export%L.dmp。使用
%L或%l通配符从 Oracle Database 发行版 12.2 及更高版本导出。此通配符将转储文件文件名扩展为 3 位到 10 位的可变宽度递增整数,从 100 开始,到 2147483646 结束。
为了获得最佳导出性能,请使用
HIGH数据库服务进行导出连接,并将PARALLEL参数设置为数据库中的 CPU 数。有关要连接哪个数据库服务名称以运行数据泵导出的信息,请参阅自治 AI 数据库的预定义数据库服务名称。导出完成后,您可以通过运行如下查询来查看生成的转储文件:
SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_EXPORT_DIR');例如,此查询的输出显示生成的转储文件和导出日志文件:
OBJECT_NAME BYTES CHECKSUM CREATED LAST_MODIFIED ---------------------- ---------- --------- ------------------------------- -------------------- exp01.dmp 12288 12-NOV-19 06.10.47.0 PM GMT 12-NOV-19... exp02.dmp 8192 12-NOV-19 06.10.48.0 PM GMT 12-NOV-19... exp03.dmp 1171456 12-NOV-19 06.10.48.0 PM GMT 12-NOV-19... exp04.dmp 348160 12-NOV-19 06.10.48.0 PM GMT 12-NOV-19... export.log 1663 12-NOV-19 06.10.50.0 PM GMT 12-NOV-19... -
注:
- 要执行完全导出或导出其他用户拥有的对象,需要具有
DATAPUMP_CLOUD_EXP角色。 - 用于将转储文件移动到对象存储的 API 最多支持 50GB 的文件大小,因此请确保指定的大小不超过 filesize 参数中的大小。
- 有关详细信息,请参阅 Oracle Database 19c Utilities 或 Oracle Database 26ai Utilities 中的 Oracle Data Pump Export 。
将自治 AI 数据集移至云对象存储
-
连接到自治 AI 数据库。
-
使用
DBMS_CREDENTIAL.CREATE_CREDENTIAL过程存储云对象存储身份证明。例如:BEGIN DBMS_CREDENTIAL.CREATE_CREDENTIAL( credential_name => 'DEF_CRED_NAME', username => 'adb_user@oracle.com', password => 'password' ); END; /您为
username和password提供的值取决于您使用的云对象存储服务:-
Oracle Cloud Infrastructure Object Storage:
username是 Oracle Cloud Infrastructure 用户名,password是 Oracle Cloud Infrastructure 验证令牌。请参见 Working with Auth Tokens 。 -
Oracle Cloud Infrastructure Object Storage Classic:
username是您的 Oracle Cloud Infrastructure Classic 用户名,password是您的 Oracle Cloud Infrastructure Classic 密码。此操作以加密格式将身份证明存储在数据库中。可以将任何名称用于身份证明名称。请注意,除非对象存储身份证明发生更改,否则此步骤仅需要一次。存储身份证明后,即可对所有数据加载使用相同的身份证明名称。
-
-
通过调用
DBMS_CLOUD.PUT_OBJECT将转储文件从自治 AI 数据库移至云对象存储。例如:
BEGIN DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME', object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/exp01.dmp', directory_name => 'DATA_EXPORT_DIR', file_name => 'exp01.dmp'); DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME', object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/exp02.dmp', directory_name => 'DATA_EXPORT_DIR', file_name => 'exp02.dmp'); DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME', object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/exp03.dmp', directory_name => 'DATA_EXPORT_DIR', file_name => 'exp03.dmp'); DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME', object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/exp04.dmp', directory_name => 'DATA_EXPORT_DIR', file_name => 'exp04.dmp'); END; /有关
PUT_OBJECT的信息,请参见 PUT_OBJECT Procedure 。
将数据从自治 AI 数据库直接导出到对象存储
显示如何使用 Oracle Data Pump 将数据直接从 Autonomous AI Database 导出到 Cloud Object Store。
-
连接到自治 AI 数据库。
-
使用
DBMS_CREDENTIAL.CREATE_CREDENTIAL过程存储云对象存储身份证明。例如:BEGIN DBMS_CREDENTIAL.CREATE_CREDENTIAL( credential_name => 'DEF_CRED_NAME', username => 'adb_user@oracle.com', password => 'password' ); END; /您为用户名和密码提供的值取决于您使用的云对象存储服务:
-
Oracle Cloud Infrastructure Object Storage:
username是 Oracle Cloud Infrastructure 用户名,password是 Oracle Cloud Infrastructure 验证令牌。请参见 Working with Auth Tokens 。 -
Oracle Cloud Infrastructure Object Storage Classic:
username是您的 Oracle Cloud Infrastructure Classic 用户名,password是您的 Oracle Cloud Infrastructure Classic 密码。
此操作以加密格式将身份证明存储在数据库中。可以将任何名称用于身份证明名称。请注意,除非对象存储身份证明发生更改,否则此步骤仅需要一次。存储身份证明后,即可对所有数据加载使用相同的身份证明名称。
-
-
作为
ADMIN用户,将您在上一步中定义的身份证明设置为自治 AI 数据库的默认身份证明。例如:
ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'DEF_CRED_NAME'; -
在将 dumpfile 参数设置为云对象存储上现有存储桶的 URL 的情况下运行数据泵导出(以文件名或具有替代变量的文件名结尾,例如
exp%U.dmp)。-
Oracle Data Pump 版本 19.9 或更高版本:
将
credential参数设置为在步骤 2 中创建的身份证明的名称。例如:expdp admin/password@ADBD_high \ SCHEMAS=SOE3 \ filesize=5GB \ credential=DEF_CRED_NAME \ dumpfile=https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/adbdpreview1/mybucket/export%L.dmp \ parallel=16 \ encryption_pwd_prompt=yes \ logfile=export.log \ directory=data_pump_dir \ EXCLUDE=statistics,index在此示例中,
dumpfile是 Oracle Cloud Infrastructure Swift URI,用于指定名称与us-ashburn-1区域中mybucket存储桶中的export<number>.dmp匹配的所有文件。(adbdpreview1是存储桶所在的对象存储名称空间。) -
早于 19.9 的 Oracle Data Pump 版本:
使用
default_credential关键字和冒号启动dumpfile参数的值。例如:expdp admin/password@ADBD_high \ SCHEMAS=SOE3 \ filesize=5GB \ dumpfile=DEF_CRED_NAME:https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/adbdpreview1/mybucket/export%L.dmp \ parallel=16 \ encryption_pwd_prompt=yes \ logfile=export.log \ directory=data_pump_dir \ EXCLUDE=statistics,index在此示例中,
dumpfile参数中的default_credential关键字是必需的。
有关 Oracle Data Pump 参数的说明:
-
默认情况下,Oracle Data Pump Export 在写入转储文件集之前仅压缩元数据。在写入转储文件集之前,可以将
compression参数设置为ALL以压缩元数据和数据。有关详细信息,请参阅 Oracle Database 19c Utilities 或 Oracle Database 26ai Utilities 中的 COMPRESSION 。 -
除了传统
%U和%u通配符外,dumpfile参数还支持%L和%l通配符。例如,dumpfile=export%L.dmp。使用
%L或%l通配符从 Oracle Database 发行版 12.2 及更高版本导出。此通配符将转储文件文件名扩展为 3 位到 10 位的可变宽度递增整数,从 100 开始,到 2147483646 结束。有关详细信息,请参阅 Oracle Database 19c Utilities 或 Oracle Database 26ai Utilities 中的 Parameters Available in Data Pump Export Command-Line Mode 。
-
For the best export performance use the
highdatabase service for your export connection and set theparallelparameter to 0.25 times the number of ECPUs or same as the number of OCPUs in your Autonomous AI Database. 有关要连接哪个数据库服务名称以运行数据泵导出的信息,请参阅自治 AI 数据库的预定义数据库服务名称。 -
有关不同云对象存储服务的转储文件 URL 格式,请参见 Cloud Object Storage URI Formats 。
有关自治 AI 数据库中不允许的对象的信息,请参见 Limitations on the Use of SQL Commands 。
-
-
验证结果。
Oracle Data Pump 将每个转储文件部分划分为较小的块以加快上载速度。Oracle Cloud Infrastructure Object Storage 控制台为您导出的每个转储文件部分显示多个文件。实际转储文件的大小将显示为零 (0),其相关文件块显示为 10MB 或更小。例如:
exp01.dmp exp01.dmp_aaaaaa exp02.dmp exp02.dmp_aaaaaa注:
从控制台或使用 CLI 下载零字节转储文件不会为您提供完整的转储文件。要从对象存储下载完整的转储文件,请使用支持 Swift(如 curl)的工具,并提供用户登录和 Swift 验证令牌。例如:
curl -O -v -X GET -u 'user1@example.com:auth_token' \ https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/namespace-string/bucketname/export01.dmp
下载转储文件、运行数据泵导入和清除对象存储
如果需要,请从云对象存储下载转储文件并使用 Oracle Data Pump Import 将转储文件集导入到目标数据库。然后执行任何所需的清理。
-
从云对象存储下载转储文件。
注:如果要将数据导入其他自治 AI 数据库,则不需要执行此步骤
如果使用 Oracle Data Pump 直接导出到对象存储,如将数据从自治 AI 数据库直接导出到对象存储中所示,则对象存储上的转储文件显示大小为 0。Oracle Data Pump 将每个转储文件部分划分为较小的块以加快上载速度。Oracle Cloud Infrastructure Object Storage 控制台为您导出的每个转储文件部分显示多个文件。实际转储文件的大小将显示为零 (0),其相关文件块显示为 10MB 或更小。例如:
exp01.dmp exp01.dmp_aaaaaa exp02.dmp exp02.dmp_aaaaaa从 Oracle Cloud Infrastructure 控制台或使用 Oracle Cloud Infrastructure CLI 下载零字节转储文件不会为您提供完整的转储文件。要从对象存储下载完整的转储文件,请使用支持 Swift(如 curl)的工具,并提供用户登录和 Swift 验证令牌。例如:
curl -O -v -X GET -u 'user1@example.com:auth_token' \ https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/namespace-string/bucketname/exp01.dmpcURL 命令在其 URL 中不支持通配符或替代字符。您需要使用多个 cURL 命令从对象存储下载转储文件集。或者,可以使用支持替代字符的脚本,在单个命令中从对象存储下载所有转储文件。
-
运行数据泵导入以将转储文件集导入到目标数据库。
注:如果要将数据导入其他自治 AI 数据库,请参见 Load Data Using Oracle Data Pump 。
如果使用 Oracle Data Pump 直接导出到对象存储的文件(如将数据从自治 AI 数据库导出到对象存储中所示),则如果导入文件时包含支持
format参数type且值为'datapump'的DBMS_CLOUD过程,则只需提供主文件名。支持'datapump'格式类型的过程会自动搜索和下载块。 -
执行导入后清理任务。如果已将转储文件导入到目标数据库,请删除包含数据的存储桶或从云对象存储存储桶中删除转储文件,然后从下载转储文件以运行数据泵导入的位置删除转储文件。
有关详细信息,请参阅 Oracle Database 19c Utilities 或 Oracle Database 26ai Utilities 中的 Parameters Available in Oracle Data Pump Import Command-Line Mode 。