云中文件的批量操作
PL/SQL 程序包 DBMS_CLOUD
为批量文件上载、下载、复制和传输活动提供了并行执行支持,可简化用户体验并为批量文件操作提供最佳性能。
软件包 DBMS_CLOUD
支持将文件加载和卸载到以下云服务中:
-
Oracle Cloud Infrastructure 对象存储
-
Azure Blob 存储
-
Amazon S3
-
Google Cloud Storage
有关更多信息,请参见DBMS_CLOUD Package File URI Formats 。
相关主题
关于批量文件操作
DBMS_CLOUD
批量文件操作支持在 Autonomous Database 上下载和上载文件,包括支持在同一对象存储提供程序内或在对象存储提供程序之间跨云对象存储复制、移动和删除文件。
批量文件操作支持并行操作,并为上载、下载、复制和移动文件提供最佳性能。通过指定操作的优先级来处理批量文件操作的并行性。支持的优先级包括:
HIGH
:使用 Autonomous Database 实例 CPU 计算计数确定处理的并行文件数。MEDIUM
:使用中等服务的并发限制来确定并行度。LOW
:按序列顺序处理文件(无并发)。
当并行操作可以加快操作速度时,以更高的优先级运行批量操作会使用更多的数据库资源和操作更快地完成。优先级较低会消耗更少的数据库资源,当并行操作可以加快操作速度时,完成操作所需的时间更长。当批量操作涉及少量包含数据的文件时,指定更高优先级可能不会更改性能。
要提高批量文件操作的并行度,请使用 HIGH
优先级并增加分配给 Autonomous Database 实例的 CPU 数量。对于批量文件操作,支持的最大并发文件操作数限制为 64。
默认优先级为 MEDIUM
,该优先级指定批量文件操作使用为 MEDIUM 使用者组定义的并发限制。
有关使用 format
参数指定包含批量文件操作的 priority
的详细信息,请参见DBMS_CLOUD for Bulk File Management 。
在下面讨论的 DBMS_CLOUD 子程序中,对于 public、Pre-authenticated 或 Pre-signed 存储桶 URI,credential_name
、source_credential_name
或 target_credential_name
可以为 NULL
。
在云对象存储中批量复制文件
使用 DBMS_CLOUD.BULK_COPY
过程将文件从一个对象存储存储桶或文件夹批量复制到另一个存储桶或文件夹。
例如,使用 DBMS_CLOUD.BULK_COPY
将文件从 Amazon S3 复制到 Oracle Cloud Infrastructure Object Storage 。
BEGIN
DBMS_CLOUD.BULK_COPY
(
source_credential_name => 'AWS_CRED',
source_location_uri => 'https://bucketname.s3-us-west-2.amazonaws.com/',
target_credential_name => 'OCI_CRED',
target_location_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
format => JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
);
END;
/
在云对象存储中批量移动文件
DBMS_CLOUD.BULK_MOVE
过程可以将文件从一个云对象存储位置批量移动到另一个云对象存储位置。
移动文件的第一步是将文件复制到目标位置。成功复制文件后,将从源位置将其删除。
如果对象存储允许在源位置和目标位置之间执行重命名操作,则会重命名而非复制这些文件。
例如,使用 DBMS_CLOUD.BULK_MOVE
将文件从 Amazon S3 移动到 Oracle Cloud Infrastructure Object Storage 。
BEGIN
DBMS_CLOUD.BULK_MOVE
(
source_credential_name => 'AWS_CRED',
source_location_uri => 'https://bucketname.s3-us-west-2.amazonaws.com/',
target_credential_name => 'OCI_CRED',
target_location_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
format => JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
);
END;
/
从云对象存储批量下载文件
使用 DBMS_CLOUD.BULK_DOWNLOAD
过程将文件从 Cloud Object Store 位置批量下载到 Autonomous Database 中的目录对象。
监视批量文件加载并对其进行故障排除
所有 DBMS_CLOUD
数据加载操作都记录在 dba_load_operations
和 user_load_operations
视图中。
可以使用以下视图监视批量文件加载并对其进行故障排除:
-
dba_load_operations
:显示所有加载操作。 -
user_load_operations
:显示方案中的加载操作。
查询这些视图以查看有关正在进行的和已完成的批量文件操作的信息。例如,在 TYPE
上具有 WHERE
子句谓词的以下 SELECT
语句显示 DOWNLOAD
操作:
SELECT owner_name, type, status, start_time, update_time, status_table, rows_loaded
FROM user_load_operations WHERE type = 'DOWNLOAD';
OWNER_NAME TYPE STATUS START_TIME UPDATE_TIME STATUS_TABLE ROWS_LOADED
---------- -------- --------- ------------------------ ------------------------ ------------ -----------
"ADMIN" DOWNLOAD COMPLETED 2022-10-17T20:42:19.498Z 2022-10-17T20:42:21.054Z DWN$2_STATUS 4
"ADMIN" DOWNLOAD FAILED 2022-10-17T20:40:54.348Z 2022-10-17T20:40:55.679Z DWN$1_STATUS
STATUS_TABLE
列显示您可以查询的表的名称,以查看批量下载操作的详细日志记录信息。例如:
DESCRIBE DWN$2_STATUS
Name Null? Type
------------- -------- ---------------------------
ID NOT NULL NUMBER
NAME VARCHAR2(4000)
BYTES NUMBER
CHECKSUM VARCHAR2(128)
LAST_MODIFIED TIMESTAMP(6) WITH TIME ZONE
STATUS VARCHAR2(30)
ERROR_CODE NUMBER
ERROR_MESSAGE VARCHAR2(4000)
START_TIME TIMESTAMP(6) WITH TIME ZONE
END_TIME TIMESTAMP(6) WITH TIME ZONE
SID NUMBER
SERIAL# NUMBER
ROWS_LOADED NUMBER
SELECT id, name, bytes, status, error_message, start_time, end_time FROM DWN$2_STATUS;
ID NAME BYTES STATUS ERROR_MESSAGE START_TIME END_TIME
-- ---------- ----- --------- ------------- ------------------------ ------------------------
1 trees.txt 58 COMPLETED 2022-10-17T20:42:19.998Z 2022-10-17T20:42:20.421Z
2 trees1.txt 58 COMPLETED 2022-10-17T20:42:20.425Z 2022-10-17T20:42:20.533Z
3 trees2.txt 58 COMPLETED 2022-10-17T20:42:20.535Z 2022-10-17T20:42:20.894Z
4 trees3.txt 58 COMPLETED 2022-10-17T20:42:20.896Z 2022-10-17T20:42:21.043Z
状态表显示批量操作的每个文件名及其状态。
如果对特定文件的操作失败,则相关错误号和消息将记录在状态表中。
对于已完成的操作,可以使用报告的 START_TIME
和 END_TIME
时间计算每个操作所需的时间。
文件操作 STATUS
列可以包含以下值之一:
文件状态 | 说明 |
---|---|
|
文件操作成功完成。 |
|
文件操作失败,可能尝试重试两次。 |
|
文件操作尚未启动。 |
|
文件操作当前正在执行。 |
|
已跳过文件操作。 |
如果任何文件操作在两次重试后失败,则批量操作将标记为失败并引发错误。例如:
ORA-20003: Operation failed, please query table DOWNLOAD$2_STATUS for error details
使用 DBMS_CLOUD
批量文件操作时,存在控制状态表的 format
参数选项:
-
logretention
:指定一个整数值,用于确定状态表保留的持续时间(天)。默认值为 2 天。 -
logprefix
:指定用于确定批量操作状态表的名称前缀的字符串值。对于
logprefix
选项,每个批量操作都有自己的默认值:过程 logprefix
的默认值DBMS_CLOUD.BULK_COPY
COPYOBJ
DBMS_CLOUD.BULK_DELETE
DELETE
DBMS_CLOUD.BULK_DOWNLOAD
DOWNLOAD
DBMS_CLOUD.BULK_MOVE
MOVE
DBMS_CLOUD.BULK_UPLOAD
UPLOAD
有关清除 user_load_operations
表的信息,请参见DELETE_ALL_OPERATIONS Procedure 。